<?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>26620</bug_id>
          
          <creation_ts>2009-06-22 12:30:51 -0700</creation_ts>
          <short_desc>Haiku WebKit port</short_desc>
          <delta_ts>2009-08-12 15:17:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Other</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maxime Simon">simon.maxime</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>leavengood</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>wjmoore</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127422</commentid>
    <comment_count>0</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-22 12:30:51 -0700</bug_when>
    <thetext>Hi,

Ryan Leavengood previously did a port of WebKit to Haiku. (it was in 2007.)
As part of my Google Summer of Code I have to update this port. And this is it.
I tried to observe a maximum the procedure described in the &quot;Contributing code&quot; page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127423</commentid>
    <comment_count>1</comment_count>
      <attachid>31665</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-22 12:33:53 -0700</bug_when>
    <thetext>Created attachment 31665
Modifications on WebKit source code to allow Haiku port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127427</commentid>
    <comment_count>2</comment_count>
      <attachid>31667</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-22 12:36:56 -0700</bug_when>
    <thetext>Created attachment 31667
Haiku-specific folders (WebCore/platform/haiku etc...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127430</commentid>
    <comment_count>3</comment_count>
      <attachid>31669</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-22 13:01:49 -0700</bug_when>
    <thetext>Created attachment 31669
Modifications on WebKit source code to allow Haiku port. (including ChangeLogs)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127766</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-23 17:46:01 -0700</bug_when>
    <thetext>Who knew?  http://www.haiku-os.org/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127771</commentid>
    <comment_count>5</comment_count>
      <attachid>31669</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-23 17:53:09 -0700</bug_when>
    <thetext>Comment on attachment 31669
Modifications on WebKit source code to allow Haiku port. (including ChangeLogs)

We should have a guidelines for starting a new port document.  And one of those guidelines should be about setting up a buildbot after getting JavaScriptCore compiling. ;)

Tab:
+		PlatformMenuDescription m_platformDescription;

Tab:
+	typedef BCursor* PlatformCursorHandle;

I believe the webkit style is FIXME:
+    // RJL TODO: May not need this, what is below may be fine

I&apos;m surprised HAIKU needs its own notImplemented()... maybe all ports have their own...

Are you really intending to copy the BPoint here?
+        PlatformMouseEvent(BPoint where, BPoint screenPoint);

Tab:
+	BMenu* m_menu;

Tab:
+		pattern	getHaikuStrokeStyle();

I think this is OK.  It&apos;s sad to add all these #ifdefs... but that&apos;s the state of our porting infrastructure.

I would strongly encourage you to introduce yourself on webkit-dev along with your intent.

It&apos;s not very interesting to have someone come and get WebKit building on Haiku only to disappear 2 months later when GSoC is over.  Not saying you would, but that&apos;s a possibility obviously. :)

It&apos;s important for new ports to have buildbots as well as maintainers active in the community.  I think starting with some introductions on webkit-dev and appearing in #webkit (if you aren&apos;t already) will help alleviate fears of port-abandonment.

r- for the nits, and because not having ever met you or heard of Haiku before, I&apos;m not sure I won&apos;t have to rip out this code 2 weeks from now when Haiku disappears. ;)  Lets talk on webkit-dev or #webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127774</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-23 17:53:53 -0700</bug_when>
    <thetext>Welcome to WebKit, btw.  The patch overall looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127793</commentid>
    <comment_count>7</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2009-06-23 18:56:17 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; 
&gt; I would strongly encourage you to introduce yourself on webkit-dev along with
&gt; your intent.

I agree that would be a good thing for Maxime to do, and I will pop in there myself too.
 
&gt; It&apos;s not very interesting to have someone come and get WebKit building on Haiku
&gt; only to disappear 2 months later when GSoC is over.  Not saying you would, but
&gt; that&apos;s a possibility obviously. :)

Hopefully Maxime won&apos;t disappear, but I will be sure to stick around. As Maxime said most of this code is from my 2007 port of WebKit, and once it is in the WebKit tree myself and I am sure others from the Haiku community will keep it updated.

&gt; It&apos;s important for new ports to have buildbots as well as maintainers active in
&gt; the community.  I think starting with some introductions on webkit-dev and
&gt; appearing in #webkit (if you aren&apos;t already) will help alleviate fears of
&gt; port-abandonment.

I agree. I&apos;m not sure if it helps but I had a few general patches accepted before when I did the first port. I will probably get more involved in the WebKit community as this project moves along.

&gt; r- for the nits, and because not having ever met you or heard of Haiku before,
&gt; I&apos;m not sure I won&apos;t have to rip out this code 2 weeks from now when Haiku
&gt; disappears. ;)  Lets talk on webkit-dev or #webkit.

I am not sure if you remember me, but I can vouch for Maxime. And don&apos;t worry, Haiku won&apos;t be disappearing. It has been around since 2001 (which I think is longer than WebKit) and is very close to an alpha release.

Also thanks a lot for making such a great web engine and for at least considering alternative ports like Haiku. Fixing those nits and introducing ourselves on email should hopefully get this committed :)

Regards,
Ryan Leavengood</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127886</commentid>
    <comment_count>8</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-24 03:38:35 -0700</bug_when>
    <thetext>Hi Eric,

Thanks for the review. ( Even if it is a r-, at least someone is interested. :)

I agree with you, a guideline for new ports should be good.

I easily corrected the “tabs issues”.
As for the `PlatformMouseEvent(BPoint where, BPoint screenPoint);&apos; method,
in fact it isn&apos;t necessary. :)
Regarding to the `notImplemented()&apos;, I&apos;m currently testing our port without using it.
( For now only Haiku specifies a personalized `notImplemented()&apos; method. )

When the nits will be fixed, should I supply a new patch, or should I edit the existing one?
I tried but didn&apos;t succeed to edit the current one.

Regards,
Maxime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127976</commentid>
    <comment_count>9</comment_count>
      <attachid>31804</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-24 13:16:18 -0700</bug_when>
    <thetext>Created attachment 31804
Haiku-specific folders (WebCore/platform/haiku etc...)

I tried to make these files as compliant as possible with the WebKit coding guideline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127985</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-06-24 13:52:47 -0700</bug_when>
    <thetext>Hint: in order to use the cross-platform NotImplemented.h header file you need to get a &apos;LoggingHaiku.cpp&apos; file that works much like the other ports versions.  Also, you might need to look at Assertions.cpp and change the various &apos;vsprintf&apos; methods.

Also, you should get used to &apos;r-&apos; and not take it as discouraging.  Rather, be encouraged that people are honestly considering your patches!

Good Luck,
Adam</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127997</commentid>
    <comment_count>11</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-24 14:10:50 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Hint: in order to use the cross-platform NotImplemented.h header file you need
&gt; to get a &apos;LoggingHaiku.cpp&apos; file that works much like the other ports versions.
&gt;  Also, you might need to look at Assertions.cpp and change the various
&gt; &apos;vsprintf&apos; methods.

Indeed, I saw that when I examined how other ports handle this. Thanks.

&gt; Also, you should get used to &apos;r-&apos; and not take it as discouraging.  Rather, be
&gt; encouraged that people are honestly considering your patches!

There is no problem, I&apos;m not discouraged by the &apos;r-&apos;. :)

I&apos;m sorry I will mark as obsolete the attachments and add new one.
That&apos;s because I got an issue, there are some unwanted files in the archive I submitted:
Some files that I didn&apos;t archived but which are here when untaring.

Regards,
Maxime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127999</commentid>
    <comment_count>12</comment_count>
      <attachid>31804</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-24 14:13:29 -0700</bug_when>
    <thetext>Comment on attachment 31804
Haiku-specific folders (WebCore/platform/haiku etc...)

This archive contains some unwanted files. (tar issue?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128001</commentid>
    <comment_count>13</comment_count>
      <attachid>31812</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-24 14:15:34 -0700</bug_when>
    <thetext>Created attachment 31812
Haiku-specific folders (WebCore/platform/haiku etc...)

As replacement to the previous archive which contained undesirable files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128004</commentid>
    <comment_count>14</comment_count>
      <attachid>31669</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-24 14:21:01 -0700</bug_when>
    <thetext>Comment on attachment 31669
Modifications on WebKit source code to allow Haiku port. (including ChangeLogs)

For the corrections I made on this patch, should I provide a new one as attachment or should I edit this one as comment?
I would be prefer to attache a new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128173</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-06-25 06:20:50 -0700</bug_when>
    <thetext>For corrections to a patch you should generally obsolete old ones and add new ones.

Now, for your &apos;Haiku-specific folders&apos; patch, can you kindly provide the mimetype as I am unable to view or see what this patch pertains to, much less review it.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128174</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-06-25 06:22:22 -0700</bug_when>
    <thetext>Also, you should have no need to attach a tar that just creates folders.  The folders will be created by new files in a regular patch file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128189</commentid>
    <comment_count>17</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-25 08:34:31 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Also, you should have no need to attach a tar that just creates folders.  The
&gt; folders will be created by new files in a regular patch file.
&gt; 

Oh, I&apos;m sorry. In fact I read this in the page about contributing:
“New files and layout tests must be added to Subversion or else they won&apos;t be included in your patch.”
That&apos;s why I attached a tar. But there is not problem to replace it by a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128190</commentid>
    <comment_count>18</comment_count>
      <attachid>31858</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-25 08:41:26 -0700</bug_when>
    <thetext>Created attachment 31858
Modifications on WebKit source code to allow Haiku port. (including ChangeLogs)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128192</commentid>
    <comment_count>19</comment_count>
      <attachid>31859</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-25 08:43:25 -0700</bug_when>
    <thetext>Created attachment 31859
Haiku-specific folders (WebCore/platform/haiku etc...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128534</commentid>
    <comment_count>20</comment_count>
      <attachid>31941</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-26 12:33:20 -0700</bug_when>
    <thetext>Created attachment 31941
Patch to add Haiku-specific files for JavaScriptCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128535</commentid>
    <comment_count>21</comment_count>
      <attachid>31942</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-26 12:33:59 -0700</bug_when>
    <thetext>Created attachment 31942
Patch to add Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128910</commentid>
    <comment_count>22</comment_count>
      <attachid>31942</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-29 16:12:31 -0700</bug_when>
    <thetext>Comment on attachment 31942
Patch to add Haiku-specific files for WebCore.

This patch is too large to review.

There are also numerous style issues:
+    if (pcData-&gt;font() == NULL)
+    {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128954</commentid>
    <comment_count>23</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2009-06-29 22:49:21 -0700</bug_when>
    <thetext>Hi Eric,

Any suggestions for the optimal or &quot;easiest to review&quot; method for providing the patches needed to add this port?

As you probably know each port has quite a few files it needs, and each part of the code has a certain amount of dependencies on other related parts.

Would breaking the WebCore patch into one directory per patch help?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129004</commentid>
    <comment_count>24</comment_count>
      <attachid>31858</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 02:43:41 -0700</bug_when>
    <thetext>Comment on attachment 31858
Modifications on WebKit source code to allow Haiku port. (including ChangeLogs)

Looks fine to me.

 39 #include &quot;stdint.h&quot;

probably meant to be &lt;stdint.h&gt; no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129007</commentid>
    <comment_count>25</comment_count>
      <attachid>31941</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 02:50:37 -0700</bug_when>
    <thetext>Comment on attachment 31941
Patch to add Haiku-specific files for JavaScriptCore.

I think you likely want these to have notImplemented().  Lack of implementation will cause you future grief here.  At least according to a brief conversation with Maciej in #webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129008</commentid>
    <comment_count>26</comment_count>
      <attachid>31941</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 02:51:10 -0700</bug_when>
    <thetext>Comment on attachment 31941
Patch to add Haiku-specific files for JavaScriptCore.

Your ChangeLogs should also generally have a link to the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129016</commentid>
    <comment_count>27</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 03:14:26 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 31858 [review])
&gt; Looks fine to me.
&gt; 
&gt;  39 #include &quot;stdint.h&quot;
&gt; 
&gt; probably meant to be &lt;stdint.h&gt; no?
&gt; 

Indeed, it should be &lt;stdint.h&gt;. Strangely it works as it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129030</commentid>
    <comment_count>28</comment_count>
      <attachid>32049</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 04:22:15 -0700</bug_when>
    <thetext>Created attachment 32049
Patch to add Haiku-specific files for JavaScriptCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129034</commentid>
    <comment_count>29</comment_count>
      <attachid>32051</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 04:50:27 -0700</bug_when>
    <thetext>Created attachment 32051
Patch to add Haiku-specific files for WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129037</commentid>
    <comment_count>30</comment_count>
      <attachid>32053</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 04:58:44 -0700</bug_when>
    <thetext>Created attachment 32053
Patch to add Haiku-specific files for WebCore/platform/image-decoders/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129038</commentid>
    <comment_count>31</comment_count>
      <attachid>32054</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 05:02:17 -0700</bug_when>
    <thetext>Created attachment 32054
Patch to add Haiku-specific files for WebCore/platform/text/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129048</commentid>
    <comment_count>32</comment_count>
      <attachid>32058</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 06:00:49 -0700</bug_when>
    <thetext>Created attachment 32058
Patch to add Haiku-specific files for WebCore/platform/.

This patch would make obsolete some changes made in WebCore/platform/Widget.h.
In fact, we don&apos;t need some methods such as haikuWidget() (as the Widget class is much more flexible than when Ryan did the first port).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129050</commentid>
    <comment_count>33</comment_count>
      <attachid>32060</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 06:06:02 -0700</bug_when>
    <thetext>Created attachment 32060
Patch to add WebCore support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129085</commentid>
    <comment_count>34</comment_count>
      <attachid>32069</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 09:32:19 -0700</bug_when>
    <thetext>Created attachment 32069
Patch to add Haiku-specific files for WebCore/bindings/js/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129087</commentid>
    <comment_count>35</comment_count>
      <attachid>32071</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 09:36:47 -0700</bug_when>
    <thetext>Created attachment 32071
Patch to add Haiku-specific files for WebCore/editing/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129089</commentid>
    <comment_count>36</comment_count>
      <attachid>32073</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 09:42:15 -0700</bug_when>
    <thetext>Created attachment 32073
Patch to add Haiku-specific files for WebCore/page/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129091</commentid>
    <comment_count>37</comment_count>
      <attachid>32075</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 10:04:00 -0700</bug_when>
    <thetext>Created attachment 32075
Patch to add Haiku-specific files for WebCore/page/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129092</commentid>
    <comment_count>38</comment_count>
      <attachid>32075</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 10:04:30 -0700</bug_when>
    <thetext>Comment on attachment 32075
Patch to add Haiku-specific files for WebCore/page/.

Double submit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129093</commentid>
    <comment_count>39</comment_count>
      <attachid>32051</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 10:05:14 -0700</bug_when>
    <thetext>Comment on attachment 32051
Patch to add Haiku-specific files for WebCore/platform/graphics/.

Missed some files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129097</commentid>
    <comment_count>40</comment_count>
      <attachid>32076</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-06-30 10:17:01 -0700</bug_when>
    <thetext>Created attachment 32076
Patch to add Haiku-specific files for WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129546</commentid>
    <comment_count>41</comment_count>
      <attachid>32053</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 12:21:33 -0700</bug_when>
    <thetext>Comment on attachment 32053
Patch to add Haiku-specific files for WebCore/platform/image-decoders/.

Looks OK, but the ChangeLog doesn&apos;t need:

WARNING: NO TEST CASES ADDED OR CHANGED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129578</commentid>
    <comment_count>42</comment_count>
      <attachid>32054</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 14:40:13 -0700</bug_when>
    <thetext>Comment on attachment 32054
Patch to add Haiku-specific files for WebCore/platform/text/.

Seems you might want a notImplemnted() at:
+const char* currentTextBreakLocaleID()

Again, don&apos;t need:
+        WARNING: NO TEST CASES ADDED OR CHANGED

Since someone would have to manually fix your ChangeLogs, gonna r- this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129579</commentid>
    <comment_count>43</comment_count>
      <attachid>32058</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 14:40:35 -0700</bug_when>
    <thetext>Comment on attachment 32058
Patch to add Haiku-specific files for WebCore/platform/.

Too large to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129580</commentid>
    <comment_count>44</comment_count>
      <attachid>32060</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 14:41:04 -0700</bug_when>
    <thetext>Comment on attachment 32060
Patch to add WebCore support.

Too large to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129582</commentid>
    <comment_count>45</comment_count>
      <attachid>32069</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 14:41:39 -0700</bug_when>
    <thetext>Comment on attachment 32069
Patch to add Haiku-specific files for WebCore/bindings/js/.

 8         WARNING: NO TEST CASES ADDED OR CHANGED

is not needed.  Otherwise this looks great.  r- because someone would have to manually edit your ChangeLogs when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129583</commentid>
    <comment_count>46</comment_count>
      <attachid>32071</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 14:42:45 -0700</bug_when>
    <thetext>Comment on attachment 32071
Patch to add Haiku-specific files for WebCore/editing/.

Looks fine.  Where is the implementation of ClipboardHaiku?

R- for someone having to edit your ChangeLogs when landing:
+        WARNING: NO TEST CASES ADDED OR CHANGED

(If you were a committer I would just r+ all these, but as is, it&apos;s best if you fix them first so they can be landed automatically by our scripts.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129585</commentid>
    <comment_count>47</comment_count>
      <attachid>32073</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 14:44:31 -0700</bug_when>
    <thetext>Comment on attachment 32073
Patch to add Haiku-specific files for WebCore/page/.

Please don&apos;t include commented out code:
 //#include &quot;Frame.h&quot;
 32 //#include &quot;FrameView.h&quot;
 33 //#include &quot;Page.h&quot;
 
 108     //notImplemented();


Looks OK otherwise.  Please remove extra comments and update changeLog and re-post.  I would have r+&apos;d this if you were a committer.

 8         WARNING: NO TEST CASES ADDED OR CHANGED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129587</commentid>
    <comment_count>48</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-02 14:48:23 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 32069 [review])
&gt;  8         WARNING: NO TEST CASES ADDED OR CHANGED
&gt; 
&gt; is not needed.  Otherwise this looks great.  r- because someone would have to
&gt; manually edit your ChangeLogs when landing.
&gt; 

In fact, &apos;prepare-ChangeLog&apos; puts this warning on the ChangeLogs generated for WebCore.
But there is no problems to change this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129588</commentid>
    <comment_count>49</comment_count>
      <attachid>32076</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 14:49:50 -0700</bug_when>
    <thetext>Comment on attachment 32076
Patch to add Haiku-specific files for WebCore/platform/graphics/.

What is a styleable port?
 45     // FIXME: subtract 1 from height and width? This was not done in Syllable port

I don&apos;t think you meant to leaven this in:
 52     printf(&quot;FontCache::getFontDataForCharacters\n&quot;);    

WebKit generally uses 0 for NULL in C++ code:
 72     pcDefaultFont-&gt;GetFamilyAndStyle(&amp;family, NULL);

Please use c++ style casts:
 76     //return new FontPlatformData(fontDescription, (BFont*)pcDefaultFont);

We don&apos;t commit commented out code:
 76     //return new FontPlatformData(fontDescription, (BFont*)pcDefaultFont);

Style:
83     if (!pcData-&gt;font())
 84     {

You should consider using an OwnPtr here:
 82     FontPlatformData* pcData = new FontPlatformData(fontDescription, family);

Style:
 51 int char_unicode_to_utf8(unsigned short glyph, char* out) {

Tabs will cause the commit to fail:
54 	if (glyph &lt; 0x0080)
 55 		out[i++] = (char)glyph;

Indent:
{
 74 	notImplemented();
 75 	return true;
 76 }

Why?
 43 int char_unicode_to_utf8(unsigned short glyph, char* out); // implemented in FontDataHaiku.cpp

Please use C++ style casts:
 57     BView* view = (BView*)graphicsContext-&gt;platformContext();

Double converting to float:
 float Font::floatWidthForComplexText(const TextRun&amp; run, HashSet&lt;const SimpleFontData*&gt;* fallbackFonts) const
 83 {
 84     notImplemented();
 85     return 3.0;

Style:
59     if (f.m_font)
 60     {
 61         m_font = new BFont(f.m_font);
 62     }

Extra spaces and bad variable name:
 71     font_family	fam;

STyle:
 74     for(int i = 0; i &lt; count_font_families(); i++) {


Please break this up into smaller patches.

Please do fewer patches per-bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129589</commentid>
    <comment_count>50</comment_count>
      <attachid>32053</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 14:50:35 -0700</bug_when>
    <thetext>Comment on attachment 32053
Patch to add Haiku-specific files for WebCore/platform/image-decoders/.

Since you&apos;re not a committer this can&apos;t be landed by you. Please upload a new one with 
 8         WARNING: NO TEST CASES ADDED OR CHANGED

removed.  otherwise it looked fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129590</commentid>
    <comment_count>51</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-02 14:52:07 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 32071 [review])
&gt; Looks fine.  Where is the implementation of ClipboardHaiku?
&gt; 
&gt; R- for someone having to edit your ChangeLogs when landing:
&gt; +        WARNING: NO TEST CASES ADDED OR CHANGED
&gt; 
&gt; (If you were a committer I would just r+ all these, but as is, it&apos;s best if you
&gt; fix them first so they can be landed automatically by our scripts.)
&gt; 

The implementation of ClipboardHaiku is in WebCore/platform/haiku/.
Should I include it in this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129640</commentid>
    <comment_count>52</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-02 17:50:50 -0700</bug_when>
    <thetext>(In reply to comment #51)

&gt; The implementation of ClipboardHaiku is in WebCore/platform/haiku/.
&gt; Should I include it in this patch?

It&apos;s OK for it to be in a separate patch, that&apos;s fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132488</commentid>
    <comment_count>53</comment_count>
      <attachid>31858</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 23:29:21 -0700</bug_when>
    <thetext>Comment on attachment 31858
Modifications on WebKit source code to allow Haiku port. (including ChangeLogs)

I&apos;m sorry, but this patch no longer applies to top-of-tree.  DateMath.cpp has changed a bit and it&apos;s not obvious to me how to merge the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132489</commentid>
    <comment_count>54</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 23:30:54 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	JavaScriptCore/ChangeLog
	A	JavaScriptCore/wtf/haiku/MainThreadHaiku.cpp
Committed r46018
	A	JavaScriptCore/wtf/haiku/MainThreadHaiku.cpp
	M	JavaScriptCore/ChangeLog
r46018 = 9d379b1aa5f22afa8ef22b61116157d6c5e52541 (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132490</commentid>
    <comment_count>55</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 23:32:35 -0700</bug_when>
    <thetext>Should still be open.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132495</commentid>
    <comment_count>56</comment_count>
      <attachid>32049</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 23:44:38 -0700</bug_when>
    <thetext>Comment on attachment 32049
Patch to add Haiku-specific files for JavaScriptCore.

I guess i need to clear this flag to remove this bug from the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132503</commentid>
    <comment_count>57</comment_count>
      <attachid>32917</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-17 00:14:55 -0700</bug_when>
    <thetext>Created attachment 32917
Modifications on WebKit source code to allow Haiku port.

Concerning the issue with DateMath.cpp, as the issue had move to another place there is no more modifications in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132966</commentid>
    <comment_count>58</comment_count>
      <attachid>32917</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-18 17:40:58 -0700</bug_when>
    <thetext>Comment on attachment 32917
Modifications on WebKit source code to allow Haiku port.


&gt; -#if !PLATFORM(WIN_OS) &amp;&amp; !PLATFORM(SOLARIS) &amp;&amp; !PLATFORM(SYMBIAN) &amp;&amp; !COMPILER(RVCT)
&gt; +#if !PLATFORM(WIN_OS) &amp;&amp; !PLATFORM(SOLARIS) &amp;&amp; !PLATFORM(SYMBIAN) &amp;&amp; !COMPILER(RVCT) &amp;&amp; !(HAIKU)
Should be !PLATFORM(HAIKU)

&gt; --- a/WebCore/config.h
&gt; +++ b/WebCore/config.h
&gt; @@ -187,3 +187,7 @@ typedef float CGFloat;
&gt;  #if PLATFORM(WIN) &amp;&amp; PLATFORM(CG)
&gt;  #define WTF_USE_SAFARI_THEME 1
&gt;  #endif
&gt; +
&gt; +#if PLATFORM(HAIKU)
&gt; +#include &lt;stdio.h&gt;
&gt; +#endif
stdio.h should not be included in config.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132990</commentid>
    <comment_count>59</comment_count>
      <attachid>33041</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-19 05:39:46 -0700</bug_when>
    <thetext>Created attachment 33041
Modifications on WebKit source code to allow Haiku port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137927</commentid>
    <comment_count>60</comment_count>
      <attachid>33041</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 09:40:17 -0700</bug_when>
    <thetext>Comment on attachment 33041
Modifications on WebKit source code to allow Haiku port.

Looks OK.  In the future your ChangeLogs need *much* more detail as to what the Change is actually doing.  Especially one with as many pieces as this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138234</commentid>
    <comment_count>61</comment_count>
      <attachid>33041</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-07 17:46:06 -0700</bug_when>
    <thetext>Comment on attachment 33041
Modifications on WebKit source code to allow Haiku port.

This patch does not apply cleanly:

patching file WebCore/platform/graphics/BitmapImage.h
Hunk #1 succeeded at 45 (offset 1 line).
Hunk #2 FAILED at 165.
1 out of 2 hunks FAILED -- saving rejects to file WebCore/platform/graphics/BitmapImage.h.rej
patch -p0 &quot;WebCore/platform/graphics/BitmapImage.h&quot; returned 1.  Pass --force to ignore patch failures.

I have not checked whether the merge is trivial.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138324</commentid>
    <comment_count>62</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-08 05:55:51 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; (From update of attachment 33041 [details])
&gt; This patch does not apply cleanly:
&gt; 
&gt; patching file WebCore/platform/graphics/BitmapImage.h
&gt; Hunk #1 succeeded at 45 (offset 1 line).
&gt; Hunk #2 FAILED at 165.
&gt; 1 out of 2 hunks FAILED -- saving rejects to file
&gt; WebCore/platform/graphics/BitmapImage.h.rej
&gt; patch -p0 &quot;WebCore/platform/graphics/BitmapImage.h&quot; returned 1.  Pass --force
&gt; to ignore patch failures.
&gt; 
&gt; I have not checked whether the merge is trivial.

If I am right, you are currently integrating WinCE in the repo.
So it may be why you get this issue. I made this patch around 3 weeks ago when the WinCE port wasn&apos;t integrated in the tree.
I will fill a new bug and post another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139589</commentid>
    <comment_count>63</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 15:17:59 -0700</bug_when>
    <thetext>I think it&apos;s time to retire this bug.  Please post new patches on new bugs.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31665</attachid>
            <date>2009-06-22 12:33:53 -0700</date>
            <delta_ts>2009-06-22 13:01:49 -0700</delta_ts>
            <desc>Modifications on WebKit source code to allow Haiku port.</desc>
            <filename>haiku-port.patch</filename>
            <type>text/plain</type>
            <size>24830</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDQ0OTQ1KQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MiwxMCArNTIsMTYgQEAKIAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAorI2VsaWYgUExBVEZP
Uk0oSEFJS1UpCisKKyNpbmNsdWRlIDxPUy5oPgorCiAjZWxpZiBQTEFURk9STShVTklYKQogCiAj
aW5jbHVkZSA8c3RkbGliLmg+CisjaWYgIVBMQVRGT1JNKEhBSUtVKQogI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CisjZW5kaWYKICNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2lmIFBMQVRGT1JNKFNPTEFS
SVMpCkBAIC00MzYsNiArNDQyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCogY3VycmVudFRocmVh
ZFN0YWNrQmEKICAgICAgICAgc3RhY2tCYXNlID0gKHZvaWQqKWluZm8uaUJhc2U7CiAgICAgfQog
ICAgIHJldHVybiAodm9pZCopc3RhY2tCYXNlOworI2VsaWYgUExBVEZPUk0oSEFJS1UpCisgICAg
dGhyZWFkX2luZm8gdGhyZWFkSW5mbzsKKyAgICBnZXRfdGhyZWFkX2luZm8oZmluZF90aHJlYWQo
TlVMTCksICZ0aHJlYWRJbmZvKTsKKyAgICByZXR1cm4gdGhyZWFkSW5mby5zdGFja19lbmQ7CiAj
ZWxpZiBQTEFURk9STShVTklYKQogICAgIHN0YXRpYyB2b2lkKiBzdGFja0Jhc2UgPSAwOwogICAg
IHN0YXRpYyBzaXplX3Qgc3RhY2tTaXplID0gMDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9E
YXRlTWF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNw
cAkocmV2aXNpb24gNDQ5NDUpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzUsNyArMzc1LDcgQEAgc3RhdGljIGludDMyX3QgY2FsY3VsYXRl
VVRDT2Zmc2V0KCkKICAgICBsb2NhbHQudG1fd2RheSA9IDA7CiAgICAgbG9jYWx0LnRtX3lkYXkg
PSAwOwogICAgIGxvY2FsdC50bV9pc2RzdCA9IDA7Ci0jaWYgUExBVEZPUk0oV0lOX09TKSB8fCBQ
TEFURk9STShTT0xBUklTKSB8fCBDT01QSUxFUihSVkNUKQorI2lmIFBMQVRGT1JNKFdJTl9PUykg
fHwgUExBVEZPUk0oU09MQVJJUykgfHwgUExBVEZPUk0oSEFJS1UpIHx8IENPTVBJTEVSKFJWQ1Qp
CiAgICAgLy8gVXNpbmcgYSBjYW5uZWQgZGF0ZSBvZiAwMS8wMS8yMDA5IG9uIHBsYXRmb3JtcyB3
aXRoIHdlYWtlciBkYXRlLWhhbmRsaW5nIGZvby4KICAgICBsb2NhbHQudG1feWVhciA9IDEwOTsK
ICAgICB0aW1lX3QgdXRjT2Zmc2V0ID0gMTIzMDc2ODAwMCAtIG1rdGltZSgmbG9jYWx0KTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA0NDk0NSkKKysrIEphdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDggQEAKICAgIHx8
IGRlZmluZWQodW5peCkgICAgICAgIFwKICAgIHx8IGRlZmluZWQoX191bml4KSAgICAgIFwKICAg
IHx8IGRlZmluZWQoX191bml4X18pICAgIFwKLSAgIHx8IGRlZmluZWQoX0FJWCkKKyAgIHx8IGRl
ZmluZWQoX0FJWCkgICAgICAgIFwKKyAgIHx8IGRlZmluZWQoX19IQUlLVV9fKQogI2RlZmluZSBX
VEZfUExBVEZPUk1fVU5JWCAxCiAjZW5kaWYKIApAQCAtMTQ0LDYgKzE0NSw4IEBACiAjZGVmaW5l
IFdURl9QTEFURk9STV9XWCAxCiAjZWxpZiBkZWZpbmVkKEJVSUxESU5HX0dUS19fKQogI2RlZmlu
ZSBXVEZfUExBVEZPUk1fR1RLIDEKKyNlbGlmIGRlZmluZWQoQlVJTERJTkdfSEFJS1VfXykKKyNk
ZWZpbmUgV1RGX1BMQVRGT1JNX0hBSUtVIDEKICNlbGlmIFBMQVRGT1JNKERBUldJTikKICNkZWZp
bmUgV1RGX1BMQVRGT1JNX01BQyAxCiAjZWxpZiBQTEFURk9STShXSU5fT1MpCkBAIC0xOTAsNyAr
MTkzLDcgQEAKIAogLyogTWFrZXMgUExBVEZPUk0oV0lOKSBkZWZhdWx0IHRvIFBMQVRGT1JNKENB
SVJPKSAqLwogLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgZnJvbSBhIGJsYWNrbGlz
dCB0byBhIHdoaXRlbGlzdCAqLwotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShRVCkg
JiYgIVBMQVRGT1JNKFdYKSAmJiAhUExBVEZPUk0oQ0hST01JVU0pCisjaWYgIVBMQVRGT1JNKE1B
QykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9STShDSFJPTUlV
TSkgJiYgIVBMQVRGT1JNKEhBSUtVKQogI2RlZmluZSBXVEZfUExBVEZPUk1fQ0FJUk8gMQogI2Vu
ZGlmCiAKQEAgLTM5NSw2ICszOTgsMTQgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShIQUlLVSkKKyNkZWZpbmUgSEFWRV9QT1NJWF9NRU1BTElHTiAxCisjZGVmaW5lIFdURl9VU0Vf
Q1VSTCAxCisjZGVmaW5lIFdURl9VU0VfUFRIUkVBRFMgMQorI2RlZmluZSBVU0VfU1lTVEVNX01B
TExPQyAxCisjZGVmaW5lIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIDAKKyNlbmRpZgorCiAj
aWYgIWRlZmluZWQoSEFWRV9BQ0NFU1NJQklMSVRZKQogI2lmIFBMQVRGT1JNKElQSE9ORSkgfHwg
UExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oQ0hST01JVU0pCiAjZGVmaW5lIEhBVkVfQUNDRVNTSUJJTElUWSAxCkBAIC00NTAsNyArNDYx
LDEwIEBACiAvKiBGSVhNRTogaXMgdGhpcyBhY3R1YWxseSB1c2VkIG9yIGRvIG90aGVyIHBsYXRm
b3JtcyBnZW5lcmF0ZSB0aGVpciBvd24gY29uZmlnLmg/ICovCiAKICNkZWZpbmUgSEFWRV9FUlJO
T19IIDEKKy8qIEFzIGxvbmcgYXMgSGFpa3UgZG9lc24ndCBoYXZlIGEgY29tcGxldGUgc3VwcG9y
dCBvZiBsb2NhbGUgdGhpcyB3aWxsIGJlIGRpc2FibGVkLiAqLworI2lmICFQTEFURk9STShIQUlL
VSkKICNkZWZpbmUgSEFWRV9MQU5HSU5GT19IIDEKKyNlbmRpZgogI2RlZmluZSBIQVZFX01NQVAg
MQogI2RlZmluZSBIQVZFX1NCUksgMQogI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1MSw3ICsyMjUxLDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZVRleHRJbnB1dEV2ZW50KAogfQogICAgIAogICAgIAotI2lmICFQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oUVQpICYmICFQTEFURk9STShIQUlLVSkKIGJvb2wgRXZlbnRIYW5kbGVyOjppbnZlcnRTZW5z
ZU9mVGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCopIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAK
ICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRl
IDxRTWVudT4KKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorI2luY2x1ZGUgPFBvaW50Lmg+CiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzgsNiArODAsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFMaXN0PENvbnRleHRNZW51SXRl
bT4gbV9pdGVtczsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorCQlQbGF0Zm9ybU1lbnVEZXNjcmlw
dGlvbiBtX3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgICAgIEJQb2ludCBtX3BvaW50OwogI2Vs
c2UKICAgICAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9u
OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmgJKHJldmlzaW9uIDQ0
OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNiArNDYsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrTWVudUl0ZW0gR3RrTWVudUl0
ZW07CiAjaW5jbHVkZSA8UUFjdGlvbj4KICNlbGlmIFBMQVRGT1JNKFdYKQogY2xhc3Mgd3hNZW51
SXRlbTsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQk1lbnVJdGVtOwogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIwMiw2ICsyMDQsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgY2hlY2tlZDsKICAgICAgICAgYm9vbCBlbmFibGVkOwogICAgIH07
CisjZWxpZiBQTEFURk9STShIQUlLVSkKKwl0eXBlZGVmIEJNZW51SXRlbSogUGxhdGZvcm1NZW51
SXRlbURlc2NyaXB0aW9uOwogI2Vsc2UKICAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTWVudUl0
ZW1EZXNjcmlwdGlvbjsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCShyZXZpc2lvbiA0NDk0NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX0dka0N1cnNvciBHZGtDdXJzb3I7CiAjaW5jbHVkZSA8UUN1
cnNvcj4KICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgIlBsYXRmb3JtQ3Vyc29y
LmgiCisjZWxpZiBQTEFURk9STShIQUlLVSkKKyNpbmNsdWRlIDxhcHAvQ3Vyc29yLmg+CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTg2LDYgKzg4LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgLy8gU2VlIFBsYXRmb3JtQ3Vyc29y
LmgKICAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ3Vyc29ySGFuZGxlOworI2VsaWYgUExBVEZP
Uk0oSEFJS1UpCisgICAgdHlwZWRlZiBCQ3Vyc29yKiBQbGF0Zm9ybUN1cnNvcjsKKwl0eXBlZGVm
IEJDdXJzb3IqIFBsYXRmb3JtQ3Vyc29ySGFuZGxlOwogI2Vsc2UKICAgICB0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtQ3Vyc29yOwogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1DdXJzb3JIYW5kbGU7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vRHJhZ0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOSBAQCB0eXBlZGVmIGNs
YXNzIHd4RGF0YU9iamVjdCogRHJhZ0RhdGFSZWY7CiB0eXBlZGVmIHZvaWQqIERyYWdEYXRhUmVm
OwogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAjaW5jbHVkZSAiRHJhZ0RhdGFSZWYuaCIKKyNl
bGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQk1lc3NhZ2U7Cit0eXBlZGVmIGNsYXNzIEJNZXNz
YWdlKiBEcmFnRGF0YVJlZjsKICNlbmRpZgogCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRHJh
Z0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAkocmV2
aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw2ICs0Niw4IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyogSEJJVE1BUDsK
IGNsYXNzIHd4RHJhZ0ltYWdlOwogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAjaW5jbHVkZSAi
RHJhZ0ltYWdlUmVmLmgiCisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJCaXRtYXA7CiAj
ZW5kaWYKIAogLy9XZSBuZWVkIHRvICNkZWZpbmUgWU9mZnNldCBhcyBpdCBuZWVkcyB0byBiZSBz
aGFyZWQgd2l0aCBXZWJLaXQKQEAgLTcwLDYgKzcyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHR5cGVkZWYgd3hEcmFnSW1hZ2UqIERyYWdJbWFnZVJlZjsKICNlbGlmIFBMQVRGT1JNKEdU
SykKICAgICB0eXBlZGVmIHZvaWQqIERyYWdJbWFnZVJlZjsKKyNlbGlmIFBMQVRGT1JNKEhBSUtV
KQorICAgIHR5cGVkZWYgQkJpdG1hcCogRHJhZ0ltYWdlUmVmOwogI2VuZGlmCiAgICAgCiAgICAg
SW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJbWFnZVJlZik7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL05vdEltcGxlbWVudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Ob3RJ
bXBsZW1lbnRlZC5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vTm90SW1w
bGVtZW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTEgQEAKIAogI2lmIGRlZmlu
ZWQoTkRFQlVHKQogICAgICNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSAoKHZvaWQpMCkKKworI2Vs
aWYgUExBVEZPUk0oSEFJS1UpCisgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgLy8gUkpMIFRP
RE86IE1heSBub3QgbmVlZCB0aGlzLCB3aGF0IGlzIGJlbG93IG1heSBiZSBmaW5lCisgICAgI2Rl
ZmluZSBub3RJbXBsZW1lbnRlZCgpIGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5U
RUQ6ICVzOiVkICglcylcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElP
TikKICNlbHNlCiAKICNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IFwKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw2ICs1OSwxMCBAQCBRVF9FTkRfTkFNRVNQQUNFCiBjbGFzcyB3eEtleUV2ZW50OwogI2Vu
ZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJNZXNzYWdlOworI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCB7CkBA
IC0xNDgsNiArMTUyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KHd4S2V5RXZlbnQmKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudChCTWVzc2FnZSopOworI2VuZGlmCisKICNp
ZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKENIUk9NSVVNKQogICAgICAgICBib29sIGlzU3lz
dGVtS2V5KCkgY29uc3QgeyByZXR1cm4gbV9pc1N5c3RlbUtleTsgfQogI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oCShyZXZpc2lvbiA0NDk0
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCB0eXBlZGVmIHN0cnVjdCBITUVOVV9fKiBITUVOVTsK
IHR5cGVkZWYgc3RydWN0IF9HdGtNZW51IEd0a01lbnU7CiAjZWxpZiBQTEFURk9STShXWCkKIGNs
YXNzIHd4TWVudTsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQk1lbnU7CiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTUsNiArNTcsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgdHlwZWRlZiBHdGtNZW51KiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbjsKICNlbGlm
IFBMQVRGT1JNKFdYKQogICAgIHR5cGVkZWYgd3hNZW51KiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
bjsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgIHR5cGVkZWYgQk1lbnUqIFBsYXRmb3JtTWVu
dURlc2NyaXB0aW9uOwogI2Vsc2UKICAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTWVudURlc2Ny
aXB0aW9uOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgJ
KHJldmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTAgQEAgdHlwZWRlZiBsb25nIExQQVJBTTsK
IGNsYXNzIHd4TW91c2VFdmVudDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitjbGFz
cyBCTWVzc2FnZTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiAgICAgLy8g
VGhlc2UgYnV0dG9uIG51bWJlcnMgbWF0Y2ggdGhlIG9uZXMgdXNlZCBpbiB0aGUgRE9NIEFQSSwg
MCB0aHJvdWdoIDIsIGV4Y2VwdCBmb3IgTm9CdXR0b24gd2hpY2ggaXNuJ3Qgc3BlY2lmaWVkLgpA
QCAtMTI4LDYgKzEzMiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRmb3Jt
TW91c2VFdmVudChjb25zdCB3eE1vdXNlRXZlbnQmLCBjb25zdCB3eFBvaW50JiBnbG9iYWxQb2lu
dCwgaW50IGNsaWNrQ291bnQpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICAg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEJNZXNzYWdlKiwgQlBvaW50IHNjcmVlblBvaW50KTsKKyAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEJQb2ludCB3aGVyZSwgQlBvaW50IHNjcmVlblBvaW50
KTsKKyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBJbnRQb2ludCBtX3Bvc2l0aW9u
OwogICAgICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtV2hlZWxFdmVudC5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEwIEBA
IGNsYXNzIHd4TW91c2VFdmVudDsKIGNsYXNzIHd4UG9pbnQ7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKEhBSUtVKQorY2xhc3MgQk1lc3NhZ2U7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgLy8gV2hlZWwgZXZlbnRzIGNvbWUgaW4gdHdvIGZsYXZvcnM6CkBAIC0xMDYsNiAr
MTEwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50
KGNvbnN0IHd4TW91c2VFdmVudCYsIGNvbnN0IHd4UG9pbnQmKTsKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oSEFJS1UpCisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChCTWVzc2FnZSopOworI2Vu
ZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEludFBvaW50IG1fcG9zaXRpb247CiAgICAg
ICAgIEludFBvaW50IG1fZ2xvYmFsUG9zaXRpb247CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Bv
cHVwTWVudS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgJKHJl
dmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTksNiArNTksOCBAQCBjbGFzcyB3eE1lbnU7CiAjaW5jbHVkZSA8d3gvZXZlbnQu
aD4KICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgIlBvcHVwTWVudVByaXZhdGUu
aCIKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQk1lbnU7CiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTc3LDYgKzE3OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBPbk1l
bnVJdGVtU2VsZWN0ZWQod3hDb21tYW5kRXZlbnQmKTsKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVN
KQogICAgIFBvcHVwTWVudVByaXZhdGUgcDsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorCUJNZW51
KiBtX21lbnU7CiAjZW5kaWYKIAogfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2
aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NzQsNyArODc0LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVQYW5TY3Jv
bGxJY29uKCkKICAgICBob3N0V2luZG93KCktPnJlcGFpbnQoSW50UmVjdChtX3BhblNjcm9sbElj
b25Qb2ludCwgSW50U2l6ZShwYW5JY29uU2l6ZUxlbmd0aCwgcGFuSWNvblNpemVMZW5ndGgpKSwg
dHJ1ZSwgdHJ1ZSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9STShHVEspICYm
ICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEhBSUtVKQogCiB2b2lkIFNjcm9sbFZpZXc6OnBsYXRm
b3JtSW5pdCgpCiB7CkBAIC04ODYsNyArODg2LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9y
bURlc3Ryb3koKQogCiAjZW5kaWYKIAotI2lmICFQTEFURk9STShXWCkgJiYgIVBMQVRGT1JNKEdU
SykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oTUFDKQorI2lmICFQTEFURk9STShXWCkg
JiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oTUFDKSAmJiAh
UExBVEZPUk0oSEFJS1UpCiAKIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1BZGRDaGlsZChXaWRn
ZXQqKQogewpAQCAtOTA2LDcgKzkwNiw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRT
Y3JvbGxiYXJzU3UKIAogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0o
V1gpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFdYKSAmJiAhUExBVEZPUk0oSEFJ
S1UpCiAKIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxiYXJNb2RlcygpCiB7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTEgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX0d0a0FkanVzdG1lbnQgR3RrQWRqdXN0bQogY2xhc3Mgd3hTY3JvbGxXaW5FdmVu
dDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCVmlldzsKK2NsYXNzIEJT
Y3JvbGxWaWV3OworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSG9zdFdp
bmRvdzsKQEAgLTMxOSw2ICszMjQsMTUgQEAgcHJpdmF0ZToKICAgICBTY3JvbGxWaWV3UHJpdmF0
ZSogbV9kYXRhOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UGFyZW50V2lkZ2V0KEJWaWV3Kik7CisgICAgdm9pZCBzZXRBbGxvd3NT
Y3JvbGxpbmcoYm9vbCk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7
CisgICAgU2Nyb2xsVmlld1ByaXZhdGUqIG1fZGF0YTsKKyNlbmRpZgogfTsgLy8gY2xhc3MgU2Ny
b2xsVmlldwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlz
aW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjUsNiArNjUsMTEgQEAgY2xhc3Mgd3hXaW5kb3c7CiB0eXBlZGVmIHd4V2luZG93KiBQbGF0
Zm9ybVdpZGdldDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCVmlldzsK
K3R5cGVkZWYgQlZpZXcqIFBsYXRmb3JtV2lkZ2V0OworI2VuZGlmCisKICNpZiBQTEFURk9STShD
SFJPTUlVTSkKICNpbmNsdWRlICJQbGF0Zm9ybVdpZGdldC5oIgogI2VuZGlmCkBAIC0xNzksNiAr
MTg0LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUZyb21TdXBlcnZpZXcoKTsKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgQlZpZXcqIHBhcmVudFdpZGdldCgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnRXaWRnZXQoQlZpZXcqKTsKKworICAgIEJWaWV3
KiBoYWlrdVdpZGdldCgpOworICAgIHZvaWQgc2V0SGFpa3VXaWRnZXQoQlZpZXcqKTsKKyNlbmRp
ZgorCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdChQbGF0Zm9ybVdpZGdldCk7IC8vIE11c3QgYmUg
Y2FsbGVkIGJ5IGFsbCBXaWRnZXQgY29uc3RydWN0b3JzIHRvIGluaXRpYWxpemUgY3Jvc3MtcGxh
dGZvcm0gZGF0YS4KIApAQCAtMTk1LDYgKzIwOCw4IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgV2lkZ2V0UHJpdmF0ZSogbV9kYXRhOworI2VsaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgV2lkZ2V0UHJpdmF0ZSogZGF0YTsKICNlbmRpZgogfTsKIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYg
KzQ0LDEwIEBAIGNsYXNzIE5TSW1hZ2U7CiB0eXBlZGVmIHN0cnVjdCBIQklUTUFQX18gKkhCSVRN
QVA7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQkJpdG1hcDsKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0IEZyYW1lRGF0YTsKIH0KQEAgLTE2
MCwxMCArMTY0LDE2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0
Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogI2VuZGlmCiAg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKwog
I2lmIFBMQVRGT1JNKFdYKQogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpOwotI2VuZGlmICAgIAorI2VuZGlmCisKKyNpZiBQTEFURk9STShIQUlLVSkKKyAg
ICB2aXJ0dWFsIEJCaXRtYXAqIGdldEJpdG1hcCgpIGNvbnN0OworI2VuZGlmCisKICAgICBzaXpl
X3QgY3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50RnJhbWU7IH0KICAgICBz
aXplX3QgZnJhbWVDb3VudCgpOwogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXpl
X3QpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gNDQ5NDUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9HZGtDb2xvciBHZGtDb2xvcjsKIGNsYXNzIHd4
Q29sb3VyOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKK3N0cnVjdCByZ2JfY29sb3I7
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdHJpbmc7CkBAIC0xMjEs
NiArMTI1LDExIEBAIHB1YmxpYzoKICAgICBDb2xvcihDR0NvbG9yUmVmKTsKICNlbmRpZgogCisj
aWYgUExBVEZPUk0oSEFJS1UpCisgICAgQ29sb3IoY29uc3QgcmdiX2NvbG9yJik7CisgICAgb3Bl
cmF0b3IgcmdiX2NvbG9yKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHN0YXRpYyBib29sIHBhcnNl
SGV4Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lLCBSR0JBMzImIHJnYik7CiAKICAgICBzdGF0aWMg
Y29uc3QgUkdCQTMyIGJsYWNrID0gMHhGRjAwMDAwMDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxMCBAQCBj
bGFzcyBRUG9pbnRGOwogUVRfRU5EX05BTUVTUEFDRQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShI
QUlLVSkKK2NsYXNzIEJQb2ludDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oU0tJQSkKIHN0cnVj
dCBTa1BvaW50OwogI2VuZGlmCkBAIC05MCw2ICs5NCwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0
b3IgUVBvaW50RigpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBG
bG9hdFBvaW50KGNvbnN0IEJQb2ludCYpOworICAgIG9wZXJhdG9yIEJQb2ludCgpIGNvbnN0Owor
I2VuZGlmCisKICNpZiBQTEFURk9STShTS0lBKQogICAgIG9wZXJhdG9yIFNrUG9pbnQoKSBjb25z
dDsKICAgICBGbG9hdFBvaW50KGNvbnN0IFNrUG9pbnQmKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxMCBAQCBR
VF9FTkRfTkFNRVNQQUNFCiBjbGFzcyB3eFJlY3QyRERvdWJsZTsKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oSEFJS1UpCitjbGFzcyBCUmVjdDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oU0tJQSkK
IHN0cnVjdCBTa1JlY3Q7CiAjZW5kaWYKQEAgLTEzOCw2ICsxNDIsMTEgQEAgcHVibGljOgogICAg
IG9wZXJhdG9yIHd4UmVjdDJERG91YmxlKCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KEhBSUtVKQorICAgIEZsb2F0UmVjdChjb25zdCBCUmVjdCYpOworICAgIG9wZXJhdG9yIEJSZWN0
KCkgY29uc3Q7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgRmxvYXRSZWN0KGNv
bnN0IFNrUmVjdCYpOwogICAgIG9wZXJhdG9yIFNrUmVjdCgpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNDQ5
NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1UZXh0RHJhCiB9CiAjZW5kaWYKIAotI2lmICFQTEFURk9STShRVCkgJiYgIVBMQVRG
T1JNKENBSVJPKSAmJiAhUExBVEZPUk0oU0tJQSkKKyNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFU
Rk9STShDQUlSTykgJiYgIVBMQVRGT1JNKFNLSUEpICYmICFQTEFURk9STShIQUlLVSkKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxl
JikKIHsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMCBAQCBjbGFzcyB3eFdp
bmRvd0RDOwogI2VuZGlmCiAjZWxpZiBQTEFURk9STShTS0lBKQogdHlwZWRlZiBjbGFzcyBQbGF0
Zm9ybUNvbnRleHRTa2lhIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OworI2VsaWYgUExBVEZPUk0o
SEFJS1UpCitjbGFzcyBCVmlldzsKK3R5cGVkZWYgQlZpZXcgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQ7CitzdHJ1Y3QgCXBhdHRlcm47CiAjZWxzZQogdHlwZWRlZiB2b2lkIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0OwogI2VuZGlmCkBAIC0zNTQsNiArMzU4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgR2RrRXZlbnRFeHBvc2UqIGdka0V4cG9zZUV2ZW50KCkgY29uc3Q7CiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorCQlwYXR0ZXJuCWdldEhhaWt1U3Ryb2tlU3R5bGUo
KTsKKyNlbmRpZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzYXZlUGxhdGZvcm1TdGF0
ZSgpOwogICAgICAgICB2b2lkIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ljb24uaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ljb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBwcml2YXRlOgog
I2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgSWNvbihjb25zdCBQbGF0Zm9ybUljb24mKTsK
ICAgICBQbGF0Zm9ybUljb24gbV9pY29uOworI2VsaWYgUExBVEZPUk0oSEFJS1UpCisgICAgSWNv
bigpOwogI2VuZGlmCiB9OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBzdHJ1Y3QgX2NhaXJv
X3N1cmZhY2U7CiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7
CiAjZWxpZiBQTEFURk9STShTS0lBKQogY2xhc3MgTmF0aXZlSW1hZ2VTa2lhOworI2VsaWYgUExB
VEZPUk0oSEFJS1UpCitjbGFzcyBCQml0bWFwOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTc4LDYgKzgwLDEwIEBAIHR5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBOYXRpdmVJbWFn
ZVB0cjsKIGNsYXNzIEltYWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJ
bWFnZVNvdXJjZVB0cjsKIHR5cGVkZWYgTmF0aXZlSW1hZ2VTa2lhKiBOYXRpdmVJbWFnZVB0cjsK
KyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgSW1hZ2VEZWNvZGVyOwordHlwZWRlZiBJbWFn
ZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNlUHRyOwordHlwZWRlZiBCQml0bWFwKiBOYXRpdmVJ
bWFnZVB0cjsKICNlbmRpZgogCiBjb25zdCBpbnQgY0FuaW1hdGlvbkxvb3BPbmNlID0gLTE7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCShyZXZpc2lvbiA0NDk0NSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsOCBAQCBjbGFzcyBRUG9pbnQ7CiBRVF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBQTEFU
Rk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBfR2RrUG9pbnQgR2RrUG9pbnQ7CisjZWxpZiBQTEFU
Rk9STShIQUlLVSkKK2NsYXNzIEJQb2ludDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV1gpCkBA
IC0xMTUsNiArMTE3LDkgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIEludFBv
aW50KGNvbnN0IEdka1BvaW50Jik7CiAgICAgb3BlcmF0b3IgR2RrUG9pbnQoKSBjb25zdDsKKyNl
bGlmIFBMQVRGT1JNKEhBSUtVKQorICAgIEludFBvaW50KGNvbnN0IEJQb2ludCYpOworICAgIG9w
ZXJhdG9yIEJQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXWCkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw4IEBAIGNsYXNzIFFSZWN0OwogUVRfRU5EX05BTUVTUEFDRQogI2VsaWYgUExBVEZPUk0oR1RL
KQogdHlwZWRlZiBzdHJ1Y3QgX0dka1JlY3RhbmdsZSBHZGtSZWN0YW5nbGU7CisjZWxpZiBQTEFU
Rk9STShIQUlLVSkKK2NsYXNzIEJSZWN0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXWCkKQEAg
LTE0NCw2ICsxNDYsOSBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgSW50UmVj
dChjb25zdCBHZGtSZWN0YW5nbGUmKTsKICAgICBvcGVyYXRvciBHZGtSZWN0YW5nbGUoKSBjb25z
dDsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgIEludFJlY3QoY29uc3QgQlJlY3QmKTsKKyAg
ICBvcGVyYXRvciBCUmVjdCgpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShDRykKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2
ICs0Nyw4IEBAIHR5cGVkZWYgc3RydWN0IHRhZ1NJWkUgU0laRTsKIFFUX0JFR0lOX05BTUVTUEFD
RQogY2xhc3MgUVNpemU7CiBRVF9FTkRfTkFNRVNQQUNFCisjZWxpZiBQTEFURk9STShIQUlLVSkK
K2NsYXNzIEJTaXplOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMyw2ICsx
MTUsMTEgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIFFTaXplKCkgY29uc3Q7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEhBSUtVKQorICAgIEludFNpemUoY29uc3QgQlNpemUmKTsKKyAgICBvcGVy
YXRvciBCU2l6ZSgpIGNvbnN0OworI2VuZGlmCisKIAogcHJpdmF0ZToKICAgICBpbnQgbV93aWR0
aCwgbV9oZWlnaHQ7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gNDQ5
NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNiArNDgsOSBAQCB0eXBlZGVmIFdlYkNvcmU6OkNhaXJvUGF0aCBQbGF0Zm9ybVBhdGg7
CiAjZWxpZiBQTEFURk9STShTS0lBKQogY2xhc3MgU2tQYXRoOwogdHlwZWRlZiBTa1BhdGggUGxh
dGZvcm1QYXRoOworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCUmVnaW9uOwordHlwZWRl
ZiBCUmVnaW9uIFBsYXRmb3JtUGF0aDsKICNlbHNlCiB0eXBlZGVmIHZvaWQgUGxhdGZvcm1QYXRo
OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24g
NDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNiArNTIsOSBAQCB0eXBlZGVmIHd4R3JhcGhpY3NCcnVzaCogUGxhdGZvcm1Q
YXR0ZXJuCiBjbGFzcyB3eEJydXNoOwogdHlwZWRlZiB3eEJydXNoKiBQbGF0Zm9ybVBhdHRlcm5Q
dHI7CiAjZW5kaWYgLy8gVVNFKFdYR0MpCisjZWxpZiBQTEFURk9STShIQUlLVSkKKyNpbmNsdWRl
IDxpbnRlcmZhY2UvR3JhcGhpY3NEZWZzLmg+Cit0eXBlZGVmIHBhdHRlcm4qIFBsYXRmb3JtUGF0
dGVyblB0cjsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNiArNDUsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQVRTVVN0eWxlKiBBVFNVU3R5
bAogI2luY2x1ZGUgPFFGb250PgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyNpbmNs
dWRlIDxGb250Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250
RGVzY3JpcHRpb247CkBAIC0xNDUsNiArMTQ5LDEwIEBAIHB1YmxpYzoKICAgICB3eEZvbnQqIGdl
dFd4Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBCRm9udCogZ2V0QkZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXRmb3JtRGF0YS5mb250KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZv
aWQgcGxhdGZvcm1Jbml0KCk7CiAgICAgdm9pZCBwbGF0Zm9ybUdseXBoSW5pdCgpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZp
c2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotI2lmIFBMQVRGT1JNKENBSVJPKSB8fCBQ
TEFURk9STShXWCkKKyNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oV1gpIHx8IFBMQVRG
T1JNKEhBSUtVKQogICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2J5dGVzOwogICAgICAgICBJ
bnRTaXplIG1fc2l6ZTsgICAgICAgLy8gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgc2hv
dWxkIGJlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBhcyBJbWFn
ZURlY29kZXI6Om1fc2l6ZS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGlj
OgogICAgIGZyaWVuZCBMUkVTVUxUIF9fc3RkY2FsbCBSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdO
RCwgdW5zaWduZWQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogI2VuZGlmCiAKLSNpZiBQTEFU
Rk9STShRVCkgfHwgVVNFKENVUkwpIHx8IFVTRShTT1VQKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShIQUlLVSkgfHwgVVNFKENVUkwpIHx8IFVTRShTT1VQKQogICAgIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWwqIGdldEludGVybmFsKCkgeyByZXR1cm4gZC5nZXQoKTsgfQogI2VuZGlmCiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCShyZXZpc2lvbiA0NDk0
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw2ICs1NSwxMCBAQCBRVF9FTkRfTkFNRVNQQUNFCiBjbGFzcyB3eFN0cmluZzsK
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCU3RyaW5nOworI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1N0cmluZzsKQEAgLTIyOCw2ICsyMzIsMTEg
QEAgcHVibGljOgogICAgIG9wZXJhdG9yIHd4U3RyaW5nKCkgY29uc3Q7CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKEhBSUtVKQorICAgIFN0cmluZyhjb25zdCBCU3RyaW5nJik7CisgICAgb3BlcmF0
b3IgQlN0cmluZygpIGNvbnN0OworI2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiAgICAgVmVjdG9y
PGNoYXI+IGFzY2lpKCkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9Vbmljb2RlUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5p
Y29kZVJhbmdlLmgJKHJldmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Vu
aWNvZGVSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMCBAQAogI2lmbmRlZiBV
bmljb2RlUmFuZ2VfSAogI2RlZmluZSBVbmljb2RlUmFuZ2VfSAogCisjaWYgUExBVEZPUk0oSEFJ
S1UpCisjaW5jbHVkZSAic3RkaW50LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>31667</attachid>
            <date>2009-06-22 12:36:56 -0700</date>
            <delta_ts>2009-06-24 13:14:15 -0700</delta_ts>
            <desc>Haiku-specific folders (WebCore/platform/haiku etc...)</desc>
            <filename>haiku-port.tar.gz</filename>
            <type>application/octet-stream</type>
            <size>0</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31669</attachid>
            <date>2009-06-22 13:01:49 -0700</date>
            <delta_ts>2009-06-25 08:35:41 -0700</delta_ts>
            <desc>Modifications on WebKit source code to allow Haiku port. (including ChangeLogs)</desc>
            <filename>haiku-port.patch</filename>
            <type>text/plain</type>
            <size>27513</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0OTUwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMDYtMjIgIE1heGltZSBT
aW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKwkJQnVnIDI2NjIwOiBIYWlrdSBXZWJLaXQgcG9ydAorCQk8aHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NjIwPgorCisJCUFkZCBzdXBwb3J0
IGZvciB0aGUgSGFpa3UgcG9ydC4KKworICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y3VycmVudFRocmVhZFN0YWNrQmFzZSk6CisgICAgICAgICogd3RmL0Rh
dGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0KToKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm0uaDoKKwogMjAwOS0wNi0yMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gNDQ5NDUpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEwICs1Miwx
NiBAQAogCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCisjZWxpZiBQTEFURk9STShIQUlLVSkKKwor
I2luY2x1ZGUgPE9TLmg+CisKICNlbGlmIFBMQVRGT1JNKFVOSVgpCiAKICNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpZiAhUExBVEZPUk0oSEFJS1UpCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNlbmRp
ZgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaWYgUExBVEZPUk0oU09MQVJJUykKQEAgLTQzNiw2
ICs0NDIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkKiBjdXJyZW50VGhyZWFkU3RhY2tCYQogICAg
ICAgICBzdGFja0Jhc2UgPSAodm9pZCopaW5mby5pQmFzZTsKICAgICB9CiAgICAgcmV0dXJuICh2
b2lkKilzdGFja0Jhc2U7CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICB0aHJlYWRfaW5mbyB0
aHJlYWRJbmZvOworICAgIGdldF90aHJlYWRfaW5mbyhmaW5kX3RocmVhZChOVUxMKSwgJnRocmVh
ZEluZm8pOworICAgIHJldHVybiB0aHJlYWRJbmZvLnN0YWNrX2VuZDsKICNlbGlmIFBMQVRGT1JN
KFVOSVgpCiAgICAgc3RhdGljIHZvaWQqIHN0YWNrQmFzZSA9IDA7CiAgICAgc3RhdGljIHNpemVf
dCBzdGFja1NpemUgPSAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCShyZXZpc2lvbiA0
NDk0NSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3NSw3ICszNzUsNyBAQCBzdGF0aWMgaW50MzJfdCBjYWxjdWxhdGVVVENPZmZzZXQoKQog
ICAgIGxvY2FsdC50bV93ZGF5ID0gMDsKICAgICBsb2NhbHQudG1feWRheSA9IDA7CiAgICAgbG9j
YWx0LnRtX2lzZHN0ID0gMDsKLSNpZiBQTEFURk9STShXSU5fT1MpIHx8IFBMQVRGT1JNKFNPTEFS
SVMpIHx8IENPTVBJTEVSKFJWQ1QpCisjaWYgUExBVEZPUk0oV0lOX09TKSB8fCBQTEFURk9STShT
T0xBUklTKSB8fCBQTEFURk9STShIQUlLVSkgfHwgQ09NUElMRVIoUlZDVCkKICAgICAvLyBVc2lu
ZyBhIGNhbm5lZCBkYXRlIG9mIDAxLzAxLzIwMDkgb24gcGxhdGZvcm1zIHdpdGggd2Vha2VyIGRh
dGUtaGFuZGxpbmcgZm9vLgogICAgIGxvY2FsdC50bV95ZWFyID0gMTA5OwogICAgIHRpbWVfdCB1
dGNPZmZzZXQgPSAxMjMwNzY4MDAwIC0gbWt0aW1lKCZsb2NhbHQpOwpJbmRleDogSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgJKHJldmlzaW9uIDQ0OTQ1KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3Jt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksOCBAQAogICAgfHwgZGVmaW5lZCh1bml4
KSAgICAgICAgXAogICAgfHwgZGVmaW5lZChfX3VuaXgpICAgICAgXAogICAgfHwgZGVmaW5lZChf
X3VuaXhfXykgICAgXAotICAgfHwgZGVmaW5lZChfQUlYKQorICAgfHwgZGVmaW5lZChfQUlYKSAg
ICAgICAgXAorICAgfHwgZGVmaW5lZChfX0hBSUtVX18pCiAjZGVmaW5lIFdURl9QTEFURk9STV9V
TklYIDEKICNlbmRpZgogCkBAIC0xNDQsNiArMTQ1LDggQEAKICNkZWZpbmUgV1RGX1BMQVRGT1JN
X1dYIDEKICNlbGlmIGRlZmluZWQoQlVJTERJTkdfR1RLX18pCiAjZGVmaW5lIFdURl9QTEFURk9S
TV9HVEsgMQorI2VsaWYgZGVmaW5lZChCVUlMRElOR19IQUlLVV9fKQorI2RlZmluZSBXVEZfUExB
VEZPUk1fSEFJS1UgMQogI2VsaWYgUExBVEZPUk0oREFSV0lOKQogI2RlZmluZSBXVEZfUExBVEZP
Uk1fTUFDIDEKICNlbGlmIFBMQVRGT1JNKFdJTl9PUykKQEAgLTE5MCw3ICsxOTMsNyBAQAogCiAv
KiBNYWtlcyBQTEFURk9STShXSU4pIGRlZmF1bHQgdG8gUExBVEZPUk0oQ0FJUk8pICovCiAvKiBG
SVhNRTogVGhpcyBzaG91bGQgYmUgY2hhbmdlZCBmcm9tIGEgYmxhY2tsaXN0IHRvIGEgd2hpdGVs
aXN0ICovCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0o
V1gpICYmICFQTEFURk9STShDSFJPTUlVTSkKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oUVQpICYmICFQTEFURk9STShXWCkgJiYgIVBMQVRGT1JNKENIUk9NSVVNKSAmJiAhUExBVEZP
Uk0oSEFJS1UpCiAjZGVmaW5lIFdURl9QTEFURk9STV9DQUlSTyAxCiAjZW5kaWYKIApAQCAtMzk1
LDYgKzM5OCwxNCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorI2Rl
ZmluZSBIQVZFX1BPU0lYX01FTUFMSUdOIDEKKyNkZWZpbmUgV1RGX1VTRV9DVVJMIDEKKyNkZWZp
bmUgV1RGX1VTRV9QVEhSRUFEUyAxCisjZGVmaW5lIFVTRV9TWVNURU1fTUFMTE9DIDEKKyNkZWZp
bmUgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgMAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChI
QVZFX0FDQ0VTU0lCSUxJVFkpCiAjaWYgUExBVEZPUk0oSVBIT05FKSB8fCBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShDSFJPTUlVTSkK
ICNkZWZpbmUgSEFWRV9BQ0NFU1NJQklMSVRZIDEKQEAgLTQ1MCw3ICs0NjEsMTAgQEAKIC8qIEZJ
WE1FOiBpcyB0aGlzIGFjdHVhbGx5IHVzZWQgb3IgZG8gb3RoZXIgcGxhdGZvcm1zIGdlbmVyYXRl
IHRoZWlyIG93biBjb25maWcuaD8gKi8KIAogI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorLyogQXMg
bG9uZyBhcyBIYWlrdSBkb2Vzbid0IGhhdmUgYSBjb21wbGV0ZSBzdXBwb3J0IG9mIGxvY2FsZSB0
aGlzIHdpbGwgYmUgZGlzYWJsZWQuICovCisjaWYgIVBMQVRGT1JNKEhBSUtVKQogI2RlZmluZSBI
QVZFX0xBTkdJTkZPX0ggMQorI2VuZGlmCiAjZGVmaW5lIEhBVkVfTU1BUCAxCiAjZGVmaW5lIEhB
VkVfU0JSSyAxCiAjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKSW5kZXg6IFdlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NDk1MCkKKysr
IFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMDkt
MDYtMjIgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwkJQnVnIDI2NjIwOiBIYWlrdSBXZWJLaXQg
cG9ydAorCQk8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NjIwPgor
CisJCUFkZCBzdXBwb3J0IGZvciB0aGUgSGFpa3UgcG9ydC4KKworICAgICAgICBXQVJOSU5HOiBO
TyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKwkJQXMgdGhlIEhhaWt1IHBvcnQgYnVpbGRz
IGJ1dCBkb2Vzbid0IHdvcmtzIHRlc3RzIGNhbid0IGJlIGRvbmUuCisKKyAgICAgICAgKiBwYWdl
L0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vQ29udGV4dE1lbnUuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9D
dXJzb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnRGF0YS5oOgorICAgICAgICAqIHBsYXRm
b3JtL0RyYWdJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL05vdEltcGxlbWVudGVkLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAgICAgICogcGxh
dGZvcm0vUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0
Zm9ybU1vdXNlRXZlbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1lbnUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9X
aWRnZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW50U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpnZXRCRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5oOgorCiAyMDA5LTA2LTIyICBYaWFvbWVpIEppICA8
eGppQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbApJbmRl
eDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNTEsNyArMjI1MSw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRFdmVudCgKIH0KICAgICAKICAgICAKLSNpZiAh
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oSEFJS1UpCiBib29sIEV2ZW50SGFuZGxlcjo6aW52ZXJ0
U2Vuc2VPZlRhYnNUb0xpbmtzKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewogICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHJldmlzaW9uIDQ0OTQ1KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4
IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VsaWYgUExBVEZPUk0oUVQpCiAjaW5j
bHVkZSA8UU1lbnU+CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyNpbmNsdWRlIDxQb2ludC5oPgog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc4LDYgKzgwLDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbjsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTGlzdDxDb250ZXh0TWVu
dUl0ZW0+IG1faXRlbXM7CisjZWxpZiBQTEFURk9STShIQUlLVSkKKwkJUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworICAgICAgICBCUG9pbnQgbV9wb2ludDsK
ICNlbHNlCiAgICAgICAgIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbjsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oCShyZXZpc2lv
biA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX0d0a01lbnVJdGVtIEd0a01l
bnVJdGVtOwogI2luY2x1ZGUgPFFBY3Rpb24+CiAjZWxpZiBQTEFURk9STShXWCkKIGNsYXNzIHd4
TWVudUl0ZW07CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJNZW51SXRlbTsKICNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMDIsNiArMjA0LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBib29sIGNoZWNrZWQ7CiAgICAgICAgIGJvb2wgZW5hYmxlZDsKICAg
ICB9OworI2VsaWYgUExBVEZPUk0oSEFJS1UpCisJdHlwZWRlZiBCTWVudUl0ZW0qIFBsYXRmb3Jt
TWVudUl0ZW1EZXNjcmlwdGlvbjsKICNlbHNlCiAgICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU1l
bnVJdGVtRGVzY3JpcHRpb247CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ3Vyc29y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAkocmV2aXNpb24gNDQ5
NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2
ICs0MCw4IEBAIHR5cGVkZWYgc3RydWN0IF9HZGtDdXJzb3IgR2RrQ3Vyc29yOwogI2luY2x1ZGUg
PFFDdXJzb3I+CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJQbGF0Zm9ybUN1
cnNvci5oIgorI2VsaWYgUExBVEZPUk0oSEFJS1UpCisjaW5jbHVkZSA8YXBwL0N1cnNvci5oPgog
I2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCkBAIC04Niw2ICs4OCw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIC8vIFNlZSBQbGF0Zm9ybUN1
cnNvci5oCiAgICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUN1cnNvckhhbmRsZTsKKyNlbGlmIFBM
QVRGT1JNKEhBSUtVKQorICAgIHR5cGVkZWYgQkN1cnNvciogUGxhdGZvcm1DdXJzb3I7CisJdHlw
ZWRlZiBCQ3Vyc29yKiBQbGF0Zm9ybUN1cnNvckhhbmRsZTsKICNlbHNlCiAgICAgdHlwZWRlZiB2
b2lkKiBQbGF0Zm9ybUN1cnNvcjsKICAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ3Vyc29ySGFu
ZGxlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDkgQEAgdHlwZWRl
ZiBjbGFzcyB3eERhdGFPYmplY3QqIERyYWdEYXRhUmVmOwogdHlwZWRlZiB2b2lkKiBEcmFnRGF0
YVJlZjsKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgIkRyYWdEYXRhUmVmLmgi
CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJNZXNzYWdlOwordHlwZWRlZiBjbGFzcyBC
TWVzc2FnZSogRHJhZ0RhdGFSZWY7CiAjZW5kaWYKIAogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L0RyYWdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgJ
KHJldmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCB0eXBlZGVmIHN0cnVjdCBIQklUTUFQX18qIEhCSVRN
QVA7CiBjbGFzcyB3eERyYWdJbWFnZTsKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogI2luY2x1
ZGUgIkRyYWdJbWFnZVJlZi5oIgorI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCQml0bWFw
OwogI2VuZGlmCiAKIC8vV2UgbmVlZCB0byAjZGVmaW5lIFlPZmZzZXQgYXMgaXQgbmVlZHMgdG8g
YmUgc2hhcmVkIHdpdGggV2ViS2l0CkBAIC03MCw2ICs3Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICB0eXBlZGVmIHd4RHJhZ0ltYWdlKiBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9S
TShHVEspCiAgICAgdHlwZWRlZiB2b2lkKiBEcmFnSW1hZ2VSZWY7CisjZWxpZiBQTEFURk9STShI
QUlLVSkKKyAgICB0eXBlZGVmIEJCaXRtYXAqIERyYWdJbWFnZVJlZjsKICNlbmRpZgogICAgIAog
ICAgIEludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9Ob3RJbXBsZW1lbnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Tm90SW1wbGVtZW50ZWQuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL05v
dEltcGxlbWVudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDExIEBACiAKICNpZiBk
ZWZpbmVkKE5ERUJVRykKICAgICAjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgKCh2b2lkKTApCisK
KyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgIC8vIFJK
TCBUT0RPOiBNYXkgbm90IG5lZWQgdGhpcywgd2hhdCBpcyBiZWxvdyBtYXkgYmUgZmluZQorICAg
ICNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExF
TUVOVEVEOiAlczolZCAoJXMpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVO
Q1RJT04pCiAjZWxzZQogCiAjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBcCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDQ0OTQ1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTksNiArNTksMTAgQEAgUVRfRU5EX05BTUVTUEFDRQogY2xhc3Mgd3hLZXlFdmVudDsK
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCTWVzc2FnZTsKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQg
ewpAQCAtMTQ4LDYgKzE1MiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudCh3eEtleUV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhB
SUtVKQorICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoQk1lc3NhZ2UqKTsKKyNlbmRpZgor
CiAjaWYgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShDSFJPTUlVTSkKICAgICAgICAgYm9vbCBp
c1N5c3RlbUtleSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1LZXk7IH0KICNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaAkocmV2aXNpb24g
NDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSE1FTlVfXyogSE1F
TlU7CiB0eXBlZGVmIHN0cnVjdCBfR3RrTWVudSBHdGtNZW51OwogI2VsaWYgUExBVEZPUk0oV1gp
CiBjbGFzcyB3eE1lbnU7CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJNZW51OwogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU1LDYgKzU3LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHR5cGVkZWYgR3RrTWVudSogUGxhdGZvcm1NZW51RGVzY3JpcHRpb247CiAj
ZWxpZiBQTEFURk9STShXWCkKICAgICB0eXBlZGVmIHd4TWVudSogUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb247CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICB0eXBlZGVmIEJNZW51KiBQbGF0Zm9y
bU1lbnVEZXNjcmlwdGlvbjsKICNlbHNlCiAgICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbjsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNl
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVu
dC5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDEwIEBAIHR5cGVkZWYgbG9uZyBMUEFS
QU07CiBjbGFzcyB3eE1vdXNlRXZlbnQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQor
Y2xhc3MgQk1lc3NhZ2U7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAg
IC8vIFRoZXNlIGJ1dHRvbiBudW1iZXJzIG1hdGNoIHRoZSBvbmVzIHVzZWQgaW4gdGhlIERPTSBB
UEksIDAgdGhyb3VnaCAyLCBleGNlcHQgZm9yIE5vQnV0dG9uIHdoaWNoIGlzbid0IHNwZWNpZmll
ZC4KQEAgLTEyOCw2ICsxMzIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQoY29uc3Qgd3hNb3VzZUV2ZW50JiwgY29uc3Qgd3hQb2ludCYgZ2xvYmFs
UG9pbnQsIGludCBjbGlja0NvdW50KTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisg
ICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChCTWVzc2FnZSosIEJQb2ludCBzY3JlZW5Qb2ludCk7
CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChCUG9pbnQgd2hlcmUsIEJQb2ludCBzY3JlZW5Q
b2ludCk7CisjZW5kaWYKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgSW50UG9pbnQgbV9wb3Np
dGlvbjsKICAgICAgICAgSW50UG9pbnQgbV9nbG9iYWxQb3NpdGlvbjsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwx
MCBAQCBjbGFzcyB3eE1vdXNlRXZlbnQ7CiBjbGFzcyB3eFBvaW50OwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShIQUlLVSkKK2NsYXNzIEJNZXNzYWdlOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIC8vIFdoZWVsIGV2ZW50cyBjb21lIGluIHR3byBmbGF2b3JzOgpAQCAtMTA2
LDYgKzExMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudChjb25zdCB3eE1vdXNlRXZlbnQmLCBjb25zdCB3eFBvaW50Jik7CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKEhBSUtVKQorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoQk1lc3NhZ2UqKTsK
KyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBJbnRQb2ludCBtX3Bvc2l0aW9uOwog
ICAgICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9Qb3B1cE1lbnUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5o
CShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgY2xhc3Mgd3hNZW51OwogI2luY2x1ZGUgPHd4L2V2
ZW50Lmg+CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJQb3B1cE1lbnVQcml2
YXRlLmgiCisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJNZW51OwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3Nyw2ICsxNzksOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
T25NZW51SXRlbVNlbGVjdGVkKHd4Q29tbWFuZEV2ZW50Jik7CiAjZWxpZiBQTEFURk9STShDSFJP
TUlVTSkKICAgICBQb3B1cE1lbnVQcml2YXRlIHA7CisjZWxpZiBQTEFURk9STShIQUlLVSkKKwlC
TWVudSogbV9tZW51OwogI2VuZGlmCiAKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJ
KHJldmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODc0LDcgKzg3NCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlUGFu
U2Nyb2xsSWNvbigpCiAgICAgaG9zdFdpbmRvdygpLT5yZXBhaW50KEludFJlY3QobV9wYW5TY3Jv
bGxJY29uUG9pbnQsIEludFNpemUocGFuSWNvblNpemVMZW5ndGgsIHBhbkljb25TaXplTGVuZ3Ro
KSksIHRydWUsIHRydWUpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdYKSAmJiAhUExBVEZPUk0oR1RL
KSAmJiAhUExBVEZPUk0oUVQpCisjaWYgIVBMQVRGT1JNKFdYKSAmJiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShIQUlLVSkKIAogdm9pZCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybUluaXQoKQogewpAQCAtODg2LDcgKzg4Niw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGxh
dGZvcm1EZXN0cm95KCkKIAogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9S
TShHVEspICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0o
V1gpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKE1BQykg
JiYgIVBMQVRGT1JNKEhBSUtVKQogCiB2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtQWRkQ2hpbGQo
V2lkZ2V0KikKIHsKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3Jt
U2V0U2Nyb2xsYmFyc1N1CiAKICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKFdYKQorI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShXWCkgJiYgIVBMQVRGT1JN
KEhBSUtVKQogCiB2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFyTW9kZXMoKQog
ewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDExIEBAIHR5
cGVkZWYgc3RydWN0IF9HdGtBZGp1c3RtZW50IEd0a0FkanVzdG0KIGNsYXNzIHd4U2Nyb2xsV2lu
RXZlbnQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlZpZXc7CitjbGFz
cyBCU2Nyb2xsVmlldzsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhv
c3RXaW5kb3c7CkBAIC0zMTksNiArMzI0LDE1IEBAIHByaXZhdGU6CiAgICAgU2Nyb2xsVmlld1By
aXZhdGUqIG1fZGF0YTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIHNldFBhcmVudFdpZGdldChCVmlldyopOworICAgIHZvaWQgc2V0QWxs
b3dzU2Nyb2xsaW5nKGJvb2wpOworCitwcml2YXRlOgorICAgIGNsYXNzIFNjcm9sbFZpZXdQcml2
YXRlOworICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CisjZW5kaWYKIH07IC8vIGNsYXNz
IFNjcm9sbFZpZXcKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCShy
ZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDYgKzY1LDExIEBAIGNsYXNzIHd4V2luZG93OwogdHlwZWRlZiB3eFdpbmRvdyog
UGxhdGZvcm1XaWRnZXQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlZp
ZXc7Cit0eXBlZGVmIEJWaWV3KiBQbGF0Zm9ybVdpZGdldDsKKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCiAjaW5jbHVkZSAiUGxhdGZvcm1XaWRnZXQuaCIKICNlbmRpZgpAQCAtMTc5
LDYgKzE4NCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVGcm9tU3VwZXJ2aWV3KCk7CiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorICAgIEJWaWV3KiBwYXJlbnRXaWRnZXQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50V2lkZ2V0KEJWaWV3Kik7CisKKyAgICBC
VmlldyogaGFpa3VXaWRnZXQoKTsKKyAgICB2b2lkIHNldEhhaWt1V2lkZ2V0KEJWaWV3Kik7Cisj
ZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXQoUGxhdGZvcm1XaWRnZXQpOyAvLyBNdXN0
IGJlIGNhbGxlZCBieSBhbGwgV2lkZ2V0IGNvbnN0cnVjdG9ycyB0byBpbml0aWFsaXplIGNyb3Nz
LXBsYXRmb3JtIGRhdGEuCiAKQEAgLTE5NSw2ICsyMDgsOCBAQCBwcml2YXRlOgogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIFdpZGdldFByaXZhdGUqIG1fZGF0YTsKKyNlbGlmIFBMQVRGT1JNKEhB
SUtVKQorICAgIFdpZGdldFByaXZhdGUqIGRhdGE7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDQ0OTQ1KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw2ICs0NCwxMCBAQCBjbGFzcyBOU0ltYWdlOwogdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpI
QklUTUFQOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJCaXRtYXA7Cisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBGcmFtZURhdGE7CiB9CkBA
IC0xNjAsMTAgKzE2NCwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdGcmFt
ZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICNlbmRp
ZgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7
CisKICNpZiBQTEFURk9STShXWCkKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KTsKLSNlbmRpZiAgICAKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgdmlydHVhbCBCQml0bWFwKiBnZXRCaXRtYXAoKSBjb25zdDsKKyNlbmRpZgorCiAgICAg
c2l6ZV90IGN1cnJlbnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1lOyB9CiAg
ICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgo
c2l6ZV90KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDQ0OTQ1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw2ICs0NywxMCBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrQ29sb3IgR2RrQ29sb3I7CiBjbGFz
cyB3eENvbG91cjsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitzdHJ1Y3QgcmdiX2Nv
bG9yOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU3RyaW5nOwpAQCAt
MTIxLDYgKzEyNSwxMSBAQCBwdWJsaWM6CiAgICAgQ29sb3IoQ0dDb2xvclJlZik7CiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKEhBSUtVKQorICAgIENvbG9yKGNvbnN0IHJnYl9jb2xvciYpOworICAg
IG9wZXJhdG9yIHJnYl9jb2xvcigpIGNvbnN0OworI2VuZGlmCisKICAgICBzdGF0aWMgYm9vbCBw
YXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSwgUkdCQTMyJiByZ2IpOwogCiAgICAgc3Rh
dGljIGNvbnN0IFJHQkEzMiBibGFjayA9IDB4RkYwMDAwMDA7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTAg
QEAgY2xhc3MgUVBvaW50RjsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oSEFJS1UpCitjbGFzcyBCUG9pbnQ7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFNLSUEpCiBz
dHJ1Y3QgU2tQb2ludDsKICNlbmRpZgpAQCAtOTAsNiArOTQsMTEgQEAgcHVibGljOgogICAgIG9w
ZXJhdG9yIFFQb2ludEYoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisg
ICAgRmxvYXRQb2ludChjb25zdCBCUG9pbnQmKTsKKyAgICBvcGVyYXRvciBCUG9pbnQoKSBjb25z
dDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICBvcGVyYXRvciBTa1BvaW50KCkg
Y29uc3Q7CiAgICAgRmxvYXRQb2ludChjb25zdCBTa1BvaW50Jik7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTAg
QEAgUVRfRU5EX05BTUVTUEFDRQogY2xhc3Mgd3hSZWN0MkREb3VibGU7CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlJlY3Q7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFNL
SUEpCiBzdHJ1Y3QgU2tSZWN0OwogI2VuZGlmCkBAIC0xMzgsNiArMTQyLDExIEBAIHB1YmxpYzoK
ICAgICBvcGVyYXRvciB3eFJlY3QyRERvdWJsZSgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShIQUlLVSkKKyAgICBGbG9hdFJlY3QoY29uc3QgQlJlY3QmKTsKKyAgICBvcGVyYXRvciBC
UmVjdCgpIGNvbnN0OworI2VuZGlmCisKICNpZiBQTEFURk9STShTS0lBKQogICAgIEZsb2F0UmVj
dChjb25zdCBTa1JlY3QmKTsKICAgICBvcGVyYXRvciBTa1JlY3QoKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9u
IDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MTYsNyArNTE2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtVGV4dERyYQogfQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oUVQpICYmICFQ
TEFURk9STShDQUlSTykgJiYgIVBMQVRGT1JNKFNLSUEpCisjaWYgIVBMQVRGT1JNKFFUKSAmJiAh
UExBVEZPUk0oQ0FJUk8pICYmICFQTEFURk9STShTS0lBKSAmJiAhUExBVEZPUk0oSEFJS1UpCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShjb25zdCBTdHJva2VT
dHlsZSYpCiB7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgJKHJldmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTAgQEAgY2xhc3Mg
d3hXaW5kb3dEQzsKICNlbmRpZgogI2VsaWYgUExBVEZPUk0oU0tJQSkKIHR5cGVkZWYgY2xhc3Mg
UGxhdGZvcm1Db250ZXh0U2tpYSBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKKyNlbGlmIFBMQVRG
T1JNKEhBSUtVKQorY2xhc3MgQlZpZXc7Cit0eXBlZGVmIEJWaWV3IFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0Oworc3RydWN0IAlwYXR0ZXJuOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDsKICNlbmRpZgpAQCAtMzU0LDYgKzM1OCwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIEdka0V2ZW50RXhwb3NlKiBnZGtFeHBvc2VFdmVudCgpIGNvbnN0Owog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKwkJcGF0dGVybglnZXRIYWlrdVN0cm9rZVN0
eWxlKCk7CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2F2ZVBsYXRmb3Jt
U3RhdGUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JY29uLmgJKHJldmlzaW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JY29uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgcHJpdmF0
ZToKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIEljb24oY29uc3QgUGxhdGZvcm1JY29u
Jik7CiAgICAgUGxhdGZvcm1JY29uIG1faWNvbjsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAg
IEljb24oKTsKICNlbmRpZgogfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDggQEAgc3RydWN0IF9j
YWlyb19zdXJmYWNlOwogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFj
ZV90OwogI2VsaWYgUExBVEZPUk0oU0tJQSkKIGNsYXNzIE5hdGl2ZUltYWdlU2tpYTsKKyNlbGlm
IFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQkJpdG1hcDsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC03OCw2ICs4MCwxMCBAQCB0eXBlZGVmIGNhaXJvX3N1cmZhY2VfdCogTmF0aXZl
SW1hZ2VQdHI7CiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0
aXZlSW1hZ2VTb3VyY2VQdHI7CiB0eXBlZGVmIE5hdGl2ZUltYWdlU2tpYSogTmF0aXZlSW1hZ2VQ
dHI7CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEltYWdlRGVjb2RlcjsKK3R5cGVkZWYg
SW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKK3R5cGVkZWYgQkJpdG1hcCogTmF0
aXZlSW1hZ2VQdHI7CiAjZW5kaWYKIAogY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IC0x
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAkocmV2aXNpb24gNDQ5NDUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDggQEAgY2xhc3MgUVBvaW50OwogUVRfRU5EX05BTUVTUEFDRQogI2VsaWYg
UExBVEZPUk0oR1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0dka1BvaW50IEdka1BvaW50OworI2VsaWYg
UExBVEZPUk0oSEFJS1UpCitjbGFzcyBCUG9pbnQ7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdY
KQpAQCAtMTE1LDYgKzExNyw5IEBAIHB1YmxpYzoKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBJ
bnRQb2ludChjb25zdCBHZGtQb2ludCYpOwogICAgIG9wZXJhdG9yIEdka1BvaW50KCkgY29uc3Q7
CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICBJbnRQb2ludChjb25zdCBCUG9pbnQmKTsKKyAg
ICBvcGVyYXRvciBCUG9pbnQoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV1gpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDks
NiArNDksOCBAQCBjbGFzcyBRUmVjdDsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbGlmIFBMQVRGT1JN
KEdUSykKIHR5cGVkZWYgc3RydWN0IF9HZGtSZWN0YW5nbGUgR2RrUmVjdGFuZ2xlOworI2VsaWYg
UExBVEZPUk0oSEFJS1UpCitjbGFzcyBCUmVjdDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV1gp
CkBAIC0xNDQsNiArMTQ2LDkgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIElu
dFJlY3QoY29uc3QgR2RrUmVjdGFuZ2xlJik7CiAgICAgb3BlcmF0b3IgR2RrUmVjdGFuZ2xlKCkg
Y29uc3Q7CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICBJbnRSZWN0KGNvbnN0IEJSZWN0Jik7
CisgICAgb3BlcmF0b3IgQlJlY3QoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ0cp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAkocmV2aXNpb24gNDQ5NDUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsOCBAQCB0eXBlZGVmIHN0cnVjdCB0YWdTSVpFIFNJWkU7CiBRVF9CRUdJTl9OQU1F
U1BBQ0UKIGNsYXNzIFFTaXplOwogUVRfRU5EX05BTUVTUEFDRQorI2VsaWYgUExBVEZPUk0oSEFJ
S1UpCitjbGFzcyBCU2l6ZTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTMs
NiArMTE1LDExIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBRU2l6ZSgpIGNvbnN0OwogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBJbnRTaXplKGNvbnN0IEJTaXplJik7CisgICAg
b3BlcmF0b3IgQlNpemUoKSBjb25zdDsKKyNlbmRpZgorCiAKIHByaXZhdGU6CiAgICAgaW50IG1f
d2lkdGgsIG1faGVpZ2h0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9u
IDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDYgKzQ4LDkgQEAgdHlwZWRlZiBXZWJDb3JlOjpDYWlyb1BhdGggUGxhdGZvcm1Q
YXRoOwogI2VsaWYgUExBVEZPUk0oU0tJQSkKIGNsYXNzIFNrUGF0aDsKIHR5cGVkZWYgU2tQYXRo
IFBsYXRmb3JtUGF0aDsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlJlZ2lvbjsKK3R5
cGVkZWYgQlJlZ2lvbiBQbGF0Zm9ybVBhdGg7CiAjZWxzZQogdHlwZWRlZiB2b2lkIFBsYXRmb3Jt
UGF0aDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHJldmlz
aW9uIDQ0OTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDYgKzUyLDkgQEAgdHlwZWRlZiB3eEdyYXBoaWNzQnJ1c2gqIFBsYXRm
b3JtUGF0dGVybgogY2xhc3Mgd3hCcnVzaDsKIHR5cGVkZWYgd3hCcnVzaCogUGxhdGZvcm1QYXR0
ZXJuUHRyOwogI2VuZGlmIC8vIFVTRShXWEdDKQorI2VsaWYgUExBVEZPUk0oSEFJS1UpCisjaW5j
bHVkZSA8aW50ZXJmYWNlL0dyYXBoaWNzRGVmcy5oPgordHlwZWRlZiBwYXR0ZXJuKiBQbGF0Zm9y
bVBhdHRlcm5QdHI7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNpb24gNDQ5NDUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDYgKzQ1LDEwIEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUFUU1VTdHlsZSogQVRT
VVN0eWwKICNpbmNsdWRlIDxRRm9udD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisj
aW5jbHVkZSA8Rm9udC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Rm9udERlc2NyaXB0aW9uOwpAQCAtMTQ1LDYgKzE0OSwxMCBAQCBwdWJsaWM6CiAgICAgd3hGb250
KiBnZXRXeEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5mb250KCk7IH0KICNl
bmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgQkZvbnQqIGdldEJGb250KCkgY29uc3Qg
eyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdCgpOwogICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAko
cmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSNpZiBQTEFURk9STShDQUlSTykg
fHwgUExBVEZPUk0oV1gpCisjaWYgUExBVEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFdYKSB8fCBQ
TEFURk9STShIQUlLVSkKICAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9ieXRlczsKICAgICAg
ICAgSW50U2l6ZSBtX3NpemU7ICAgICAgIC8vIFRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBUaGlz
IHNob3VsZCBiZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMg
SW1hZ2VEZWNvZGVyOjptX3NpemUuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAkocmV2aXNpb24gNDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1
YmxpYzoKICAgICBmcmllbmQgTFJFU1VMVCBfX3N0ZGNhbGwgUmVzb3VyY2VIYW5kbGVXbmRQcm9j
KEhXTkQsIHVuc2lnbmVkIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oUVQpIHx8IFVTRShDVVJMKSB8fCBVU0UoU09VUCkKKyNpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oSEFJS1UpIHx8IFVTRShDVVJMKSB8fCBVU0UoU09VUCkKICAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBnZXRJbnRlcm5hbCgpIHsgcmV0dXJuIGQuZ2V0KCk7IH0KICNlbmRp
ZgogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAkocmV2aXNpb24g
NDQ5NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNiArNTUsMTAgQEAgUVRfRU5EX05BTUVTUEFDRQogY2xhc3Mgd3hTdHJp
bmc7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlN0cmluZzsKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTdHJpbmc7CkBAIC0yMjgsNiArMjMy
LDExIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciB3eFN0cmluZygpIGNvbnN0OwogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBTdHJpbmcoY29uc3QgQlN0cmluZyYpOworICAgIG9w
ZXJhdG9yIEJTdHJpbmcoKSBjb25zdDsKKyNlbmRpZgorCiAjaWZuZGVmIE5ERUJVRwogICAgIFZl
Y3RvcjxjaGFyPiBhc2NpaSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVW5pY29kZVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1VuaWNvZGVSYW5nZS5oCShyZXZpc2lvbiA0NDk0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9Vbmljb2RlUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTAgQEAKICNpZm5k
ZWYgVW5pY29kZVJhbmdlX0gKICNkZWZpbmUgVW5pY29kZVJhbmdlX0gKIAorI2lmIFBMQVRGT1JN
KEhBSUtVKQorI2luY2x1ZGUgInN0ZGludC5oIgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
</data>
<flag name="review"
          id="16279"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>31804</attachid>
            <date>2009-06-24 13:16:18 -0700</date>
            <delta_ts>2009-06-24 14:13:29 -0700</delta_ts>
            <desc>Haiku-specific folders (WebCore/platform/haiku etc...)</desc>
            <filename>haiku-files.tar.gz</filename>
            <type>application/octet-stream</type>
            <size>0</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>31812</attachid>
            <date>2009-06-24 14:15:34 -0700</date>
            <delta_ts>2009-06-25 08:35:52 -0700</delta_ts>
            <desc>Haiku-specific folders (WebCore/platform/haiku etc...)</desc>
            <filename>haiku-files.tar.gz</filename>
            <type>application/octet-stream</type>
            <size>0</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31858</attachid>
            <date>2009-06-25 08:41:26 -0700</date>
            <delta_ts>2009-07-17 00:14:55 -0700</delta_ts>
            <desc>Modifications on WebKit source code to allow Haiku port. (including ChangeLogs)</desc>
            <filename>0001-Modifications-on-WebKit-source-code-to-allow-Haiku-p.patch</filename>
            <type>text/plain</type>
            <size>28883</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAyMTMyY2RkNGU0YTZjYWJlMjE1MWUyNTdiMDMzOTBhYmI5ZWZhYjNmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFdlZCwgMjQgSnVuIDIwMDkgMjM6MzU6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIIDEv
Ml0gTW9kaWZpY2F0aW9ucyBvbiBXZWJLaXQgc291cmNlIGNvZGUgdG8gYWxsb3cgSGFpa3UgcG9y
dC4KCi0tLQogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMTIgKysrKysrCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAgICAgICAg
ICAgIHwgICAxMCArKysrKwogSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcCAgICAgICAg
ICAgICAgICB8ICAgIDIgKy0KIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oICAgICAgICAg
ICAgICAgICAgfCAgIDE4ICsrKysrKysrKy0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29y
ZS9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKysKIFdlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJD
b3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmggICAgICAgICAgICAgICAgIHwgICAgNSArKysKIFdl
YkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmggICAgICAgICAgICAgfCAgICA0ICsrCiBX
ZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArKysK
IFdlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCAgICAgICAgICAgICAgICAgICAgfCAgICAzICsr
CiBXZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oICAgICAgICAgICAgICAgICAgIHwgICAgNCAr
KwogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCAgICAgICB8ICAgIDgg
KysrKwogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oICAgICB8ICAg
IDQgKysKIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmggICAgICAgICAgfCAg
ICA4ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmggICAgICAgICAg
fCAgICA4ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmggICAgICAgICAgICAgICAg
ICAgfCAgICA0ICsrCiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwICAgICAgICAgICAg
ICAgIHwgICAgNiArKy0tCiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCAgICAgICAgICAg
ICAgICAgIHwgICAxNCArKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oICAgICAgICAg
ICAgICAgICAgICAgIHwgICAxNSArKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oICAgICAgICB8ICAgMTIgKysrKysrLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oICAgICAgICAgICAgICB8ICAgIDkgKysrKysKIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oICAgICAgICAgfCAgICA5ICsrKysrCiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oICAgICAgICAgIHwgICAgOSArKysrKwogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwICB8ICAgIDIgKy0KIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggICAgfCAgICA4ICsrKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCAgICAgICAgfCAgICA2ICsrKwogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oICAgICAgICAgICB8ICAgIDUgKysrCiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaCAgICAgICAgICAgIHwgICAgNSArKysK
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oICAgICAgICAgICAgfCAgICA3ICsr
KysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oICAgICAgICAgICAgICAgfCAgICAz
ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaCAgICAgICAgICAgIHwgICAg
MyArKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oICAgICB8ICAg
IDggKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCB8
ICAgIDIgKy0KIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oICAgICAg
fCAgICAyICstCiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaCAgICAgICAg
IHwgICAgOSArKysrKwogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5oICAgICAg
ICAgICB8ICAgIDQgKysKIDM4IGZpbGVzIGNoYW5nZWQsIDI3NCBpbnNlcnRpb25zKCspLCAxMSBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNTU1MThmNS4uYzNjNDE2NyAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDA5LTA2LTI0ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vZGlmaWNhdGlvbnMgb24gV2ViS2l0IHNvdXJjZSBjb2RlIHRvIGFsbG93IEhhaWt1IHBv
cnQuCisKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3Rvci5jcHA6CisgICAgICAgIChKU0M6OmN1
cnJlbnRUaHJlYWRTdGFja0Jhc2UpOgorICAgICAgICAqIHd0Zi9EYXRlTWF0aC5jcHA6CisgICAg
ICAgIChXVEY6OmNhbGN1bGF0ZVVUQ09mZnNldCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6
CisKIDIwMDktMDYtMjQgIFpvbHRhbiBIb3J2YXRoICA8aHpvbHRhbkBpbmYudS1zemVnZWQuaHU+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbGxlY3Rvci5jcHAKaW5kZXggMDdhODg5OC4uNDYwODVmYiAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29sbGVjdG9yLmNwcApAQCAtNTIsMTAgKzUyLDE2IEBACiAKICNpbmNsdWRlIDx3aW5k
b3dzLmg+CiAKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorCisjaW5jbHVkZSA8T1MuaD4KKwogI2Vs
aWYgUExBVEZPUk0oVU5JWCkKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICFQTEFURk9STShI
QUlLVSkKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2VuZGlmCiAjaW5jbHVkZSA8dW5pc3RkLmg+
CiAKICNpZiBQTEFURk9STShTT0xBUklTKQpAQCAtNDkzLDYgKzQ5OSwxMCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQqIGN1cnJlbnRUaHJlYWRTdGFja0Jhc2UoKQogICAgICAgICBzdGFja0Jhc2UgPSAo
dm9pZCopaW5mby5pQmFzZTsKICAgICB9CiAgICAgcmV0dXJuICh2b2lkKilzdGFja0Jhc2U7Cisj
ZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICB0aHJlYWRfaW5mbyB0aHJlYWRJbmZvOworICAgIGdl
dF90aHJlYWRfaW5mbyhmaW5kX3RocmVhZChOVUxMKSwgJnRocmVhZEluZm8pOworICAgIHJldHVy
biB0aHJlYWRJbmZvLnN0YWNrX2VuZDsKICNlbGlmIFBMQVRGT1JNKFVOSVgpCiAgICAgc3RhdGlj
IHZvaWQqIHN0YWNrQmFzZSA9IDA7CiAgICAgc3RhdGljIHNpemVfdCBzdGFja1NpemUgPSAwOwpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcCBiL0phdmFTY3JpcHRD
b3JlL3d0Zi9EYXRlTWF0aC5jcHAKaW5kZXggNDdjOWQ0NC4uOTk4OTdhOSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYv
RGF0ZU1hdGguY3BwCkBAIC0zNzUsNyArMzc1LDcgQEAgc3RhdGljIGludDMyX3QgY2FsY3VsYXRl
VVRDT2Zmc2V0KCkKICAgICBsb2NhbHQudG1fd2RheSA9IDA7CiAgICAgbG9jYWx0LnRtX3lkYXkg
PSAwOwogICAgIGxvY2FsdC50bV9pc2RzdCA9IDA7Ci0jaWYgUExBVEZPUk0oV0lOX09TKSB8fCBQ
TEFURk9STShTT0xBUklTKSB8fCBDT01QSUxFUihSVkNUKQorI2lmIFBMQVRGT1JNKFdJTl9PUykg
fHwgUExBVEZPUk0oU09MQVJJUykgfHwgUExBVEZPUk0oSEFJS1UpIHx8IENPTVBJTEVSKFJWQ1Qp
CiAgICAgLy8gVXNpbmcgYSBjYW5uZWQgZGF0ZSBvZiAwMS8wMS8yMDA5IG9uIHBsYXRmb3JtcyB3
aXRoIHdlYWtlciBkYXRlLWhhbmRsaW5nIGZvby4KICAgICBsb2NhbHQudG1feWVhciA9IDEwOTsK
ICAgICB0aW1lX3QgdXRjT2Zmc2V0ID0gMTIzMDc2ODAwMCAtIG1rdGltZSgmbG9jYWx0KTsKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvSmF2YVNjcmlwdENvcmUv
d3RmL1BsYXRmb3JtLmgKaW5kZXggMTk3Y2FlMC4uMDg3YjY5MCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3Jt
LmgKQEAgLTExOSw3ICsxMTksOCBAQAogICAgfHwgZGVmaW5lZCh1bml4KSAgICAgICAgXAogICAg
fHwgZGVmaW5lZChfX3VuaXgpICAgICAgXAogICAgfHwgZGVmaW5lZChfX3VuaXhfXykgICAgXAot
ICAgfHwgZGVmaW5lZChfQUlYKQorICAgfHwgZGVmaW5lZChfQUlYKSAgICAgICAgXAorICAgfHwg
ZGVmaW5lZChfX0hBSUtVX18pCiAjZGVmaW5lIFdURl9QTEFURk9STV9VTklYIDEKICNlbmRpZgog
CkBAIC0xNDQsNiArMTQ1LDggQEAKICNkZWZpbmUgV1RGX1BMQVRGT1JNX1dYIDEKICNlbGlmIGRl
ZmluZWQoQlVJTERJTkdfR1RLX18pCiAjZGVmaW5lIFdURl9QTEFURk9STV9HVEsgMQorI2VsaWYg
ZGVmaW5lZChCVUlMRElOR19IQUlLVV9fKQorI2RlZmluZSBXVEZfUExBVEZPUk1fSEFJS1UgMQog
I2VsaWYgUExBVEZPUk0oREFSV0lOKQogI2RlZmluZSBXVEZfUExBVEZPUk1fTUFDIDEKICNlbGlm
IFBMQVRGT1JNKFdJTl9PUykKQEAgLTE5MCw3ICsxOTMsNyBAQAogCiAvKiBNYWtlcyBQTEFURk9S
TShXSU4pIGRlZmF1bHQgdG8gUExBVEZPUk0oQ0FJUk8pICovCiAvKiBGSVhNRTogVGhpcyBzaG91
bGQgYmUgY2hhbmdlZCBmcm9tIGEgYmxhY2tsaXN0IHRvIGEgd2hpdGVsaXN0ICovCi0jaWYgIVBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9S
TShDSFJPTUlVTSkKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFU
Rk9STShXWCkgJiYgIVBMQVRGT1JNKENIUk9NSVVNKSAmJiAhUExBVEZPUk0oSEFJS1UpCiAjZGVm
aW5lIFdURl9QTEFURk9STV9DQUlSTyAxCiAjZW5kaWYKIApAQCAtMzk1LDYgKzM5OCwxNCBAQAog
I2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorI2RlZmluZSBIQVZFX1BPU0lY
X01FTUFMSUdOIDEKKyNkZWZpbmUgV1RGX1VTRV9DVVJMIDEKKyNkZWZpbmUgV1RGX1VTRV9QVEhS
RUFEUyAxCisjZGVmaW5lIFVTRV9TWVNURU1fTUFMTE9DIDEKKyNkZWZpbmUgRU5BQkxFX05FVFND
QVBFX1BMVUdJTl9BUEkgMAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChIQVZFX0FDQ0VTU0lCSUxJ
VFkpCiAjaWYgUExBVEZPUk0oSVBIT05FKSB8fCBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdJ
TikgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShDSFJPTUlVTSkKICNkZWZpbmUgSEFWRV9B
Q0NFU1NJQklMSVRZIDEKQEAgLTQ1MCw3ICs0NjEsMTAgQEAKIC8qIEZJWE1FOiBpcyB0aGlzIGFj
dHVhbGx5IHVzZWQgb3IgZG8gb3RoZXIgcGxhdGZvcm1zIGdlbmVyYXRlIHRoZWlyIG93biBjb25m
aWcuaD8gKi8KIAogI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorLyogQXMgbG9uZyBhcyBIYWlrdSBk
b2Vzbid0IGhhdmUgYSBjb21wbGV0ZSBzdXBwb3J0IG9mIGxvY2FsZSB0aGlzIHdpbGwgYmUgZGlz
YWJsZWQuICovCisjaWYgIVBMQVRGT1JNKEhBSUtVKQogI2RlZmluZSBIQVZFX0xBTkdJTkZPX0gg
MQorI2VuZGlmCiAjZGVmaW5lIEhBVkVfTU1BUCAxCiAjZGVmaW5lIEhBVkVfU0JSSyAxCiAjZGVm
aW5lIEhBVkVfU1RSSU5HU19IIDEKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMjU0MjdiYy4uMDNkZWFiNCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAw
OS0wNi0yNCAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmljYXRpb25zIG9u
IFdlYktpdCBzb3VyY2UgY29kZSB0byBhbGxvdyBIYWlrdSBwb3J0LgorCisgICAgICAgIFdBUk5J
Tkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogY29uZmlnLmg6
CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL0Nv
bnRleHRNZW51Lmg6CisgICAgICAgICogcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmg6CisgICAg
ICAgICogcGxhdGZvcm0vQ3Vyc29yLmg6CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0RhdGEuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0
Zm9ybUtleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L1BvcHVwTWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JY29u
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmdldEJGb250KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9QbGF0Zm9ybVN0cmluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVW5pY29kZVJh
bmdlLmg6CisKIDIwMDktMDYtMjQgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw7guCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2NvbmZpZy5oIGIvV2ViQ29yZS9jb25maWcuaAppbmRleCAwNzAwYWRmLi45
MjNiNDYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2NvbmZpZy5oCisrKyBiL1dlYkNvcmUvY29uZmln
LmgKQEAgLTE3NiwzICsxNzYsNyBAQCB0eXBlZGVmIGZsb2F0IENHRmxvYXQ7CiAjaWYgUExBVEZP
Uk0oV0lOKSAmJiBQTEFURk9STShDRykKICNkZWZpbmUgV1RGX1VTRV9TQUZBUklfVEhFTUUgMQog
I2VuZGlmCisKKyNpZiBQTEFURk9STShIQUlLVSkKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGU0MTI5MzkuLjg4M2IwYTQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCkBAIC0yMjUxLDcgKzIyNTEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4
dElucHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2ZQogfQog
ICAgIAogICAgIAotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShRVCkKKyNpZiAhUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShIQUlLVSkKIGJvb2wgRXZl
bnRIYW5kbGVyOjppbnZlcnRTZW5zZU9mVGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCopIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Db250
ZXh0TWVudS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCmluZGV4IDc1ODk5YmEu
LjJkNGJlODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRTWVu
dT4KKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorI2luY2x1ZGUgPFBvaW50Lmg+CiAjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzgsNiArODAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbV9wbGF0Zm9ybURlc2NyaXB0aW9u
OwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFMaXN0PENvbnRleHRNZW51SXRlbT4gbV9p
dGVtczsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgICAgICBQbGF0Zm9ybU1lbnVEZXNjcmlw
dGlvbiBtX3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgICAgIEJQb2ludCBtX3BvaW50OwogI2Vs
c2UKICAgICAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9u
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAppbmRleCAyOTEyNThkLi4xZWM1
M2I2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmgKQEAgLTQ2LDYgKzQ2LDggQEAgdHlw
ZWRlZiBzdHJ1Y3QgX0d0a01lbnVJdGVtIEd0a01lbnVJdGVtOwogI2luY2x1ZGUgPFFBY3Rpb24+
CiAjZWxpZiBQTEFURk9STShXWCkKIGNsYXNzIHd4TWVudUl0ZW07CisjZWxpZiBQTEFURk9STShI
QUlLVSkKK2NsYXNzIEJNZW51SXRlbTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0yMDIsNiArMjA0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGNoZWNr
ZWQ7CiAgICAgICAgIGJvb2wgZW5hYmxlZDsKICAgICB9OworI2VsaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgdHlwZWRlZiBCTWVudUl0ZW0qIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbjsKICNl
bHNlCiAgICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb247CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmggYi9XZWJDb3JlL3BsYXRm
b3JtL0N1cnNvci5oCmluZGV4IGVhNzUxOTEuLjJkMDQxZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vQ3Vyc29yLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaApAQCAtNDAs
NiArNDAsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrQ3Vyc29yIEdka0N1cnNvcjsKICNpbmNsdWRl
IDxRQ3Vyc29yPgogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAjaW5jbHVkZSAiUGxhdGZvcm1D
dXJzb3IuaCIKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorI2luY2x1ZGUgPGFwcC9DdXJzb3IuaD4K
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtODYsNiArODgsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAvLyBTZWUgUGxhdGZvcm1D
dXJzb3IuaAogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1DdXJzb3JIYW5kbGU7CisjZWxpZiBQ
TEFURk9STShIQUlLVSkKKyAgICB0eXBlZGVmIEJDdXJzb3IqIFBsYXRmb3JtQ3Vyc29yOworICAg
IHR5cGVkZWYgQkN1cnNvciogUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxzZQogICAgIHR5cGVk
ZWYgdm9pZCogUGxhdGZvcm1DdXJzb3I7CiAgICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUN1cnNv
ckhhbmRsZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAppbmRleCBhMmM1NjI4Li40NjI0MjRiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9EcmFn
RGF0YS5oCkBAIC01Niw2ICs1Niw5IEBAIHR5cGVkZWYgY2xhc3Mgd3hEYXRhT2JqZWN0KiBEcmFn
RGF0YVJlZjsKIHR5cGVkZWYgdm9pZCogRHJhZ0RhdGFSZWY7CiAjZWxpZiBQTEFURk9STShDSFJP
TUlVTSkKICNpbmNsdWRlICJEcmFnRGF0YVJlZi5oIgorI2VsaWYgUExBVEZPUk0oSEFJS1UpCitj
bGFzcyBCTWVzc2FnZTsKK3R5cGVkZWYgY2xhc3MgQk1lc3NhZ2UqIERyYWdEYXRhUmVmOwogI2Vu
ZGlmCiAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgKaW5kZXggNzQ0ZTQ1MC4uYjgwYTk3MSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0Ry
YWdJbWFnZS5oCkBAIC00Niw2ICs0Niw4IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyogSEJJ
VE1BUDsKIGNsYXNzIHd4RHJhZ0ltYWdlOwogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAjaW5j
bHVkZSAiRHJhZ0ltYWdlUmVmLmgiCisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJCaXRt
YXA7CiAjZW5kaWYKIAogLy9XZSBuZWVkIHRvICNkZWZpbmUgWU9mZnNldCBhcyBpdCBuZWVkcyB0
byBiZSBzaGFyZWQgd2l0aCBXZWJLaXQKQEAgLTcwLDYgKzcyLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIHR5cGVkZWYgd3hEcmFnSW1hZ2UqIERyYWdJbWFnZVJlZjsKICNlbGlmIFBMQVRG
T1JNKEdUSykKICAgICB0eXBlZGVmIHZvaWQqIERyYWdJbWFnZVJlZjsKKyNlbGlmIFBMQVRGT1JN
KEhBSUtVKQorICAgIHR5cGVkZWYgQkJpdG1hcCogRHJhZ0ltYWdlUmVmOwogI2VuZGlmCiAgICAg
CiAgICAgSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJbWFnZVJlZik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAppbmRleCA0YTZiYzllLi40YTA2NzMxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKQEAgLTU5LDYgKzU5LDEwIEBAIFFU
X0VORF9OQU1FU1BBQ0UKIGNsYXNzIHd4S2V5RXZlbnQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KEhBSUtVKQorY2xhc3MgQk1lc3NhZ2U7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50IHsKQEAgLTE0OCw2ICsxNTIsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQod3hLZXlF
dmVudCYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICAgICAgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KEJNZXNzYWdlKik7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikgfHwg
UExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIGJvb2wgaXNTeXN0ZW1LZXkoKSBjb25zdCB7IHJl
dHVybiBtX2lzU3lzdGVtS2V5OyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaCBiL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24uaAppbmRleCA2NTUzN2ViLi4zODBkZWQ0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oCkBAIC00MCw2ICs0MCw4IEBAIHR5cGVkZWYg
c3RydWN0IEhNRU5VX18qIEhNRU5VOwogdHlwZWRlZiBzdHJ1Y3QgX0d0a01lbnUgR3RrTWVudTsK
ICNlbGlmIFBMQVRGT1JNKFdYKQogY2xhc3Mgd3hNZW51OworI2VsaWYgUExBVEZPUk0oSEFJS1Up
CitjbGFzcyBCTWVudTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NSw2ICs1
Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB0eXBlZGVmIEd0a01lbnUqIFBsYXRmb3Jt
TWVudURlc2NyaXB0aW9uOwogI2VsaWYgUExBVEZPUk0oV1gpCiAgICAgdHlwZWRlZiB3eE1lbnUq
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uOworI2VsaWYgUExBVEZPUk0oSEFJS1UpCisgICAgdHlw
ZWRlZiBCTWVudSogUGxhdGZvcm1NZW51RGVzY3JpcHRpb247CiAjZWxzZQogICAgIHR5cGVkZWYg
dm9pZCogUGxhdGZvcm1NZW51RGVzY3JpcHRpb247CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmggYi9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtTW91c2VFdmVudC5oCmluZGV4IDI1NDNkNDAuLmY0NzZjNDUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybU1vdXNlRXZlbnQuaApAQCAtNTAsNiArNTAsMTAgQEAgdHlwZWRlZiBsb25nIExQQVJB
TTsKIGNsYXNzIHd4TW91c2VFdmVudDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitj
bGFzcyBCTWVzc2FnZTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiAgICAg
Ly8gVGhlc2UgYnV0dG9uIG51bWJlcnMgbWF0Y2ggdGhlIG9uZXMgdXNlZCBpbiB0aGUgRE9NIEFQ
SSwgMCB0aHJvdWdoIDIsIGV4Y2VwdCBmb3IgTm9CdXR0b24gd2hpY2ggaXNuJ3Qgc3BlY2lmaWVk
LgpAQCAtMTI4LDYgKzEzMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRm
b3JtTW91c2VFdmVudChjb25zdCB3eE1vdXNlRXZlbnQmLCBjb25zdCB3eFBvaW50JiBnbG9iYWxQ
b2ludCwgaW50IGNsaWNrQ291bnQpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IEJNZXNzYWdlKiwgQlBvaW50IHNjcmVlblBv
aW50KTsKKyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBJbnRQb2ludCBtX3Bvc2l0
aW9uOwogICAgICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1XaGVlbEV2ZW50LmgKaW5kZXggNmZlOTc0OC4uMmJkMzNjYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC00OSw2ICs0OSwxMCBAQCBjbGFzcyB3eE1vdXNlRXZl
bnQ7CiBjbGFzcyB3eFBvaW50OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNz
IEJNZXNzYWdlOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIC8vIFdoZWVs
IGV2ZW50cyBjb21lIGluIHR3byBmbGF2b3JzOgpAQCAtMTA2LDYgKzExMCwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChjb25zdCB3eE1vdXNlRXZl
bnQmLCBjb25zdCB3eFBvaW50Jik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorICAg
ICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoQk1lc3NhZ2UqKTsKKyNlbmRpZgorCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICBJbnRQb2ludCBtX3Bvc2l0aW9uOwogICAgICAgICBJbnRQb2ludCBtX2ds
b2JhbFBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgKaW5kZXggZmM4NWQ2MC4uNDg5Zjk2MiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL1BvcHVwTWVudS5oCkBAIC01OSw2ICs1OSw4IEBAIGNsYXNzIHd4TWVudTsKICNpbmNsdWRl
IDx3eC9ldmVudC5oPgogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAjaW5jbHVkZSAiUG9wdXBN
ZW51UHJpdmF0ZS5oIgorI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCTWVudTsKICNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzcsNiArMTc5LDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIE9uTWVudUl0ZW1TZWxlY3RlZCh3eENvbW1hbmRFdmVudCYpOwogI2VsaWYgUExBVEZP
Uk0oQ0hST01JVU0pCiAgICAgUG9wdXBNZW51UHJpdmF0ZSBwOworI2VsaWYgUExBVEZPUk0oSEFJ
S1UpCisgICAgQk1lbnUqIG1fbWVudTsKICNlbmRpZgogCiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5j
cHAKaW5kZXggMTRiYWRlOC4uMzFkZTQ2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCkBAIC04
NzQsNyArODc0LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVQYW5TY3JvbGxJY29uKCkKICAg
ICBob3N0V2luZG93KCktPnJlcGFpbnQoSW50UmVjdChtX3BhblNjcm9sbEljb25Qb2ludCwgSW50
U2l6ZShwYW5JY29uU2l6ZUxlbmd0aCwgcGFuSWNvblNpemVMZW5ndGgpKSwgdHJ1ZSwgdHJ1ZSk7
CiB9CiAKLSNpZiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShR
VCkKKyNpZiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShRVCkg
JiYgIVBMQVRGT1JNKEhBSUtVKQogCiB2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtSW5pdCgpCiB7
CkBAIC04ODYsNyArODg2LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQog
CiAjZW5kaWYKIAotI2lmICFQTEFURk9STShXWCkgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFFUKSAmJiAhUExBVEZPUk0oTUFDKQorI2lmICFQTEFURk9STShXWCkgJiYgIVBMQVRGT1JN
KEdUSykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSEFJ
S1UpCiAKIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1BZGRDaGlsZChXaWRnZXQqKQogewpAQCAt
OTA2LDcgKzkwNiw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxiYXJzU3Vw
cHJlc3NlZChib29sIHJlcGFpbnRPblVuc3VwcHJlc3MpCiAKICNlbmRpZgogCi0jaWYgIVBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKFdYKQorI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9S
TShXWCkgJiYgIVBMQVRGT1JNKEhBSUtVKQogCiB2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0
U2Nyb2xsYmFyTW9kZXMoKQogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmggYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAppbmRleCAzNTQ5YzY2Li5kYWNj
MDY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaApAQCAtNDcsNiArNDcsMTEgQEAgdHlwZWRlZiBzdHJ1
Y3QgX0d0a0FkanVzdG1lbnQgR3RrQWRqdXN0bWVudDsKIGNsYXNzIHd4U2Nyb2xsV2luRXZlbnQ7
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlZpZXc7CitjbGFzcyBCU2Ny
b2xsVmlldzsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhvc3RXaW5k
b3c7CkBAIC0zMTksNiArMzI0LDE1IEBAIHByaXZhdGU6CiAgICAgU2Nyb2xsVmlld1ByaXZhdGUq
IG1fZGF0YTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudFdpZGdldChCVmlldyopOworICAgIHZvaWQgc2V0QWxsb3dzU2Ny
b2xsaW5nKGJvb2wpOworCitwcml2YXRlOgorICAgIGNsYXNzIFNjcm9sbFZpZXdQcml2YXRlOwor
ICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CisjZW5kaWYKIH07IC8vIGNsYXNzIFNjcm9s
bFZpZXcKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKaW5kZXggYjZjMDA1NC4u
MjU4NmRhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL1dpZGdldC5oCkBAIC02NSw2ICs2NSwxMSBAQCBjbGFzcyB3eFdpbmRvdzsK
IHR5cGVkZWYgd3hXaW5kb3cqIFBsYXRmb3JtV2lkZ2V0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShIQUlLVSkKK2NsYXNzIEJWaWV3OwordHlwZWRlZiBCVmlldyogUGxhdGZvcm1XaWRnZXQ7Cisj
ZW5kaWYKKwogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgIlBsYXRmb3JtV2lkZ2V0
LmgiCiAjZW5kaWYKQEAgLTE3OSw2ICsxODQsMTQgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3Zl
RnJvbVN1cGVydmlldygpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBCVmll
dyogcGFyZW50V2lkZ2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudFdpZGdl
dChCVmlldyopOworCisgICAgQlZpZXcqIGhhaWt1V2lkZ2V0KCk7CisgICAgdm9pZCBzZXRIYWlr
dVdpZGdldChCVmlldyopOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KFBsYXRm
b3JtV2lkZ2V0KTsgLy8gTXVzdCBiZSBjYWxsZWQgYnkgYWxsIFdpZGdldCBjb25zdHJ1Y3RvcnMg
dG8gaW5pdGlhbGl6ZSBjcm9zcy1wbGF0Zm9ybSBkYXRhLgogCkBAIC0xOTUsNiArMjA4LDggQEAg
cHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBXaWRnZXRQcml2YXRlKiBtX2RhdGE7
CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICBXaWRnZXRQcml2YXRlKiBkYXRhOwogI2VuZGlm
CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggOGI3NzBh
MS4uOGRiZGZlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAt
NDQsNiArNDQsMTAgQEAgY2xhc3MgTlNJbWFnZTsKIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAq
SEJJVE1BUDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCQml0bWFwOwor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBzdHJ1Y3QgRnJhbWVEYXRhOwogfQpA
QCAtMTYwLDEwICsxNjQsMTYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJh
bWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjZW5k
aWYKICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Ip
OworCiAjaWYgUExBVEZPUk0oV1gpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCk7Ci0jZW5kaWYgICAgCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEhBSUtV
KQorICAgIHZpcnR1YWwgQkJpdG1hcCogZ2V0Qml0bWFwKCkgY29uc3Q7CisjZW5kaWYKKwogICAg
IHNpemVfdCBjdXJyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZTsgfQog
ICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4
KHNpemVfdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggMDMyZDBjYi4uMTc5NDY0
NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtNDcsNiArNDcsMTAgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX0dka0NvbG9yIEdka0NvbG9yOwogY2xhc3Mgd3hDb2xvdXI7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEhBSUtVKQorc3RydWN0IHJnYl9jb2xvcjsKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN0cmluZzsKQEAgLTEyMSw2ICsxMjUsMTEgQEAgcHVibGlj
OgogICAgIENvbG9yKENHQ29sb3JSZWYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkK
KyAgICBDb2xvcihjb25zdCByZ2JfY29sb3ImKTsKKyAgICBvcGVyYXRvciByZ2JfY29sb3IoKSBj
b25zdDsKKyNlbmRpZgorCiAgICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJp
bmcmIG5hbWUsIFJHQkEzMiYgcmdiKTsKIAogICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgYmxhY2sg
PSAweEZGMDAwMDAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAppbmRleCAx
NTdjMWU3Li5kOTUzYjNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaApA
QCAtNTEsNiArNTEsMTAgQEAgY2xhc3MgUVBvaW50RjsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCUG9pbnQ7CisjZW5kaWYKKwogI2lmIFBM
QVRGT1JNKFNLSUEpCiBzdHJ1Y3QgU2tQb2ludDsKICNlbmRpZgpAQCAtOTAsNiArOTQsMTEgQEAg
cHVibGljOgogICAgIG9wZXJhdG9yIFFQb2ludEYoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oSEFJS1UpCisgICAgRmxvYXRQb2ludChjb25zdCBCUG9pbnQmKTsKKyAgICBvcGVyYXRv
ciBCUG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICBvcGVy
YXRvciBTa1BvaW50KCkgY29uc3Q7CiAgICAgRmxvYXRQb2ludChjb25zdCBTa1BvaW50Jik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCAwNzIzZWI3Li5jNmE4NmJjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKQEAgLTUxLDYgKzUxLDEwIEBAIFFU
X0VORF9OQU1FU1BBQ0UKIGNsYXNzIHd4UmVjdDJERG91YmxlOwogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShIQUlLVSkKK2NsYXNzIEJSZWN0OworI2VuZGlmCisKICNpZiBQTEFURk9STShTS0lBKQog
c3RydWN0IFNrUmVjdDsKICNlbmRpZgpAQCAtMTM4LDYgKzE0MiwxMSBAQCBwdWJsaWM6CiAgICAg
b3BlcmF0b3Igd3hSZWN0MkREb3VibGUoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
SEFJS1UpCisgICAgRmxvYXRSZWN0KGNvbnN0IEJSZWN0Jik7CisgICAgb3BlcmF0b3IgQlJlY3Qo
KSBjb25zdDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICBGbG9hdFJlY3QoY29u
c3QgU2tSZWN0Jik7CiAgICAgb3BlcmF0b3IgU2tSZWN0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggNGRhZTNkMi4uMTkwOWY5
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtNTE2LDcgKzUxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHRE
cmF3aW5nTW9kZShpbnQgbW9kZSkKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKFFUKSAmJiAh
UExBVEZPUk0oQ0FJUk8pICYmICFQTEFURk9STShTS0lBKQorI2lmICFQTEFURk9STShRVCkgJiYg
IVBMQVRGT1JNKENBSVJPKSAmJiAhUExBVEZPUk0oU0tJQSkgJiYgIVBMQVRGT1JNKEhBSUtVKQog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tl
U3R5bGUmKQogewogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKaW5kZXggMDFlMmZlNi4uNjdiYzg4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCkBAIC02NSw2ICs2NSwxMCBAQCBjbGFzcyB3eFdpbmRvd0RDOwog
I2VuZGlmCiAjZWxpZiBQTEFURk9STShTS0lBKQogdHlwZWRlZiBjbGFzcyBQbGF0Zm9ybUNvbnRl
eHRTa2lhIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitj
bGFzcyBCVmlldzsKK3R5cGVkZWYgQlZpZXcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CitzdHJ1
Y3QgcGF0dGVybjsKICNlbHNlCiB0eXBlZGVmIHZvaWQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7
CiAjZW5kaWYKQEAgLTM1NCw2ICszNTgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBHZGtFdmVudEV4cG9zZSogZ2RrRXhwb3NlRXZlbnQoKSBjb25zdDsKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oSEFJS1UpCisgICAgICAgIHBhdHRlcm4JZ2V0SGFpa3VTdHJva2VTdHlsZSgpOwor
I2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHNhdmVQbGF0Zm9ybVN0YXRlKCk7
CiAgICAgICAgIHZvaWQgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
Y29uLmgKaW5kZXggNDQ0YzY3Yy4uODY1MDEzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JY29uLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgK
QEAgLTc4LDYgKzc4LDggQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogICAg
IEljb24oY29uc3QgUGxhdGZvcm1JY29uJik7CiAgICAgUGxhdGZvcm1JY29uIG1faWNvbjsKKyNl
bGlmIFBMQVRGT1JNKEhBSUtVKQorICAgIEljb24oKTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IGU5ZjA2NmUuLjdkZmI5MmEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ2LDYgKzQ2LDggQEAgc3Ry
dWN0IF9jYWlyb19zdXJmYWNlOwogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9f
c3VyZmFjZV90OwogI2VsaWYgUExBVEZPUk0oU0tJQSkKIGNsYXNzIE5hdGl2ZUltYWdlU2tpYTsK
KyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQkJpdG1hcDsKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC03OCw2ICs4MCwxMCBAQCB0eXBlZGVmIGNhaXJvX3N1cmZhY2VfdCog
TmF0aXZlSW1hZ2VQdHI7CiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVmIEltYWdlRGVjb2Rl
ciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiB0eXBlZGVmIE5hdGl2ZUltYWdlU2tpYSogTmF0aXZl
SW1hZ2VQdHI7CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEltYWdlRGVjb2RlcjsKK3R5
cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKK3R5cGVkZWYgQkJpdG1h
cCogTmF0aXZlSW1hZ2VQdHI7CiAjZW5kaWYKIAogY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25j
ZSA9IC0xOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCmluZGV4IDMxMGFmNTkuLjdl
Y2IxMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKQEAgLTUwLDYgKzUwLDgg
QEAgY2xhc3MgUVBvaW50OwogUVRfRU5EX05BTUVTUEFDRQogI2VsaWYgUExBVEZPUk0oR1RLKQog
dHlwZWRlZiBzdHJ1Y3QgX0dka1BvaW50IEdka1BvaW50OworI2VsaWYgUExBVEZPUk0oSEFJS1Up
CitjbGFzcyBCUG9pbnQ7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdYKQpAQCAtMTE1LDYgKzEx
Nyw5IEBAIHB1YmxpYzoKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBJbnRQb2ludChjb25zdCBH
ZGtQb2ludCYpOwogICAgIG9wZXJhdG9yIEdka1BvaW50KCkgY29uc3Q7CisjZWxpZiBQTEFURk9S
TShIQUlLVSkKKyAgICBJbnRQb2ludChjb25zdCBCUG9pbnQmKTsKKyAgICBvcGVyYXRvciBCUG9p
bnQoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV1gpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCmluZGV4IDZjMDJkMjEuLmU0OGM2ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCkBAIC00OSw2ICs0OSw4IEBAIGNsYXNzIFFSZWN0OwogUVRfRU5EX05BTUVT
UEFDRQogI2VsaWYgUExBVEZPUk0oR1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0dka1JlY3RhbmdsZSBH
ZGtSZWN0YW5nbGU7CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJSZWN0OwogI2VuZGlm
CiAKICNpZiBQTEFURk9STShXWCkKQEAgLTE0NCw2ICsxNDYsOSBAQCBwdWJsaWM6CiAjZWxpZiBQ
TEFURk9STShHVEspCiAgICAgSW50UmVjdChjb25zdCBHZGtSZWN0YW5nbGUmKTsKICAgICBvcGVy
YXRvciBHZGtSZWN0YW5nbGUoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgIElu
dFJlY3QoY29uc3QgQlJlY3QmKTsKKyAgICBvcGVyYXRvciBCUmVjdCgpIGNvbnN0OwogI2VuZGlm
CiAKICNpZiBQTEFURk9STShDRykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50U2l6ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKaW5kZXgg
ZGM3YTg1ZC4uYmI3OTEyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRTaXplLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKQEAgLTQ3
LDYgKzQ3LDggQEAgdHlwZWRlZiBzdHJ1Y3QgdGFnU0laRSBTSVpFOwogUVRfQkVHSU5fTkFNRVNQ
QUNFCiBjbGFzcyBRU2l6ZTsKIFFUX0VORF9OQU1FU1BBQ0UKKyNlbGlmIFBMQVRGT1JNKEhBSUtV
KQorY2xhc3MgQlNpemU7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEzLDYg
KzExNSwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgUVNpemUoKSBjb25zdDsKICNlbmRpZgog
CisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgSW50U2l6ZShjb25zdCBCU2l6ZSYpOworICAgIG9w
ZXJhdG9yIEJTaXplKCkgY29uc3Q7CisjZW5kaWYKKwogCiBwcml2YXRlOgogICAgIGludCBtX3dp
ZHRoLCBtX2hlaWdodDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKaW5kZXggOWUyMTYzYi4uMGY5
MDkxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKQEAgLTQ4LDYgKzQ4LDkgQEAgdHlwZWRl
ZiBXZWJDb3JlOjpDYWlyb1BhdGggUGxhdGZvcm1QYXRoOwogI2VsaWYgUExBVEZPUk0oU0tJQSkK
IGNsYXNzIFNrUGF0aDsKIHR5cGVkZWYgU2tQYXRoIFBsYXRmb3JtUGF0aDsKKyNlbGlmIFBMQVRG
T1JNKEhBSUtVKQorY2xhc3MgQlJlZ2lvbjsKK3R5cGVkZWYgQlJlZ2lvbiBQbGF0Zm9ybVBhdGg7
CiAjZWxzZQogdHlwZWRlZiB2b2lkIFBsYXRmb3JtUGF0aDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaAppbmRleCBkNGFhM2I5Li44OWY2MTIzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaApAQCAtNTIsNiArNTIsOSBAQCB0eXBlZGVmIHd4R3JhcGhpY3NCcnVz
aCogUGxhdGZvcm1QYXR0ZXJuUHRyOwogY2xhc3Mgd3hCcnVzaDsKIHR5cGVkZWYgd3hCcnVzaCog
UGxhdGZvcm1QYXR0ZXJuUHRyOwogI2VuZGlmIC8vIFVTRShXWEdDKQorI2VsaWYgUExBVEZPUk0o
SEFJS1UpCisjaW5jbHVkZSA8aW50ZXJmYWNlL0dyYXBoaWNzRGVmcy5oPgordHlwZWRlZiBwYXR0
ZXJuKiBQbGF0Zm9ybVBhdHRlcm5QdHI7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IGFhYjY0Mjku
LjQ4NWRkMzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgK
QEAgLTQ1LDYgKzQ1LDEwIEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUFUU1VTdHlsZSogQVRTVVN0
eWxlOwogI2luY2x1ZGUgPFFGb250PgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyNp
bmNsdWRlIDxGb250Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
b250RGVzY3JpcHRpb247CkBAIC0xNDUsNiArMTQ5LDEwIEBAIHB1YmxpYzoKICAgICB3eEZvbnQq
IGdldFd4Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQogI2Vu
ZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBCRm9udCogZ2V0QkZvbnQoKSBjb25zdCB7
IHJldHVybiBtX3BsYXRmb3JtRGF0YS5mb250KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAgICAgdm9pZCBwbGF0Zm9ybUdseXBoSW5pdCgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggOWMy
YTlkNy4uMWRjMmVhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oCkBAIC0xNjAsNyArMTYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0o
V1gpCisjaWYgUExBVEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFdYKSB8fCBQTEFURk9STShIQUlL
VSkKICAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9ieXRlczsKICAgICAgICAgSW50U2l6ZSBt
X3NpemU7ICAgICAgIC8vIFRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBUaGlzIHNob3VsZCBiZSB0
aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMgSW1hZ2VEZWNvZGVy
OjptX3NpemUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCmluZGV4
IGYwZTFlOTQuLmY2MTRhNTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBMUkVTVUxUIF9f
c3RkY2FsbCBSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCwgdW5zaWduZWQgbWVzc2FnZSwgV1BB
UkFNLCBMUEFSQU0pOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkgfHwgVVNFKENVUkwpIHx8
IFVTRShTT1VQKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShIQUlLVSkgfHwgVVNFKENV
UkwpIHx8IFVTRShTT1VQKQogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGdldEludGVybmFs
KCkgeyByZXR1cm4gZC5nZXQoKTsgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRm
b3JtU3RyaW5nLmgKaW5kZXggNjU5ZGRlMi4uMGEzZDc5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1BsYXRmb3JtU3RyaW5nLmgKQEAgLTU1LDYgKzU1LDEwIEBAIFFUX0VORF9OQU1FU1BBQ0UKIGNs
YXNzIHd4U3RyaW5nOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJTdHJp
bmc7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU3RyaW5nOwpAQCAt
MjI4LDYgKzIzMiwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3Igd3hTdHJpbmcoKSBjb25zdDsK
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgU3RyaW5nKGNvbnN0IEJTdHJpbmcm
KTsKKyAgICBvcGVyYXRvciBCU3RyaW5nKCkgY29uc3Q7CisjZW5kaWYKKwogI2lmbmRlZiBOREVC
VUcKICAgICBWZWN0b3I8Y2hhcj4gYXNjaWkoKSBjb25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1VuaWNvZGVSYW5nZS5oCmluZGV4IDdlY2YwM2YuLjIyNzhhMGUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVW5pY29kZVJhbmdlLmgKQEAgLTM1LDYgKzM1LDEwIEBACiAjaWZuZGVmIFVuaWNvZGVS
YW5nZV9ICiAjZGVmaW5lIFVuaWNvZGVSYW5nZV9ICiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyNp
bmNsdWRlICJzdGRpbnQuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29k
ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="16422"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31859</attachid>
            <date>2009-06-25 08:43:25 -0700</date>
            <delta_ts>2009-06-26 12:33:20 -0700</delta_ts>
            <desc>Haiku-specific folders (WebCore/platform/haiku etc...)</desc>
            <filename>0002-Haiku-specific-folders-WebCore-platform-haiku-etc.patch</filename>
            <type>text/plain</type>
            <size>374152</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA3ZjhmMjM0NWY5ZjFlYjdkMzNiNWNkMTIwZWE4YWJlNDViNGJjZTdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFdlZCwgMjQgSnVuIDIwMDkgMjM6MzY6MDYgKzAyMDAKU3ViamVjdDogW1BBVENIIDIv
Ml0gSGFpa3Utc3BlY2lmaWMgZm9sZGVycyAoV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdSBldGMuLi4p
CgotLS0KIEphdmFTY3JpcHRDb3JlL3d0Zi9oYWlrdS9NYWluVGhyZWFkSGFpa3UuY3BwICAgICAg
IHwgICA0NSArKwogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVySGFpa3UuY3Bw
ICAgICAgfCAgIDQ2ICsrCiBXZWJDb3JlL2VkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3UuY3BwICAg
ICAgICAgICAgICB8ICAgNDUgKysKIFdlYkNvcmUvcGFnZS9oYWlrdS9EcmFnQ29udHJvbGxlckhh
aWt1LmNwcCAgICAgICAgIHwgICA4MCArKwogV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxl
ckhhaWt1LmNwcCAgICAgICAgICAgfCAgMTUwICsrKysKIFdlYkNvcmUvcGFnZS9oYWlrdS9GcmFt
ZUhhaWt1LmNwcCAgICAgICAgICAgICAgICAgIHwgICA0MyArKwogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9Db2xvckhhaWt1LmNwcCAgICAgfCAgIDU0ICsrCiAuLi4vcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcCAgICB8ICAgNDggKysKIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwIHwgICA1MCArKwogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHAgfCAgIDk4ICsr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcCAgfCAg
IDgyICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwICAg
ICAgfCAgMTAwICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZv
cm1EYXRhLmggfCAgIDY5ICsrCiAuLi4vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhh
aWt1LmNwcCAgICAgICB8ICAxODAgKysrKysKIC4uLi9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VU
cmVlTm9kZUhhaWt1LmNwcCAgICAgIHwgICA2NCArKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCAgfCAgIDUzICsrCiAuLi4vZ3JhcGhpY3MvaGFpa3Uv
R3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwICAgICAgICB8ICA1NjAgKysrKysrKysrKysrKysKIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCAgICAgIHwgICA2MyAr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaCAgfCAg
IDQ2ICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAg
ICB8ICAgODEgKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5j
cHAgICAgIHwgIDE3MiArKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291
cmNlSGFpa3UuY3BwICAgfCAgMjE5ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbnRQb2ludEhhaWt1LmNwcCAgfCAgIDQ4ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAgICB8ICAgNDkgKysKIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcCAgIHwgICA0OCArKwogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwICAgICAgfCAgMTU5ICsrKysKIC4uLi9n
cmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcCAgICAgICAgIHwgIDEwNCArKysK
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2hyb21lQ2xpZW50SGFpa3UuY3BwICAgICAgIHwgIDM1
NCArKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2hyb21lQ2xpZW50SGFpa3UuaCAg
ICAgICAgIHwgIDE0MSArKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1
LmNwcCAgICAgICAgICB8ICAxOTQgKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJv
YXJkSGFpa3UuaCAgICAgICAgICAgIHwgICA3MCArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
b250ZXh0TWVudUNsaWVudEhhaWt1LmNwcCAgfCAgIDc4ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuaCAgICB8ICAgNTIgKysKIFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAgICAgICAgIHwgIDE0NSArKysrCiBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SXRlbUhhaWt1LmNwcCAgICB8ICAxNjQgKysrKysK
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwICAgICAgICAgIHwgICA2
MCArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAgICAgICAgICAgICAg
fCAgMjM3ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnQ2xpZW50SGFpa3UuY3Bw
ICAgICAgICAgfCAgIDc0ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdDbGllbnRIYWlr
dS5oICAgICAgICAgICB8ICAgNDYgKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0RhdGFI
YWlrdS5jcHAgICAgICAgICAgIHwgIDEwOCArKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJh
Z0ltYWdlSGFpa3UuY3BwICAgICAgICAgIHwgICA3MyArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9FZGl0b3JDbGllbnRIYWlrdS5jcHAgICAgICAgfCAgNDc4ICsrKysrKysrKysrKwogV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9FZGl0b3JDbGllbnRIYWlrdS5oICAgICAgICAgfCAgMTI0ICsrKysK
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRXZlbnRMb29wSGFpa3UuY3BwICAgICAgICAgIHwgICA0
MSArCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVDaG9vc2VySGFpa3UuY3BwICAgICAgICB8
ICAgNDYgKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZVN5c3RlbUhhaWt1LmNwcCAgICAg
ICAgIHwgICA4MSArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GcmFtZUxvYWRlckNsaWVudEhh
aWt1LmNwcCAgfCAgNzY2ICsrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaCAgICB8ICAyMzQgKysrKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcCAgICB8ICAxMTggKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0luc3BlY3RvckNsaWVudEhhaWt1LmggICAgICB8ICAgNzEgKysK
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvS2V5Ym9hcmRDb2Rlcy5oICAgICAgICAgICAgIHwgIDU0
NCArKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9NSU1FVHlwZVJlZ2lzdHJ5
SGFpa3UuY3BwICAgfCAgIDc1ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRI
YWlrdS5jcHAgICAgICAgICB8ICAxMjUgKysrKwogLi4uL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3Jt
S2V5Ym9hcmRFdmVudEhhaWt1LmNwcCAgfCAgMjAxICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1LmNwcCB8ICAgODggKysrCiBXZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmggICAgICAgICB8ICAgNjMgKysKIFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHAgIHwgIDEyNCArKysrCiBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcCB8ICAgNDQg
KysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuY3BwICAgICAgICAgIHwg
ICA2OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmNwcCAgICAg
ICAgfCAgMzUyICsrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JlZW5IYWlrdS5j
cHAgICAgICAgICAgICAgfCAgMTAxICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxW
aWV3Q2FudmFzSGFpa3UuY3BwICAgfCAgMjAxICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oICAgICB8ICAgNzcgKysKIFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvU2Nyb2xsVmlld0hhaWt1LmNwcCAgICAgICAgIHwgIDMyNSArKysrKysrKysKIFdlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwICAgIHwgICA1MSArKwog
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmNwcCAgICAgICAgfCAgMTMx
ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5oICAgICAgICAg
IHwgICA2MyArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1LmNwcCAgICAgICAg
ICAgICAgfCAgIDQyICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1N5c3RlbVRpbWVIYWlrdS5j
cHAgICAgICAgICB8ICAgNDcgKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVGVtcG9yYXJ5TGlu
a1N0dWJzLmNwcCAgICAgIHwgIDIwMyArKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJh
bnNsYXRvckRlY29kZXIuY3BwICAgICAgIHwgICA2OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9UcmFuc2xhdG9yRGVjb2Rlci5oICAgICAgICAgfCAgIDU1ICsrCiBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1dLU2Nyb2xsVmlldy5jcHAgICAgICAgICAgICB8ICA0NzYgKysrKysrKysrKysrCiBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oICAgICAgICAgICAgICB8ICAgODQg
KysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcCAgICAgICAgICAgICB8
ICAxOTQgKysrKysKIC4uLi9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5j
cHAgICAgIHwgIDEyOSArKysrCiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFp
a3UuY3BwICAgICAgICB8ICAgNTEgKysKIC4uLi9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvckludGVy
bmFsSUNVSGFpa3UuY3BwICAgIHwgICAzMyArCiBXZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9D
aGVja2VyYm9hcmRWaWV3LmNwcCAgICB8ICAxMTcgKysrCiBXZWJLaXQvaGFpa3UvSGFpa3VMYXVu
Y2hlci9DaGVja2VyYm9hcmRWaWV3LmggICAgICB8ICAgMzcgKwogV2ViS2l0L2hhaWt1L0hhaWt1
TGF1bmNoZXIvTGF1bmNoZXJBcHAuY3BwICAgICAgICAgfCAgIDgxICsrCiBXZWJLaXQvaGFpa3Uv
SGFpa3VMYXVuY2hlci9MYXVuY2hlckFwcC5oICAgICAgICAgICB8ICAgNTMgKysKIFdlYktpdC9o
YWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyVmlldy5jcHAgICAgICAgIHwgIDE3OSArKysrKwog
V2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJWaWV3LmggICAgICAgICAgfCAgIDY4
ICsrCiBXZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlcldpbmRvdy5jcHAgICAgICB8
ICAgOTEgKysrCiBXZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlcldpbmRvdy5oICAg
ICAgICB8ICAgNTIgKysKIDg2IGZpbGVzIGNoYW5nZWQsIDExMjA0IGluc2VydGlvbnMoKyksIDAg
ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvd3RmL2hhaWt1
L01haW5UaHJlYWRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXJIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L2VkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlr
dS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0Zsb2F0UmVjdEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBs
YXRmb3JtRGF0YS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGll
bnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVm
ZmVySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbWFnZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFp
a3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbnRTaXplSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2hyb21lQ2xpZW50SGFpa3UuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DaHJvbWVDbGllbnRIYWlr
dS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRI
YWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBi
b2FyZEhhaWt1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nv
bnRleHRNZW51Q2xpZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9Db250ZXh0TWVudUNsaWVudEhhaWt1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUl0ZW1IYWlrdS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1LmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnQ2xpZW50
SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFn
Q2xpZW50SGFpa3UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
RHJhZ0RhdGFIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0RyYWdJbWFnZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvRWRpdG9yQ2xpZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9FZGl0b3JDbGllbnRIYWlrdS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVDaG9vc2VySGFpa3UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlU3lzdGVtSGFpa3UuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GcmFtZUxvYWRlckNsaWVu
dEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRnJh
bWVMb2FkZXJDbGllbnRIYWlrdS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0luc3BlY3RvckNsaWVudEhhaWt1LmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0tleWJvYXJkQ29kZXMuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGFzdGVib2FyZEhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1L
ZXlib2FyZEV2ZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3UuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZl
bnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bv
cHVwTWVudUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvUmVuZGVyVGhlbWVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhh
aWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVk
VGltZXJIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1NoYXJlZFRpbWVySGFpa3UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvU291bmRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1N5c3RlbVRpbWVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3Uv
SW1hZ2VEZWNvZGVySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2hhaWt1L1N0cmluZ0hhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVSGFpa3UuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvQ2hlY2tlcmJv
YXJkVmlldy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hl
ci9DaGVja2VyYm9hcmRWaWV3LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvaGFpa3UvSGFp
a3VMYXVuY2hlci9MYXVuY2hlckFwcC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvaGFp
a3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlckFwcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0
L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJWaWV3LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyVmlldy5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJXaW5kb3cuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJXaW5kb3cu
aAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9oYWlrdS9NYWluVGhyZWFkSGFpa3Uu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL2hhaWt1L01haW5UaHJlYWRIYWlrdS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmZjQ5YgotLS0gL2Rldi9udWxsCisrKyBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9oYWlrdS9NYWluVGhyZWFkSGFpa3UuY3BwCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZpZXIKKyAqIENvcHly
aWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTWFpblRocmVhZC5oIgorCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIGluaXRpYWxpemVN
YWluVGhyZWFkUGxhdGZvcm0oKQoreworfQorCit2b2lkIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlv
bnNPbk1haW5UaHJlYWQoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVySGFpa3UuY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI1NzNiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJIYWlrdS5jcHAKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlBsdWdpblZp
ZXcuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlICJydW50aW1lLmgiCisK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3Rh
bmNlPiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRn
ZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdpZGdldC0+aXNQbHVnaW5WaWV3KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQp
LT5iaW5kaW5nSW5zdGFuY2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3UuY3BwIGIvV2ViQ29yZS9l
ZGl0aW5nL2hhaWt1L0VkaXRvckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xN2ZkZTFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2hhaWt1
L0VkaXRvckhhaWt1LmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWRp
dG9yLmgiCisKKyNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKKyNpbmNsdWRlICJD
bGlwYm9hcmQuaCIKKworI2luY2x1ZGUgIkNsaXBib2FyZEhhaWt1LmgiCisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzUmVmUHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xp
cGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpCit7CisgICAgcmV0dXJuIG5ldyBD
bGlwYm9hcmRIYWlrdShwb2xpY3ksIGZhbHNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5j
cHAgYi9XZWJDb3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzNmUzMQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGFnZS9oYWlrdS9EcmFnQ29udHJvbGxlckhhaWt1LmNwcApAQCAtMCwwICsxLDgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdDb250
cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgorLy8jaW5jbHVkZSAiRnJhbWUuaCIK
Ky8vI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorLy8jaW5jbHVkZSAiUGFnZS5oIgorCisjaW5jbHVk
ZSA8SW50ZXJmYWNlRGVmcy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisKKy8vIEZJWE1F
OiBUaGVzZSB2YWx1ZXMgYXJlIHN0cmFpZ2h0IG91dCBvZiBEcmFnQ29udHJvbGxlck1hYywgc28g
cHJvYmFibHkgaGF2ZSAKKy8vIGxpdHRsZSBjb3JyZWxhdGlvbiB3aXRoIEhhaWt1IHN0YW5kYXJk
cy4uLgorY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0ID0gMjsK
K2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAxNTAwICog
MTUwMDsKK2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0gNzsK
K2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b21JbnNldCA9IDM7CisKK2Nv
bnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOworCisKK2Jv
b2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oKQoreworICAgIGlmIChtb2RpZmllcnMo
KSAmIEJfQ09NTUFORF9LRVkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorICAgIAorRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlv
bihEcmFnRGF0YSogZHJhZ0RhdGEpCit7CisgICAgLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgaW5j
b21wbGV0ZQorICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnNVUkwoKSkKKyAgICAgICAgcmV0dXJu
IERyYWdPcGVyYXRpb25Db3B5OworCisgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOworfSAK
KworY29uc3QgSW50U2l6ZSYgRHJhZ0NvbnRyb2xsZXI6Om1heERyYWdJbWFnZVNpemUoKQorewor
ICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIG1heERyYWdJbWFnZVNpemUoNDAwLCA0MDApOworCisg
ICAgcmV0dXJuIG1heERyYWdJbWFnZVNpemU7Cit9CisKK3ZvaWQgRHJhZ0NvbnRyb2xsZXI6OmNs
ZWFudXBBZnRlclN5c3RlbURyYWcoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAgYi9X
ZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjc2NjcwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bh
Z2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorCisj
aW5jbHVkZSAiQ2xpcGJvYXJkSGFpa3UuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5j
bHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiS2V5Ym9h
cmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKKyNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorCisjaW5jbHVkZSA8aW50ZXJmYWNlL1ZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NvbnN0IGRvdWJsZSBFdmVudEhhbmRsZXI6OlRleHREcmFnRGVsYXkgPSAwLjA7CisKK3N0
YXRpYyBib29sIGlzS2V5Ym9hcmRPcHRpb25UYWIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7Cisg
ICAgcmV0dXJuIGV2ZW50CisgICAgICAgICYmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlkb3duRXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmtleXByZXNzRXZlbnQpCisgICAgICAgICYmIGV2ZW50LT5hbHRLZXkoKQorICAgICAgICAm
JiBldmVudC0+a2V5SWRlbnRpZmllcigpID09ICJVKzAwMDAwOSI7Cit9CisKK2Jvb2wgRXZlbnRI
YW5kbGVyOjppbnZlcnRTZW5zZU9mVGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOworfQorCitib29s
IEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNv
bnN0Cit7CisgICAgYm9vbCBoYW5kbGluZ09wdGlvblRhYiA9IGlzS2V5Ym9hcmRPcHRpb25UYWIo
ZXZlbnQpOworCisgICAgcmV0dXJuIGhhbmRsaW5nT3B0aW9uVGFiOworfQorCit2b2lkIEV2ZW50
SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXcoKQoreworICAgIEJWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+dmlldygpLT5oYWlrdVdpZGdldCgpOworICAgIGlmICh2aWV3KQorICAgICAgICB2aWV3LT5N
YWtlRm9jdXMoKTsKKworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYg
KHBhZ2UpCisgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUo
bV9mcmFtZSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZl
bnRUb1dpZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKK3sK
KyAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCisgICAg
UmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXRO
b2RlKCktPnJlbmRlcmVyKCkgOiAwOworICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lk
Z2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBwYXNzTW91c2VEb3du
RXZlbnRUb1dpZGdldChzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQo
KSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dp
ZGdldChSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCkKK3sKKyAgICByZXR1cm4gcGFzc01vdXNl
RG93bkV2ZW50VG9XaWRnZXQocmVuZGVyV2lkZ2V0LT53aWRnZXQoKSk7Cit9CisKK2Jvb2wgRXZl
bnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFdmVu
dEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBj
b25zdAoreworICAgIC8vbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQsIEZyYW1lKiBzdWJmcmFtZSwgSGl0VGVzdFJlc3Vs
dCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2ZW50
JiBldmVudCwgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisgICAgCitQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVy
OjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0IAoreworICAgIHJldHVybiBuZXcgQ2xp
cGJvYXJkSGFpa3UoQ2xpcGJvYXJkV3JpdGFibGUsIHRydWUpOworfQorCitib29sIEV2ZW50SGFu
ZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCit7CisgICAgcmV0dXJuIHBhc3NTdWJmcmFt
ZUV2ZW50VG9TdWJmcmFtZShtZXYsIHN1YmZyYW1lKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6
OnBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqIGhvdmVyZWROb2RlKQorewor
ICAgIHJldHVybiBwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2LCBzdWJmcmFtZSwgaG92
ZXJlZE5vZGUpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50
VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJm
cmFtZSkKK3sKKyAgICByZXR1cm4gcGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3Vi
ZnJhbWUpOworfQorCit1bnNpZ25lZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1vZGlmaWVycygp
Cit7CisgICAgcmV0dXJuIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6QWx0S2V5OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9oYWlrdS9GcmFt
ZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjk0ODE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wYWdlL2hhaWt1L0ZyYW1lSGFpa3UuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0RyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2Vs
ZWN0aW9uKCkgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Db2xvckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
YjRiYTNkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9Db2xvckhhaWt1LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29s
b3IuaCIKKworI2luY2x1ZGUgPEludGVyZmFjZURlZnMuaD4KKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0NvbG9yOjpDb2xvcihjb25zdCByZ2JfY29sb3ImIGMpCisgICAgOiBtX2NvbG9yKG1h
a2VSR0JBKGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEpKQoreworICAgIG1fdmFsaWQg
PSB0cnVlOworfQorCitDb2xvcjo6b3BlcmF0b3IgcmdiX2NvbG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbWFrZV9jb2xvcihyZWQoKSwgZ3JlZW4oKSwgYmx1ZSgpLCBhbHBoYSgpKTsKK30KKwor
CitDb2xvciBmb2N1c1JpbmdDb2xvcigpCit7CisgICAgcmV0dXJuIENvbG9yKGtleWJvYXJkX25h
dmlnYXRpb25fY29sb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzlkOWYKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlrdS5jcHAK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKworI2lu
Y2x1ZGUgPFBvaW50Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFBvaW50OjpG
bG9hdFBvaW50KGNvbnN0IEJQb2ludCYgcCkKKyAgICA6IG1feChwLngpCisgICAgLCBtX3kocC55
KQoreworfQorCitGbG9hdFBvaW50OjpvcGVyYXRvciBCUG9pbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBCUG9pbnQobV94LCBtX3kpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmOGI2NgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3Bw
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2lu
Y2x1ZGUgPFJlY3QuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zsb2F0UmVjdDo6Rmxv
YXRSZWN0KGNvbnN0IEJSZWN0JiByZWN0KQorICAgIDogbV9sb2NhdGlvbihyZWN0LkxlZnRUb3Ao
KSkKKyAgICAgIC8vIEFkZGluZyAxIGNvcGllZCBmcm9tIFN5bGxhYmxlIHBvcnQKKyAgICAsIG1f
c2l6ZShyZWN0LldpZHRoKCkgKyAxLCByZWN0LkhlaWdodCgpICsgMSkKK3sKK30KKworRmxvYXRS
ZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN1YnRyYWN0IDEg
ZnJvbSBoZWlnaHQgYW5kIHdpZHRoPyBUaGlzIHdhcyBub3QgZG9uZSBpbiBTeWxsYWJsZSBwb3J0
CisgICAgcmV0dXJuIEJSZWN0KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCksaGVpZ2h0
KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjc1OTk0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcApAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFp
bC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
Rm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPFN0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgLy8gbm8tb3AK
K30KKworY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQoreworICAgIHByaW50ZigiRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnNc
biIpOyAgICAKKyAgICBGb250UGxhdGZvcm1EYXRhIGRhdGEoZm9udC5mb250RGVzY3JpcHRpb24o
KSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7CisgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRh
KCZkYXRhKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFz
dFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikKK3sKKworICAgIGNvbnN0IEJGb250KiBwY0RlZmF1bHRGb250ID0gYmVfcGxhaW5fZm9udDsK
KyAgICBpZiAoZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSA9PSBGb250RGVzY3JpcHRp
b246Ok1vbm9zcGFjZUZhbWlseSkKKyAgICAgICAgcGNEZWZhdWx0Rm9udCA9IGJlX2ZpeGVkX2Zv
bnQ7CisgICAgZWxzZSBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID09IEZvbnRXZWlnaHRC
b2xkKQorICAgICAgICBwY0RlZmF1bHRGb250ID0gYmVfYm9sZF9mb250OworICAgIGZvbnRfZmFt
aWx5IGZhbWlseTsKKyAgICBwY0RlZmF1bHRGb250LT5HZXRGYW1pbHlBbmRTdHlsZSgmZmFtaWx5
LCBOVUxMKTsKKyAgICBwcmludGYoIkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9u
dCAtPiAlc1xuIiwgZmFtaWx5KTsKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHNfRGVmYXVsdFN0
cihmYW1pbHkpOworCisgICAgLy9yZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2Ny
aXB0aW9uLCAoQkZvbnQqKXBjRGVmYXVsdEZvbnQpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgc19EZWZhdWx0U3RyKTsKK30KKworRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkK
K3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiBwY0RhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShm
b250RGVzY3JpcHRpb24sIGZhbWlseSk7CisgICAgaWYgKHBjRGF0YS0+Zm9udCgpID09IE5VTEwp
CisgICAgeworICAgICAgICBwcmludGYoIkNvdWxkIG5vdCBmaW5kIGZvbnQgJXMhXG4iLCBCU3Ry
aW5nKGZhbWlseS5zdHJpbmcoKSApLlN0cmluZygpKTsKKyAgICAgICAgZGVsZXRlIHBjRGF0YTsK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBwY0RhdGE7Cit9CisKK3Zv
aWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjA1M2Y5MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPiAK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorCisjaW5jbHVkZSA8aW50ZXJmYWNlL0ZvbnQuaD4KKyNpbmNsdWRlIDxzdXBwb3J0L1VU
RjguaD4gLy9yZW1vdmUuCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorCisKKy8vIEZpeCB0ZW1wIHJv
dXRpbmUgdG8gY2hlY2sgdGhlIGNvbnZlcnNpb24gd29ya3MsIHBsZWFzZSBtb3ZlIGl0IEFTQVAJ
CitpbnQgY2hhcl91bmljb2RlX3RvX3V0ZjgodW5zaWduZWQgc2hvcnQgZ2x5cGgsIGNoYXIqIG91
dCkgeworCisJaW50IGk9MDsKKwkJCisJaWYgKGdseXBoIDwgMHgwMDgwKQl7CisJCW91dFtpKytd
ID0gKGNoYXIpZ2x5cGg7CisJfSBlbHNlCisJaWYgKGdseXBoIDwgMHgwODAwKSB7IC8vdHdvIGJ5
dGVzCQorICAgIAkKKyAgICAJb3V0W2krK10gPSAweGMwIHwgKCggZ2x5cGggKSA+PiA2ICk7Cisg
ICAgCW91dFtpKytdID0gMHg4MCB8ICgoIGdseXBoICkgJiAweDNGICk7CisJfSBlbHNlCisJaWYg
KGdseXBoID4gMHgwODAwKSB7IC8vMyBieXRlcwkKKwkJb3V0W2krK10gPSAweGUwIHwgKCggZ2x5
cGggKSA+PiAxMiApOworICAgIAlvdXRbaSsrXSA9IDB4ODAgfCAoICgoIGdseXBoICkgPj4gNiAp
ICYgMHgzRiApOworICAgIAlvdXRbaSsrXSA9IDB4ODAgfCAoKCBnbHlwaCApICYgMHgzRik7IAor
ICAgIH0KKyAgICAKKwlvdXRbaV09J1wwJzsKKwlyZXR1cm4gaTsKK30KKwkJCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworYm9vbCBGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAoreworCW5vdEltcGxlbWVudGVkKCk7
CisJcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQzYmY2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAKQEAgLTAsMCArMSwxMDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KKyAqIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisj
aW5jbHVkZSA8aW50ZXJmYWNlL0ZvbnQuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5jbHVkZSA8
U3RyaW5nLmg+CisKKworaW50IGNoYXJfdW5pY29kZV90b191dGY4KHVuc2lnbmVkIHNob3J0IGds
eXBoLCBjaGFyKiBvdXQpOyAvLyBpbXBsZW1lbnRlZCBpbiBGb250RGF0YUhhaWt1LmNwcAorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRz
Rm9yQ29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBGb250Ojpk
cmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKK3sKKyAgICBDb2xvciBjb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+ZmlsbENv
bG9yKCk7CisgICAgQlZpZXcqIHZpZXcgPSAoQlZpZXcqKWdyYXBoaWNzQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CisgICAgQkZvbnQqIG1fZm9udD0gKEJGb250Kilmb250LT5wbGF0Zm9ybURh
dGEoKS5mb250KCk7CisKKyAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICB2aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOwkJ
CisgICAgdmlldy0+U2V0Rm9udChtX2ZvbnQpOworCisgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzID0gY29uc3RfY2FzdDxHbHlwaEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pKTsKKyAgICBmbG9hdCBvZmZzZXQgPSBwb2ludC54KCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1HbHlwaHM7IGkrKykgeworICAgICAgIAljaGFyIG91dFs0XTsKKyAgICAJY2hhcl91
bmljb2RlX3RvX3V0ZjgoZ2x5cGhzW2ldLCBvdXQpOworCisgICAgICAgIHZpZXctPkRyYXdTdHJp
bmcob3V0LCBzaXplb2Yob3V0KSwgQlBvaW50KG9mZnNldCxwb2ludC55KCkpKTsKKyAgICAgICAg
b2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsgaSk7CisgICAgfQorfQorCit2
b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworCitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMy4wOworfQorCitGbG9h
dFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBj
b25zdCBJbnRQb2ludCYsIGludCwgaW50LCBpbnQpIGNvbnN0Cit7IAorICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOyAKK30KKworaW50IEZvbnQ6Om9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGludCwgYm9vbCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRm9udFBsYXRmb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250UGxhdGZvcm1EYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZl
YTExNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udFBsYXRmb3JtRGF0YS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3Qg
YmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2lu
LmNwcCBhbmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBn
bWFpbC5jb20+CisgKiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRm
b3JtRGF0YV9ICisjZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfSAorCisjaW5jbHVkZSAiR2x5cGhC
dWZmZXIuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKworLy8gQWRkaW5nIGludGVy
ZmFjZS8gdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggV2ViS2l0IEZvbnQuaAorI2luY2x1ZGUgPGlu
dGVyZmFjZS9Gb250Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRm9u
dFBsYXRmb3JtRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBGb250UGxhdGZvcm1EYXRhKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0
YSgpOworICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mLCBCRm9udCogZm9udCk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURh
dGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CisgICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZik7CisgICAgICAgIH5Gb250UGxhdGZv
cm1EYXRhKCk7CisKKyAgICAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKKyAgICAgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udCA9PSAwOyB9CisK
KyAgICAgICAgQkZvbnQqIGZvbnQoKSBjb25zdDsKKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3Q7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
KSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIEJGb250KiBtX2ZvbnQ7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDhkZDAKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlr
dS5jcHAKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
aW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQg
YnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9u
dC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNv
bT4KKyAqIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisKKyNpbmNsdWRlIDxGb250Lmg+CisjaW5jbHVkZSA8c3VwcG9ydC9TdHJpbmcuaD4KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
KQorICAgIDogbV9mb250KDApCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgIDogbV9mb250KDApCit7
Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgZikKK3sKKyAgICBpZiAoZi5tX2ZvbnQpCisgICAgeworICAgICAgICBtX2ZvbnQg
PSBuZXcgQkZvbnQoZi5tX2ZvbnQpOworICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorICAgIDogbV9mb250KDApCit7CisgICAgYm9v
bCBiRm91bmQgPSBmYWxzZTsKKyAgICBib29sIGJJdGFsaWMgPSBmb250RGVzY3JpcHRpb24uaXRh
bGljKCk7CisgICAgYm9vbCBiQm9sZCA9IGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA9PSBGb250
V2VpZ2h0Qm9sZDsKKyAgICBmb250X2ZhbWlseQlmYW07CisgICAgLy8gV2Ugc2hvdWxkIGZpbmQg
dGhlIHNwZWNpZmllZCBmb250Li4KKworICAgIHByaW50ZigiXG5cbioqKiBTZWFyY2hpbmcgZm9y
OiAlcyBpdGFsaWM6JWQgIGJvbGQ6JWRcbiIsQlN0cmluZyhmYW1pbHlOYW1lLnN0cmluZygpKS5T
dHJpbmcoKSxiSXRhbGljLGJCb2xkKTsKKworICAgIGZvcihpbnQgaT0wO2k8Y291bnRfZm9udF9m
YW1pbGllcygpO2krKykgeworCisgICAgICAgIGdldF9mb250X2ZhbWlseShpLCAmZmFtLCBOVUxM
KTsKKyAgICAgICAgaWYoQlN0cmluZyhmYW1pbHlOYW1lLnN0cmluZygpKS5Db21wYXJlKGZhbSkg
PT0gMCl7CisgICAgICAgICAgICBtX2ZvbnQgPSBuZXcgQkZvbnQoKTsKKyAgICAgICAgICAgIG1f
Zm9udC0+U2V0RmFtaWx5QW5kU3R5bGUoZmFtLCBOVUxMKTsgLy8gSnVzdCBpbiBjYXNlIHdlIGRv
bid0IGZpbmQgYSBzdHlsZS4uCisgICAgICAgICAgICBtX2ZvbnQtPlNldFNpemUoZm9udERlc2Ny
aXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKKworICAgICAgICAgICAgYkZvdW5kPXRydWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwkKKyAgICBpZiAoYkZvdW5kKSB7IC8v
IE5vdyBzZWFyY2ggZm9yIHN0eWxlLgorCisgICAgICAgIGludDMyIG51bVN0eWxlcyA9IGNvdW50
X2ZvbnRfc3R5bGVzKGZhbSk7CisgICAgICAgIGZvbnRfc3R5bGUgc3R5bGUgOworICAgICAgICB1
aW50MzIgZmxhZ3MgOworICAgICAgICBiRm91bmQgPSBmYWxzZTsJCQkKKworICAgICAgICBmb3Ig
KCBpbnQgaSA9IDA7IGkgPCBudW1TdHlsZXM7IGkrKyApIHsKKyAgICAgICAgICAgIGlmICggZ2V0
X2ZvbnRfc3R5bGUoZmFtLCBpLCAmc3R5bGUsICZmbGFncykgPT0gQl9PSykgeworCisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBjb21wYXJpc29ucyBpcyB0YWtlbiBmcm9tIHN5bGxhYmxlOgorICAg
ICAgICAgICAgICAgIGlmKCAoIGJJdGFsaWMgJiYgYkJvbGQgKSAmJiAgKCAhc3RyY21wKCBzdHls
ZSwgIkJvbGRJdGFsaWMiICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAhc3RyY21wKCBzdHlsZSwgIkJvbGQgT2JsaXF1ZSIgKSApICkKKyAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgYkZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYoICggYkl0YWxpYyAmJiAhYkJvbGQgKSAmJiAoICFzdHJjbXAoIHN0eWxlLCAiSXRhbGljIiAp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXN0cmNt
cCggc3R5bGUsICJPYmxpcXVlIiApICkgKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICBiRm91bmQgPSB0cnVlOwkJCQkKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoICggIWJJdGFsaWMgJiYg
YkJvbGQgKSAmJiAoICFzdHJjbXAoIHN0eWxlLCAiQm9sZCIgKSApICkKKyAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgYkZvdW5kID0gdHJ1ZTsJCQkJCisgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
KCAoICFiSXRhbGljICYmICFiQm9sZCApICYmICggIXN0cmNtcCggc3R5bGUsICJSb21hIiApCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFzdHJjbXAo
IHN0eWxlLCAiQm9vayIgKSB8fCAhc3RyY21wKCBzdHlsZSwgIkNvbmRlbnNlZCIgKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhc3RyY21wKCBzdHls
ZSwgIlJlZ3VsYXIiICkgfHwgIXN0cmNtcCggc3R5bGUsICJNZWRpdW0iICkgKSApCisgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGJGb3VuZCA9IHRydWU7CQkJCQorICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgIH0JCQkJCisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZihiRm91bmQpIC8vIFdlIGFsc28gZm91bmQg
YSBzdHlsZS4KKyAgICAgICAgICAgIG1fZm9udC0+U2V0RmFtaWx5QW5kU3R5bGUoZmFtLCBzdHls
ZSk7CisgICAgfQorfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBCRm9udCogZm9udCkKK3sKKyAgICBt
X2ZvbnQgPSBmb250OworICAgIG1fZm9udC0+U2V0U2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRTaXplKCkpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0
IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCit7CisgICAgbV9mb250LT5TZXRTaXplKHNp
emUpOworCisgICAgaWYgKGJvbGQgJiYgaXRhbGljKQorICAgICAgICBtX2ZvbnQtPlNldEZhY2Uo
Ql9CT0xEX0ZBQ0UgfCBCX0lUQUxJQ19GQUNFKTsKKyAgICBlbHNlIGlmIChib2xkKQorICAgICAg
ICBtX2ZvbnQtPlNldEZhY2UoQl9CT0xEX0ZBQ0UpOworICAgIGVsc2UgaWYgKGl0YWxpYykKKyAg
ICAgICAgbV9mb250LT5TZXRGYWNlKEJfSVRBTElDX0ZBQ0UpOworfQorCitGb250UGxhdGZvcm1E
YXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7CisgICAgZGVsZXRlIG1fZm9udDsKK30KKworYm9v
bCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQoreworICAgIGlmIChtX2ZvbnQpCisg
ICAgICAgIHJldHVybiBtX2ZvbnQtPlNwYWNpbmcoKSA9PSBCX0ZJWEVEX1NQQUNJTkc7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0JGb250KiBGb250UGxhdGZvcm1EYXRhOjpmb250KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9mb250OworfQorCit1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRh
OjpoYXNoKCkgY29uc3QKK3sKKyAgICB1aW50cHRyX3QgaGFzaENvZGVzWzFdID0geyAodWludHB0
cl90KWZvbnQoKSB9OworICAgIHVuc2lnbmVkIG5SZXN1bHQgPSBTdHJpbmdJbXBsOjpjb21wdXRl
SGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2Rl
cykgLyBzaXplb2YoVUNoYXIpKTsKKyAgICByZXR1cm4gblJlc3VsdDsKK30KKworYm9vbCBGb250
UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBj
b25zdAoreworICAgIHJldHVybiAobV9mb250ID09IG90aGVyLm1fZm9udCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9HbHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uODU0NmI5YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAKQEAgLTAsMCAr
MSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtv
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNsdWRlICJGb250RGF0
YS5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaFBhZ2U6OmZp
bGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBib29sIGlzVXRmMTYgPSBidWZmZXJMZW5n
dGggIT0gR2x5cGhQYWdlOjpzaXplOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEds
eXBoUGFnZTo6c2l6ZTsgaSsrKSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworCisgICAg
ICAgIGlmKGlzVXRmMTYpIHsKKyAgICAgICAgICAgIFVDaGFyIGxlYWQgPSBjaGFyYWN0ZXJCdWZm
ZXJbaSAqIDJdOworICAgICAgICAgICAgVUNoYXIgdHJhaWwgPSBjaGFyYWN0ZXJCdWZmZXJbaSAq
IDIgKyAxXTsKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShs
ZWFkLCB0cmFpbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGFyYWN0ZXIgPSBj
aGFyYWN0ZXJCdWZmZXJbaV07CisgICAgICAgIH0KKworICAgICAgICBzZXRHbHlwaERhdGFGb3JJ
bmRleChpLCBjaGFyYWN0ZXIsIGZvbnREYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40NjlhMTdmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEtldmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNv
bT4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNp
bW9uIDxzaW1vbi5tYXhpbWVAdGhlb2xsaXZpZXJzLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCisKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitQbGF0Zm9ybUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYWRpZW50
OjpmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNThhYTEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhh
aWt1LmNwcApAQCAtMCwwICsxLDU2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRE
YXRhLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGF0aC5oIgor
I2luY2x1ZGUgIlBlbi5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8R3JhcGhpY3NEZWZzLmg+CisK
KyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisjaW5jbHVkZSA8UmVnaW9u
Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUKK3sKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUoQlZpZXcqIHZpZXcpOworICAgIH5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKTsK
KworICAgIEJWaWV3KiB2aWV3OworfTsKKworR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHBfdmlldykKK3sKKyAgICB2
aWV3ID0gcF92aWV3OworfQorCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQoreworfQorCitHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICA6IG1f
Y29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAgICAsIG1fZGF0YShuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQpKQoreworICAgIHNldFBhaW50
aW5nRGlzYWJsZWQoIWNvbnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0Nv
bnRleHQoKQoreworICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsK
KyAgICBkZWxldGUgbV9kYXRhOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEt
PnZpZXc7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit7
CisgICAgbV9kYXRhLT52aWV3LT5QdXNoU3RhdGUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEtPnZpZXctPlBvcFN0YXRl
KCk7Cit9CisKKy8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3Jk
ZXIuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50UmVjdCYgcikKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rh
dGEtPnZpZXctPkZpbGxSZWN0KHIpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tl
KQorICAgICAgICBtX2RhdGEtPnZpZXctPlN0cm9rZVJlY3QociwgZ2V0SGFpa3VTdHJva2VTdHls
ZSgpKTsKK30KKworLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IElu
dFBvaW50JiBwb2ludDIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZGF0YS0+dmlldy0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0
SGFpa3VTdHJva2VTdHlsZSgpKTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRv
IGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPkZpbGxF
bGxpcHNlKHJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAgICAg
ICBtX2RhdGEtPnZpZXctPlN0cm9rZUVsbGlwc2UocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiBy
ZWN0LCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlN0cm9rZUFy
YyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6
ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxp
YXMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQlBvaW50IGJQb2ludHNbbnBvaW50c107CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
cG9pbnRzOyBpKyspCisgICAgICAgIGJQb2ludHNbaV0gPSBwb2ludHNbaV07CisKKyAgICBtX2Rh
dGEtPnZpZXctPkZpbGxQb2x5Z29uKGJQb2ludHMsIG5wb2ludHMpOworICAgIGlmIChzdHJva2VT
dHlsZSgpICE9IE5vU3Ryb2tlKQorICAgICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IKKyAg
ICAgICAgbV9kYXRhLT52aWV3LT5TdHJva2VQb2x5Z29uKGJQb2ludHMsIG5wb2ludHMsIHRydWUs
IGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJnYl9jb2xvciBvbGRD
b2xvciA9IG1fZGF0YS0+dmlldy0+SGlnaENvbG9yKCk7CisgICAgbV9kYXRhLT52aWV3LT5TZXRI
aWdoQ29sb3IoYyk7CisgICAgbV9kYXRhLT52aWV3LT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2Rh
dGEtPnZpZXctPlNldEhpZ2hDb2xvcihvbGRDb2xvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExl
ZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBj
b25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmFscGhhKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVu
dGF0aW9uIGNvdWxkIGp1c3QgdXNlIEZpbGxSb3VuZFJlY3QgaWYgYWxsIAorICAgIC8vIHRoZSBz
aXplcyBhcmUgdGhlIHNhbWUsIG9yIGV2ZW4gaWYgdGhleSBhcmUgbm90LiBPdGhlcndpc2Ugc2V2
ZXJhbAorICAgIC8vIEZpbGxSZWN0IGFuZCBGaWxsQXJjIGNhbGxzIGFyZSBuZWVkZWQuCit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7Cisg
ICAgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8KKyAgICAvLyBzeWxsYWJsZSBhZGRzOgorICAg
IC8vIGNSZWN0ICs9IG1fZGF0YS0+cCgpLT5HZXRTY3JvbGxPZmZzZXQoKTsgdG8gdGhlIHJlY3Qg
YmVmb3JlCisgICAgLy8gY3JlYXRpbiB0aGUgcmVnaW9uLgorICAgIG1fZGF0YS0+dmlldy0+Q29u
c3RyYWluQ2xpcHBpbmdSZWdpb24oJnJlZ2lvbik7Cit9CisKK3ZvaWQgc2V0Rm9jdXNSaW5nQ29s
b3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+
JiByZWN0cyA9IGZvY3VzUmluZ1JlY3RzKCk7CisgICAgdW5zaWduZWQgcmVjdENvdW50ID0gcmVj
dHMuc2l6ZSgpOworCisgICAgLy8gRklYTUU6IG1heWJlIHdlIHNob3VsZCBpbXBsZW1lbnQgdGhp
cyB3aXRoIEJTaGFwZT8KKworICAgIGlmIChyZWN0cy5zaXplKCkgPiAxKQorICAgIHsKKyAgICAg
ICAgQlJlZ2lvbglyZWdpb247CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdENvdW50
OyArK2kpCisgICAgICAgICAgICByZWdpb24uSW5jbHVkZShCUmVjdChyZWN0c1tpXSkpOworCisg
ICAgICAgIG1fZGF0YS0+dmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAJCW1fZGF0YS0+dmll
dy0+U3Ryb2tlUmVjdChyZWdpb24uRnJhbWUoKSxCX01JWEVEX0NPTE9SUyk7CisgICAgfQorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEludFBvaW50JiBv
cmlnaW4sIGludCB3aWR0aCwgYm9vbCBwcmludGluZykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBlbmRQb2ludCA9IG9yaWdp
biArIEludFNpemUod2lkdGgsIDApOworICAgIGRyYXdMaW5lKG9yaWdpbiwgZW5kUG9pbnQpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3Jh
bW1hcihjb25zdCBJbnRQb2ludCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYgZnJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gZnJlY3Q7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHIsIGZsb2F0IHdpZHRoKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IG9sZFNpemUgPSBtX2RhdGEtPnZp
ZXctPlBlblNpemUoKTsKKyAgICBtX2RhdGEtPnZpZXctPlNldFBlblNpemUod2lkdGgpOworICAg
IG1fZGF0YS0+dmlldy0+U3Ryb2tlUmVjdChyLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworICAg
IG1fZGF0YS0+dmlldy0+U2V0UGVuU2l6ZShvbGRTaXplKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsYykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYXBfbW9kZSBtb2RlID0gQl9CVVRUX0NBUDsK
KyAgICBzd2l0Y2ggKGxjKSB7CisgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgbW9kZSA9IEJf
Uk9VTkRfQ0FQOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAgICAg
bW9kZSA9IEJfU1FVQVJFX0NBUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0Q2FwOgor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fZGF0YS0+dmlldy0+
U2V0TGluZU1vZGUobW9kZSwgbV9kYXRhLT52aWV3LT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT52
aWV3LT5MaW5lTWl0ZXJMaW1pdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVKb2luKExpbmVKb2luIGxqKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGpvaW5fbW9kZSBtb2RlID0gQl9NSVRFUl9KT0lOOworICAgIHN3
aXRjaCAobGopIHsKKyAgICBjYXNlIFJvdW5kSm9pbjoKKyAgICAgICAgbW9kZSA9IEJfUk9VTkRf
Sk9JTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCZXZlbEpvaW46CisgICAgICAgIG1vZGUg
PSBCX0JFVkVMX0pPSU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWl0ZXJKb2luOgorICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fZGF0YS0+dmlldy0+U2V0
TGluZU1vZGUobV9kYXRhLT52aWV3LT5MaW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2RhdGEtPnZpZXct
PkxpbmVNaXRlckxpbWl0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJM
aW1pdChmbG9hdCBsaW1pdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlNldExpbmVNb2RlKG1fZGF0YS0+dmlldy0+
TGluZUNhcE1vZGUoKSwgbV9kYXRhLT52aWV3LT5MaW5lSm9pbk1vZGUoKSwgbGltaXQpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRyYXdpbmdfbW9kZSBtb2RlID0gQl9PUF9DT1BZOworICAg
IHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgorICAgIGNhc2UgQ29tcG9z
aXRlQ29weToKKyAgICAgICAgLy8gVXNlIHRoZSBkZWZhdWx0IGFib3ZlCisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3ZlcjoKKyAgICAgICAgbW9kZSA9IEJfT1BfT1ZF
UjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCJHcmFwaGlj
c0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbjogVW5zdXBwb3J0ZWQgY29tcG9zaXRlIG9w
ZXJhdGlvbiAlc1xuIiwKKyAgICAgICAgICAgIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShvcCkudXRm
OCgpLmRhdGEoKSk7CisgICAgfQorICAgIG1fZGF0YS0+dmlldy0+U2V0RHJhd2luZ01vZGUobW9k
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9k
YXRhLT52aWV3LT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbihwYXRoLnBsYXRmb3JtUGF0aCgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0
Q1RNKCkgY29uc3QKK3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gVHJhbnNm
b3JtYXRpb25NYXRyaXgoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0ludFBvaW50IEdyYXBoaWNz
Q29udGV4dDo6b3JpZ2luKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJ
bnRQb2ludCgwLCAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBy
YWRpYW5zKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dEVsbGlwc2VJblJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmIGxpbmssIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgYUZvbnQpCit7CisgICAgbV9k
YXRhLT52aWV3LT5TZXRGb250KGFGb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLmZv
bnQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7Cit9
CisKK3BhdHRlcm4JR3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKCl7CisgICAg
c3dpdGNoIChzdHJva2VTdHlsZSgpKSB7CisgICAgY2FzZSBTb2xpZFN0cm9rZToKKyAgICAgICAg
cmV0dXJuIEJfU09MSURfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb3R0ZWRTdHJv
a2U6CisgICAgICAgIHJldHVybiBCX01JWEVEX0NPTE9SUzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBEYXNoZWRTdHJva2U6CisgICAgICAgIC8vIEZJWE1FOiB1c2UgYSBiZXR0ZXIgZGFzaGVk
IHN0cm9rZSEKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgCisgICAgICAgIHJldHVybiBCX01J
WEVEX0NPTE9SUzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IEJfU09MSURfTE9XOworICAgICAgICBicmVhazsKKwl9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJiBzdHJva2VTdHls
ZSkKK3sgICAKKwkvLyBGSVhNRSBzZWUgZ2V0SGFpa3VTdHJva2VTdHlsZS4KKwkKKyAgICAvL2lm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgLy8gICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6
IFRoaXMgY2FuIHByb2JhYmx5IGJlIGltcGxlbWVudGVkIHVzaW5nIHBhdHRlcm5zLiBUaGUgc3Ry
b2tlU3R5bGVzOgorICAgIC8vIGVudW0gU3Ryb2tlU3R5bGUgeworICAgIC8vICAgICBOb1N0cm9r
ZSwKKyAgICAvLyAgICAgU29saWRTdHJva2UsCisgICAgLy8gICAgIERvdHRlZFN0cm9rZSwKKyAg
ICAvLyAgICAgRGFzaGVkU3Ryb2tlCisgICAgLy8gfTsKKyAgICAvL25vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhm
bG9hdCB0aGlja25lc3MpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3LT5TZXRQZW5TaXplKHRoaWNrbmVzcyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9kYXRhLT52aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KEludFNpemUg
Y29uc3QmLGludCxDb2xvciBjb25zdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ljb25IYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgx
NmRiZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SWNvbkhhaWt1LmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkljb24uaCIKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ljb246Okljb24oKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK0ljb246On5JY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorICAg
IAorUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8SWNvbj4oMCk7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZp
bGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxJY29uPigwKTsKK30KKwordm9pZCBJY29uOjpw
YWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjZhNDlhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21h
aWwuY29tPgorICogCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1h
Z2VCdWZmZXJEYXRhX2gKKyNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhX2gKKworI2luY2x1ZGUgIk93
blB0ci5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEludFNpemU7CisK
KyAgICBjbGFzcyBJbWFnZUJ1ZmZlckRhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW1hZ2VC
dWZmZXJEYXRhKGNvbnN0IEludFNpemUmKTsKKyAgICB9OworCit9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgIC8vIEltYWdlQnVmZmVyRGF0YV9oCisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTNlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5t
YXhpbWVAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRT
aXplJikKK3sKK30KKworSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBi
b29sIGdyYXlTY2FsZSwgYm9vbCYgc3VjY2VzcykKKyAgICA6IG1fZGF0YShJbnRTaXplKCkpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdWNjZXNzID0gZmFsc2U7Cit9CisKK0ltYWdl
QnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQoreworfQorCitHcmFwaGljc0NvbnRleHQqIEltYWdlQnVm
ZmVyOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitJ
bWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZDE0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCkBAIC0wLDAgKzEsMTcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisj
aW5jbHVkZSA8QXBwbGljYXRpb24uaD4KKyNpbmNsdWRlIDxCaXRtYXAuaD4KKyNpbmNsdWRlIDxW
aWV3Lmg+CisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKworLy8gVGhpcyBmdW5jdGlvbiBsb2FkcyBy
ZXNvdXJjZXMgZnJvbSBXZWJLaXQKK1ZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXko
Y29uc3QgY2hhciopOworCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGcmFtZURhdGE6
OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKK3sKKyAgICBpZiAoY2xlYXJNZXRhZGF0YSkKKyAg
ICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKKworICAgIGlmIChtX2ZyYW1lKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBOb3Qgc3VyZSB3aHkgYmVfYXBwIGlzIGNoZWNrZWQgKHRoaXMgd2FzIGNv
cGllZCBmcm9tIFN5bGxhYmxlKQorICAgICAgICBpZiAoYmVfYXBwKQorICAgICAgICAgICAgZGVs
ZXRlIG1fZnJhbWU7CisgICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICBtX2R1cmF0aW9uID0g
MC4wZjsKKyAgICAgICAgbV9oYXNBbHBoYSA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbWFnZSBDbGFzcworLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1dURjo6UGFzc1JlZlB0
cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCit7
CisgICAgVmVjdG9yPGNoYXI+IGFyciA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKKyAg
ICBXVEY6OlBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltZyA9IEJpdG1hcEltYWdlOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShhcnIuZGF0YSgpLCBhcnIuc2l6ZSgpKTsKKyAgICBpbWctPnNldERhdGEoYnVmZmVyLCB0cnVl
KTsKKyAgICByZXR1cm4gaW1nOworfQorCit2b2lkIEJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1E
YXRhKCkKK3sKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgp
Cit7Cit9CisKKy8vIERyYXdpbmcgUm91dGluZXMKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sK
KyAgICBCQml0bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
aWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5
ZXQuCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkg
eworICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBzb2xpZENvbG9yKCksIG9w
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFNpemUgc2VsZlNpemUgPSBzaXpl
KCk7CisKKyAgICBjdHh0LT5zYXZlKCk7CisKKyAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9w
ZXJhdGlvbi4KKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBjb21wb3Np
dGUgbW9kZXMgOgorICAgIC8vCWN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CisKKyAg
ICBCVmlldyogdmlldyA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgQlJlY3Qgc3Jj
UmVjdChzcmMpOworICAgIC8vIFRlc3QgdXNpbmcgZXhhbXBsZSBzaXRlIGF0CisgICAgLy8gaHR0
cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4c3BpcmFsL2RlbW8uaHRt
bAorICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJfT1BfQUxQSEEpOyAgICAKKyAgICB2aWV3LT5E
cmF3Qml0bWFwKGltYWdlLCBzcmNSZWN0ICYgaW1hZ2UtPkJvdW5kcygpLCBkc3QpOworCisgICAg
Y3R4dC0+cmVzdG9yZSgpOworCisgICAgc3RhcnRBbmltYXRpb24oKTsKK30KKwordm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQoreworCS8vIEZJWE1FOiBm
aW5pc2ggdGhpcyB0byBzdXBwb3J0IGFsc28gcGhhc2VkIHBvc2l0aW9uIChzcmNQb2ludCkKKwor
ICAgIEJCaXRtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBp
ZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHll
dC4KKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgY3VycmVudFcgPSAwOworICAgIGZsb2F0
IGN1cnJlbnRIID0gMDsKKworICAgIGN0eHQtPnNhdmUoKTsKKworICAgIGN0eHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKKworICAgIGN0eHQtPmNsaXAo
SW50UmVjdChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVj
dC5oZWlnaHQoKSkpOworCisgICAgd2hpbGUgKGN1cnJlbnRXIDwgZHN0UmVjdC53aWR0aCgpKSB7
CisgICAgICAgIHdoaWxlIChjdXJyZW50SCA8IGRzdFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAg
ICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5EcmF3Qml0bWFwKGltYWdlLCBCUG9pbnQoZHN0
UmVjdC54KCkgKyBjdXJyZW50VywgZHN0UmVjdC55KCkgKyBjdXJyZW50SCkpOworICAgICAgICAg
ICAgY3VycmVudEggKz0gdGlsZVJlY3QuaGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAgICAgY3Vy
cmVudFcgKz0gdGlsZVJlY3Qud2lkdGgoKTsKKyAgICAgICAgY3VycmVudEggPSAwOworICAgIH0K
KyAgICBjdHh0LT5yZXN0b3JlKCk7CisKKyAgICBzdGFydEFuaW1hdGlvbigpOworfQorCit2b2lk
IEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQoreworICAgIC8vIEZJWE1FOiBJdCdz
IGVhc3kgdG8gaW1wbGVtZW50IHRoaXMgb3B0aW1pemF0aW9uLgorICAgIC8vIEp1c3QgbmVlZCB0
byBjaGVjayB0aGUgUkdCQTMyIGJ1ZmZlciB0byBzZWUgaWYgaXQgaXMgMXgxLiAgICAKKyAgICBt
X2lzU29saWRDb2xvciA9IGZhbHNlOworfQorCitCQml0bWFwKiBCaXRtYXBJbWFnZTo6Z2V0Qml0
bWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxCaXRtYXBJbWFnZSo+KHRoaXMp
LT5mcmFtZUF0SW5kZXgoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2ZTEzZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5j
cHAKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIAorICogQ29weXJpZ2h0IChDKSAyMDA2
IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJl
YSBBbnphbmkgICA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKiAKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlU291
cmNlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlICJHSUZJbWFnZURl
Y29kZXIuaCIKKyNpbmNsdWRlICJUcmFuc2xhdG9yRGVjb2Rlci5oIgorI2luY2x1ZGUgIlBOR0lt
YWdlRGVjb2Rlci5oIgorLy8gI2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRl
ICJCTVBJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNs
dWRlICJYQk1JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisj
aW5jbHVkZSA8Qml0bWFwLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTog
VGhpcyBzaG91bGQgdXNlIHRoZSBIYWlrdSB0cmFuc2xhdG9yIEFQSQorSW1hZ2VEZWNvZGVyKiBj
cmVhdGVEZWNvZGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICAvLyBXZSBuZWVk
IGF0IGxlYXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUg
ZGVhbGluZyB3aXRoLgorICAgIGludCBsZW5ndGggPSBkYXRhLnNpemUoKTsKKyAgICBpZiAobGVu
Z3RoIDwgNCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1
Q29udGVudHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopIGRhdGEuZGF0YSgpOworICAgIGNvbnN0
IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisKKyAgICAvLyBHSUZzIGJlZ2luIHdpdGgg
R0lGOCg3IG9yIDkpLgorICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpID09IDAp
CisgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBUZXN0IGZv
ciBQTkcuCisgICAgaWYgKHVDb250ZW50c1swXSA9PSAweDg5ICYmCisgICAgICAgIHVDb250ZW50
c1sxXSA9PSAweDUwICYmCisgICAgICAgIHVDb250ZW50c1syXSA9PSAweDRFICYmCisgICAgICAg
IHVDb250ZW50c1szXSA9PSAweDQ3KQorICAgICAgICByZXR1cm4gbmV3IFBOR0ltYWdlRGVjb2Rl
cigpOworCisgICAgLy8gSlBFRworICAgIC8vIGlmICh1Q29udGVudHNbMF0gPT0gMHhGRiAmJgor
ICAgIC8vICAgICB1Q29udGVudHNbMV0gPT0gMHhEOCAmJgorICAgIC8vICAgICB1Q29udGVudHNb
Ml0gPT0gMHhGRikKKyAgICAvLyAgICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKCk7CisK
KyAgICAvLyBCTVAKKyAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkJNIiwgMikgPT0gMCkKKyAg
ICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIoKTsKKworICAgIC8vIElDT3MgYWx3YXlz
IGJlZ2luIHdpdGggYSAyLWJ5dGUgMCBmb2xsb3dlZCBieSBhIDItYnl0ZSAxLgorICAgIC8vIENV
UnMgYmVnaW4gd2l0aCAyLWJ5dGUgMCBmb2xsb3dlZCBieSAyLWJ5dGUgMi4KKyAgICAvLyBpZiAo
IW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMVwwMDAiLCA0KSB8fAorICAgIC8vICAgICAh
bWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAyXDAwMCIsIDQpKQorICAgIC8vICAgICByZXR1
cm4gbmV3IElDT0ltYWdlRGVjb2RlcigpOworCisgICAgLy8gWEJNcyByZXF1aXJlIDggYnl0ZXMg
b2YgaW5mby4KKyAgICBpZiAobGVuZ3RoID49IDggJiYgc3RybmNtcChjb250ZW50cywgIiNkZWZp
bmUgIiwgOCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIG5ldyBYQk1JbWFnZURlY29kZXIoKTsKKwor
ICAgIHByaW50ZigiSW52YWxpZCBpbWFnZSFcbiIgKTsKKyAgICAvLyBHaXZlIHVwLiBXZSBkb24n
dCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KKyAgICByZXR1cm4gMDsKK30KKworSW1hZ2VT
b3VyY2U6OkltYWdlU291cmNlKCkKKyAgICA6IG1fZGVjb2RlcigwKQoreworfQorCitJbWFnZVNv
dXJjZTo6fkltYWdlU291cmNlKCkKK3sKKyAgICBjbGVhcih0cnVlKTsKK30KKwordm9pZCBJbWFn
ZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCit7CisgICAgZGVsZXRlIG1fZGVjb2RlcjsKKyAgICBtX2RlY29kZXIgPSAwOwor
fQorCitib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZGVjb2RlcjsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIC8vIE1ha2UgdGhlIGRlY29kZXIg
Ynkgc25pZmZpbmcgdGhlIGJ5dGVzLgorICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0
aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRl
Y29kZXIgcGx1Z2luLgorICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxl
IHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQor
ICAgIC8vIG1hZGUuCisgICAgaWYoIW1fZGVjb2RlcikKKyAgICAJbV9kZWNvZGVyID0gY3JlYXRl
RGVjb2RlcihkYXRhLT5idWZmZXIoKSk7CisKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwor
fQorCitib29sIEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlmICghbV9k
ZWNvZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5p
c1NpemVBdmFpbGFibGUoKTsKK30KKworSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAg
ICByZXR1cm4gbV9kZWNvZGVyLT5zaXplKCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZy
YW1lU2l6ZUF0SW5kZXgoc2l6ZV90KSBjb25zdAoreworICAgIHJldHVybiBzaXplKCk7Cit9CisK
K2ludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKK3sKKyAgICBpZiAoIW1fZGVjb2Rl
cikKKyAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworCisgICAgcmV0dXJuIG1fZGVjb2Rl
ci0+cmVwZXRpdGlvbkNvdW50KCk7Cit9CisKK1N0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5hbWVF
eHRlbnNpb24oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZyYW1lQ291bnQoKSA6IDA7Cit9CisK
K05hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJH
QkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgp
OworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpG
cmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBidWZmZXItPmFzTmV3
TmF0aXZlSW1hZ2UoKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJ
bmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGU7Cit9CisKK2Zsb2F0IEltYWdlU291cmNl
OjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29k
ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2Rl
Y29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVm
ZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIGJ1ZmZlci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7Cit9CisKK2Jv
b2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAg
ICBpZiAoIW1fZGVjb2RlciB8fCAhbV9kZWNvZGVyLT5zdXBwb3J0c0FscGhhKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3Rh
dHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gYnVmZmVyLT5oYXNBbHBoYSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50
UG9pbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50
SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTVhNGIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50
SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5o
IgorCisjaW5jbHVkZSA8UG9pbnQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFBv
aW50OjpJbnRQb2ludChjb25zdCBCUG9pbnQmIHApCisgICAgOiBtX3goc3RhdGljX2Nhc3Q8aW50
PihwLngpKQorICAgICwgbV95KHN0YXRpY19jYXN0PGludD4ocC55KSkKK3sKK30KKworSW50UG9p
bnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJQb2ludChtX3gsIG1f
eSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjU3NGFkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgQlJlY3QmIHIpCisgICAgOiBt
X2xvY2F0aW9uKHIuTGVmdFRvcCgpKQorICAgICwgbV9zaXplKHIuSW50ZWdlcldpZHRoKCkgKyAx
LCByLkludGVnZXJIZWlnaHQoKSArIDEpCit7Cit9CisKK0ludFJlY3Q6Om9wZXJhdG9yIEJSZWN0
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogc3VidHJhY3QgMSBmcm9tIGhlaWdodCBhbmQgd2lk
dGg/CisgICAgcmV0dXJuIEJSZWN0KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCksaGVp
Z2h0KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMmFmOTFhNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcApAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFp
bC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaW5jbHVkZSA8U2l6ZS5oPgorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZTo6SW50U2l6ZShjb25zdCBCU2l6ZSYgcykKKyAg
ICA6IG1fd2lkdGgocy5JbnRlZ2VyV2lkdGgoKSkKKyAgICAsIG1faGVpZ2h0KHMuSW50ZWdlckhl
aWdodCgpKQoreworfQorCitJbnRTaXplOjpvcGVyYXRvciBCU2l6ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEJTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhI
YWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYyNzhmYwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcApAQCAt
MCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2Qg
PGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPFJlZ2lvbi5oPgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGF0aDo6UGF0aCgpCisgICAgOiBtX3BhdGgobmV3
IEJSZWdpb24oKSkKK3sKK30KKworUGF0aDo6flBhdGgoKQoreworICAgIGRlbGV0ZSBtX3BhdGg7
Cit9CisKK1BhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCisgICAgOiBtX3BhdGgobmV3IEJS
ZWdpb24oKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKK3sKK30KKworUGF0aCYgUGF0aDo6b3BlcmF0
b3I9KGNvbnN0IFBhdGgmIG90aGVyKQoreworICAgIGlmICgmb3RoZXIgIT0gdGhpcykKKyAgICAg
ICAgbV9wYXRoID0gb3RoZXIucGxhdGZvcm1QYXRoKCk7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxl
IHJ1bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+Q29udGFpbnMocG9pbnQpOworfQor
Cit2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+RnJhbWUoKTsKK30KKwordm9pZCBQYXRoOjptb3ZlVG8o
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgLy8gRklYTUU6IFVzZSBPZmZzZXRCeT8K
KyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3Qg
RmxvYXRQb2ludCYgcCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRo
OjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYg
cCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjphZGRCZXppZXJD
dXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3AyLCBjb25z
dCBGbG9hdFBvaW50JiBwKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBh
dGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwg
ZmxvYXQgcmFkaXVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBhdGg6
OmNsb3NlU3VicGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCit9CisKK3ZvaWQgUGF0
aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxvYXQg
ZWFyLCBib29sIGFudGljbG9ja3dpc2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCit9CisK
K3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit7CisgICAgbV9wYXRoLT5J
bmNsdWRlKHIpOworfQorCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBhdGg6OmNsZWFyKCkKK3sK
KyAgICBtX3BhdGgtPk1ha2VFbXB0eSgpOworfQorCitib29sIFBhdGg6OmlzRW1wdHkoKSBjb25z
dAoreworICAgIHJldHVybiAhbV9wYXRoLT5GcmFtZSgpLklzVmFsaWQoKTsKK30KKworU3RyaW5n
IFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0
aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OwkKK30KKwordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30KKworRmxvYXRSZWN0IFBh
dGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNmVjMmRhMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAKQEAgLTAsMCArMSwxMDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCisKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5o
PgorI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KKworCituYW1lc3BhY2UgV2ViQ29yZQorewor
Cit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreyAgICAKKyAgICBCRm9udCAq
Zm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKKyAgICBpZiAoZm9udCkgeworICAgICAgICBm
b250X2hlaWdodCBoZWlnaHQ7CisgICAgICAgIGZvbnQtPkdldEhlaWdodCgmaGVpZ2h0KTsKKyAg
ICAgICAgbV9hc2NlbnQgPSBoZWlnaHQuYXNjZW50OworICAgICAgICBtX2Rlc2NlbnQgPSBoZWln
aHQuZGVzY2VudDsKKyAgICAgICAgbV9saW5lU3BhY2luZyA9IGhlaWdodC5sZWFkaW5nOworICAg
ICAgICBtX3hIZWlnaHQgPSBmb250LT5TaXplKCk7IC8vIE5vdCBzdXJlIGFib3V0IHRoaXMKKyAg
ICAgICAgbV91bml0c1BlckVtID0gMTsgLy8gRklYTUUhCisgICAgICAgIG1fbGluZUdhcCA9IGhl
aWdodC5sZWFkaW5nOworICAgIH0KK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1D
aGFyV2lkdGhJbml0KCkKK3sKKyAgICBtX2F2Z0NoYXJXaWR0aCA9IDAuZjsKKyAgICBtX21heENo
YXJXaWR0aCA9IDAuZjsKKyAgICBpbml0Q2hhcldpZHRocygpOworfQorCit2b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAgIGRlbGV0ZSBtX3NtYWxsQ2Fwc0ZvbnRE
YXRhOworICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSAwOworfQorCitTaW1wbGVGb250RGF0YSog
U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGlmICghbV9zbWFsbENhcHNGb250RGF0YSl7
CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjID0gRm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CisgICAgICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZSgwLjcwZipmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRTaXplKCkpOworICAgICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBw
ZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkp
OworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpwZGF0
YSk7CisgICAgfQorICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworfQorCitib29sIFNp
bXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdlIHdpbGwgbmVlZCB0byBpbXBs
ZW1lbnQgdGhpcyB0byBsb2FkIG5vbi1BU0NJSSBlbmNvZGluZyBzaXRlcworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAg
aWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKKyAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKS0+SXNGaXhlZCgpOworICAgIGVsc2UKKyAgICAgICAgbV90
cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworfQorCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDAuMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nocm9tZUNsaWVudEhhaWt1LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2hyb21lQ2xpZW50SGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMjQwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0Nocm9tZUNsaWVudEhhaWt1LmNwcApAQCAtMCwwICsxLDM1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29k
QGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SGFpa3UuaCIKKworI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSA8QWxlcnQuaD4KKyNp
bmNsdWRlIDxTdHJpbmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZQoreworCitDaHJvbWVDbGll
bnRIYWlrdTo6Q2hyb21lQ2xpZW50SGFpa3UoKQoreworfQorCitDaHJvbWVDbGllbnRIYWlrdTo6
fkNocm9tZUNsaWVudEhhaWt1KCkKK3sKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Y2hy
b21lRGVzdHJveWVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9t
ZUNsaWVudEhhaWt1OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgLy8g
ZGVidWdnZXIoInNldFdpbmRvd1JlY3QoKSIpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K0Zsb2F0UmVjdCBDaHJvbWVDbGllbnRIYWlrdTo6d2luZG93UmVjdCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAvLyBkZWJ1Z2dlcigid2luZG93UmVjdCgpIik7CisgICAgcmV0dXJu
IEZsb2F0UmVjdCgwLCAwLCAyMDAsIDIwMCk7Cit9CisKK0Zsb2F0UmVjdCBDaHJvbWVDbGllbnRI
YWlrdTo6cGFnZVJlY3QoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gZGVidWdn
ZXIoInBhZ2VSZWN0KCkiKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIDIwMCwgMjAwKTsK
K30KKworZmxvYXQgQ2hyb21lQ2xpZW50SGFpa3U6OnNjYWxlRmFjdG9yKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAxLjA7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFp
a3U6OmZvY3VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNs
aWVudEhhaWt1Ojp1bmZvY3VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29s
IENocm9tZUNsaWVudEhhaWt1OjpjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDaHJvbWVDbGll
bnRIYWlrdTo6dGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK1BhZ2UqIENocm9tZUNsaWVudEhhaWt1OjpjcmVhdGVXaW5kb3coRnJhbWUqLCBj
b25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1BhZ2UqIENocm9t
ZUNsaWVudEhhaWt1OjpjcmVhdGVNb2RhbERpYWxvZyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJl
cXVlc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNob3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OmNhblJ1bk1vZGFsKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlr
dTo6cnVuTW9kYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21l
Q2xpZW50SGFpa3U6OnNldFRvb2xiYXJzVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnRvb2xiYXJzVmlzaWJsZSgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hy
b21lQ2xpZW50SGFpa3U6OnNldFN0YXR1c2JhclZpc2libGUoYm9vbCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVudEhhaWt1OjpzdGF0dXNiYXJWaXNpYmxl
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9vbCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVudEhhaWt1OjpzY3JvbGxiYXJz
VmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0TWVudWJhclZpc2libGUoYm9vbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVudEhhaWt1OjptZW51YmFy
VmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFJlc2l6YWJsZShib29sKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmFkZE1lc3NhZ2VU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCkKK3sKKyAgICBwcmludGYoIk1FU1NBR0UgJXM6JWkgJXNcbiIsIEJTdHJpbmco
c291cmNlSUQpLlN0cmluZygpLCBsaW5lTnVtYmVyLCBCU3RyaW5nKG1lc3NhZ2UpLlN0cmluZygp
KTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNz
YWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQoreworICAgIHByaW50ZigiTUVTU0FHRSAlczol
aSAlc1xuIiwgQlN0cmluZyhzb3VyY2VJRCkuU3RyaW5nKCksIGxpbmVOdW1iZXIsIEJTdHJpbmco
bWVzc2FnZSkuU3RyaW5nKCkpOworfQorCitib29sIENocm9tZUNsaWVudEhhaWt1OjpjYW5SdW5C
ZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIENocm9tZUNsaWVudEhhaWt1OjpydW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBGcmFtZSogZnJhbWUpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21l
Q2xpZW50SGFpa3U6OmNsb3NlV2luZG93U29vbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6cnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBtc2cpCit7CisgICAgcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6cnVu
SmF2YVNjcmlwdEFsZXJ0KClcbiIpOworICAgIEJBbGVydCogYWxlcnQgPSBuZXcgQkFsZXJ0KCJK
YXZhU2NyaXB0IiwgQlN0cmluZyhtc2cpLlN0cmluZygpLCAiT0siKTsKKyAgICBhbGVydC0+R28o
KTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJh
bWUqLCBjb25zdCBTdHJpbmcmIG1zZykKK3sKKyAgICBwcmludGYoIkNocm9tZUNsaWVudEhhaWt1
OjpydW5KYXZhU2NyaXB0Q29uZmlybSgpXG4iKTsKKyAgICBCQWxlcnQqIGFsZXJ0ID0gbmV3IEJB
bGVydCgiSmF2YVNjcmlwdCIsIEJTdHJpbmcobXNnKS5TdHJpbmcoKSwgIlllcyIsICJObyIpOwor
ICAgIHJldHVybiAoYWxlcnQtPkdvKCkgPT0gMCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFp
a3U6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlr
dTo6c2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnNob3VsZEludGVycnVwdEphdmFTY3Jp
cHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIENocm9tZUNsaWVudEhhaWt1Ojp0YWJzVG9MaW5rcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitJbnRSZWN0IENocm9tZUNsaWVudEhhaWt1Ojp3aW5kb3dSZXNpemVyUmVj
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKwordm9pZCBDaHJvbWVDbGll
bnRIYWlrdTo6cmVwYWludChjb25zdCBJbnRSZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9v
bCBpbW1lZGlhdGUsIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNjcm9sbChjb25zdCBJbnRTaXpl
JiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitJbnRQb2ludCBDaHJv
bWVDbGllbnRIYWlrdTo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFBvaW50KCk7Cit9CisKK0ludFJl
Y3QgQ2hyb21lQ2xpZW50SGFpa3U6OndpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKwor
UGxhdGZvcm1XaWRnZXQgQ2hyb21lQ2xpZW50SGFpa3U6OnBsYXRmb3JtV2luZG93KCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBQbGF0Zm9ybVdpZGdldCgpOwor
fQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1Ojpjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiwg
Y29uc3QgSW50U2l6ZSYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmLCBj
b25zdCBTY3JvbGxWaWV3KikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIENocm9tZUNsaWVudEhhaWt1OjphZGRUb0RpcnR5UmVnaW9uKGNvbnN0IEludFJlY3QmKQor
eworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1OjpzY3JvbGxCYWNraW5nU3RvcmUoaW50LCBp
bnQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikKK3sKK30KKwordm9pZCBDaHJvbWVD
bGllbnRIYWlrdTo6dXBkYXRlQmFja2luZ1N0b3JlKCkKK3sKK30KKwordm9pZCBDaHJvbWVDbGll
bnRIYWlrdTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0
LCB1bnNpZ25lZCAvKm1vZGlmaWVyRmxhZ3MqLykKK3sKKyAgICAvLyBTb21lIGV4dHJhIGluZm8K
KyAgICAvL3ByaW50ZigiSGl0VGVzdFJlc3VsdCB0aXRsZSBbJXNdIHNwZWxsaW5nVG9vbFRpcCBb
JXNdXG4iLEJTdHJpbmcoaGl0LnRpdGxlKCkpLlN0cmluZygpLEJTdHJpbmcoaGl0LnNwZWxsaW5n
VG9vbFRpcCgpKS5TdHJpbmcoKSk7CQorICAgIC8vbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRpcCkKK3sKKyAg
ICAvL25vdEltcGxlbWVudGVkKCk7CisgICAgLy9wcmludGYoInNldFRvb2xUaXAgWyVzXVxuIixC
U3RyaW5nKHRpcCkuU3RyaW5nKCkpOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1Ojpwcmlu
dChGcmFtZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGll
bnRIYWlrdTo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGll
bnRIYWlrdTo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiwgR2Vv
bG9jYXRpb24qKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xp
ZW50SGFpa3U6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnNl
dEN1cnNvcihQbGF0Zm9ybUN1cnNvckhhbmRsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVuIGZv
cm0gZWxlbWVudCBoYXMgY2hhbmdlZC4gVGhpcyBmdW5jdGlvbgorLy8gd2lsbCBiZSBjYWxsZWQg
ZnJlcXVlbnRseSwgc28gaGFuZGxpbmcgc2hvdWxkIGJlIHZlcnkgZmFzdC4KK3ZvaWQgQ2hyb21l
Q2xpZW50SGFpa3U6OmZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitQYXNzT3duUHRyPEhUTUxQYXJzZXJRdWlya3M+IENocm9tZUNs
aWVudEhhaWt1OjpjcmVhdGVIVE1MUGFyc2VyUXVpcmtzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvQ2hyb21lQ2xpZW50SGFpa3UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ2hyb21lQ2xpZW50SGFpa3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mNzlhZmVkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DaHJv
bWVDbGllbnRIYWlrdS5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDaHJvbWVDbGllbnRIYWlrdV9ICisjZGVmaW5lIENocm9t
ZUNsaWVudEhhaWt1X0gKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyAgICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgUGFnZTsKKyAgICBzdHJ1Y3Qg
RnJhbWVMb2FkUmVxdWVzdDsKKworICAgIGNsYXNzIENocm9tZUNsaWVudEhhaWt1IDogcHVibGlj
IENocm9tZUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBDaHJvbWVDbGllbnRIYWlrdSgp
OworICAgICAgICB2aXJ0dWFsIH5DaHJvbWVDbGllbnRIYWlrdSgpOworICAgICAgICB2b2lkIGNo
cm9tZURlc3Ryb3llZCgpOworCisgICAgICAgIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICAgICAgRmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKworICAgICAgICBGbG9h
dFJlY3QgcGFnZVJlY3QoKTsKKworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvcigpOworCisgICAg
ICAgIHZvaWQgZm9jdXMoKTsKKyAgICAgICAgdm9pZCB1bmZvY3VzKCk7CisKKyAgICAgICAgYm9v
bCBjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pOworICAgICAgICB2b2lkIHRha2VGb2N1cyhG
b2N1c0RpcmVjdGlvbik7CisKKyAgICAgICAgUGFnZSogY3JlYXRlV2luZG93KEZyYW1lKiwgY29u
c3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJik7Cisg
ICAgICAgIFBhZ2UqIGNyZWF0ZU1vZGFsRGlhbG9nKEZyYW1lKiwgY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYpOworICAgICAgICB2b2lkIHNob3coKTsKKworICAgICAgICBib29sIGNhblJ1bk1vZGFs
KCk7CisgICAgICAgIHZvaWQgcnVuTW9kYWwoKTsKKworICAgICAgICB2b2lkIHNldFRvb2xiYXJz
VmlzaWJsZShib29sKTsKKyAgICAgICAgYm9vbCB0b29sYmFyc1Zpc2libGUoKTsKKworICAgICAg
ICB2b2lkIHNldFN0YXR1c2JhclZpc2libGUoYm9vbCk7CisgICAgICAgIGJvb2wgc3RhdHVzYmFy
VmlzaWJsZSgpOworCisgICAgICAgIHZvaWQgc2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9vbCk7Cisg
ICAgICAgIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUoKTsKKworICAgICAgICB2b2lkIHNldE1lbnVi
YXJWaXNpYmxlKGJvb2wpOworICAgICAgICBib29sIG1lbnViYXJWaXNpYmxlKCk7CisKKyAgICAg
ICAgdm9pZCBzZXRSZXNpemFibGUoYm9vbCk7CisKKyAgICAgICAgdm9pZCBhZGRNZXNzYWdlVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsK
KwkJdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOworCisJCWJv
b2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCk7CisKKyAgICAgICAgYm9vbCBydW5C
ZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBGcmFtZSogZnJh
bWUpOworCisgICAgICAgIHZvaWQgY2xvc2VXaW5kb3dTb29uKCk7CisKKyAgICAgICAgdm9pZCBy
dW5KYXZhU2NyaXB0QWxlcnQoRnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgYm9vbCBy
dW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSosIGNvbnN0IFN0cmluZyYpOworICAgICAgICBib29s
IHJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJpbmcmIHJlc3VsdCk7CisgICAgICAgIGJvb2wgc2hv
dWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOworCisgICAgICAgIHZvaWQgc2V0U3RhdHVzYmFyVGV4
dChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICAgICAgYm9vbCB0YWJzVG9MaW5rcygpIGNv
bnN0OyAgICAgICAgCisgICAgICAgIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsK
KworICAgICAgICB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYsIGJvb2wgY29udGVudENoYW5n
ZWQsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UsIGJvb2wgcmVwYWludENvbnRlbnRPbmx5ID0gZmFs
c2UpOworICAgICAgICB2b2lkIHNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29u
c3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAg
ICAgIEludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAg
ICAgIEludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgICAg
ICBQbGF0Zm9ybVdpZGdldCBwbGF0Zm9ybVdpbmRvdygpIGNvbnN0OworICAgICAgICB2b2lkIGNv
bnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisgICAgICAg
IHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3
KikgY29uc3Q7CQkKKworICAgICAgICB2b2lkIGFkZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVj
dCYpOworICAgICAgICB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShpbnQsIGludCwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUo
KTsKKworICAgICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKKworICAgICAgICB2b2lkIHNldFRvb2xU
aXAoY29uc3QgU3RyaW5nJik7CisKKyAgICAgICAgdm9pZCBwcmludChGcmFtZSopOworCisgICAg
ICAgIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUpOworCisgICAgICAgIC8vIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGNhbGwuIFRo
ZSBDaHJvbWVDbGllbnQgY2FuIGRpc3BsYXkgVUkgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNz
aW9uCisgICAgICAgIC8vIHRvIHVzZSBHZW9sb2NvY2F0aW9uLiBUaGUgQ2hyb21lQ2xpZW50IG11
c3QgY2FsbCBHZW9sb2NhdGlvbjo6c2V0U2hvdWxkQ2xlYXJDYWNoZSgpIGFwcHJvcHJpYXRlbHku
CisgICAgICAgIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1l
KiwgR2VvbG9jYXRpb24qKTsKKworICAgICAgICB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBh
c3NSZWZQdHI8RmlsZUNob29zZXI+KTsKKworICAgICAgICBib29sIHNldEN1cnNvcihQbGF0Zm9y
bUN1cnNvckhhbmRsZSk7CisKKyAgICAgICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVu
IGZvcm0gZWxlbWVudCBoYXMgY2hhbmdlZC4gVGhpcyBmdW5jdGlvbgorICAgICAgICAvLyB3aWxs
IGJlIGNhbGxlZCBmcmVxdWVudGx5LCBzbyBoYW5kbGluZyBzaG91bGQgYmUgdmVyeSBmYXN0Lgor
ICAgICAgICB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKik7CisKKyAgICAgICAg
UGFzc093blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBjcmVhdGVIVE1MUGFyc2VyUXVpcmtzKCk7Cisg
ICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wYjExMzIxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9DbGlwYm9hcmRIYWlrdS5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkSGFpa3UuaCIKKworI2luY2x1
ZGUgIkhhc2hUYWJsZS5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKworI2luY2x1ZGUgPGFwcC9DbGlwYm9hcmQuaD4KKyNpbmNsdWRlIDxNZXNzYWdl
Lmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDbGlw
Ym9hcmRIYWlrdTo6Q2xpcGJvYXJkSGFpa3UoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwg
Ym9vbCBmb3JEcmFnZ2luZykgCisgICAgOiBDbGlwYm9hcmQocG9saWN5LCBmb3JEcmFnZ2luZykK
K3sKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSkKK3sKKyAgICBCTWVzc2FnZSAqZGF0YSA9IChCTWVzc2FnZSAqKSBOVUxMOworCisgICAgaWYg
KGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBib2Fy
ZC0+RGF0YSgpKSkgeworICAgICAgICAgICAgZGF0YS0+UmVtb3ZlTmFtZShCU3RyaW5nKHR5cGUp
LlN0cmluZygpKTsKKyAgICAgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAg
IH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2xp
cGJvYXJkSGFpa3U6OmNsZWFyQWxsRGF0YSgpIAoreworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxv
Y2soKSkgeworICAgICAgICBiZV9jbGlwYm9hcmQtPkNsZWFyKCk7CisgICAgICAgIGJlX2NsaXBi
b2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQor
fQorCitTdHJpbmcgQ2xpcGJvYXJkSGFpa3U6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBi
b29sJiBzdWNjZXNzKSBjb25zdCAKK3sKKyAgICBCU3RyaW5nIHJlc3VsdDsKKyAgICBzdWNjZXNz
ID0gZmFsc2U7CisgICAgQk1lc3NhZ2UgKmRhdGEgPSAoQk1lc3NhZ2UgKikgTlVMTDsKKworICAg
IGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBpZiAoKGRhdGEgPSBiZV9jbGlw
Ym9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAgICAgIGlmIChkYXRhLT5GaW5kU3RyaW5nKEJTdHJp
bmcodHlwZSkuU3RyaW5nKCksICZyZXN1bHQpID09IEJfT0spCisgICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIENsaXBib2FyZEhhaWt1Ojpz
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKSAKK3sKKyAgICBi
b29sIHJlc3VsdCA9IGZhbHNlOworICAgIEJNZXNzYWdlICpiZGF0YSA9IChCTWVzc2FnZSAqKSBO
VUxMOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGlmICgoYmRh
dGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAgICAgIGJkYXRhLT5SZW1vdmVO
YW1lKEJTdHJpbmcodHlwZSkuU3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKGJkYXRhLT5BZGRT
dHJpbmcoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSwgQlN0cmluZyhkYXRhKSkgPT0gQl9PSykKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGJlX2NsaXBi
b2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkK
K0hhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRIYWlrdTo6dHlwZXMoKSBjb25zdCAKK3sKKyAgICBI
YXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIEJNZXNzYWdlICpkYXRhID0gKEJNZXNzYWdlICop
IE5VTEw7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgaWYgKChk
YXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCkpKSB7CisgICAgICAgICAgICBjaGFyICpuYW1lOwor
ICAgICAgICAgICAgdWludDMyIHR5cGU7CisgICAgICAgICAgICBpbnQzMiBjb3VudDsKKworICAg
ICAgICAgICAgZm9yIChpbnQzMiBpID0gMDsKKyAgICAgICAgICAgICAgICAgZGF0YS0+R2V0SW5m
byhCX0FOWV9UWVBFLCBpLCAmbmFtZSwgJnR5cGUsICZjb3VudCkgPT0gQl9PSzsKKyAgICAgICAg
ICAgICAgICAgaSsrKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChuYW1lKTsKKyAgICAg
ICAgICAgIH0gCisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbnRQb2ludCBDbGlwYm9hcmRIYWlrdTo6
ZHJhZ0xvY2F0aW9uKCkgY29uc3QgCit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIEludFBvaW50KDAsMCk7Cit9CisKK0NhY2hlZEltYWdlKiBDbGlwYm9hcmRIYWlrdTo6ZHJh
Z0ltYWdlKCkgY29uc3QgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsg
Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNv
bnN0IEludFBvaW50JikgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworTm9kZSogQ2xp
cGJvYXJkSGFpa3U6OmRyYWdJbWFnZUVsZW1lbnQoKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOyAKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdl
RWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK0RyYWdJbWFnZVJlZiBDbGlwYm9hcmRIYWlrdTo6Y3JlYXRlRHJhZ0ltYWdlKEludFBv
aW50JiBkcmFnTG9jKSBjb25zdAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorCit2b2lkIENsaXBib2FyZEhhaWt1OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2Uo
RWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopIAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OndyaXRlVVJMKGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OndyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFtZSopIAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2xpcGJvYXJkSGFpa3U6Omhhc0Rh
dGEoKSAKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIEJNZXNzYWdlICpkYXRhID0g
KEJNZXNzYWdlICopIE5VTEw7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAg
ICAgICAgaWYgKChkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCkpKSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSAhZGF0YS0+SXNFbXB0eSgpOworICAgICAgICB9CisgICAgICAgIGJlX2NsaXBib2Fy
ZC0+VW5sb2NrKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBi
b2FyZEhhaWt1LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0ODhjNgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuaApAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29k
QGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDbGlwYm9hcmRIYWlrdV9oCisjZGVmaW5lIENs
aXBib2FyZEhhaWt1X2gKKworI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorI2luY2x1ZGUgIkNsaXBi
b2FyZEFjY2Vzc1BvbGljeS5oIgorCisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNs
dWRlIDxhcHAvQ2xpcGJvYXJkLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNz
IENhY2hlZEltYWdlOworCisgICAgLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50
cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQorICAgIGNsYXNzIENsaXBib2FyZEhh
aWt1IDogcHVibGljIENsaXBib2FyZCB7CisgICAgcHVibGljOgorICAgICAgICBDbGlwYm9hcmRI
YWlrdShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGZvckRyYWdnaW5nKTsKKyAg
ICAgICAgfkNsaXBib2FyZEhhaWt1KCkgeyB9CisKKyAgICAgICAgdm9pZCBjbGVhckRhdGEoY29u
c3QgU3RyaW5nJiB0eXBlKTsKKyAgICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsKKyAgICAgICAg
U3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdDsK
KyAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBk
YXRhKTsKKworICAgICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQorICAgICAgICBI
YXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKworICAgICAgICBJbnRQb2ludCBkcmFnTG9j
YXRpb24oKSBjb25zdDsKKyAgICAgICAgQ2FjaGVkSW1hZ2UqIGRyYWdJbWFnZSgpIGNvbnN0Owor
ICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7
CisgICAgICAgIE5vZGUqIGRyYWdJbWFnZUVsZW1lbnQoKTsKKyAgICAgICAgdm9pZCBzZXREcmFn
SW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOworCisgICAgICAgIHZpcnR1YWwg
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgZHJhZ0xvYykgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKTsKKworICAgICAgICB2
aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBDbGlwYm9hcmRIYWlrdV9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvQ29udGV4dE1lbnVDbGllbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmI5YmZlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEhhaWt1LmgiCisK
KyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCit2b2lkIENvbnRleHRNZW51Q2xpZW50SGFpa3U6OmNvbnRleHRN
ZW51RGVzdHJveWVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUNsaWVudEhhaWt1OjpnZXRDdXN0b21NZW51RnJvbURl
ZmF1bHRJdGVtcyhDb250ZXh0TWVudSogbWVudSkKK3sKKyAgICByZXR1cm4gbWVudS0+cGxhdGZv
cm1EZXNjcmlwdGlvbigpOworfQorCit2b2lkIENvbnRleHRNZW51Q2xpZW50SGFpa3U6OmNvbnRl
eHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSosIGNvbnN0IENvbnRleHRNZW51KikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENvbnRleHRNZW51Q2xpZW50SGFp
a3U6OmRvd25sb2FkVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIENvbnRleHRNZW51Q2xpZW50SGFpa3U6Omxvb2tVcEluRGljdGlvbmFyeShG
cmFtZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudUNs
aWVudEhhaWt1OjpzcGVhayhjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVDbGllbnRIYWlrdTo6c3RvcFNwZWFraW5nKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENvbnRleHRNZW51Q2xpZW50SGFpa3U6OnNl
YXJjaFdpdGhHb29nbGUoY29uc3QgRnJhbWUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUNsaWVudEhhaWt1LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iYjUzYWQzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
b250ZXh0TWVudUNsaWVudEhhaWt1LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENvbnRleHRNZW51Q2xpZW50SGFpa3VfaAorI2RlZmluZSBDb250ZXh0TWVudUNsaWVudEhhaWt1
X2gKKworI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIGNsYXNzIENvbnRleHRNZW51OworCisgICAgY2xhc3MgQ29udGV4dE1lbnVDbGll
bnRIYWlrdSA6IHB1YmxpYyBDb250ZXh0TWVudUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVEZXN0cm95ZWQoKTsKKworICAgICAgICB2aXJ0dWFs
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIGdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKENv
bnRleHRNZW51Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3Rl
ZChDb250ZXh0TWVudUl0ZW0qLCBjb25zdCBDb250ZXh0TWVudSopOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCBkb3dubG9hZFVSTChjb25zdCBLVVJMJiB1cmwpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgc2VhcmNoV2l0aEdvb2dsZShjb25zdCBGcmFtZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
bG9va1VwSW5EaWN0aW9uYXJ5KEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzcGVhayhj
b25zdCBTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0b3BTcGVha2luZygpOworICAg
IH07Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDb250ZXh0TWVudUNsaWVu
dEhhaWt1X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVu
dUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEzNGY4ZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAKQEAgLTAs
MCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250
ZXh0TWVudS5oIgorCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCisjaW5jbHVkZSAiQ29u
dGV4dE1lbnVDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworI2luY2x1ZGUgPExvb3Blci5oPgorI2luY2x1ZGUgPE1lbnUuaD4KKyNpbmNsdWRl
IDxNZXNzYWdlLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhpcyBj
bGFzcyBpc24ndCB1c2VkIHlldAorY2xhc3MgQ29udGV4dE1lbnVSZWNlaXZlciA6IHB1YmxpYyBC
TG9vcGVyCit7CitwdWJsaWM6CisgICAgQ29udGV4dE1lbnVSZWNlaXZlcihDb250ZXh0TWVudSog
bWVudSkKKyAgICAgICAgOiBCTG9vcGVyKCJjb250ZXh0X21lbnVfcmVjZWl2ZXIiKQorICAgICAg
ICAsIG1fbWVudShtZW51KQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQgPSAtMTsKKyAgICB9CisK
KyAgICB2b2lkIEhhbmRsZU1lc3NhZ2UoQk1lc3NhZ2UqIG1zZykKKyAgICB7CisgICAgICAgIG1f
cmVzdWx0ID0gbXNnLT53aGF0OworICAgICAgICBpZiAobV9yZXN1bHQgIT0gLTEpIHsKKyAgICAg
ICAgICAgIEJNZW51SXRlbSogaXRlbSA9IG1fbWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpLT5G
aW5kSXRlbShtX3Jlc3VsdCk7CisgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAg
ICAgICAgICAgICAgcHJpbnRmKCJFcnJvcjogQ29udGV4dCBtZW51IGl0ZW0gd2l0aCBjb2RlICVp
IG5vdCBmb3VuZCFcbiIsIG1fcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gY21JdGVtKGl0ZW0pOworICAg
ICAgICAgICAgbV9tZW51LT5jb250cm9sbGVyKCktPmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKCZj
bUl0ZW0pOworICAgICAgICAgICAgY21JdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgUmVzdWx0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3Jlc3VsdDsKKyAgICB9Citwcml2YXRlOgorICAgIENvbnRleHRNZW51KiBtX21lbnU7
CisgICAgaW50IG1fcmVzdWx0OworfTsKKworQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKKyAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpLCBt
X3BsYXRmb3JtRGVzY3JpcHRpb24oTlVMTCkKK3sKKyAgICAvKiBHZXQgcG9zaXRpb24gKi8KKyAg
ICBpZiAocmVzdWx0LmlubmVyTm9kZSgpICE9IE5VTEwgJiYgcmVzdWx0LmlubmVyTm9kZSgpLT5k
b2N1bWVudCgpICE9IE5VTEwpIHsKKyAgICAgICAgQlZpZXcqIHZpZXcgPSByZXN1bHQuaW5uZXJO
b2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCktPnZpZXcoKS0+aGFpa3VXaWRnZXQoKTsKKyAgICAg
ICAgaW50IGNoaWxkID0gMDsKKyAgICAgICAgd2hpbGUgKHZpZXctPkNoaWxkQXQoY2hpbGQpICE9
IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICh2aWV3LT5DaGlsZEF0KGNoaWxkKS0+TmFtZSgpID09
ICJzY3JvbGxfdmlld19jYW52YXMiKSB7CisgICAgICAgICAgICAgICAgbV9wb2ludCA9IHZpZXct
PkNoaWxkQXQoY2hpbGQpLT5Db252ZXJ0VG9TY3JlZW4oQlBvaW50KHJlc3VsdC5wb2ludCgpLngo
KSwgcmVzdWx0LnBvaW50KCkueSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjaGlsZCsrOworICAgICAgICB9CisgICAgfQorICAgIHByaW50
ZigiQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkgJWkgJWlcbiIsIHJlc3VsdC5wb2ludCgpLngo
KSwgcmVzdWx0LnBvaW50KCkueSgpKTsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcg
Qk1lbnUoImNvbnRleHRfbWVudSIpOworfQorCitDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkK
K3sKKyAgICBwcmludGYoIkNvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKVxuIik7CisgICAgZGVs
ZXRlIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKK30KKwordm9pZCBDb250ZXh0TWVudTo6YXBwZW5k
SXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCit7CisgICAgcHJpbnRmKCJDb250ZXh0TWVudTo6
YXBwZW5kSXRlbVxuIik7CisKKyAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7CisKKyAg
ICBCTWVudUl0ZW0qIGJJdGVtID0gaXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwor
ICAgIGlmIChiSXRlbSAhPSBOVUxMKQorICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkFk
ZEl0ZW0oYkl0ZW0pOworfQorCit1bnNpZ25lZCBDb250ZXh0TWVudTo6aXRlbUNvdW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5Db3VudEl0ZW1zKCk7Cit9
CisKK3ZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0ZW0odW5zaWduZWQgcG9zaXRpb24sIENvbnRl
eHRNZW51SXRlbSYgaXRlbSkKK3sKKyAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7CisK
KyAgICBCTWVudUl0ZW0qIGJJdGVtID0gaXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigp
OworICAgIGlmIChiSXRlbSAhPSBOVUxMKQorICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24t
PkFkZEl0ZW0oYkl0ZW0sIHBvc2l0aW9uKTsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24g
Q29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
X3BsYXRmb3JtRGVzY3JpcHRpb247Cit9CisKK3ZvaWQgQ29udGV4dE1lbnU6OnNldFBsYXRmb3Jt
RGVzY3JpcHRpb24oUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKK3sKKyAgICBpZiAoc3Rh
dGljX2Nhc3Q8Qk1lbnUqPihtZW51KSA9PSBtX3BsYXRmb3JtRGVzY3JpcHRpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIGRlbGV0ZSBtX3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gc3RhdGljX2Nhc3Q8Qk1lbnUqPihtZW51KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nv
bnRleHRNZW51SXRlbUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1l
bnVJdGVtSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Y2Yy
MjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51
SXRlbUhhaWt1LmNwcApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBM
ZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgorCisjaW5jbHVkZSAiQ29udGV4dE1l
bnUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8TWVudS5oPgor
I2luY2x1ZGUgPE1lbnVJdGVtLmg+CisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1ZGUgPFN0
cmluZy5oPgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitDb250ZXh0TWVudUl0ZW06
OkNvbnRleHRNZW51SXRlbShQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gaXRlbSkKK3sKKyAg
ICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBpdGVtOworfQorCitDb250ZXh0TWVudUl0ZW06OkNv
bnRleHRNZW51SXRlbShDb250ZXh0TWVudSogc3ViTWVudSkKK3sKKyAgICBtX3BsYXRmb3JtRGVz
Y3JpcHRpb24gPSBuZXcgQk1lbnVJdGVtKHN1Yk1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCTWVzc2FnZShD
b250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbikpOworfQorCitDb250ZXh0TWVudUl0ZW06OkNvbnRl
eHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51QWN0aW9uIGFj
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdGl0
bGUsIENvbnRleHRNZW51KiBzdWJNZW51KQoreworICAgIGlmICh0eXBlID09IEFjdGlvblR5cGUp
CisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBCTWVudUl0ZW0oQlN0cmluZyh0
aXRsZSkuU3RyaW5nKCksIG5ldyBCTWVzc2FnZShhY3Rpb24pKTsKKyAgICBlbHNlIGlmICh0eXBl
ID09IFNlcGFyYXRvclR5cGUpCisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBC
U2VwYXJhdG9ySXRlbSgpOworICAgIGVsc2UgeworICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24gPSBuZXcgQk1lbnVJdGVtKHN1Yk1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKSwgbmV3IEJN
ZXNzYWdlKGFjdGlvbikpOworICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPlNldExhYmVs
KEJTdHJpbmcodGl0bGUpLlN0cmluZygpKTsKKyAgICB9Cit9CisKK0NvbnRleHRNZW51SXRlbTo6
fkNvbnRleHRNZW51SXRlbSgpCit7CisgICAgZGVsZXRlIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsK
K30KKworUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIENvbnRleHRNZW51SXRlbTo6cmVsZWFz
ZVBsYXRmb3JtRGVzY3JpcHRpb24oKQoreworICAgIEJNZW51SXRlbSogaXRlbSA9IG1fcGxhdGZv
cm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBOVUxMOworICAgIHJl
dHVybiBpdGVtOworfQorCitDb250ZXh0TWVudUl0ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlw
ZSgpIGNvbnN0Cit7CisgICAgaWYgKGR5bmFtaWNfY2FzdDxCU2VwYXJhdG9ySXRlbSo+KG1fcGxh
dGZvcm1EZXNjcmlwdGlvbikgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNlcGFyYXRvclR5cGU7
CisgICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+U3VibWVudSgpICE9IE5VTEwpCisgICAg
ICAgIHJldHVybiBTdWJtZW51VHlwZTsKKyAgICByZXR1cm4gQWN0aW9uVHlwZTsKK30KKwordm9p
ZCBDb250ZXh0TWVudUl0ZW06OnNldFR5cGUoQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlKQorewor
ICAgIENvbnRleHRNZW51QWN0aW9uIHRoZUFjdGlvbiA9IGFjdGlvbigpOworICAgIFN0cmluZyB0
aGVUaXRsZSA9IHRpdGxlKCk7CisgICAgQk1lbnUqIHN1Yk1lbnUgPSBwbGF0Zm9ybVN1Yk1lbnUo
KTsKKyAgICBkZWxldGUgbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworCisgICAgaWYgKHR5cGUgPT0g
QWN0aW9uVHlwZSkKKyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJNZW51SXRl
bShCU3RyaW5nKHRoZVRpdGxlKS5TdHJpbmcoKSwgbmV3IEJNZXNzYWdlKHRoZUFjdGlvbikpOwor
ICAgIGVsc2UgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlwZSkKKyAgICAgICAgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uID0gbmV3IEJTZXBhcmF0b3JJdGVtKCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
IChzdWJNZW51KSB7CisgICAgICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgQk1l
bnVJdGVtKHN1Yk1lbnUsIG5ldyBCTWVzc2FnZSh0aGVBY3Rpb24pKTsKKyAgICAgICAgICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbi0+U2V0TGFiZWwoQlN0cmluZyh0aGVUaXRsZSkuU3RyaW5nKCkp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5l
dyBCTWVudUl0ZW0oQlN0cmluZyh0aGVUaXRsZSkuU3RyaW5nKCksIG5ldyBCTWVzc2FnZSh0aGVB
Y3Rpb24pKTsKKyAgICB9Cit9CisKK0NvbnRleHRNZW51QWN0aW9uIENvbnRleHRNZW51SXRlbTo6
YWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uID09IE5VTEwp
CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbjsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q29udGV4dE1lbnVBY3Rpb24+KG1fcGxhdGZvcm1EZXNjcmlw
dGlvbi0+TWVzc2FnZSgpLT53aGF0KTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEFj
dGlvbihDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAgaWYgKG1fcGxhdGZvcm1EZXNj
cmlwdGlvbiAhPSBOVUxMKQorICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPk1lc3NhZ2Uo
KS0+d2hhdCA9IGFjdGlvbjsKK30KKworU3RyaW5nIENvbnRleHRNZW51SXRlbTo6dGl0bGUoKSBj
b25zdCAKK3sKKyAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uID09IE5VTEwpCisgICAgICAg
IHJldHVybiggIiIgKTsKKyAgICByZXR1cm4gQlN0cmluZyhtX3BsYXRmb3JtRGVzY3JpcHRpb24t
PkxhYmVsKCkpOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VGl0bGUoY29uc3QgU3Ry
aW5nJiB0aXRsZSkKK3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIGEgYmV0dGVyIHdh
eSB0byBjb252ZXJ0IFdlYktpdCBTdHJpbmdzIGludG8gYyBzdHJpbmdzCisgICAgbV9wbGF0Zm9y
bURlc2NyaXB0aW9uLT5TZXRMYWJlbChCU3RyaW5nKHRpdGxlKS5TdHJpbmcoKSk7Cit9CisKK1Bs
YXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51SXRlbTo6cGxhdGZvcm1TdWJNZW51KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5TdWJtZW51KCk7Cit9
CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51KENvbnRleHRNZW51KiBtZW51KQor
eworICAgIC8vIEZJWE1FOiBXZSBhc3N1bWUgbV9wbGF0Zm9ybURlc2NyaXB0aW9uIGlzIHZhbGlk
CisgICAgY29uc3QgY2hhciogdGl0bGUgPSBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkxhYmVsKCk7
CisgICAgZGVsZXRlIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRmb3JtRGVzY3Jp
cHRpb24gPSBuZXcgQk1lbnVJdGVtKG1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKSwgbmV3IEJN
ZXNzYWdlKGFjdGlvbigpKSk7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5TZXRMYWJlbCh0
aXRsZSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgY2hlY2tl
ZCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uICE9IE5VTEwpCisgICAgICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbi0+U2V0TWFya2VkKGNoZWNrZWQpOworfQorCit2b2lkIENvbnRl
eHRNZW51SXRlbTo6c2V0RW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBpZiAobV9wbGF0Zm9y
bURlc2NyaXB0aW9uICE9IE5VTEwpCisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+U2V0
RW5hYmxlZChlbmFibGUpOworfQorCitib29sIENvbnRleHRNZW51SXRlbTo6ZW5hYmxlZCgpIGNv
bnN0Cit7CisgICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9PSBOVUxMKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5Jc0VuYWJsZWQo
KTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlr
dS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTM4NGNmCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5jcHAKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBn
bWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhN
RTogU2hvdWxkbid0IHRoaXMgYmUgc2F2ZWQgdG8gYW5kIHJlc3RvcmVkIGZyb20gZGlzayB0b28/
CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOworCit2b2lkIHNldENv
b2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKnBvbGljeVVSTCovLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7
Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gY29v
a2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOworfQorCitib29sIGNvb2tpZXNFbmFibGVkKCkKK3sK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYSBzZXR0aW5nCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0N1cnNvckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
MmNkMDhmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JI
YWlrdS5jcHAKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgi
CisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8YXBwL0FwcERlZnMu
aD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1cnNvcjo6Q3Vyc29yKFBsYXRmb3JtQ3Vy
c29yIHApCisgICAgOiBtX2ltcGwocCkKK3sKK30KKworQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vy
c29yJiBvdGhlcikKKyAgICA6IG1faW1wbChvdGhlci5tX2ltcGwpCit7Cit9CisKK0N1cnNvcjo6
fkN1cnNvcigpCit7Cit9CisKK0N1cnNvcjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0N1cnNvciYgQ3Vyc29yOjpvcGVyYXRv
cj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKK3sKKyAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitzdGF0aWMgQ3Vyc29yIGdsb2JhbF9jdXJzb3IoKFBsYXRm
b3JtQ3Vyc29yKUJfQ1VSU09SX1NZU1RFTV9ERUZBVUxUKTsKK3N0YXRpYyBDdXJzb3IgaWJlYW1f
Y3Vyc29yKChQbGF0Zm9ybUN1cnNvcilCX0NVUlNPUl9JX0JFQU0pOworCitjb25zdCBDdXJzb3Im
IHBvaW50ZXJDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25z
dCBDdXJzb3ImIG1vdmVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIGNyb3NzQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNv
cjsKK30KKworY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFs
X2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCit7CisgICAgcmV0dXJu
IGliZWFtX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB3YWl0Q3Vyc29yKCkKK3sKKyAgICBy
ZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBlYXN0UmVzaXpl
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29y
JiBub3J0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisK
K2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xv
YmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RSZXNpemVDdXJzb3IoKQor
eworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoUmVz
aXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vy
c29yJiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0
dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgd2VzdFJlc2l6ZUN1cnNvcigp
Cit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhT
b3V0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxf
Y3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNv
cigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9y
dGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNv
cjsKK30KKworY29uc3QgQ3Vyc29yJiBjb2x1bW5SZXNpemVDdXJzb3IoKQoreworICAgIHJldHVy
biBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHJvd1Jlc2l6ZUN1cnNvcigpCit7
CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgdmVydGljYWxU
ZXh0Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vy
c29yJiBjZWxsQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29u
c3QgQ3Vyc29yJiBjb250ZXh0TWVudUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9Ecm9wQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xv
YmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjb3B5Q3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBwcm9ncmVzc0N1cnNvcigpCit7
CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgYWxpYXNDdXJz
b3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5v
bmVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIG5vdEFsbG93ZWRDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIHpvb21JbkN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgem9vbU91dEN1cnNvcigpCit7CisgICAgcmV0dXJuIGds
b2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZ3JhYkN1cnNvcigpCit7CisgICAgcmV0
dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZ3JhYmJpbmdDdXJzb3IoKQor
eworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0NsaWVudEhhaWt1LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0NsaWVudEhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTY0YzY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnQ2xpZW50SGFpa3UuY3BwCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21h
aWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0NsaWVu
dEhhaWt1LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIERyYWdDbGllbnRIYWlrdTo6YWN0aW9u
TWFza0ZvckRyYWcoRHJhZ0RhdGEqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueTsKK30KKwordm9pZCBEcmFnQ2xpZW50SGFpa3U6
OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwg
RHJhZ0RhdGEqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRHJhZ0NsaWVu
dEhhaWt1OjpkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworRHJhZ1NvdXJjZUFjdGlvbiBEcmFnQ2xpZW50SGFpa3U6OmRyYWdTb3VyY2VBY3Rp
b25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7Cit9CisKK3ZvaWQgRHJhZ0NsaWVudEhh
aWt1Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3Qg
SW50UG9pbnQmLCBDbGlwYm9hcmQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRHJhZ0NsaWVudEhhaWt1OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29u
c3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitEcmFnSW1hZ2VSZWYgRHJhZ0NsaWVudEhh
aWt1OjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSop
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdD
bGllbnRIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnQ2xpZW50SGFpa3UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjljZGNlCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnQ2xpZW50SGFpa3UuaApAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5n
b29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIkRyYWdDbGllbnQuaCIKKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBEcmFnQ2xpZW50SGFpa3UgOiBwdWJsaWMgRHJh
Z0NsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1E
cmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhZ0RhdGEqKTsKKyAg
ICAgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFza0Zv
ckRyYWcoRHJhZ0RhdGEqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVz
dHJveWVkKCk7CisgICAgICAgIHZpcnR1YWwgRHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0
aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3
aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9p
bnQmLCBDbGlwYm9hcmQqKTsgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoRHJh
Z0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENs
aXBib2FyZCosIEZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKTsKKyAgICAgICAgdmlydHVh
bCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhLVVJMJiwgY29uc3QgU3RyaW5n
JiBsYWJlbCwgRnJhbWUqKTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0RhdGFIYWlrdS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjdhM2RhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRl
ICJDbGlwYm9hcmRIYWlrdS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQ
bGFpblRleHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworQ29sb3IgRHJhZ0Rh
dGE6OmFzQ29sb3IoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IENvbG9yKCk7Cit9CisKK1dURjo6UGFzc1JlZlB0cjxDbGlwYm9hcmQ+IERyYWdEYXRhOjpjcmVh
dGVDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbmV3IENsaXBib2FyZEhhaWt1KHBvbGljeSwgdHJ1ZSk7Cit9CisKK2Jvb2wgRHJhZ0Rh
dGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBjb250
YWluc0NvbG9yKCkgfHwgY29udGFpbnNVUkwoKSB8fCBjb250YWluc1BsYWluVGV4dCgpOworfQor
Citib29sIERyYWdEYXRhOjpjb250YWluc1VSTCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBEcmFnRGF0YTo6YXNVUkwoU3Ry
aW5nKiB0aXRsZSkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNG
cmFnbWVudChEb2N1bWVudCopIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zOWZkNTZjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9EcmFnSW1hZ2VIYWlrdS5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKKworI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERy
YWdJbWFnZVJlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRTaXpl
KDAsIDApOworfQorCit2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJ
bWFnZVJlZiBpbWFnZSwgRmxvYXRTaXplKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGltYWdlOworfQorCitEcmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0
aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9t
SW1hZ2UoSW1hZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UoQ2FjaGVk
SW1hZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7ICAgICAKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L0VkaXRvckNsaWVudEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRWRp
dG9yQ2xpZW50SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRm
OGM2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0VkaXRvckNs
aWVudEhhaWt1LmNwcApAQCAtMCwwICsxLDQ3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4gCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbmRyZWEg
QW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIAorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50
SGFpa3UuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCisj
aW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRWRpdG9yQ2xpZW50
SGFpa3U6OkVkaXRvckNsaWVudEhhaWt1KCkKKyAgICA6IG1fZWRpdGluZyhmYWxzZSkKKyAgICAs
IG1faW5VbmRvUmVkbyhmYWxzZSkKK3sKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6c2V0
UGFnZSggUGFnZSogcGFnZSApCit7CisgICAgbV9wYWdlID0gcGFnZTsKK30KKwordm9pZCBFZGl0
b3JDbGllbnRIYWlrdTo6cGFnZURlc3Ryb3llZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWRp
dG9yQ2xpZW50SGFpa3U6OnNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoSFRNTEVsZW1lbnQqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVk
aXRvckNsaWVudEhhaWt1OjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvckNsaWVudEhh
aWt1Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvckNsaWVudEhhaWt1
Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnRv
Z2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIEVkaXRvckNsaWVudEhhaWt1Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEVk
aXRvckNsaWVudEhhaWt1Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK2ludCBFZGl0b3JDbGllbnRIYWlrdTo6c3BlbGxDaGVja2VyRG9jdW1l
bnRUYWcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jv
b2wgRWRpdG9yQ2xpZW50SGFpa3U6OmlzRWRpdGFibGUoKQoreworICAgIC8vIEZJWE1FOiBzaG91
bGQgYmUgY29udHJvbGxhYmxlCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvckNs
aWVudEhhaWt1OjpzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50
SGFpa3U6OnNob3VsZEVuZEVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SGFpa3U6
OnNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWRpdG9y
Q2xpZW50SGFpa3U6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0
b3JJbnNlcnRBY3Rpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0
aW5nKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgRWRpdG9yQ2xpZW50SGFpa3U6OnNob3VsZEFwcGx5U3R5bGUoV2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNv
cmU6OlJhbmdlKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEVkaXRvckNsaWVudEhhaWt1OjpzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShS
YW5nZSosIFJhbmdlKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpkaWRCZWdpbkVkaXRpbmcoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9lZGl0aW5nID0gdHJ1ZTsKK30KKwordm9pZCBFZGl0
b3JDbGllbnRIYWlrdTo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpyZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRvckNs
aWVudEhhaWt1OjpkaWRFbmRFZGl0aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IG1fZWRpdGluZyA9IGZhbHNlOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpkaWRXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6ZGlkU2V0U2VsZWN0aW9uVHlwZXNGb3JQYXN0ZWJvYXJk
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1
OjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29t
bWFuZD4gY21kKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xp
ZW50SGFpa3U6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkVkaXRDb21tYW5kPikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRv
ckNsaWVudEhhaWt1OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6Y2FuVW5kbygpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRWRp
dG9yQ2xpZW50SGFpa3U6OmNhblJlZG8oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1Ojp1bmRvKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1faW5VbmRvUmVkbyA9IHRydWU7CisgICAg
bV9pblVuZG9SZWRvID0gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnJlZG8o
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9pblVuZG9SZWRvID0gdHJ1ZTsKKyAg
ICBtX2luVW5kb1JlZG8gPSBmYWxzZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6aGFu
ZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBGcmFtZSogZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuOworCQorICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V2ZW50ID0g
ZXZlbnQtPmtleUV2ZW50KCk7CisgICAgaWYgKCFrZXZlbnQgfHwga2V2ZW50LT50eXBlKCkgPT0g
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlVcCkKKyAgICAgICAgcmV0dXJuOworCQorICAgIE5v
ZGUqIHN0YXJ0ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsKKyAgICBpZiAo
IXN0YXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3RhcnQtPmlzQ29udGVudEVkaXRh
YmxlKCkpIHsKKyAgICAgICAgc3dpdGNoKGtldmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkp
IHsKKyAgICAgICAgY2FzZSBWS19CQUNLOgorICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5k
ZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJELAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+Y3RybEtl
eSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRydWUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfREVMRVRFOgorICAgICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5kZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXI6OkZP
UldBUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a2V2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19MRUZUOgorICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8g
U2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkxFRlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXZlbnQt
PmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS0+bW9kaWZ5KGtldmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVY
VEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51
bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZL
X1VQOgorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlm
dEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxl
cjo6TU9WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkJBQ0tXQVJELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2V2ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFu
dWxhcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfRE9XTjoKKyAgICAgICAgICAgIGZy
YW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtldmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJE
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V2ZW50LT5jdHJsS2V5
KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0eSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVktfUFJJT1I6ICAvLyBQYWdlVXAKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+Y29tbWFuZCgiTW92ZVVwQnlQYWdlQW5kTW9kaWZ5Q2FyZXQiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFZLX05FWFQ6ICAvLyBQYWdlRG93bgorICAgICAgICAgICAg
ZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlRG93bkJ5UGFnZUFuZE1vZGlmeUNhcmV0Iik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19SRVRVUk46CisgICAgICAgICAg
ICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIkluc2VydExpbmVCcmVhayIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfVEFCOgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCFrZXZlbnQtPmN0cmxLZXkoKSAmJiAha2V2
ZW50LT5hbHRLZXkoKSAmJiAha2V2ZW50LT50ZXh0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGtldmVudC0+dGV4dCgpLmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVUNoYXIgY2ggPSBrZXZlbnQtPnRleHQoKVswXTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJl
c3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91cgorICAgICAgICAgICAgICAgICAgICBpZiAoY2gg
PCAnICcpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGtldmVudC0+dGV4
dCgpLCBldmVudCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGtldmVudC0+Y3RybEtleSgpKSB7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgp
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBWS19BOgorICAgICAgICAgICAgICAgICAgICBmcmFt
ZS0+ZWRpdG9yKCktPmNvbW1hbmQoIlNlbGVjdEFsbCIpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX0I6CisgICAgICAgICAgICAgICAgICAgIGZy
YW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiVG9nZ2xlQm9sZCIpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX0M6CisgICAgICAgICAgICAgICAgICAg
IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiQ29weSIpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX0k6CisgICAgICAgICAgICAgICAgICAgIGZy
YW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiVG9nZ2xlSXRhbGljIik7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVktfVjoKKyAgICAgICAgICAgICAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJQYXN0ZSIpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX1g6CisgICAgICAgICAgICAgICAgICAg
IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiQ3V0Iik7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVktfWToKKyAgICAgICAgICAgICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJSZWRvIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgVktfWjoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUt
PmVkaXRvcigpLT5jb21tYW5kKCJVbmRvIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSgpKSB7CisgICAgICAgIGNhc2UgVktfVVA6CisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkt
PmNvbW1hbmQoIk1vdmVVcCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktf
RE9XTjoKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZURvd24iKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX1BSSU9SOiAgLy8gUGFnZVVwCisg
ICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVVcEJ5UGFnZUFuZE1vZGlm
eUNhcmV0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19ORVhUOiAgLy8g
UGFnZURvd24KKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZURvd25C
eVBhZ2VBbmRNb2RpZnlDYXJldCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VktfSE9NRToKKyAgICAgICAgICAgIGlmIChrZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX0VORDoKKyAgICAgICAgICAg
IGlmIChrZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkt
PmNvbW1hbmQoIk1vdmVUb0VuZE9mRG9jdW1lbnQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKGtldmVudC0+Y3RybEtleSgpKSB7CisgICAg
ICAgICAgICAgICAgc3dpdGNoKGtldmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBWS19BOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJTZWxlY3RBbGwiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX0M6IGNhc2UgVktfWDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiQ29weSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6aGFuZGxl
SW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnRleHRGaWVsZERpZEJlZ2luRWRpdGlu
ZyhFbGVtZW50KikKK3sKKyAgICBtX2VkaXRpbmcgPSB0cnVlOworfQorCit2b2lkIEVkaXRvckNs
aWVudEhhaWt1Ojp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqKQoreworICAgIG1fZWRp
dGluZyA9IGZhbHNlOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1Ojp0ZXh0RGlkQ2hhbmdl
SW5UZXh0RmllbGQoRWxlbWVudCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9v
bCBFZGl0b3JDbGllbnRIYWlrdTo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQq
LCBLZXlib2FyZEV2ZW50KikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdG9y
Q2xpZW50SGFpa3U6OnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6dGV4dERp
ZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25z
dCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xp
ZW50SGFpa3U6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhj
b25zdCBVQ2hhciosIGludCwgaW50KiwgaW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitTdHJpbmcgRWRpdG9yQ2xpZW50SGFpa3U6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZv
ck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xp
ZW50SGFpa3U6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8
R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0
cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1Ojp1cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6c2hvd1NwZWxsaW5nVUkoYm9vbCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEVkaXRvckNsaWVudEhhaWt1OjpzcGVs
bGluZ1VJSXNTaG93aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29u
c3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFi
bGVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SGFp
a3U6OmlzRWRpdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZWRpdGluZzsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0VkaXRvckNsaWVudEhhaWt1LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0VkaXRvckNsaWVu
dEhhaWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhOTU5NwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRWRpdG9yQ2xpZW50SGFpa3Uu
aApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdv
b2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBFZGl0b3JDbGllbnRIYWlrdV9ICisjZGVmaW5lIEVkaXRvckNsaWVudEhhaWt1X0gKKworI2lu
Y2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIEVkaXRvckNsaWVudEhhaWt1IDogcHVibGljIEVkaXRvckNsaWVu
dCB7CisgICAgcHVibGljOgorICAgICAgICBFZGl0b3JDbGllbnRIYWlrdSgpOworICAgICAgICB2
b2lkIHNldFBhZ2UoIFBhZ2UqIHBhZ2UgKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFnZURl
c3Ryb3llZCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5n
ZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShIVE1M
RWxlbWVudCopOworICAgICAgICB2aXJ0dWFsIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVk
KCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJs
ZWQoKTsKKyAgICAgICAgdmlydHVhbCBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2lu
ZygpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKTsKKyAgICAgICAgdmly
dHVhbCBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKTsKKworICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNFZGl0YWJsZSgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRp
bmcoUmFuZ2UqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoUmFuZ2Uq
KTsKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiwg
RWRpdG9ySW5zZXJ0QWN0aW9uKTsKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRl
eHQoY29uc3QgU3RyaW5nJiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pOworICAgICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBS
YW5nZSogdG9SYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKTsKKworICAgICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmFuZ2UqKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIHNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFu
Z2UqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEVuZEVkaXRpbmcoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZXRTZWxlY3Rpb25UeXBl
c0ZvclBhc3RlYm9hcmQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5k
Rm9yVW5kbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckNvbW1hbmRGb3JSZWRvKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7CisKKyAgICAgICAgdmlydHVh
bCBib29sIGNhblVuZG8oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGNhblJlZG8oKSBj
b25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgdW5kbygpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVkbygpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtl
eWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUlucHV0TWV0aG9kS2V5
ZG93bihLZXlib2FyZEV2ZW50Kik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERp
ZEJlZ2luRWRpdGluZyhFbGVtZW50Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXh0RmllbGRE
aWRFbmRFZGl0aW5nKEVsZW1lbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFu
Z2VJblRleHRGaWVsZChFbGVtZW50Kik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBkb1RleHRGaWVs
ZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCosIEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxl
bmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCogbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICB2aXJ0
dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrR3Jh
bW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNv
bnN0IEdyYW1tYXJEZXRhaWwmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpOworICAgICAgICB2aXJ0dWFsIGJvb2wgc3BlbGxp
bmdVSUlzU2hvd2luZygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQo
Y29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOworCisgICAgICAgIGJvb2wg
aXNFZGl0aW5nKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBQYWdlKiBtX3BhZ2U7
CisgICAgICAgIGJvb2wgbV9lZGl0aW5nOworICAgICAgICBib29sIG1faW5VbmRvUmVkbzsgLy8g
b3VyIHVuZG8gc3RhY2sgd29ya3MgZGlmZmVyZW50bHkgLSBkb24ndCByZS1lbnRlciEKKyAgICB9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFZGl0b3JDbGllbnRIYWlr
dV9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRXZlbnRMb29wSGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1MGU2ZgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvRXZlbnRMb29wSGFpa3UuY3BwCkBAIC0wLDAgKzEsNDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJFdmVudExvb3AuaCIKKworI2luY2x1ZGUgPGFwcC9BcHBsaWNhdGlvbi5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBFdmVudExvb3A6OmN5Y2xlKCkKK3sKKyAgICBpZiAoIWJl
X2FwcCkKKyAgICAgICAgbV9lbmRlZCA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlQ2hvb3NlckhhaWt1
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZUNob29zZXJIYWlrdS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlNDJiNgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZUNob29zZXJIYWlrdS5jcHAKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxl
YXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZUNo
b29zZXIuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiSWNvbi5o
IgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKEZp
bGVDaG9vc2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCisgICAgOiBt
X2NsaWVudChjbGllbnQpCisgICAgLCBtX2ZpbGVuYW1lcygpCisgICAgLCBtX2ljb24oY2hvb3Nl
SWNvbihmaWxlbmFtZSkpCit7CisgICAgbV9maWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lKTsKK30K
KworU3RyaW5nIEZpbGVDaG9vc2VyOjpiYXNlbmFtZUZvcldpZHRoKGNvbnN0IEZvbnQmLCBpbnQg
d2lkdGgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9GaWxlU3lzdGVtSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9GaWxlU3lzdGVtSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjFmNGU5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVT
eXN0ZW1IYWlrdS5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxl
U3lzdGVtLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBzdHJp
bmcpCit7CisgICAgcmV0dXJuIHN0cmluZy51dGY4KCk7Cit9CisKK1N0cmluZyBob21lRGlyZWN0
b3J5UGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK0NTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0
Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGhh
bmRsZSA9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgcmV0dXJuIENTdHJpbmcoKTsK
K30KKwordm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0b3I8U3RyaW5n
PiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIp
Cit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBlbnRyaWVzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOWQzYWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwCkBAIC0w
LDAgKzEsNzY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERvbiBHaWJzb24gPGRnaWJz
b243N0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEhhaWt1LmgiCisKKyNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVU
cmVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxTdHJpbmcuaD4KKy8vI2luY2x1
ZGUgPFZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UoKQorICAgIDogbV9mcmFtZSgwKQorICAgICwg
bV9maXJzdERhdGEoZmFsc2UpCit7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
ZnJhbWVMb2FkZXJEZXN0cm95ZWQoKQoreworICAgIG1fZnJhbWUgPSAwOworICAgIGRlbGV0ZSB0
aGlzOworfQorCitGcmFtZSogRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZnJhbWUoKQoreyAKKyAg
ICByZXR1cm4gbV9mcmFtZTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpoYXNX
ZWJWaWV3KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6Omhhc0ZyYW1lVmlldygpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBG
cmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgY29uc3QgCit7
IAorICAgIG5vdEltcGxlbWVudGVkKCk7IAorICAgIHJldHVybiBmYWxzZTsgCit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6bWFrZURvY3VtZW50VmlldygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjptYWtlUmVwcmVz
ZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
Ky8vIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2V0RG9jdW1lbnRWaWV3RnJvbUNhY2hl
ZFBhZ2UoV2ViQ29yZTo6Q2FjaGVkUGFnZSopCisvL3sKKy8vICAgIG5vdEltcGxlbWVudGVkKCk7
CisvL30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpmb3JjZUxheW91dCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpm
b3JjZUxheW91dEZvck5vbkhUTUwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2V0Q29waWVzT25TY3JvbGwoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKKy8vdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkZXRh
Y2hlZEZyb21QYXJlbnQxKCkKKy8veworLy8gIG5vdEltcGxlbWVudGVkKCk7CisvL30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkZXRhY2hlZEZyb21QYXJlbnQyKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRldGFj
aGVkRnJvbVBhcmVudDMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGV0YWNoZWRGcm9tUGFyZW50NCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworLy92b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmxvYWRlZEZy
b21DYWNoZWRQYWdlKCkKKy8veworLy8gICAgbm90SW1wbGVtZW50ZWQoKTsKKy8vfQorCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7ICAgCit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OmRpc3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQg
bG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgbV9yZXNwb25z
ZSA9IHJlc3BvbnNlOworICAgIG1fZmlyc3REYXRhID0gdHJ1ZTsKK30KKwordm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGhSZWNlaXZl
ZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNw
YXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmLCBpbnQgbGVuZ3RoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlk
TG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFNjcmlwdFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoV2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJMJiwgZG91YmxlLCBkb3VibGUpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRj
aERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFdpbGxDbG9zZSgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25h
bExvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoRGlkQ29tbWl0TG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQo
Y29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291
cmNlRXJyb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0
Y2hEaWRGaW5pc2hMb2FkKCkgCit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNw
YXRjaERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworRnJhbWUqIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoQ3JlYXRl
UGFnZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFNob3coKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBjYWxsIGRpcmVjdGx5IGhlcmUg
KGNvbW1lbnQgY29waWVkIGZyb20gUXQgdmVyc2lvbikKKyAgICBBU1NFUlQoZnJhbWUoKSAmJiBw
b2xpY3lGdW5jdGlvbik7CisgICAgaWYgKCFmcmFtZSgpIHx8ICFwb2xpY3lGdW5jdGlvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIChmcmFtZSgpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQ
b2xpY3lVc2UpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVu
Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgQVNTRVJUKGZyYW1lKCkgJiYgcG9saWN5RnVuY3Rpb24pOworICAgIGlmICgh
ZnJhbWUoKSB8fCAhcG9saWN5RnVuY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhN
RTogSSB0aGluayBRdCB2ZXJzaW9uIG1hcnNoYWxzIHRoaXMgdG8gYW5vdGhlciB0aHJlYWQgc28g
d2hlbiB3ZQorICAgIC8vIGhhdmUgbXVsdGktdGhyZWFkZWQgZG93bmxvYWQsIHdlIG1pZ2h0IG5l
ZWQgdG8gZG8gdGhlIHNhbWUKKyAgICAoZnJhbWUoKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlv
bikoUG9saWN5VXNlKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRj
aERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGlj
eUZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBT
dHJpbmcmIGZyYW1lTmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChm
cmFtZSgpICYmIHBvbGljeUZ1bmN0aW9uKTsKKyAgICBpZiAoIWZyYW1lKCkgfHwgIXBvbGljeUZ1
bmN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IEkgdGhpbmsgUXQgdmVyc2lv
biBtYXJzaGFscyB0aGlzIHRvIGFub3RoZXIgdGhyZWFkIHNvIHdoZW4gd2UKKyAgICAvLyBoYXZl
IG11bHRpLXRocmVhZGVkIGRvd25sb2FkLCB3ZSBtaWdodCBuZWVkIHRvIGRvIHRoZSBzYW1lCisg
ICAgKGZyYW1lKCktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7Cit9CisK
K3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChmcmFtZSgpICYmIHBvbGljeUZ1bmN0
aW9uKTsKKyAgICBpZiAoIWZyYW1lKCkgfHwgIXBvbGljeUZ1bmN0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgKGZyYW1lKCktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIEFTU0VSVChmcmFtZSgpICYmIHBvbGljeUZ1bmN0aW9uKTsKKyAgICBpZiAo
IWZyYW1lKCkgfHwgIXBvbGljeUZ1bmN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgKGZyYW1l
KCktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuY2VsUG9saWN5Q2hlY2soKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hVbmFi
bGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoV2ls
bFN1Ym1pdEZvcm0oRnJhbWVQb2xpY3lGdW5jdGlvbiBwb2xpY3lGdW5jdGlvbiwgUGFzc1JlZlB0
cjxGb3JtU3RhdGU+KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHN1cmVseSB0b28gc2ltcGxl
CisgICAgQVNTRVJUKGZyYW1lKCkgJiYgcG9saWN5RnVuY3Rpb24pOworICAgIGlmICghZnJhbWUo
KSB8fCAhcG9saWN5RnVuY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICAoZnJhbWUoKS0+bG9h
ZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5VXNlKTsKK30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRNYWluUmVzb3VyY2UoRG9jdW1lbnRMb2FkZXIq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldE1h
aW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpIAoreworICAgIHByaW50ZigiXG5cbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuIik7
CisgICAgcHJpbnRmKCJEb2N1bWVudCBlcnJvcjogJXNcbiIsQlN0cmluZyhlcnJvci5kb21haW4o
KSkuU3RyaW5nKCkpOworICAgIHByaW50ZigiXG5cbioqKioqKioqKioqKioqKioqKioqKioqKipc
blxuIik7CSAKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpjbGVhclVuYXJjaGl2aW5nU3RhdGUoRG9jdW1lbnRMb2FkZXIqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cG9z
dFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpCit7CisgICAgLy8gbm8gcHJvZ3Jlc3Mgbm90
aWZpY2F0aW9uIGZvciBub3cKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0
UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKQoreworICAgIC8vIG5vIHByb2dy
ZXNzIG5vdGlmaWNhdGlvbiBmb3Igbm93ICAgIAorfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uKCkKK3sKKyAgICAvLyBubyBw
cm9ncmVzcyBub3RpZmljYXRpb24gZm9yIG5vdworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkgCit7CisgICAgLy8gdGhpcyBp
cyBvbmx5IGludGVyZXN0aW5nIG9uY2Ugd2UgcHJvdmlkZSBhbiBleHRlcm5hbCBBUEkgZm9yIHRo
ZSBET00KK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzdGFydERvd25sb2FkKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp3aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIgKmwpCit7CisgICAgc2V0VGl0bGUo
bC0+dGl0bGUoKSwgbC0+dXJsKCkpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICBG
cmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7CisgICAgZmwtPnNldEVuY29k
aW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CisgICAgZmwtPmFkZERh
dGEoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpmaW5p
c2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZmluYWxTZXR1cEZvclJlcGxhY2UoRG9j
dW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlR2xvYmFsSGlzdG9yeSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp1cGRhdGVHbG9iYWxI
aXN0b3J5UmVkaXJlY3RMaW5rcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yU3RhbmRhcmRM
b2FkKGNvbnN0IEtVUkwmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlR2xvYmFsSGlzdG9yeUZvclJlbG9hZChjb25zdCBL
VVJMJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnNob3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3Qg
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBpbXBsZW1lbnRhdGlvbi4g
TW9yZSBzb3BoaXN0aWNhdGVkCisgICAgLy8gaW1wbGVtZW50YXRpb24gd291bGQgZGVsZWdhdGUg
dGhlIGRlY2lzaW9uIHRvIGEgUG9saWN5RGVsZWdhdGUuCisgICAgLy8gU2VlIG1hYyBpbXBsZW1l
bnRhdGlvbiBmb3IgZXhhbXBsZS4KKyAgICByZXR1cm4gaXRlbSAhPSAwOworfQorCitSZXNvdXJj
ZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVzb3Vy
Y2VFcnJvcigpOworfQorCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmJs
b2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKK30KKworUmVzb3VyY2VFcnJvciBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KCk7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6aW50ZXJydXB0
Rm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisKK1Jlc291cmNl
RXJyb3IgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisK
K1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cGx1Z2luV2lsbEhhbmRsZUxv
YWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6c2hvdWxkRmFsbEJhY2soY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6c2V0RGVmZXJzTG9hZGluZyhib29sKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6d2lsbFVzZUFyY2hpdmUoUmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBLVVJMJiBvcmlnaW5h
bFVSTCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojppc0FyY2hpdmVMb2FkUGVuZGluZyhS
ZXNvdXJjZUxvYWRlciopIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuY2VsUGVuZGlu
Z0FyY2hpdmVMb2FkKFJlc291cmNlTG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNsZWFyQXJjaGl2ZWRSZXNvdXJjZXMo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6Y2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hl
bWUoY29uc3QgU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmdlbmVyYXRl
ZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZnJhbWVMb2FkQ29tcGxldGVkKCkgCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzYXZlVmlld1N0YXRlVG9JdGVt
KEhpc3RvcnlJdGVtKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OnJlc3RvcmVWaWV3U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cHJvdmlzaW9uYWxMb2Fk
U3RhcnRlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaWRGaW5pc2hMb2FkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnByZXBhcmVGb3JEYXRhU291cmNlUmVw
bGFjZW1lbnQoKSAKK3sKKyAgICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5sb2FkZXIoKSkKKyAg
ICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPnNldHVwRm9yUmVwbGFjZSgpOworfQorCitQYXNzUmVm
UHRyPERvY3VtZW50TG9hZGVyPiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVEb2N1bWVu
dExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCit7CisgICAgUmVmUHRyPERvY3Vt
ZW50TG9hZGVyPiBsb2FkZXIgPSBEb2N1bWVudExvYWRlcjo6Y3JlYXRlKHJlcXVlc3QsIHN1YnN0
aXR1dGVEYXRhKTsKKyAgICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKK30KKwordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpzZXRUaXRsZShjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6dXNlckFnZW50KGNvbnN0IEtVUkwmKQoreworICAgIHJldHVybiAiTW96aWxsYS81LjAg
KGNvbXBhdGlibGU7IFU7IEluZmlOZXQgMC4xOyBIYWlrdSkgQXBwbGVXZWJLaXQvNDIwKyAoS0hU
TUwsIGxpa2UgR2Vja28pIjsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzYXZl
UGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp0cmFuc2l0aW9uVG9D
b21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dHJhbnNpdGlvblRvQ29t
bWl0dGVkRm9yTmV3UGFnZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworLy8gdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzYXZlRG9jdW1lbnRWaWV3VG9DYWNoZWRQYWdlKENh
Y2hlZFBhZ2UqKQorLy97CisvLyAgICBub3RJbXBsZW1lbnRlZCgpOworLy99CisKK2Jvb2wgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuQ2FjaGVQYWdlKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKKyAgICAKK30KK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVh
dGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXJFbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NT
Y3JvbGxpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpCit7CisJLy8gRklYTUU6
CisgICAgLy8gdGhpcmQ6ICAgd2Ugc2hvdWxkIGFwcGx5IHRoZSByaWdodCBwcm9wZXJ0eSB0byB0
aGUgZnJhbWVWaWV3LiAoc2Nyb2xsYmFyLG1hcmdpbnMpCisgICAgLy8gZXJyb3I6ICAgd2hlbiBj
b21waWxpbmcgdW5kZXIgZ2NjNCwgZXJyb3I6IGNhbm5vdCBhbGxvY2F0ZSBhbiBvYmplY3Qgb2Yg
YWJzdHJhY3QgdHlwZQorCisgICAgLy8gV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdSog
bG9hZGVyQ2xpZW50ID0gbmV3IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UoKTsKKyAg
ICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSBGcmFtZTo6Y3JlYXRlKG1fZnJhbWUtPnBhZ2Uo
KSwgb3duZXJFbGVtZW50LCB0aGlzKTsKKyAgICBzZXRGcmFtZShjaGlsZEZyYW1lLmdldCgpKTsK
KworICAgIFJlZlB0cjxGcmFtZVZpZXc+IGZyYW1lVmlldyA9IEZyYW1lVmlldzo6Y3JlYXRlKGNo
aWxkRnJhbWUuZ2V0KCkpOworCisgICAgLy9wcmludGYoIioqKiBzdXBwcmVzc1Njcm9sbEJhcnMg
PSAlZCIsIWFsbG93c1Njcm9sbGluZyk7CisKKyAgICBmcmFtZVZpZXctPnNldEFsbG93c1Njcm9s
bGluZyhhbGxvd3NTY3JvbGxpbmcpOworICAgIGZyYW1lVmlldy0+ZGVyZWYoKTsKKyAgICBjaGls
ZEZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldy5nZXQoKSk7CisgICAgY2hpbGRGcmFtZS0+aW5pdCgp
OworCisgICAgY2hpbGRGcmFtZS0+dHJlZSgpLT5zZXROYW1lKG5hbWUpOworICAgIG1fZnJhbWUt
PnRyZWUoKS0+YXBwZW5kQ2hpbGQoY2hpbGRGcmFtZSk7CisKKyAgICBjaGlsZEZyYW1lLT5sb2Fk
ZXIoKS0+bG9hZFVSTEludG9DaGlsZEZyYW1lKHVybCwgcmVmZXJyZXIsIGNoaWxkRnJhbWUuZ2V0
KCkpOworCisgICAgLy8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRsZXIgbWF5IGhhdmUgcmVtb3Zl
ZCBpdCBmcm9tIHRoZSBkb2N1bWVudC4KKyAgICBpZiAoIWNoaWxkRnJhbWUtPnRyZWUoKS0+cGFy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAJcmV0dXJuIGNoaWxkRnJhbWUucmVsZWFz
ZSgpOworfQorCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNyZWF0ZVBsdWdpbihj
b25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmLCBib29sIGxvYWRNYW51YWxseSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQorCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1lbnQqLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCBsb2Fk
TWFudWFsbHkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQq
IHBsdWdpbldpZGdldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybjsKK30K
KworV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0
KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworV2lkZ2V0KiBG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNp
emUmLCBIVE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtTmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09iamVjdENvbnRl
bnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBPYmplY3RDb250ZW50VHlwZSgpOworfQorCitTdHJpbmcgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OndpbmRvd09iamVjdENsZWFyZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlkUGVyZm9ybUZpcnN0TmF2aWdh
dGlvbigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4g
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNmY1MDNjOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFtZUxvYWRlckNs
aWVudEhhaWt1X0gKKyNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRIYWlrdV9ICisKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudEhhaWt1
IDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3UoKTsKKyAgICAgICAgfkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UoKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZGVyRGVzdHJveWVkKCk7CisKKyAgICAg
ICAgdm9pZCBzZXRGcmFtZShGcmFtZSAqZnJhbWUpIHsgbV9mcmFtZSA9IGZyYW1lOyB9CisgICAg
ICAgIEZyYW1lKiBmcmFtZSgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNXZWJWaWV3KCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNGcmFtZVZpZXcoKSBjb25zdDsKKworICAg
ICAgICB2aXJ0dWFsIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0OworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBtYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKTsKKyAgICAgICAgLy8gdmlydHVh
bCB2b2lkIHNldERvY3VtZW50Vmlld0Zyb21DYWNoZWRQYWdlKENhY2hlZFBhZ2UqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmb3Jj
ZUxheW91dEZvck5vbkhUTUwoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29waWVzT25T
Y3JvbGwoKTsKKworICAgICAgICAvL3ZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQxKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQyKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQzKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2hlZEZyb21QYXJlbnQ0KCk7CisKKyAgICAgICAgLy92aXJ0dWFsIHZvaWQgbG9hZGVkRnJv
bUNhY2hlZFBhZ2UoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYXNzaWduSWRlbnRpZmllclRv
SW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlcios
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hX
aWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CisJCXZp
cnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAg
aWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVk
IGxvbmcgIGlkZW50aWZpZXIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWls
TG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJl
c291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYpOworCisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExv
YWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3QoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRp
cmVjdChjb25zdCBLVVJMJiwgZG91YmxlLCBkb3VibGUpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UoKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoV2lsbENsb3NlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZFJlY2VpdmVJY29uKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVU
aXRsZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ29t
bWl0TG9hZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9u
YWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkRmluaXNoTG9hZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRGaXJzdExheW91dCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKKworICAgICAgICB2aXJ0dWFsIEZyYW1lKiBkaXNwYXRj
aENyZWF0ZVBhZ2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoU2hvdygpOworCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKEZyYW1l
UG9saWN5RnVuY3Rpb24sIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5k
b3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihG
cmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
ZnJhbWVOYW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0
aW9uJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0
aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUG9s
aWN5Q2hlY2soKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hVbmFibGVUb0ltcGxl
bWVudFBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJik7CisKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oRnJhbWVQb2xpY3lGdW5jdGlvbiwgUGFzc1JlZlB0cjxG
b3JtU3RhdGU+KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRMb2FkTWFpblJl
c291cmNlKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXZlcnRUb1By
b3Zpc2lvbmFsU3RhdGUoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNl
dE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJVbmFyY2hpdmluZ1N0YXRlKERvY3VtZW50TG9h
ZGVyKik7CisKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBpbiBGcmFtZUxvYWRlckNsaWVu
dCwgbm90IHN1cmUgaWYgd2UgbmVlZCB0byBpbXBsZW1lbnQKKyAgICAgICAgLy92aXJ0dWFsIHZv
aWQgd2lsbENoYW5nZUVzdGltYXRlZFByb2dyZXNzKCk7CisgICAgICAgIC8vdmlydHVhbCB2b2lk
IGRpZENoYW5nZUVzdGltYXRlZFByb2dyZXNzKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0
UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0
UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uKCk7CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIHNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCk7CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIHN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKTsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciosIGNvbnN0IGNoYXIqLCBp
bnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVy
Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbFNldHVwRm9yUmVwbGFjZShEb2N1bWVudExv
YWRlciopOworCisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yU3RhbmRhcmRMb2Fk
KGNvbnN0IEtVUkwmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnlG
b3JSZWxvYWQoY29uc3QgS1VSTCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkR29Ub0hp
c3RvcnlJdGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBSZXNvdXJj
ZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgICAgICB2
aXJ0dWFsIFJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
OworICAgICAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYpOworICAgICAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgaW50ZXJy
dXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAgICAg
ICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGZpbGVEb2Vz
Tm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwg
UmVzb3VyY2VFcnJvciBwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmFsbEJhY2soY29uc3QgUmVz
b3VyY2VFcnJvciYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJv
b2wpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCB3aWxsVXNlQXJjaGl2ZShSZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEtVUkwmIG9yaWdpbmFsVVJMKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzQXJjaGl2ZUxvYWRQZW5kaW5nKFJlc291cmNlTG9h
ZGVyKikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQZW5kaW5nQXJjaGl2ZUxv
YWQoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQXJjaGl2ZWRS
ZXNvdXJjZXMoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGNhblNob3dN
SU1FVHlwZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHJlcHJl
c2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJp
bmcmKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkQ29tcGxldGVkKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlVmlld1N0YXRlKCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGF0YVNvdXJj
ZVJlcGxhY2VtZW50KCk7CisKKyAgICAgICAgLy92aXJ0dWFsIFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEmKTsKKyAgICAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRl
cihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgS1VSTCYp
OworCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBLVVJMJik7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZy
YW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2Fj
aGVkRnJhbWUoQ2FjaGVkRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25U
b0NvbW1pdHRlZEZvck5ld1BhZ2UoKTsKKworICAgICAgICAvLyB2aXJ0dWFsIHZvaWQgc2F2ZURv
Y3VtZW50Vmlld1RvQ2FjaGVkUGFnZShDYWNoZWRQYWdlKik7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBjYW5DYWNoZVBhZ2UoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworCisgICAgICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTEZy
YW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NT
Y3JvbGxpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KTsKKyAgICAgICAgdmlydHVhbCBXaWRn
ZXQqIGNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAgdmlydHVh
bCBXaWRnZXQqIGNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1lbnQq
LCBjb25zdCBLVVJMJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmLCBib29sIGxvYWRNYW51YWxseSk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdp
bldpZGdldCk7CisKKyAgICAgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZUphdmFBcHBsZXRXaWRn
ZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1OYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgdmly
dHVhbCBXaWRnZXQqIGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEhUTUxB
cHBsZXRFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFt
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisKKyAgICAgICAgdmlydHVhbCBPYmplY3RD
b250ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOworICAgICAgICB2aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgp
IGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkgY29uc3Q7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxp
c3RlbiA9IHRydWUpOworCisJCXZpcnR1YWwgdm9pZCBkb2N1bWVudEVsZW1lbnRBdmFpbGFibGUo
KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lICptX2ZyYW1lOworICAgICAgICBSZXNv
dXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisgICAgICAgIGJvb2wgbV9maXJzdERhdGE7CisgICAg
fTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3VfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0luc3BlY3RvckNs
aWVudEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvSW5zcGVjdG9yQ2xpZW50SGFp
a3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjdmNjAKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0luc3BlY3RvckNsaWVudEhhaWt1
LmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvckNsaWVudEhhaWt1LmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0b3JEZXN0cm95ZWQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1BhZ2UqIEluc3BlY3RvckNsaWVudEhhaWt1Ojpj
cmVhdGVQYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQor
CitTdHJpbmcgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcg
SW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGRlblBhbmVscygpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SGFp
a3U6OnNob3dXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQ2xpZW50SGFpa3U6OmNsb3NlV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjphdHRhY2hXaW5kb3coKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmRldGFj
aFdpbmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JD
bGllbnRIYWlrdTo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omhp
Z2hsaWdodChOb2RlKiBub2RlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGVIaWdobGlnaHQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIElu
c3BlY3RvckNsaWVudEhhaWt1Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIElu
c3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisgICAgCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpzdG9yZVNldHRpbmcoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpyZW1v
dmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
ICAgIAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xZGU5OTZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9J
bnNwZWN0b3JDbGllbnRIYWlrdS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SW5zcGVjdG9yQ2xpZW50SGFpa3VfaAorI2RlZmluZSBJbnNwZWN0b3JDbGllbnRIYWlrdV9oCisK
KyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFN0cmluZzsKKworICAg
IGNsYXNzIEluc3BlY3RvckNsaWVudEhhaWt1IDogcHVibGljIEluc3BlY3RvckNsaWVudCB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CisK
KyAgICAgICAgdmlydHVhbCBQYWdlKiBjcmVhdGVQYWdlKCk7CisKKyAgICAgICAgdmlydHVhbCBT
dHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOworCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGhp
ZGRlblBhbmVscygpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hXaW5kb3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOworCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWln
aHQpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKTsKKworICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBJbnNwZWN0b3JDb250cm9s
bGVyOjpTZXR0aW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXkpOworICAgIH07
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJbnNwZWN0b3JDbGllbnRIYWlr
dV9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvS2V5Ym9hcmRDb2Rlcy5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9LZXlib2FyZENvZGVzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwZDQ5MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvS2V5Ym9hcmRDb2Rlcy5oCkBAIC0wLDAgKzEsNTQ0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNv
bT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEtleWJvYXJk
Q29kZXNfaAorI2RlZmluZSBLZXlib2FyZENvZGVzX2gKKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgLy8gVktfTEJVVFRPTiAoMDEpIExlZnQgbW91c2UgYnV0dG9uCisgICAgLy8gVktfUkJV
VFRPTiAoMDIpIFJpZ2h0IG1vdXNlIGJ1dHRvbgorICAgIC8vIFZLX0NBTkNFTCAoMDMpIENvbnRy
b2wtYnJlYWsgcHJvY2Vzc2luZworICAgIC8vIFZLX01CVVRUT04gKDA0KSBNaWRkbGUgbW91c2Ug
YnV0dG9uICh0aHJlZS1idXR0b24gbW91c2UpCisgICAgLy8gVktfWEJVVFRPTjEgKDA1KQorICAg
IC8vIFZLX1hCVVRUT04yICgwNikKKworICAgIC8vIFZLX0JBQ0sgKDA4KSBCQUNLU1BBQ0Uga2V5
CisgICAgY29uc3QgaW50IFZLX0JBQ0sgPSAweDA4OworCisgICAgLy8gVktfVEFCICgwOSkgVEFC
IGtleQorICAgIGNvbnN0IGludCBWS19UQUIgPSAweDA5OworCisgICAgLy8gVktfQ0xFQVIgKDBD
KSBDTEVBUiBrZXkKKyAgICBjb25zdCBpbnQgVktfQ0xFQVIgPSAweDBDOworCisgICAgLy8gVktf
UkVUVVJOICgwRCkKKyAgICBjb25zdCBpbnQgVktfUkVUVVJOID0gMHgwRDsKKworICAgIC8vIFZL
X1NISUZUICgxMCkgU0hJRlQga2V5CisgICAgY29uc3QgaW50IFZLX1NISUZUID0gMHgxMDsKKwor
ICAgIC8vIFZLX0NPTlRST0wgKDExKSBDVFJMIGtleQorICAgIGNvbnN0IGludCBWS19DT05UUk9M
ID0gMHgxMTsKKworICAgIC8vIFZLX01FTlUgKDEyKSBBTFQga2V5CisgICAgY29uc3QgaW50IFZL
X01FTlUgPSAweDEyOworCisgICAgLy8gVktfUEFVU0UgKDEzKSBQQVVTRSBrZXkKKyAgICBjb25z
dCBpbnQgVktfUEFVU0UgPSAweDEzOworCisgICAgLy8gVktfQ0FQSVRBTCAoMTQpIENBUFMgTE9D
SyBrZXkKKyAgICBjb25zdCBpbnQgVktfQ0FQSVRBTCA9IDB4MTQ7CisKKyAgICAvLyBWS19LQU5B
ICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKKyAgICBjb25zdCBpbnQg
VktfS0FOQSA9IDB4MTU7CisKKyAgICAvLyBWS19IQU5HVUVMICgxNSkgSU1FIEhhbmd1ZWwgbW9k
ZSAobWFpbnRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eTsgdXNlIFZLX0hBTkdVTCkKKyAgICAvLyBW
S19IQU5HVUwgKDE1KSBJTUUgSGFuZ3VsIG1vZGUKKyAgICBjb25zdCBpbnQgVktfSEFOR1VMID0g
MHgxNTsKKworICAgIC8vIFZLX0pVTkpBICgxNykgSU1FIEp1bmphIG1vZGUKKyAgICBjb25zdCBp
bnQgVktfSlVOSkEgPSAweDE3OworCisgICAgLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwgbW9k
ZQorICAgIGNvbnN0IGludCBWS19GSU5BTCA9IDB4MTg7CisKKyAgICAvLyBWS19IQU5KQSAoMTkp
IElNRSBIYW5qYSBtb2RlCisgICAgY29uc3QgaW50IFZLX0hBTkpBID0gMHgxOTsKKworICAgIC8v
IFZLX0tBTkpJICgxOSkgSU1FIEthbmppIG1vZGUKKyAgICBjb25zdCBpbnQgVktfS0FOSkkgPSAw
eDE5OworCisgICAgLy8gVktfRVNDQVBFICgxQikgRVNDIGtleQorICAgIGNvbnN0IGludCBWS19F
U0NBUEUgPSAweDFCOworCisgICAgLy8gVktfQ09OVkVSVCAoMUMpIElNRSBjb252ZXJ0CisgICAg
Y29uc3QgaW50IFZLX0NPTlZFUlQgPSAweDFDOworCisgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQp
IElNRSBub25jb252ZXJ0CisgICAgY29uc3QgaW50IFZLX05PTkNPTlZFUlQgPSAweDFEOworCisg
ICAgLy8gVktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAorICAgIGNvbnN0IGludCBWS19BQ0NFUFQg
PSAweDFFOworCisgICAgLy8gVktfTU9ERUNIQU5HRSAoMUYpIElNRSBtb2RlIGNoYW5nZSByZXF1
ZXN0CisgICAgY29uc3QgaW50IFZLX01PREVDSEFOR0UgPSAweDFGOworCisgICAgLy8gVktfU1BB
Q0UgKDIwKSBTUEFDRUJBUgorICAgIGNvbnN0IGludCBWS19TUEFDRSA9IDB4MjA7CisKKyAgICAv
LyBWS19QUklPUiAoMjEpIFBBR0UgVVAga2V5CisgICAgY29uc3QgaW50IFZLX1BSSU9SID0gMHgy
MTsKKworICAgIC8vIFZLX05FWFQgKDIyKSBQQUdFIERPV04ga2V5CisgICAgY29uc3QgaW50IFZL
X05FWFQgPSAweDIyOworCisgICAgLy8gVktfRU5EICgyMykgRU5EIGtleQorICAgIGNvbnN0IGlu
dCBWS19FTkQgPSAweDIzOworCisgICAgLy8gVktfSE9NRSAoMjQpIEhPTUUga2V5CisgICAgY29u
c3QgaW50IFZLX0hPTUUgPSAweDI0OworCisgICAgLy8gVktfTEVGVCAoMjUpIExFRlQgQVJST1cg
a2V5CisgICAgY29uc3QgaW50IFZLX0xFRlQgPSAweDI1OworCisgICAgLy8gVktfVVAgKDI2KSBV
UCBBUlJPVyBrZXkKKyAgICBjb25zdCBpbnQgVktfVVAgPSAweDI2OworCisgICAgLy8gVktfUklH
SFQgKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICBjb25zdCBpbnQgVktfUklHSFQgPSAweDI3Owor
CisgICAgLy8gVktfRE9XTiAoMjgpIERPV04gQVJST1cga2V5CisgICAgY29uc3QgaW50IFZLX0RP
V04gPSAweDI4OworCisgICAgLy8gVktfU0VMRUNUICgyOSkgU0VMRUNUIGtleQorICAgIGNvbnN0
IGludCBWS19TRUxFQ1QgPSAweDI5OworCisgICAgLy8gVktfUFJJTlQgKDJBKSBQUklOVCBrZXkK
KyAgICBjb25zdCBpbnQgVktfUFJJTlQgPSAweDJBOworCisgICAgLy8gVktfRVhFQ1VURSAoMkIp
IEVYRUNVVEUga2V5CisgICAgY29uc3QgaW50IFZLX0VYRUNVVEUgPSAweDJCOworCisgICAgLy8g
VktfU05BUFNIT1QgKDJDKSBQUklOVCBTQ1JFRU4ga2V5CisgICAgY29uc3QgaW50IFZLX1NOQVBT
SE9UID0gMHgyQzsKKworICAgIC8vIFZLX0lOU0VSVCAoMkQpIElOUyBrZXkKKyAgICBjb25zdCBp
bnQgVktfSU5TRVJUID0gMHgyRDsKKworICAgIC8vIFZLX0RFTEVURSAoMkUpIERFTCBrZXkKKyAg
ICBjb25zdCBpbnQgVktfREVMRVRFID0gMHgyRTsKKworICAgIC8vIFZLX0hFTFAgKDJGKSBIRUxQ
IGtleQorICAgIGNvbnN0IGludCBWS19IRUxQID0gMHgyRjsKKworICAgIC8vICgzMCkgMCBrZXkK
KyAgICBjb25zdCBpbnQgVktfMCA9IDB4MzA7CisKKyAgICAvLyAoMzEpIDEga2V5CisgICAgY29u
c3QgaW50IFZLXzEgPSAweDMxOworCisgICAgLy8gKDMyKSAyIGtleQorICAgIGNvbnN0IGludCBW
S18yID0gMHgzMjsKKworICAgIC8vICgzMykgMyBrZXkKKyAgICBjb25zdCBpbnQgVktfMyA9IDB4
MzM7CisKKyAgICAvLyAoMzQpIDQga2V5CisgICAgY29uc3QgaW50IFZLXzQgPSAweDM0OworCisg
ICAgLy8gKDM1KSA1IGtleTsKKworICAgIGNvbnN0IGludCBWS181ID0gMHgzNTsKKworICAgIC8v
ICgzNikgNiBrZXkKKyAgICBjb25zdCBpbnQgVktfNiA9IDB4MzY7CisKKyAgICAvLyAoMzcpIDcg
a2V5CisgICAgY29uc3QgaW50IFZLXzcgPSAweDM3OworCisgICAgLy8gKDM4KSA4IGtleQorICAg
IGNvbnN0IGludCBWS184ID0gMHgzODsKKworICAgIC8vICgzOSkgOSBrZXkKKyAgICBjb25zdCBp
bnQgVktfOSA9IDB4Mzk7CisKKyAgICAvLyAoNDEpIEEga2V5CisgICAgY29uc3QgaW50IFZLX0Eg
PSAweDQxOworCisgICAgLy8gKDQyKSBCIGtleQorICAgIGNvbnN0IGludCBWS19CID0gMHg0MjsK
KworICAgIC8vICg0MykgQyBrZXkKKyAgICBjb25zdCBpbnQgVktfQyA9IDB4NDM7CisKKyAgICAv
LyAoNDQpIEQga2V5CisgICAgY29uc3QgaW50IFZLX0QgPSAweDQ0OworCisgICAgLy8gKDQ1KSBF
IGtleQorICAgIGNvbnN0IGludCBWS19FID0gMHg0NTsKKworICAgIC8vICg0NikgRiBrZXkKKyAg
ICBjb25zdCBpbnQgVktfRiA9IDB4NDY7CisKKyAgICAvLyAoNDcpIEcga2V5CisgICAgY29uc3Qg
aW50IFZLX0cgPSAweDQ3OworCisgICAgLy8gKDQ4KSBIIGtleQorICAgIGNvbnN0IGludCBWS19I
ID0gMHg0ODsKKworICAgIC8vICg0OSkgSSBrZXkKKyAgICBjb25zdCBpbnQgVktfSSA9IDB4NDk7
CisKKyAgICAvLyAoNEEpIEoga2V5CisgICAgY29uc3QgaW50IFZLX0ogPSAweDRBOworCisgICAg
Ly8gKDRCKSBLIGtleQorICAgIGNvbnN0IGludCBWS19LID0gMHg0QjsKKworICAgIC8vICg0Qykg
TCBrZXkKKyAgICBjb25zdCBpbnQgVktfTCA9IDB4NEM7CisKKyAgICAvLyAoNEQpIE0ga2V5Cisg
ICAgY29uc3QgaW50IFZLX00gPSAweDREOworCisgICAgLy8gKDRFKSBOIGtleQorICAgIGNvbnN0
IGludCBWS19OID0gMHg0RTsKKworICAgIC8vICg0RikgTyBrZXkKKyAgICBjb25zdCBpbnQgVktf
TyA9IDB4NEY7CisKKyAgICAvLyAoNTApIFAga2V5CisgICAgY29uc3QgaW50IFZLX1AgPSAweDUw
OworCisgICAgLy8gKDUxKSBRIGtleQorICAgIGNvbnN0IGludCBWS19RID0gMHg1MTsKKworICAg
IC8vICg1MikgUiBrZXkKKyAgICBjb25zdCBpbnQgVktfUiA9IDB4NTI7CisKKyAgICAvLyAoNTMp
IFMga2V5CisgICAgY29uc3QgaW50IFZLX1MgPSAweDUzOworCisgICAgLy8gKDU0KSBUIGtleQor
ICAgIGNvbnN0IGludCBWS19UID0gMHg1NDsKKworICAgIC8vICg1NSkgVSBrZXkKKyAgICBjb25z
dCBpbnQgVktfVSA9IDB4NTU7CisKKyAgICAvLyAoNTYpIFYga2V5CisgICAgY29uc3QgaW50IFZL
X1YgPSAweDU2OworCisgICAgLy8gKDU3KSBXIGtleQorICAgIGNvbnN0IGludCBWS19XID0gMHg1
NzsKKworICAgIC8vICg1OCkgWCBrZXkKKyAgICBjb25zdCBpbnQgVktfWCA9IDB4NTg7CisKKyAg
ICAvLyAoNTkpIFkga2V5CisgICAgY29uc3QgaW50IFZLX1kgPSAweDU5OworCisgICAgLy8gKDVB
KSBaIGtleQorICAgIGNvbnN0IGludCBWS19aID0gMHg1QTsKKworICAgIC8vIFZLX0xXSU4gKDVC
KSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKKyAgICBjb25z
dCBpbnQgVktfTFdJTiA9IDB4NUI7CisKKyAgICAvLyBWS19SV0lOICg1QykgUmlnaHQgV2luZG93
cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgY29uc3QgaW50IFZLX1JXSU4gPSAweDVDOwor
CisgICAgLy8gVktfQVBQUyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQp
CisgICAgY29uc3QgaW50IFZLX0FQUFMgPSAweDVEOworCisgICAgLy8gVktfU0xFRVAgKDVGKSBD
b21wdXRlciBTbGVlcCBrZXkKKyAgICBjb25zdCBpbnQgVktfU0xFRVAgPSAweDVGOworCisgICAg
Ly8gVktfTlVNUEFEMCAoNjApIE51bWVyaWMga2V5cGFkIDAga2V5CisgICAgY29uc3QgaW50IFZL
X05VTVBBRDAgPSAweDYwOworCisgICAgLy8gVktfTlVNUEFEMSAoNjEpIE51bWVyaWMga2V5cGFk
IDEga2V5CisgICAgY29uc3QgaW50IFZLX05VTVBBRDEgPSAweDYxOworCisgICAgLy8gVktfTlVN
UEFEMiAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5CisgICAgY29uc3QgaW50IFZLX05VTVBBRDIg
PSAweDYyOworCisgICAgLy8gVktfTlVNUEFEMyAoNjMpIE51bWVyaWMga2V5cGFkIDMga2V5Cisg
ICAgY29uc3QgaW50IFZLX05VTVBBRDMgPSAweDYzOworCisgICAgLy8gVktfTlVNUEFENCAoNjQp
IE51bWVyaWMga2V5cGFkIDQga2V5CisgICAgY29uc3QgaW50IFZLX05VTVBBRDQgPSAweDY0Owor
CisgICAgLy8gVktfTlVNUEFENSAoNjUpIE51bWVyaWMga2V5cGFkIDUga2V5CisgICAgY29uc3Qg
aW50IFZLX05VTVBBRDUgPSAweDY1OworCisgICAgLy8gVktfTlVNUEFENiAoNjYpIE51bWVyaWMg
a2V5cGFkIDYga2V5CisgICAgY29uc3QgaW50IFZLX05VTVBBRDYgPSAweDY2OworCisgICAgLy8g
VktfTlVNUEFENyAoNjcpIE51bWVyaWMga2V5cGFkIDcga2V5CisgICAgY29uc3QgaW50IFZLX05V
TVBBRDcgPSAweDY3OworCisgICAgLy8gVktfTlVNUEFEOCAoNjgpIE51bWVyaWMga2V5cGFkIDgg
a2V5CisgICAgY29uc3QgaW50IFZLX05VTVBBRDggPSAweDY4OworCisgICAgLy8gVktfTlVNUEFE
OSAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5CisgICAgY29uc3QgaW50IFZLX05VTVBBRDkgPSAw
eDY5OworCisgICAgLy8gVktfTVVMVElQTFkgKDZBKSBNdWx0aXBseSBrZXkKKyAgICBjb25zdCBp
bnQgVktfTVVMVElQTFkgPSAweDZBOworCisgICAgLy8gVktfQUREICg2QikgQWRkIGtleQorICAg
IGNvbnN0IGludCBWS19BREQgPSAweDZCOworCisgICAgLy8gVktfU0VQQVJBVE9SICg2QykgU2Vw
YXJhdG9yIGtleQorICAgIGNvbnN0IGludCBWS19TRVBBUkFUT1IgPSAweDZDOworCisgICAgLy8g
VktfU1VCVFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKKyAgICBjb25zdCBpbnQgVktfU1VCVFJBQ1Qg
PSAweDZEOworCisgICAgLy8gVktfREVDSU1BTCAoNkUpIERlY2ltYWwga2V5CisgICAgY29uc3Qg
aW50IFZLX0RFQ0lNQUwgPSAweDZFOworCisgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtl
eQorICAgIGNvbnN0IGludCBWS19ESVZJREUgPSAweDZGOworCisgICAgLy8gVktfRjEgKDcwKSBG
MSBrZXkKKyAgICBjb25zdCBpbnQgVktfRjEgPSAweDcwOworCisgICAgLy8gVktfRjIgKDcxKSBG
MiBrZXkKKyAgICBjb25zdCBpbnQgVktfRjIgPSAweDcxOworCisgICAgLy8gVktfRjMgKDcyKSBG
MyBrZXkKKyAgICBjb25zdCBpbnQgVktfRjMgPSAweDcyOworCisgICAgLy8gVktfRjQgKDczKSBG
NCBrZXkKKyAgICBjb25zdCBpbnQgVktfRjQgPSAweDczOworCisgICAgLy8gVktfRjUgKDc0KSBG
NSBrZXkKKyAgICBjb25zdCBpbnQgVktfRjUgPSAweDc0OworCisgICAgLy8gVktfRjYgKDc1KSBG
NiBrZXkKKyAgICBjb25zdCBpbnQgVktfRjYgPSAweDc1OworCisgICAgLy8gVktfRjcgKDc2KSBG
NyBrZXkKKyAgICBjb25zdCBpbnQgVktfRjcgPSAweDc2OworCisgICAgLy8gVktfRjggKDc3KSBG
OCBrZXkKKyAgICBjb25zdCBpbnQgVktfRjggPSAweDc3OworCisgICAgLy8gVktfRjkgKDc4KSBG
OSBrZXkKKyAgICBjb25zdCBpbnQgVktfRjkgPSAweDc4OworCisgICAgLy8gVktfRjEwICg3OSkg
RjEwIGtleQorICAgIGNvbnN0IGludCBWS19GMTAgPSAweDc5OworCisgICAgLy8gVktfRjExICg3
QSkgRjExIGtleQorICAgIGNvbnN0IGludCBWS19GMTEgPSAweDdBOworCisgICAgLy8gVktfRjEy
ICg3QikgRjEyIGtleQorICAgIGNvbnN0IGludCBWS19GMTIgPSAweDdCOworCisgICAgLy8gVktf
RjEzICg3QykgRjEzIGtleQorICAgIGNvbnN0IGludCBWS19GMTMgPSAweDdDOworCisgICAgLy8g
VktfRjE0ICg3RCkgRjE0IGtleQorICAgIGNvbnN0IGludCBWS19GMTQgPSAweDdEOworCisgICAg
Ly8gVktfRjE1ICg3RSkgRjE1IGtleQorICAgIGNvbnN0IGludCBWS19GMTUgPSAweDdFOworCisg
ICAgLy8gVktfRjE2ICg3RikgRjE2IGtleQorICAgIGNvbnN0IGludCBWS19GMTYgPSAweDdGOwor
CisgICAgLy8gVktfRjE3ICg4MEgpIEYxNyBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE3ID0gMHg4
MDsKKworICAgIC8vIFZLX0YxOCAoODFIKSBGMTgga2V5CisgICAgY29uc3QgaW50IFZLX0YxOCA9
IDB4ODE7CisKKyAgICAvLyBWS19GMTkgKDgySCkgRjE5IGtleQorICAgIGNvbnN0IGludCBWS19G
MTkgPSAweDgyOworCisgICAgLy8gVktfRjIwICg4M0gpIEYyMCBrZXkKKyAgICBjb25zdCBpbnQg
VktfRjIwID0gMHg4MzsKKworICAgIC8vIFZLX0YyMSAoODRIKSBGMjEga2V5CisgICAgY29uc3Qg
aW50IFZLX0YyMSA9IDB4ODQ7CisKKyAgICAvLyBWS19GMjIgKDg1SCkgRjIyIGtleQorICAgIGNv
bnN0IGludCBWS19GMjIgPSAweDg1OworCisgICAgLy8gVktfRjIzICg4NkgpIEYyMyBrZXkKKyAg
ICBjb25zdCBpbnQgVktfRjIzID0gMHg4NjsKKworICAgIC8vIFZLX0YyNCAoODdIKSBGMjQga2V5
CisgICAgY29uc3QgaW50IFZLX0YyNCA9IDB4ODc7CisKKyAgICAvLyBWS19OVU1MT0NLICg5MCkg
TlVNIExPQ0sga2V5CisgICAgY29uc3QgaW50IFZLX05VTUxPQ0sgPSAweDkwOworCisgICAgLy8g
VktfU0NST0xMICg5MSkgU0NST0xMIExPQ0sga2V5CisgICAgY29uc3QgaW50IFZLX1NDUk9MTCA9
IDB4OTE7CisKKyAgICAvLyBWS19MU0hJRlQgKEEwKSBMZWZ0IFNISUZUIGtleQorICAgIGNvbnN0
IGludCBWS19MU0hJRlQgPSAweEEwOworCisgICAgLy8gVktfUlNISUZUIChBMSkgUmlnaHQgU0hJ
RlQga2V5CisgICAgY29uc3QgaW50IFZLX1JTSElGVCA9IDB4QTE7CisKKyAgICAvLyBWS19MQ09O
VFJPTCAoQTIpIExlZnQgQ09OVFJPTCBrZXkKKyAgICBjb25zdCBpbnQgVktfTENPTlRST0wgPSAw
eEEyOworCisgICAgLy8gVktfUkNPTlRST0wgKEEzKSBSaWdodCBDT05UUk9MIGtleQorICAgIGNv
bnN0IGludCBWS19SQ09OVFJPTCA9IDB4QTM7CisKKyAgICAvLyBWS19MTUVOVSAoQTQpIExlZnQg
TUVOVSBrZXkKKyAgICBjb25zdCBpbnQgVktfTE1FTlUgPSAweEE0OworCisgICAgLy8gVktfUk1F
TlUgKEE1KSBSaWdodCBNRU5VIGtleQorICAgIGNvbnN0IGludCBWS19STUVOVSA9IDB4QTU7CisK
KyAgICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFj
ayBrZXkKKyAgICBjb25zdCBpbnQgVktfQlJPV1NFUl9CQUNLID0gMHhBNjsKKworICAgIC8vIFZL
X0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtl
eQorICAgIGNvbnN0IGludCBWS19CUk9XU0VSX0ZPUldBUkQgPSAweEE3OworCisgICAgLy8gVktf
QlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gga2V5
CisgICAgY29uc3QgaW50IFZLX0JST1dTRVJfUkVGUkVTSCA9IDB4QTg7CisKKyAgICAvLyBWS19C
Uk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKKyAgICBj
b25zdCBpbnQgVktfQlJPV1NFUl9TVE9QID0gMHhBOTsKKworICAgIC8vIFZLX0JST1dTRVJfU0VB
UkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkKKyAgICBjb25zdCBp
bnQgVktfQlJPV1NFUl9TRUFSQ0ggPSAweEFBOworCisgICAgLy8gVktfQlJPV1NFUl9GQVZPUklU
RVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRmF2b3JpdGVzIGtleQorICAgIGNvbnN0
IGludCBWS19CUk9XU0VSX0ZBVk9SSVRFUyA9IDB4QUI7CisKKyAgICAvLyBWS19CUk9XU0VSX0hP
TUUgKEFDKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhvbWUga2V5CisgICAg
Y29uc3QgaW50IFZLX0JST1dTRVJfSE9NRSA9IDB4QUM7CisKKyAgICAvLyBWS19WT0xVTUVfTVVU
RSAoQUQpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIE11dGUga2V5CisgICAgY29uc3QgaW50IFZL
X1ZPTFVNRV9NVVRFID0gMHhBRDsKKworICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93
cyAyMDAwL1hQOiBWb2x1bWUgRG93biBrZXkKKyAgICBjb25zdCBpbnQgVktfVk9MVU1FX0RPV04g
PSAweEFFOworCisgICAgLy8gVktfVk9MVU1FX1VQIChBRikgV2luZG93cyAyMDAwL1hQOiBWb2x1
bWUgVXAga2V5CisgICAgY29uc3QgaW50IFZLX1ZPTFVNRV9VUCA9IDB4QUY7CisKKyAgICAvLyBW
S19NRURJQV9ORVhUX1RSQUNLIChCMCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQor
ICAgIGNvbnN0IGludCBWS19NRURJQV9ORVhUX1RSQUNLID0gMHhCMDsKKworICAgIC8vIFZLX01F
RElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQor
ICAgIGNvbnN0IGludCBWS19NRURJQV9QUkVWX1RSQUNLID0gMHhCMTsKKworICAgIC8vIFZLX01F
RElBX1NUT1AgKEIyKSBXaW5kb3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEga2V5CisgICAgY29uc3Qg
aW50IFZLX01FRElBX1NUT1AgPSAweEIyOworCisgICAgLy8gVktfTUVESUFfUExBWV9QQVVTRSAo
QjMpIFdpbmRvd3MgMjAwMC9YUDogUGxheS9QYXVzZSBNZWRpYSBrZXkKKyAgICBjb25zdCBpbnQg
VktfTUVESUFfUExBWV9QQVVTRSA9IDB4QjM7CisKKyAgICAvLyBWS19MQVVOQ0hfTUFJTCAoQjQp
IFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKKyAgICBjb25zdCBpbnQgVktfTUVESUFf
TEFVTkNIX01BSUwgPSAweEI0OworCisgICAgLy8gVktfTEFVTkNIX01FRElBX1NFTEVDVCAoQjUp
IFdpbmRvd3MgMjAwMC9YUDogU2VsZWN0IE1lZGlhIGtleQorICAgIGNvbnN0IGludCBWS19NRURJ
QV9MQVVOQ0hfTUVESUFfU0VMRUNUID0gMHhCNTsKKworICAgIC8vIFZLX0xBVU5DSF9BUFAxIChC
NikgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQorICAgIGNvbnN0IGlu
dCBWS19NRURJQV9MQVVOQ0hfQVBQMSA9IDB4QjY7CisKKyAgICAvLyBWS19MQVVOQ0hfQVBQMiAo
QjcpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBrZXkKKyAgICBjb25zdCBp
bnQgVktfTUVESUFfTEFVTkNIX0FQUDIgPSAweEI3OworCisgICAgLy8gVktfT0VNXzEgKEJBKSBV
c2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJk
LiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnOzon
IGtleQorICAgIGNvbnN0IGludCBWS19PRU1fMSA9IDB4QkE7CisKKyAgICAvLyBWS19PRU1fUExV
UyAoQkIpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcrJyBr
ZXkKKyAgICBjb25zdCBpbnQgVktfT0VNX1BMVVMgPSAweEJCOworCisgICAgLy8gVktfT0VNX0NP
TU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJywn
IGtleQorICAgIGNvbnN0IGludCBWS19PRU1fQ09NTUEgPSAweEJDOworCisgICAgLy8gVktfT0VN
X01JTlVTIChCRCkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUg
Jy0nIGtleQorICAgIGNvbnN0IGludCBWS19PRU1fTUlOVVMgPSAweEJEOworCisgICAgLy8gVktf
T0VNX1BFUklPRCAoQkUpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwg
dGhlICcuJyBrZXkKKyAgICBjb25zdCBpbnQgVktfT0VNX1BFUklPRCA9IDB4QkU7CisKKyAgICAv
LyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBr
ZXlib2FyZCwgdGhlICcvPycga2V5CisgICAgY29uc3QgaW50IFZLX09FTV8yID0gMHhCRjsKKwor
ICAgIC8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBp
dCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5k
YXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKKyAgICBjb25zdCBpbnQgVktfT0VNXzMgPSAweEMw
OworCisgICAgLy8gVktfT0VNXzQgKERCKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3Rl
cnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMg
c3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnW3snIGtleQorICAgIGNvbnN0IGludCBWS19PRU1fNCA9
IDB4REI7CisKKyAgICAvLyBWS19PRU1fNSAoREMpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hh
cmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRo
ZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5CisgICAgY29uc3QgaW50IFZLX09F
TV81ID0gMHhEQzsKKworICAgIC8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91
cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBG
b3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKKyAgICBjb25zdCBpbnQg
VktfT0VNXzYgPSAweEREOworCisgICAgLy8gVktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxs
YW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAv
WFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJs
ZS1xdW90ZScga2V5CisgICAgY29uc3QgaW50IFZLX09FTV83ID0gMHhERTsKKworICAgIC8vIFZL
X09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFy
eSBieSBrZXlib2FyZC4KKyAgICBjb25zdCBpbnQgVktfT0VNXzggPSAweERGOworCisgICAgLy8g
VktfT0VNXzEwMiAoRTIpIFdpbmRvd3MgMjAwMC9YUDogRWl0aGVyIHRoZSBhbmdsZSBicmFja2V0
IGtleSBvciB0aGUgYmFja3NsYXNoIGtleSBvbiB0aGUgUlQgMTAyLWtleSBrZXlib2FyZAorICAg
IGNvbnN0IGludCBWS19PRU1fMTAyID0gMHhFMjsKKworICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1
KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUg
UFJPQ0VTUyBrZXkKKyAgICBjb25zdCBpbnQgVktfUFJPQ0VTU0tFWSA9IDB4RTU7CisKKyAgICAv
LyBWS19QQUNLRVQgKEU3KSBXaW5kb3dzIDIwMDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNo
YXJhY3RlcnMgYXMgaWYgdGhleSB3ZXJlIGtleXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlz
IHRoZSBsb3cgd29yZCBvZiBhIDMyLWJpdCBWaXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24t
a2V5Ym9hcmQgaW5wdXQgbWV0aG9kcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsg
aW4gS0VZQkRJTlBVVCxTZW5kSW5wdXQsIFdNX0tFWURPV04sIGFuZCBXTV9LRVlVUAorICAgIGNv
bnN0IGludCBWS19QQUNLRVQgPSAweEU3OworCisgICAgLy8gVktfQVRUTiAoRjYpIEF0dG4ga2V5
CisgICAgY29uc3QgaW50IFZLX0FUVE4gPSAweEY2OworCisgICAgLy8gVktfQ1JTRUwgKEY3KSBD
clNlbCBrZXkKKyAgICBjb25zdCBpbnQgVktfQ1JTRUwgPSAweEY3OworCisgICAgLy8gVktfRVhT
RUwgKEY4KSBFeFNlbCBrZXkKKyAgICBjb25zdCBpbnQgVktfRVhTRUwgPSAweEY4OworCisgICAg
Ly8gVktfRVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5CisgICAgY29uc3QgaW50IFZLX0VSRU9GID0g
MHhGOTsKKworICAgIC8vIFZLX1BMQVkgKEZBKSBQbGF5IGtleQorICAgIGNvbnN0IGludCBWS19Q
TEFZID0gMHhGQTsKKworICAgIC8vIFZLX1pPT00gKEZCKSBab29tIGtleQorICAgIGNvbnN0IGlu
dCBWS19aT09NID0gMHhGQjsKKworICAgIC8vIFZLX05PTkFNRSAoRkMpIFJlc2VydmVkIGZvciBm
dXR1cmUgdXNlCisgICAgY29uc3QgaW50IFZLX05PTkFNRSA9IDB4RkM7CisKKyAgICAvLyBWS19Q
QTEgKEZEKSBQQTEga2V5CisgICAgY29uc3QgaW50IFZLX1BBMSA9IDB4RkQ7CisKKyAgICAvLyBW
S19PRU1fQ0xFQVIgKEZFKSBDbGVhciBrZXkKKyAgICBjb25zdCBpbnQgVktfT0VNX0NMRUFSID0g
MHhGRTsKKworICAgIGNvbnN0IGludCBWS19VTktOT1dOID0gMDsKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEtleWJvYXJkQ29kZXNfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9NSU1FVHlwZVJlZ2lzdHJ5SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9NSU1FVHlwZVJlZ2lzdHJ5SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmEwZDBmMWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L01JTUVUeXBlUmVnaXN0cnlIYWlrdS5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIAoreworc3RydWN0IEV4dGVuc2lvbk1h
cCB7CisgICAgY29uc3QgY2hhciogZXh0ZW5zaW9uOworICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBl
OworfTsKK3N0YXRpYyBjb25zdCBFeHRlbnNpb25NYXAgZXh0ZW5zaW9uTWFwIFtdID0geworICAg
IHsgImJtcCIsICJpbWFnZS9ibXAiIH0sCisgICAgeyAiZ2lmIiwgImltYWdlL2dpZiIgfSwKKyAg
ICB7ICJodG1sIiwgInRleHQvaHRtbCIgfSwKKyAgICB7ICJpY28iLCAiaW1hZ2UveC1pY29uIiB9
LCAgIAorICAgIHsgImpwZWciLCAiaW1hZ2UvanBlZyIgfSwKKyAgICB7ICJqcGciLCAiaW1hZ2Uv
anBlZyIgfSwKKyAgICB7ICJqcyIsICJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiIH0sCisgICAg
eyAicGRmIiwgImFwcGxpY2F0aW9uL3BkZiIgfSwKKyAgICB7ICJwbmciLCAiaW1hZ2UvcG5nIiB9
LAorICAgIHsgInJzcyIsICJhcHBsaWNhdGlvbi9yc3MreG1sIiB9LAorICAgIHsgInN2ZyIsICJp
bWFnZS9zdmcreG1sIiB9LAorICAgIHsgInRleHQiLCAidGV4dC9wbGFpbiIgfSwKKyAgICB7ICJ0
eHQiLCAidGV4dC9wbGFpbiIgfSwKKyAgICB7ICJ4Ym0iLCAiaW1hZ2UveC14Yml0bWFwIiB9LAor
ICAgIHsgInhtbCIsICJ0ZXh0L3htbCIgfSwKKyAgICB7ICJ4c2wiLCAidGV4dC94c2wiIH0sCisg
ICAgeyAieGh0bWwiLCAiYXBwbGljYXRpb24veGh0bWwreG1sIiB9LAorICAgIHsgMCwgMCB9Cit9
OworCisvLyBGSVhNRTogVXNlIHRoZSBIYWlrdSBNSU1FIHJlZ2lzdHJ5CitTdHJpbmcgTUlNRVR5
cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7
CisgICAgU3RyaW5nIHMgPSBleHQubG93ZXIoKTsKKyAgICBjb25zdCBFeHRlbnNpb25NYXAgKmUg
PSBleHRlbnNpb25NYXA7CisgICAgd2hpbGUgKGUtPmV4dGVuc2lvbikgeworICAgICAgICBpZiAo
cyA9PSBlLT5leHRlbnNpb24pCisgICAgICAgICAgICByZXR1cm4gZS0+bWltZVR5cGU7CisgICAg
ICAgICsrZTsKKyAgICB9CisgICAgLy8gdW5rbm93biwgbGV0J3MganVzdCBhc3N1bWUgcGxhaW4g
dGV4dAorICAgIHJldHVybiAidGV4dC9wbGFpbiI7Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGFzdGVib2FyZEhhaWt1LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGFzdGVib2FyZEhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzMxNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9QYXN0ZWJvYXJkSGFpa3UuY3BwCkBAIC0wLDAgKzEsMTI1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAiS1VSTC5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5o
PgorI2luY2x1ZGUgPENsaXBib2FyZC5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRl
IDxTdHJpbmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3RlYm9hcmQ6OlBhc3Rl
Ym9hcmQoKQoreworfQorCitQYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2Fy
ZCgpCit7CisgICAgc3RhdGljIFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2Fy
ZCgpOworICAgIHJldHVybiBwYXN0ZWJvYXJkOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRl
U2VsZWN0aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRl
LCBGcmFtZSogZnJhbWUpCit7CisgICAgQk1lc3NhZ2UgKmRhdGEgPSAoQk1lc3NhZ2UgKikgTlVM
TDsKKworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBiZV9jbGlwYm9h
cmQtPkNsZWFyKCk7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkg
eworICAgICAgICAgICAgZGF0YS0+QWRkU3RyaW5nKCJ0ZXh0L3BsYWluIiwgQlN0cmluZyhmcmFt
ZS0+c2VsZWN0ZWRUZXh0KCkpKTsKKyAgICAgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7
CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisK
K2Jvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4
dChGcmFtZSogZnJhbWUpCit7CisgICAgQlN0cmluZyBzdHJpbmc7CisgICAgQk1lc3NhZ2UgKmRh
dGEgPSAoQk1lc3NhZ2UgKikgTlVMTDsKKworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkg
eworICAgICAgICBpZiAoKGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAg
ICAgIGRhdGEtPkZpbmRTdHJpbmcoInRleHQvcGxhaW4iLCAmc3RyaW5nKTsKKyAgICAgICAgfQor
ICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KKwlyZXR1cm4gc3RyaW5nOwor
fQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJh
Z21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxs
b3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopCit7CisgICAgQk1lc3NhZ2UgKmRhdGEg
PSAoQk1lc3NhZ2UgKikgTlVMTDsKKworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgewor
ICAgICAgICBiZV9jbGlwYm9hcmQtPkNsZWFyKCk7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2Ns
aXBib2FyZC0+RGF0YSgpKSkgeworICAgICAgICAgICAgZGF0YS0+QWRkU3RyaW5nKCJ0ZXh0L3Bs
YWluIiwgdXJsLnN0cmluZygpKTsKKyAgICAgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7
CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisK
K3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjpj
bGVhcigpCit7CisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGJlX2Ns
aXBib2FyZC0+Q2xlYXIoKTsKKyAgICAgICAgYmVfY2xpcGJvYXJkLT5Db21taXQoKTsKKyAgICAg
ICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJv
YXJkRXZlbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9h
cmRFdmVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWY2
OTJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtl
eWJvYXJkRXZlbnRIYWlrdS5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKworI2luY2x1ZGUgIktleWJvYXJkQ29k
ZXMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8TWVzc2FnZS5o
PgorI2luY2x1ZGUgPEludGVyZmFjZURlZnMuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckhhaWt1
S2V5Q29kZShjaGFyIHNpbmdsZUJ5dGUsIGludDMyIGtleUNvZGUpCit7CisJCXN3aXRjaChzaW5n
bGVCeXRlKXsKKwkJY2FzZSBCX0ZVTkNUSU9OX0tFWToKKworCSAgICAJc3dpdGNoIChrZXlDb2Rl
KSB7CisgICAgICAgIAljYXNlIEJfRjFfS0VZOgorICAgICAgICAJICAgIHJldHVybiAiRjEiOwor
ICAgICAgICAJY2FzZSBCX0YyX0tFWToKKyAgICAgICAgICAgIAlyZXR1cm4gIkYyIjsKKyAgICAg
ICAgCWNhc2UgQl9GM19LRVk6CisgICAgICAgICAgICAJcmV0dXJuICJGMyI7CisJCQljYXNlIEJf
RjRfS0VZOgorCQkJCXJldHVybiAiRjQiOworCQkJY2FzZSBCX0Y1X0tFWToKKwkJCQlyZXR1cm4g
IkY1IjsKKwkJCWNhc2UgQl9GNl9LRVk6CisJCQkJcmV0dXJuICJGNiI7CisJCQljYXNlIEJfRjdf
S0VZOgorCQkJCXJldHVybiAiRjciOworCQkJY2FzZSBCX0Y4X0tFWToKKwkJCQlyZXR1cm4gIkY4
IjsKKwkJCWNhc2UgQl9GOV9LRVk6CisJCQkJcmV0dXJuICJGOSI7CisJCQljYXNlIEJfRjEwX0tF
WToKKwkJCQlyZXR1cm4gIkYxMCI7CisJCQljYXNlIEJfRjExX0tFWToKKwkJCQlyZXR1cm4gIkYx
MSI7CisJCQljYXNlIEJfRjEyX0tFWToKKwkJCQlyZXR1cm4gIkYxMiI7CisJCQljYXNlIEJfUFJJ
TlRfS0VZOgorCQkJCXJldHVybiAiUHJpbnQiOworCQkJY2FzZSBCX1BBVVNFX0tFWToKKwkJCQly
ZXR1cm4gIlBhdXNlIjsKKwkJCWNhc2UgQl9TQ1JPTExfS0VZOgorCQkJCXJldHVybiAiIjsgLy9G
SVgKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCB0b0FT
Q0lJVXBwZXIoKGludClrZXlDb2RlKSk7CisJICAgIAl9OworCSAgICAJYnJlYWs7CisKKwkgICAg
Y2FzZSBCX0JBQ0tTUEFDRToKKwkgICAgCXJldHVybiAiVSswMDA5IjsKKwkgICAgY2FzZSBCX0xF
RlRfQVJST1c6CisJICAgIAlyZXR1cm4gIkxlZnQiOworCSAgICBjYXNlIEJfUklHSFRfQVJST1c6
CisJICAgIAlyZXR1cm4gIlJpZ2h0IjsKKwkgICAgY2FzZSBCX1VQX0FSUk9XOgorCSAgICAJcmV0
dXJuICJVcCI7CisJICAgIGNhc2UgQl9ET1dOX0FSUk9XOgorCSAgICAJcmV0dXJuICJEb3duIjsK
KwkgICAgY2FzZSBCX0lOU0VSVDoKKwkgICAgCXJldHVybiAiSW5zZXJ0IjsKKwkgICAgY2FzZSBC
X0VOVEVSOgorCSAgICAJcmV0dXJuICJFbnRlciI7CisJICAgIGNhc2UgQl9ERUxFVEU6CisJICAg
IAlyZXR1cm4gIlUrMDA3RiI7CisJICAgIGNhc2UgQl9IT01FOgorCSAgICAJcmV0dXJuICJIb21l
IjsKKwkgICAgY2FzZSBCX0VORDoKKwkgICAgCXJldHVybiAiRW5kIjsKKwkgICAgY2FzZSBCX1BB
R0VfVVA6CisJICAgIAlyZXR1cm4gIlBhZ2VVcCI7CisJICAgIGNhc2UgQl9QQUdFX0RPV046CisJ
ICAgIAlyZXR1cm4gIlBhZ2VEb3duIjsKKwkgICAgLy9jYXNlIEJfU1BBQ0U6CisJICAgIC8vCXJl
dHVybiAiIjsKKwkgICAgY2FzZSBCX1RBQjoKKwkgICAgCXJldHVybiAiVSswMDA5IjsKKwkgICAg
Ly9jYXNlIEJfRVNDQVBFOgorCSAgICAvLwlyZXR1cm4gIiI7CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgCXJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVwcGVyKChp
bnQpa2V5Q29kZSkpOworICAgIH0KK30KKworc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktl
eUV2ZW50KGNoYXIgc2luZ2xlQnl0ZSkKK3sKKyAgICBzd2l0Y2ggKHNpbmdsZUJ5dGUpIHsKKyAg
ICBjYXNlIEJfQkFDS1NQQUNFOgorICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNL
U1BBQ0Uga2V5CisgICAgY2FzZSBCX1RBQjoKKyAgICAgICByZXR1cm4gVktfVEFCOyAvLyAoMDkp
IFRBQiBrZXkqLyAKKyAgICBjYXNlIEJfUkVUVVJOOgorICAgICAgICByZXR1cm4gVktfUkVUVVJO
OyAvLygwRCkgUmV0dXJuIGtleQorICAgIGNhc2UgQl9FU0NBUEU6CisgICAgICAgIHJldHVybiBW
S19FU0NBUEU7IC8vICgxQikgRVNDIGtleQorICAgIGNhc2UgQl9TUEFDRToKKyAgICAgICAgcmV0
dXJuIFZLX1NQQUNFOyAvLyAoMjApIFNQQUNFQkFSCisgICAgY2FzZSBCX1BBR0VfVVA6CisgICAg
ICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgIGNhc2UgQl9QQUdF
X0RPV046CisgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKKyAg
ICBjYXNlIEJfRU5EOgorICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKKyAg
ICBjYXNlIEJfSE9NRToKKyAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkK
KyAgICBjYXNlIEJfTEVGVF9BUlJPVzoKKyAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkg
TEVGVCBBUlJPVyBrZXkKKyAgICBjYXNlIEJfVVBfQVJST1c6CisgICAgICAgIHJldHVybiBWS19V
UDsgLy8gKDI2KSBVUCBBUlJPVyBrZXkKKyAgICBjYXNlIEJfUklHSFRfQVJST1c6CisgICAgICAg
IHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICBjYXNlIEJfRE9X
Tl9BUlJPVzoKKyAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkK
KyAgICBjYXNlIEJfSU5TRVJUOgorICAgICAgICByZXR1cm4gVktfSU5TRVJUOyAvLyAoMkQpIElO
UyBrZXkKKyAgICBjYXNlIEJfREVMRVRFOgorICAgICAgICByZXR1cm4gVktfREVMRVRFOyAvLyAo
MkUpIERFTCBrZXkKKyAgICBjYXNlIDB4MmU6CisgICAgICAgIHJldHVybiggMCApOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KK30KKworUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoQk1lc3NhZ2UgKm1lc3NhZ2UpCit7CisJQlN0
cmluZyBieXRlcyA9CW1lc3NhZ2UtPkZpbmRTdHJpbmcoImJ5dGVzIik7CisJbV90ZXh0ID0gU3Ry
aW5nOjpmcm9tVVRGOChieXRlcy5TdHJpbmcoKSwgYnl0ZXMuTGVuZ3RoKCkpOworICAgIG1fdW5t
b2RpZmllZFRleHQgPSBTdHJpbmcoYnl0ZXMuU3RyaW5nKCksIGJ5dGVzLkxlbmd0aCgpKTsKKyAg
ICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9ySGFpa3VLZXlDb2RlKGJ5dGVzLkJ5
dGVBdCgwKSwgbWVzc2FnZS0+RmluZEludDMyKCJrZXkiKSk7CisKKyAgICBpZiAobWVzc2FnZS0+
d2hhdCA9PSBCX0tFWV9VUCkKKyAgICAgICAgbV90eXBlID0gS2V5VXA7CisgICAgZWxzZSBpZiAo
bWVzc2FnZS0+d2hhdCA9PSBCX0tFWV9ET1dOKQorICAgICAgICBtX3R5cGUgPSBLZXlEb3duOwor
CisgICAgbV9hdXRvUmVwZWF0ID0gdHJ1ZTsKKyAgICBtX2N0cmxLZXkgPSBmYWxzZTsKKyAgICBt
X2FsdEtleSA9IGZhbHNlOworICAgIG1fbWV0YUtleSA9IGZhbHNlOyAgICAKKyAgICBtX3dpbmRv
d3NWaXJ0dWFsS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoYnl0ZXMuQnl0ZUF0
KDApKTsgCisgICAgbV9pc0tleXBhZCA9IGZhbHNlOworICAgIG1fc2hpZnRLZXkgPSBmYWxzZTsK
K30KKwordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURvd25FdmVu
dChUeXBlIHR5cGUsIGJvb2wpCit7CisgICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBL
ZXlEb3duIHRvIFJhd0tleURvd24gb3IgQ2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Ig
b3RoZXIgY29udmVyc2lvbnMuCisgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBt
X3R5cGUgPSB0eXBlOworICAgIGlmICh0eXBlID09IFJhd0tleURvd24pIHsKKyAgICAgICAgbV90
ZXh0ID0gU3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKKyAgICAgICAg
bV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSAwOworICAgIH0KK30KKworYm9vbCBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDAyYjcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1LmNw
cApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVu
Z29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50
LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkN1cnJlbnRUaW1l
LmgiCisKKyNpbmNsdWRlIDxTdXBwb3J0RGVmcy5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3Vz
ZUV2ZW50KGNvbnN0IEJNZXNzYWdlKiBtc2csIEJQb2ludCBzY3JlZW5Qb2ludCkKK3sKKyAgICBt
X3RpbWVzdGFtcCA9ICBXVEY6OmN1cnJlbnRUaW1lKCk7IC8vIEZJWE1FIChmcm9tIHRoZSBibWVz
c2FnZT8pCisgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KG1zZy0+RmluZFBvaW50KCJiZTp2aWV3
X3doZXJlIikpOworICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChzY3JlZW5Qb2ludCk7
IC8vIEludFBvaW50KG1zZy0+RmluZFBvaW50KCJ3aGVyZSIpKTsKKworICAgIG1fc2hpZnRLZXkg
PSBmYWxzZTsgLy8gRklYTUUKKyAgICBtX2N0cmxLZXkgPSBmYWxzZTsKKyAgICBtX2FsdEtleSA9
IGZhbHNlOworICAgIG1fbWV0YUtleSA9IGZhbHNlOworCisgICAgaW50MzIgYnV0dG9ucyA9IG1z
Zy0+RmluZEludDMyKCJidXR0b25zIik7CisgICAgc3dpdGNoIChidXR0b25zKSB7CisgICAgY2Fz
ZSAwOgorICAgICAgICBtX2J1dHRvbiA9IE5vQnV0dG9uOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDE6CQorICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgMjoKKyAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247CisgICAg
ICAgIGJyZWFrOworICAgIH07CisKKyAgICBzd2l0Y2ggKG1zZy0+d2hhdCkgeworICAgIGNhc2Ug
Ql9NT1VTRV9ET1dOOgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRQcmVzc2VkOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEJfTU9VU0VfVVA6CisgICAgICAgIG1fZXZlbnRUeXBl
ID0gTW91c2VFdmVudFJlbGVhc2VkOworICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247IC8v
IEZJWE1FOiB3ZWJjb3JlIHdhbnRzIHRvIGtub3cgdGhlIGJ1dHRvbiByZWxlYXNlZCBidXQgd2Ug
ZG9uJ3Qga25vdy4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCX01PVVNFX01PVkVEOgorICAg
ICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRNb3ZlZDsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7CisgICAgICAg
IGJyZWFrOworICAgIH07CisKKyAgICBtX2NsaWNrQ291bnQgPSBtc2ctPkZpbmRJbnQzMigiY2xp
Y2tzIik7CisKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMTRkMDM5OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
UGxhdGZvcm1TY3JvbGxCYXIuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgUGxhdGZvcm1TY3JvbGxiYXJfaAorI2RlZmluZSBQbGF0Zm9y
bVNjcm9sbGJhcl9oCisKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIu
aCIKKworI2luY2x1ZGUgPGludGVyZmFjZS9TY3JvbGxCYXIuaD4KKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBjbGFzcyBQbGF0Zm9ybVNjcm9sbGJhciA6IHB1YmxpYyBTY3JvbGxiYXIg
eworICAgIHB1YmxpYzoKKyAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50
KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKKyAgICAgICAg
dmlydHVhbCB+UGxhdGZvcm1TY3JvbGxiYXIoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNX
aWRnZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBpbnQgd2lk
dGgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHNldEVuYWJsZWQoYm9vbCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKworICAgICAgICBzdGF0aWMg
aW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KEJfSF9TQ1JPTExfQkFSX0hFSUdIVCk7IH0KKyAgICAgICAgc3RhdGljIGludCB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihCX1ZfU0NST0xMX0JBUl9X
SURUSCk7IH0KKworICAgICAgICB2b2lkIHZhbHVlQ2hhbmdlZChmbG9hdCk7CisgICAgcHJvdGVj
dGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQcm9wb3J0aW9uKCk7CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUGxhdGZvcm1TY3JvbGxiYXJfaAorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3UuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDQyZjZjCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcApAQCAt
MCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2Qg
PGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisK
KyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiQ3Vyc29y
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxW
aWV3Lmg+CisKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKworY2xhc3MgSGFpa3VTY3Jv
bGxCYXIgOiBwdWJsaWMgQlNjcm9sbEJhcgoreworcHVibGljOgorICAgIEhhaWt1U2Nyb2xsQmFy
KFBsYXRmb3JtU2Nyb2xsYmFyKiBwbGF0Zm9ybVNjcm9sbGJhciwgQlZpZXcqIHRhcmdldCwgb3Jp
ZW50YXRpb24gcG9zdHVyZSkgCisgICAgICAgIDogQlNjcm9sbEJhcigocG9zdHVyZSA9PSBCX1ZF
UlRJQ0FMKSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgQlJlY3QoMCwgMCwgQl9WX1NDUk9M
TF9CQVJfV0lEVEgsIDApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEJSZWN0KDAsIDAsIDAs
IEJfSF9TQ1JPTExfQkFSX0hFSUdIVCksCisgICAgICAgICAgICAgICAgICAgICAic2Nyb2xsX2Jh
ciIsIHRhcmdldCwgMCwgMSwgcG9zdHVyZSkKKyAgICB7CisgICAgICAgIG1fcGxhdGZvcm1TY3Jv
bGxiYXIgPSBwbGF0Zm9ybVNjcm9sbGJhcjsKKyAgICB9CisKKyAgICB2b2lkIFZhbHVlQ2hhbmdl
ZChmbG9hdCBuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIG1fcGxhdGZvcm1TY3JvbGxiYXItPnZh
bHVlQ2hhbmdlZChuZXdWYWx1ZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBQbGF0Zm9ybVNjcm9s
bGJhciogbV9wbGF0Zm9ybVNjcm9sbGJhcjsKK307CisKK1BsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0
Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Ny
b2xsYmFyQ29udHJvbFNpemUgc2l6ZSkKKyAgICA6IFNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0
aW9uLCBzaXplKQoreworICAgIEhhaWt1U2Nyb2xsQmFyKiBzY3JvbGxiYXIgPSBuZXcgSGFpa3VT
Y3JvbGxCYXIodGhpcywgLyp0YXJnZXQqL05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxi
YXIpID8gQl9WRVJUSUNBTCA6IEJfSE9SSVpPTlRBTCk7CisgICAgc2V0SGFpa3VXaWRnZXQoc2Ny
b2xsYmFyKTsKK30JCQkJCisKK1BsYXRmb3JtU2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIo
KQoreworICAgIHNldEhhaWt1V2lkZ2V0KE5VTEwpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjp2YWx1ZUNoYW5nZWQoZmxvYXQgbmV3VmFsdWUpCit7CisgICAgc2V0VmFsdWUoKGludCkg
bmV3VmFsdWUpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0
aW9uKCkKK3sKKyAgICBIYWlrdVNjcm9sbEJhciogc2Nyb2xsYmFyID0gc3RhdGljX2Nhc3Q8SGFp
a3VTY3JvbGxCYXIqPihoYWlrdVdpZGdldCgpKTsKKyAgICBzY3JvbGxiYXItPlNldFZhbHVlKG1f
Y3VycmVudFBvcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRodW1iUHJv
cG9ydGlvbigpCit7CisgICAgSGFpa3VTY3JvbGxCYXIqIHNjcm9sbGJhciA9IHN0YXRpY19jYXN0
PEhhaWt1U2Nyb2xsQmFyKj4oaGFpa3VXaWRnZXQoKSk7CisgICAgZmxvYXQgcHJvcG9ydGlvbiA9
IChmbG9hdCkgbV92aXNpYmxlU2l6ZSAvICAoZmxvYXQpIG1fdG90YWxTaXplOworICAgIGlmICgh
KHByb3BvcnRpb24gPT0gc2Nyb2xsYmFyLT5Qcm9wb3J0aW9uKCkgfHwgcHJvcG9ydGlvbiA8IDAu
MCkpCisgICAgICAgIHNjcm9sbGJhci0+U2V0UHJvcG9ydGlvbihwcm9wb3J0aW9uKTsKK30KKwor
aW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdpZGdl
dDo6d2lkdGgoKTsKK30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjpoZWlnaHQoKSBjb25zdAor
eworICAgIHJldHVybiBXaWRnZXQ6OmhlaWdodCgpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUGxhdGZvcm1TY3JvbGxi
YXI6OnNldEZyYW1lUmVjdChyZWN0KTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0
RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgUGxhdGZvcm1TY3JvbGxiYXI6OnNldEVuYWJs
ZWQoZW5hYmxlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgLy8gRklYTUU6IERv
IHdlIG5lZWQgdGhpcz8KK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Q
bGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRm
b3JtV2hlZWxFdmVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40ZmU2MmRjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0
Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisKKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF0
Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChCTWVzc2FnZSAqbWVzc2FnZSkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9Qb3B1cE1lbnVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDZlMmE4NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlvbiBmb3IgPHNl
bGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBvcHVwTWVudS5oIgorCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPE1lbnUuaD4KKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisgICAgCitQb3B1cE1lbnU6OlBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNs
aWVudCkKKyAgICA6IG1fcG9wdXBDbGllbnQoY2xpZW50KQoreworICAgIG1fbWVudSA9IE5VTEw7
Cit9CisKK1BvcHVwTWVudTo6flBvcHVwTWVudSgpCit7CisgICAgZGVsZXRlIG1fbWVudTsKKyAg
ICBtX21lbnUgPSBOVUxMOworfQorCit2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0
JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFBvcHVwTWVudTo6aGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBQb3B1cE1lbnU6OnVwZGF0ZUZyb21FbGVtZW50KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitib29sIFBvcHVwTWVudTo6aXRlbVdyaXRpbmdEaXJlY3Rpb25J
c05hdHVyYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVu
ZGVyVGhlbWVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhl
YzBkYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhl
bWVIYWlrdS5jcHAKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVl
bGxlciA8bXVlbGxlckBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4g
TGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxGb250Lmg+CisjaW5jbHVkZSA8Vmll
dy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IEkgYW0gbm90IHN1cmUg
d2h5IHNvIG1hbnkgbWV0aG9kcyBhcmUgaW5saW5lIGhlcmUuIFRoaXMgd2FzIGNvcGllZCBmcm9t
IHRoZSAKKy8vIFN5bGxhYmxlIHBvcnQuIEl0IHNob3VsZCBwcm9iYWJseSBhbGwgYmUgc2NyYXBw
ZWQuCitjbGFzcyBSZW5kZXJUaGVtZUhhaWt1IDogcHVibGljIFJlbmRlclRoZW1lCit7CitwdWJs
aWM6CisgICAgUmVuZGVyVGhlbWVIYWlrdSgpIDogUmVuZGVyVGhlbWUoKSB7IH0KKwl+UmVuZGVy
VGhlbWVIYWlrdSgpIHsgfQorCisgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdz
IGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CisgICAgeworICAgIAlyZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFJlbmRlclRoZW1lSGFpa3UoKSk7CisgICAgfQorCisgICAgdmlydHVhbCBDb2xvciBw
bGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0CisgICAgeworICAgIAlyZXR1
cm4gQ29sb3IodWlfY29sb3IoQl9NRU5VX1NFTEVDVEVEX0JBQ0tHUk9VTkRfQ09MT1IpKTsKKyAg
ICB9CisKKyAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgorICAgIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKKyAgICB7CisgICAg
CXJldHVybiBDb2xvcih1aV9jb2xvcihCX0NPTlRST0xfSElHSExJR0hUX0NPTE9SKSk7CisgICAg
fQorCisgICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0CisgICAgeworICAgIAlyZXR1cm4gQ29sb3IodWlfY29sb3IoQl9DT05UUk9MX0hJR0hM
SUdIVF9DT0xPUikpOworICAgIH0KKworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAorICAgIHsKKyAgICAJcmV0dXJuIENvbG9y
KHVpX2NvbG9yKEJfQ09OVFJPTF9URVhUX0NPTE9SKSk7CisgICAgfQorCisgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKKyAg
ICB7CisgICAgCXJldHVybiBDb2xvcih1aV9jb2xvcihCX0NPTlRST0xfVEVYVF9DT0xPUikpOwor
ICAgIH0KKworICAgIC8vIExpc3QgQm94IHNlbGVjdGlvbiBjb2xvcgorICAgLyogCisgICAgdmly
dHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAgICovCisKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHsKKyAgICAgICAgaWYgKGkuY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICAJcmV0dXJuIGZhbHNlOworCisgICAgICAg
IC8vY29kZSB0YWtlbiBmcm9tIHRoZSBIYWlrdSBzb3VyY2UgY29kZSAoQ2hlY2tCb3guY3BwKQor
CisgICAgICAgIHJnYl9jb2xvciBub1RpbnQgPSB1aV9jb2xvcihCX1BBTkVMX0JBQ0tHUk9VTkRf
Q09MT1IpOworICAgICAgICByZ2JfY29sb3IgbGlnaHRlbjEgPSB0aW50X2NvbG9yKG5vVGludCwg
Ql9MSUdIVEVOXzFfVElOVCk7CisgICAgICAgIHJnYl9jb2xvciBsaWdodGVuTWF4ID0gdGludF9j
b2xvcihub1RpbnQsIEJfTElHSFRFTl9NQVhfVElOVCk7CisgICAgICAgIHJnYl9jb2xvciBkYXJr
ZW4xID0gdGludF9jb2xvcihub1RpbnQsIEJfREFSS0VOXzFfVElOVCk7CisgICAgICAgIHJnYl9j
b2xvciBkYXJrZW4yID0gdGludF9jb2xvcihub1RpbnQsIEJfREFSS0VOXzJfVElOVCk7CisgICAg
ICAgIHJnYl9jb2xvciBkYXJrZW4zID0gdGludF9jb2xvcihub1RpbnQsIEJfREFSS0VOXzNfVElO
VCk7CisgICAgICAgIHJnYl9jb2xvciBkYXJrZW40ID0gdGludF9jb2xvcihub1RpbnQsIEJfREFS
S0VOXzRfVElOVCk7CisKKyAgICAgICAgQlJlY3QgcmVjdCA9IHIgOworICAgICAgICBCVmlldyoJ
dmlldz1pLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgICAgIGlmIChpc0VuYWJs
ZWQoIG8gKSkgeworICAgICAgICAgICAgLy8gRmlsbGluZworICAgICAgICAgICAgdmlldy0+U2V0
SGlnaENvbG9yKGxpZ2h0ZW5NYXgpOworICAgICAgICAgICAgdmlldy0+RmlsbFJlY3QocmVjdCk7
CisKKyAgICAgICAgICAgIHZpZXctPkJlZ2luTGluZUFycmF5KDYpOworCisgICAgICAgICAgICB2
aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwgZGFya2VuMSk7CisgICAg
ICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCksIGRhcmtlbjEp
OworICAgICAgICAgICAgICAgIHJlY3QuSW5zZXRCeSgxLCAxKTsKKyAgICAgICAgICAgIHZpZXct
PkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApLCBkYXJrZW40KTsKKyAgICAgICAg
ICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9wKSwgZGFya2VuNCk7Cisg
ICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQgKyAxLjBmLCByZWN0LmJv
dHRvbSksCisgICAgICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC5i
b3R0b20pLCBub1RpbnQpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5y
aWdodCwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3Qu
cmlnaHQsIHJlY3QudG9wICsgMS4wZiksIG5vVGludCk7CisKKyAgICAgICAgICAgIHZpZXctPkVu
ZExpbmVBcnJheSgpOworCisgICAgICAgICAgICAvLyBDaGVja21hcmsKKyAgICAgICAgICAgIGlm
ICggaXNDaGVja2VkKCBvICkgKSB7CisgICAgICAgICAgICAgICAgcmVjdC5JbnNldEJ5KDIsIDIp
OworCisgICAgICAgICAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKHVpX2NvbG9yKEJfS0VZQk9B
UkRfTkFWSUdBVElPTl9DT0xPUikpOworICAgICAgICAgICAgICAgIHZpZXctPlNldFBlblNpemUo
Mik7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0RHJhd2luZ01vZGUoQl9PUF9PVkVSKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gbmVlZGVkIGJlY2F1c2Ugb2YgYW50aS1hbGlhc2luZworICAg
ICAgICAgICAgICAgIHZpZXctPlN0cm9rZUxpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3Ap
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90
dG9tKSk7CisgICAgICAgICAgICAgICAgdmlldy0+U3Ryb2tlTGluZShCUG9pbnQocmVjdC5sZWZ0
LCByZWN0LmJvdHRvbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5y
aWdodCwgcmVjdC50b3ApKTsKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXRQZW5TaXplKDEpOwor
ICAgICAgICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJfT1BfQ09QWSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGaWxsaW5nCisgICAgICAg
ICAgICB2aWV3LT5TZXRIaWdoQ29sb3IobGlnaHRlbjEpOworICAgICAgICAgICAgdmlldy0+Rmls
bFJlY3QocmVjdCk7CisKKyAgICAgICAgICAgIC8vIEJveAorICAgICAgICAgICAgdmlldy0+QmVn
aW5MaW5lQXJyYXkoNik7CisKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3Qu
bGVmdCwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5sZWZ0
LCByZWN0LnRvcCksIG5vVGludCk7CisgICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChy
ZWN0LmxlZnQsIHJlY3QudG9wKSwKKyAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3Qucmln
aHQsIHJlY3QudG9wKSwgbm9UaW50KTsKKyAgICAgICAgICAgIHJlY3QuSW5zZXRCeSgxLCAxKTsK
KyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20p
LAorICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIGRhcmtl
bjIpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRv
cCksCisgICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCksIGRh
cmtlbjIpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0ICsgMS4w
ZiwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwg
cmVjdC5ib3R0b20pLCBkYXJrZW4xKTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50
KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJl
Y3QucmlnaHQsIHJlY3QudG9wICsgMS4wZiksIGRhcmtlbjEpOworCisgICAgICAgICAgICB2aWV3
LT5FbmRMaW5lQXJyYXkoKTsKKworICAgICAgICAgICAgLy8gQ2hlY2ttYXJrCisgICAgICAgICAg
ICBpZiAoaXNDaGVja2VkKCBvICkpIHsKKyAgICAgICAgICAgICAgICByZWN0Lkluc2V0QnkoMiwg
Mik7CisKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IodGludF9jb2xvcih1aV9j
b2xvcihCX0tFWUJPQVJEX05BVklHQVRJT05fQ09MT1IpLAorICAgICAgICAgICAgICAgICAgICBC
X0RJU0FCTEVEX01BUktfVElOVCkpOworICAgICAgICAgICAgICAgIHZpZXctPlNldFBlblNpemUo
Mik7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0RHJhd2luZ01vZGUoQl9PUF9PVkVSKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gbmVlZGVkIGJlY2F1c2Ugb2YgYW50aS1hbGlhc2luZworICAg
ICAgICAgICAgICAgIHZpZXctPlN0cm9rZUxpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3Ap
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90
dG9tKSk7CisgICAgICAgICAgICAgICAgdmlldy0+U3Ryb2tlTGluZShCUG9pbnQocmVjdC5sZWZ0
LCByZWN0LmJvdHRvbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5y
aWdodCwgcmVjdC50b3ApKTsKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXRQZW5TaXplKDEpOwor
ICAgICAgICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJfT1BfQ09QWSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAg
dmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB7CisgICAgICAgIGlmIChp
LmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAvL2NvZGUgdGFrZW4gZnJvbSB0aGUgSGFpa3Ugc291cmNlIGNvZGUgKFJhZGlv
QnV0dG9uLmNwcCkKKworICAgICAgICAvLyBsYXlvdXQgdGhlIHJlY3QgZm9yIHRoZSBkb3QKKyAg
ICAgICAgQlJlY3QgcmVjdCA9IHIgOworICAgICAgICBCVmlldyoJdmlldz1pLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOworCisgICAgICAgIC8vIGNvbG9ycworICAgICAgICByZ2JfY29sb3Ig
YmcgPSB1aV9jb2xvcihCX1BBTkVMX0JBQ0tHUk9VTkRfQ09MT1IpOworICAgICAgICByZ2JfY29s
b3IgbGlnaHRlbm1heDsKKyAgICAgICAgcmdiX2NvbG9yIGxpZ2h0ZW4xOworICAgICAgICByZ2Jf
Y29sb3IgZGFya2VuMTsKKyAgICAgICAgcmdiX2NvbG9yIGRhcmtlbjI7CisgICAgICAgIHJnYl9j
b2xvciBkYXJrZW4zOworICAgICAgICByZ2JfY29sb3IgZGFya2VubWF4OworCisgICAgICAgIHJn
Yl9jb2xvciBuYXZpQ29sb3IgPSB1aV9jb2xvcihCX0tFWUJPQVJEX05BVklHQVRJT05fQ09MT1Ip
OworICAgICAgICByZ2JfY29sb3Iga25vYjsKKyAgICAgICAgcmdiX2NvbG9yIGtub2JEYXJrOwor
ICAgICAgICByZ2JfY29sb3Iga25vYkxpZ2h0OworCisgICAgICAgIGlmIChpc0VuYWJsZWQoIG8g
KSkgeworICAgICAgICAgICAgbGlnaHRlbm1heAk9IHRpbnRfY29sb3IoYmcsIEJfTElHSFRFTl9N
QVhfVElOVCk7CisgICAgICAgICAgICBsaWdodGVuMQk9IHRpbnRfY29sb3IoYmcsIEJfTElHSFRF
Tl8xX1RJTlQpOworICAgICAgICAgICAgZGFya2VuMQkJPSB0aW50X2NvbG9yKGJnLCBCX0RBUktF
Tl8xX1RJTlQpOworICAgICAgICAgICAgZGFya2VuMgkJPSB0aW50X2NvbG9yKGJnLCBCX0RBUktF
Tl8yX1RJTlQpOworICAgICAgICAgICAgZGFya2VuMwkJPSB0aW50X2NvbG9yKGJnLCBCX0RBUktF
Tl8zX1RJTlQpOworICAgICAgICAgICAgZGFya2VubWF4CT0gdGludF9jb2xvcihiZywgQl9EQVJL
RU5fTUFYX1RJTlQpOworCisgICAgICAgICAgICBrbm9iCQk9IG5hdmlDb2xvcjsKKyAgICAgICAg
ICAgIGtub2JEYXJrCT0gdGludF9jb2xvcihuYXZpQ29sb3IsIEJfREFSS0VOXzNfVElOVCk7Cisg
ICAgICAgICAgICBrbm9iTGlnaHQJPSB0aW50X2NvbG9yKG5hdmlDb2xvciwgMC4xNSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaWdodGVubWF4CT0gdGludF9jb2xvcihiZywgQl9M
SUdIVEVOXzJfVElOVCk7CisgICAgICAgICAgICBsaWdodGVuMQk9IGJnOworICAgICAgICAgICAg
ZGFya2VuMQkJPSBiZzsKKyAgICAgICAgICAgIGRhcmtlbjIJCT0gdGludF9jb2xvcihiZywgQl9E
QVJLRU5fMV9USU5UKTsKKyAgICAgICAgICAgIGRhcmtlbjMJCT0gdGludF9jb2xvcihiZywgQl9E
QVJLRU5fMl9USU5UKTsKKyAgICAgICAgICAgIGRhcmtlbm1heAk9IHRpbnRfY29sb3IoYmcsIEJf
RElTQUJMRURfTEFCRUxfVElOVCk7CisKKyAgICAgICAgICAgIGtub2IJCT0gdGludF9jb2xvcihu
YXZpQ29sb3IsIEJfTElHSFRFTl8yX1RJTlQpOworICAgICAgICAgICAga25vYkRhcmsJPSB0aW50
X2NvbG9yKG5hdmlDb2xvciwgQl9MSUdIVEVOXzFfVElOVCk7CisgICAgICAgICAgICBrbm9iTGln
aHQJPSB0aW50X2NvbG9yKG5hdmlDb2xvciwgKEJfTElHSFRFTl8yX1RJTlQgKyBCX0xJR0hURU5f
TUFYX1RJTlQpIC8gMi4wKTsKKwkJfQorCisgICAgICAgIC8vIGRvdAorICAgICAgICBpZiggaXND
aGVja2VkKCBvICkgKSB7CisgICAgICAgICAgICAvLyBmdWxsCisgICAgICAgICAgICB2aWV3LT5T
ZXRIaWdoQ29sb3Ioa25vYkRhcmspOworICAgICAgICAgICAgdmlldy0+RmlsbEVsbGlwc2UocmVj
dCk7CisKKyAgICAgICAgICAgIHZpZXctPlNldEhpZ2hDb2xvcihrbm9iKTsKKyAgICAgICAgICAg
IHZpZXctPkZpbGxFbGxpcHNlKEJSZWN0KHJlY3QubGVmdCArIDIsIHJlY3QudG9wICsgMiwgcmVj
dC5yaWdodCAtIDMsIHJlY3QuYm90dG9tIC0gMykpOworCisgICAgICAgICAgICB2aWV3LT5TZXRI
aWdoQ29sb3Ioa25vYkxpZ2h0KTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxFbGxpcHNlKEJSZWN0
KHJlY3QubGVmdCArIDMsIHJlY3QudG9wICsgMywgcmVjdC5yaWdodCAtIDUsIHJlY3QuYm90dG9t
IC0gNSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gZW1wdHkKKyAgICAgICAg
ICAgIHZpZXctPlNldEhpZ2hDb2xvcihsaWdodGVubWF4KTsKKyAgICAgICAgICAgIHZpZXctPkZp
bGxFbGxpcHNlKHJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgcmVjdC5JbnNldEJ5KC0xLjAs
IC0xLjApOworCisgICAgICAgIHZpZXctPlNldEhpZ2hDb2xvcihkYXJrZW4xKTsKKyAgICAgICAg
dmlldy0+U3Ryb2tlQXJjKHJlY3QsIDQ1LjBmLCAxODAuMGYpOworICAgICAgICB2aWV3LT5TZXRI
aWdoQ29sb3IobGlnaHRlbm1heCk7CisgICAgICAgIHZpZXctPlN0cm9rZUFyYyhyZWN0LCA0NS4w
ZiwgLTE4MC4wZik7CisgICAgICAgIAorICAgICAgICByZWN0Lkluc2V0QnkoMSwgMSk7CisKKyAg
ICAgICAgLy8gaW5uZXIgY2lyY2xlCisgICAgICAgIHZpZXctPlNldEhpZ2hDb2xvcihkYXJrZW4z
KTsKKyAgICAgICAgdmlldy0+U3Ryb2tlQXJjKHJlY3QsIDQ1LjBmLCAxODAuMGYpOworICAgICAg
ICB2aWV3LT5TZXRIaWdoQ29sb3IoYmcpOworICAgICAgICB2aWV3LT5TdHJva2VBcmMocmVjdCwg
NDUuMGYsIC0xODAuMGYpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2b2lk
IGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKKyAgICB7CisgICAgCS8qIExlYXZlIHNvbWUg
c3BhY2UgZm9yIHRoZSBhcnJvdyAqLworICAgIAlzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0
aCgyMiwgRml4ZWQpKTsKKyAgICAJY29uc3QgaW50IG1pbkhlaWdodCA9IDIwOworICAgICAgICBz
dHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7CisgICAgfQorCisg
ICAgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKKyAgICB7CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mKSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0
eWxlKikgY29uc3Q7CisgICAgdm9pZCBjbG9zZSgpOworCisgICAgYm9vbCBzdXBwb3J0c0ZvY3Vz
KCkgY29uc3Q7Cit9OworCitSZW5kZXJUaGVtZSogdGhlbWUoKQoreworICAgIHN0YXRpYyBSZW5k
ZXJUaGVtZUhhaWt1IHJ0OworICAgIHJldHVybiAmcnQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVI
YWlrdTo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKK3sKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUoIHRy
dWUgKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRp
b246Ok5vRmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZSggKGlu
dCkgYmVfcGxhaW5fZm9udC0+U2l6ZSgpICk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVIYWlrdTo6
c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQgc2l6
ZT0xMDsKKyAgICAvLyBUaGlzIHdhcyBjb3BpZWQgZnJvbSB0aGUgUXQgcG9ydDoKKworICAgIC8v
IElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEZJWE1FOiBBIGhhcmQtY29kZWQgc2l6ZSBvZiAnc2l6ZScgaXMgdXNlZC4gVGhpcyBpcyB3
cm9uZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuIAorCisgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlz
SW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZSwg
Rml4ZWQpKTsKKworICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUsIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVIYWlrdTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAv
LyBUaGlzIGlzIHRoZSBzYW1lIGFzIGNoZWNrYm94ZXMuCisgICAgc2V0Q2hlY2tib3hTaXplKHN0
eWxlKTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9y
UGFnZShQYWdlKiBwYWdlKQoreworICAgIGlmIChwYWdlKQorICAgICAgICByZXR1cm4gUmVuZGVy
VGhlbWVIYWlrdTo6Y3JlYXRlKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIGZhbGxiYWNr
ID0gUmVuZGVyVGhlbWVIYWlrdTo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOworICAgIHJldHVybiBm
YWxsYmFjazsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvU2NyZWVuSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3
NDcyODcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhh
aWt1LmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JlZW4uaCIK
KworI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVk
ZSA8R3JhcGhpY3NEZWZzLmg+CisjaW5jbHVkZSA8aW50ZXJmYWNlL1NjcmVlbi5oPgorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBtaWdodCBiZSB1c2VmdWwsIGJ1dCBpdCBub3Qg
dXNlZCBmb3Igbm93CisvKgorc3RhdGljIEJWaWV3KiBoYWlrdVdpZGdldEZvclBhZ2UoY29uc3Qg
UGFnZSogcGFnZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSAocGFnZSA/IHBhZ2UtPm1haW5GcmFt
ZSgpIDogMCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSAoZnJhbWUgPyBmcmFtZS0+dmll
dygpIDogMCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gZnJhbWVWaWV3LT5oYWlrdVdpZGdldCgpOworfSovCisKK0Zsb2F0UmVjdCBzY3Jl
ZW5SZWN0KFdpZGdldCopCit7CisgICAgQlNjcmVlbiBzY3JlZW47CisgICAgLy8gRklYTUU6IFdl
IGFzc3VtZSB0aGlzIHNjcmVlbiBpcyB2YWxpZAorICAgIHJldHVybiBGbG9hdFJlY3Qoc2NyZWVu
LkZyYW1lKCkpOworfQorCitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdp
ZGdldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQgdXNlIHRoZSBnZXRfZGVza2Jhcl9mcmFt
ZSgpIGZ1bmN0aW9uCisgICAgLy8gZnJvbSBJbnRlcmZhY2VEZWZzLmggdG8gbWFrZSB0aGlzIHNt
YWxsZXIKKyAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOworfQorCitpbnQgc2NyZWVuRGVw
dGgoV2lkZ2V0KikKK3sKKyAgICBCU2NyZWVuIHNjcmVlbjsKKyAgICAvLyBGSVhNRTogV2UgYXNz
dW1lIHRoaXMgc2NyZWVuIGlzIHZhbGlkCisgICAgY29sb3Jfc3BhY2UgY3MgPSBzY3JlZW4uQ29s
b3JTcGFjZSgpOworCisgICAgc2l6ZV90IHBpeGVsQ2h1bmssIHJvd0FsaWdubWVudCwgcGl4ZWxz
UGVyQ2h1bms7CisgICAgaWYgKGdldF9waXhlbF9zaXplX2ZvcihjcywgJnBpeGVsQ2h1bmssICZy
b3dBbGlnbm1lbnQsICZwaXhlbHNQZXJDaHVuaykgPT0gQl9PSykgeworICAgICAgICAvLyBGSVhN
RTogTm90IHN1cmUgaWYgdGhpcyBpcyByaWdodAorICAgICAgICByZXR1cm4gcGl4ZWxDaHVuayAq
IDg7CisgICAgfQorCisgICAgcmV0dXJuIDg7Cit9CisKK2ludCBzY3JlZW5EZXB0aFBlckNvbXBv
bmVudChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDg7Cit9
CisKK2Jvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopCit7CisgICAgQlNjcmVlbiBzY3Jl
ZW47CisgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGlzIHNjcmVlbiBpcyB2YWxpZAorICAgIHJl
dHVybiBzY3JlZW4uQ29sb3JTcGFjZSgpID09IEJfTU9OT0NIUk9NRV8xX0JJVDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9s
bFZpZXdDYW52YXNIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGRjZDI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xs
Vmlld0NhbnZhc0hhaWt1LmNwcApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNjcm9sbFZpZXdDYW52YXNIYWlrdS5oIgorCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVy
LmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRl
ICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisKKyNpbmNsdWRlICJTaGFyZWRUaW1lckhh
aWt1LmgiCisKKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5oPgorI2luY2x1ZGUgPFNjcm9sbEJh
ci5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxMb29wZXIuaD4KKyNpbmNsdWRl
IDxBdXRvbG9jay5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsVmlld0NhbnZh
c0hhaWt1OjpTY3JvbGxWaWV3Q2FudmFzSGFpa3UoU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgQlZp
ZXcqIHBhcmVudCwgdWludDMyIGZsYWdzKQorICAgIDogQlZpZXcoQlJlY3QoMCwwLDAsMCksICJz
Y3JvbGxfdmlld19jYW52YXMiLCBCX0ZPTExPV19BTExfU0lERVMsIEJfV0lMTF9EUkFXIHwgQl9G
UkFNRV9FVkVOVFMgfCBmbGFncykKKyAgICAsIG1fc2Nyb2xsVmlldyhzY3JvbGxWaWV3KQorewor
ICAgIFNldFZpZXdDb2xvcigyNTUsIDI1NSwgMjU1KTsKK30KKworCit2b2lkIFNjcm9sbFZpZXdD
YW52YXNIYWlrdTo6RHJhdyhCUmVjdCB1cGRhdGVSZWN0KQoreworICAgIEZyYW1lVmlldyogZnYg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAgIGlmICghZnYgfHwg
IWZ2LT5mcmFtZSgpIHx8ICFmdi0+ZnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHdoaWxlIChmdi0+bmVlZHNMYXlvdXQoKSkgeworICAgICAgICBmdi0+
bGF5b3V0KCk7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0IGN0eCh0aGlzKTsKKyAgICBm
di0+ZnJhbWUoKS0+cGFpbnRDYXJldCgmY3R4LCAwLCAwLCB1cGRhdGVSZWN0KTsKK30KKwordm9p
ZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSAqbXNnKQor
eworICAgIC8vIEZJWE1FOiBDYXB0dXJlIG1vdXNlIHdoZWVsIG1lc3NhZ2VzCisgICAgQlZpZXc6
Ok1lc3NhZ2VSZWNlaXZlZChtc2cpOworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6
TW91c2VNb3ZlZChCUG9pbnQgd2hlcmUsIHVpbnQzMiBjb2RlLCBjb25zdCBCTWVzc2FnZSogYV9t
ZXNzYWdlKQoreworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAgIGlmICghZnYgfHwgIWZ2LT5mcmFt
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBCUG9pbnQgc2NyZWVuUG9zaXRpb24gPSBDb252
ZXJ0VG9TY3JlZW4od2hlcmUpOworCisgICAgZnYtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5t
b3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChhX21lc3NhZ2UsIHNjcmVlblBvc2l0aW9uKSk7
CisKKyAgICBCVmlldzo6TW91c2VNb3ZlZCh3aGVyZSwgY29kZSwgYV9tZXNzYWdlKTsKK30KKwor
dm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNlRG93bihCUG9pbnQgd2hlcmUpCit7Cisg
ICAgQk1lc3NhZ2UqIG1lc3NhZ2U9TG9vcGVyKCktPkN1cnJlbnRNZXNzYWdlKCk7CisgICAgaWYo
IW1lc3NhZ2UpIHJldHVybjsKKworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnYgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAgIGlmICghZnYgfHwg
IWZ2LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgIEJQb2ludCBzY3JlZW5Qb3NpdGlv
biA9IENvbnZlcnRUb1NjcmVlbih3aGVyZSk7CisKKyAgIGZ2LT5mcmFtZSgpLT5sb2FkZXIoKS0+
cmVzZXRNdWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOworCisgICBpbnQzMiBidXR0
b25zID0gbWVzc2FnZS0+RmluZEludDMyKCJidXR0b25zIik7CisKKyAgIGlmKCBidXR0b25zID09
IDIgKQorICAgICAgIGZ2LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51
RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KG1lc3NhZ2Usc2NyZWVuUG9zaXRpb24pKTsKKyAgIGVs
c2UKKyAgICAgICBmdi0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NF
dmVudChQbGF0Zm9ybU1vdXNlRXZlbnQobWVzc2FnZSxzY3JlZW5Qb3NpdGlvbikpOworCisgICBC
Vmlldzo6TW91c2VEb3duKHdoZXJlKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6
Ok1vdXNlVXAoQlBvaW50IHdoZXJlKQoreworICAgIEJNZXNzYWdlKiBtZXNzYWdlPUxvb3Blcigp
LT5DdXJyZW50TWVzc2FnZSgpOworICAgIGlmKCFtZXNzYWdlKSByZXR1cm47CisKKyAgICBXZWJD
b3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9z
Y3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQlBvaW50IHNjcmVlblBvc2l0aW9uID0gQ29udmVydFRvU2NyZWVuKHdoZXJlKTsK
KworICAgIGZ2LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZl
bnQoUGxhdGZvcm1Nb3VzZUV2ZW50KG1lc3NhZ2UsIHNjcmVlblBvc2l0aW9uKSk7CisKKyAgICBC
Vmlldzo6TW91c2VVcCh3aGVyZSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpE
b1Njcm9sbChib29sIGlzSG9yaXpvbnRhbCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBwcmlu
dGYoIlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RG9TY3JvbGxcbiIpOworfQorCit2b2lkIFNjcm9s
bFZpZXdDYW52YXNIYWlrdTo6S2V5RG93bihjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVtQnl0
ZXMpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2U9TG9vcGVyKCktPkN1cnJlbnRNZXNzYWdlKCk7
CisgICAgaWYoIW1lc3NhZ2UpIHJldHVybjsKKworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnYg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAgIGlm
ICghZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgIAlyZXR1cm47CisKKyAgICBpZighZnYtPmZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQobWVzc2Fn
ZSkpKQorICAgIAlwcmludGYoIi0tPktleURvd246IG5vdCBhcnJpdmVkXG4iKTsgICAgCisKKyAg
ICBpZigoaW50KWJ5dGVzWzBdICE9IChpbnQpQl9UQUIpIC8vb3RoZXJzPworICAgICAgICBCVmll
dzo6S2V5RG93bihieXRlcywgbnVtQnl0ZXMpOworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNI
YWlrdTo6S2V5VXAoY29uc3QgY2hhciogYnl0ZXMsIGludDMyIG51bUJ5dGVzKQoreworICAgIEJN
ZXNzYWdlKiBtZXNzYWdlPUxvb3BlcigpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGlmKCFtZXNz
YWdlKSByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+
ZnJhbWUoKSkKKyAgICAJcmV0dXJuOworCisgICAgaWYoZnYtPmZyYW1lKCktPmV2ZW50SGFuZGxl
cigpLT5rZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQobWVzc2FnZSkpKQorICAgIAlwcmlu
dGYoIi0tPktleVVwOiBub3QgYXJyaXZlZFxuIik7IAorCisgICAgaWYoYnl0ZXNbMF0gIT0gKGlu
dClCX1RBQikgLy9vdGhlcnM/CisgICAgICAgIEJWaWV3OjpLZXlVcChieXRlcywgbnVtQnl0ZXMp
OworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6V2luZG93QWN0aXZhdGVkKGJvb2wg
c3RhdGUpCit7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiBmdiA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldyk7CisgICAgaWYgKCFmdiB8fCAhZnYtPmZyYW1l
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZ2LT5mcmFtZSgpLT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLT5zZXRBY3RpdmUoc3RhdGUpOworfQorCisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZh
c0hhaWt1OjpGcmFtZVJlc2l6ZWQoZmxvYXQgdyxmbG9hdCBoKQoreworICAgIGlmICghbV9zY3Jv
bGxWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zY3JvbGxWaWV3LT5jb250ZW50
c1dpZHRoKCkgIT0gKGludCkodyArIDEpIHx8IG1fc2Nyb2xsVmlldy0+Y29udGVudHNIZWlnaHQo
KSAhPSAoaW50KShoICsgMSkpIHsKKyAgICAJV2ViQ29yZTo6RnJhbWVWaWV3KiBmdiA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldyk7CisgICAgCWlmIChmdil7
CisgICAgICAgICAgICAvL2Z2LT5mcmFtZSgpLT5mb3JjZUxheW91dCgpOworICAgICAgICAgICAg
Ly9mdi0+YWRqdXN0Vmlld1NpemUoKTsKKyAgICAgICAgICAgIGZ2LT5zZXROZWVkc0xheW91dCgp
OworICAgIAl9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmggYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZGY2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oCkBAIC0wLDAgKzEsNzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Ny
b2xsVmlld0NhbnZhc0hhaWt1X2gKKyNkZWZpbmUgU2Nyb2xsVmlld0NhbnZhc0hhaWt1X2gKKwor
I2luY2x1ZGUgPFZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgU2Ny
b2xsVmlldzsKKworICAgIGNsYXNzIFNjcm9sbFZpZXdDYW52YXNIYWlrdSA6IHB1YmxpYyBCVmll
dworICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjcm9sbFZpZXdDYW52YXNIYWlrdShTY3Jv
bGxWaWV3KiwgQlZpZXcqIHBhcmVudCwgdWludDMyIGZsYWdzKTsKKworICAgICAgICB2b2lkIFNl
dFNjcm9sbEJhck1heFYoZmxvYXQgdlYpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc2Nyb2xs
QmFyTWF4ViA9IHZWOworICAgICAgICB9CisgICAgICAgIHZvaWQgU2V0U2Nyb2xsQmFyTWF4SChm
bG9hdCB2SCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9zY3JvbGxCYXJNYXhIID0gdkg7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIERyYXcoQlJlY3QgdXBkYXRlUmVjdCk7CisgICAgICAg
IHZvaWQgTWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdlICptc2cpOworICAgICAgICB2b2lkIE1vdXNl
TW92ZWQoQlBvaW50IHdoZXJlLCB1aW50MzIgY29kZSwgY29uc3QgQk1lc3NhZ2UqIGFfbWVzc2Fn
ZSk7CisgICAgICAgIHZvaWQgTW91c2VEb3duKEJQb2ludCB3aGVyZSk7CisgICAgICAgIHZvaWQg
TW91c2VVcChCUG9pbnQgd2hlcmUpOworICAgICAgICB2b2lkIEtleURvd24oY29uc3QgY2hhciog
Ynl0ZXMsIGludDMyIG51bUJ5dGVzKTsKKyAgICAgICAgdm9pZCBLZXlVcChjb25zdCBjaGFyKiBi
eXRlcywgaW50MzIgbnVtQnl0ZXMpOworICAgICAgICB2b2lkIFdpbmRvd0FjdGl2YXRlZChib29s
IHN0YXRlKTsKKworICAgICAgICB2b2lkIFNldFNjcm9sbFZpZXcoU2Nyb2xsVmlldyogc2Nyb2xs
VmlldykKKyAgICAgICAgeworICAgICAgICAgICAgbV9zY3JvbGxWaWV3ID0gc2Nyb2xsVmlldzsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgRnJhbWVSZXNpemVkKGZsb2F0IHcsIGZsb2F0IGgp
OworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIERvU2Nyb2xsKGJvb2wgaXNI
b3Jpem9udGFsLCBmbG9hdCBtdWx0aXBsaWVyKTsKKworICAgICAgICBTY3JvbGxWaWV3KiBtX3Nj
cm9sbFZpZXc7CisgICAgICAgIGZsb2F0IG1fc2Nyb2xsQmFyTWF4SDsKKyAgICAgICAgZmxvYXQg
bV9zY3JvbGxCYXJNYXhWOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBTY3JvbGxWaWV3Q2FudmFzSGFpa3VfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Nj
cm9sbFZpZXdIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdj
NjUyNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmll
d0hhaWt1LmNwcApAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
bmRyZWEgQW56YW5pICAgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICogCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlld0NhbnZh
c0hhaWt1LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXS1Njcm9s
bFZpZXcuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5jbHVk
ZSA8V2luZG93Lmg+CisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRlIDxzdXBw
b3J0L0F1dG9sb2NrLmg+CisjaW5jbHVkZSA8U2Nyb2xsVmlldy5oPgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgOiBwdWJsaWMg
V0tTY3JvbGxWaWV3Cit7CitwdWJsaWM6CisgICAgU2Nyb2xsVmlld1ByaXZhdGUoV2ViQ29yZTo6
U2Nyb2xsVmlldyogc2Nyb2xsVmlldykKKyAgICAgICAgOiBXS1Njcm9sbFZpZXcoIldlYkNvcmUg
U2Nyb2xsVmlld1ByaXZhdGUiLCBuZXcgU2Nyb2xsVmlld0NhbnZhc0hhaWt1KE5VTEwsIE5VTEws
IDApLAorICAgICAgICAgICAgICAgICAgICAgICBCX0ZPTExPV19OT05FLCBCX1dJTExfRFJBVyB8
IEJfRlJBTUVfRVZFTlRTICkgLy9CX0ZVTExfVVBEQVRFX09OX1JFU0laRQorICAgICAgICAsIG1f
c2Nyb2xsVmlldyhzY3JvbGxWaWV3KQorICAgICAgICAsIG1fY29udGVudFNpemUoMCwgMCkKKyAg
ICB7CisgICAgICAgIFNldFZpZXdDb2xvcigyNTUsIDI1NSwgMjU1KTsKKyAgICB9CisKKyAgICB2
b2lkIEF0dGFjaGVkVG9XaW5kb3coKQorICAgIHsKKyAgICAgICAgUmVzaXplQnkoLSAoQl9WX1ND
Uk9MTF9CQVJfV0lEVEggLSAxKSwgLSAoQl9IX1NDUk9MTF9CQVJfSEVJR0hUIC0gMSkpOworCSAg
IAlXS1Njcm9sbFZpZXc6OkF0dGFjaGVkVG9XaW5kb3coKTsKKyAgICB9CisKKwl2b2lkIEtleURv
d24oY29uc3QgY2hhciogYnl0ZXMsIGludDMyIG51bUJ5dGVzKQorCXsKKyAgICAgICAgLy8gRklY
TUU6IHdoZW4gU2Nyb2xsVmlldy5oIHRha2VzIHRoZSBmb2N1cyBzaG91bGQgZm9jdXMgdGhlIHRh
cmdldCgpLi4KKwkKKyAgICAgICAgaWYoVGFyZ2V0KCkpCisgICAgICAgICAgICBUYXJnZXQoKS0+
S2V5RG93bihieXRlcywgbnVtQnl0ZXMpOworCX0KKworICAJdm9pZCBLZXlVcChjb25zdCBjaGFy
KiBieXRlcywgaW50MzIgbnVtQnl0ZXMpCisJeworICAgICAgICAvL3NlZSBjb21tZW50IGFib3Zl
LgorCisgICAgICAgIGlmKFRhcmdldCgpKQorICAgICAgICAgICAgVGFyZ2V0KCktPktleVVwKGJ5
dGVzLCBudW1CeXRlcyk7CisJfQorCisgIAlCUmVjdCBWaXNpYmxlRnJhbWUoKQorICAgIHsKKyAg
ICAgICAgaWYgKFRhcmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIFRhcmdldCgpLT5Cb3VuZHMo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEJvdW5kcygpOworICAgIH0KKwor
ICAgIHZvaWQgU2V0Q29udGVudFNpemUoQlNpemUgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fY29u
dGVudFNpemUgPSBzaXplOworIAl9CisKKyAgICBCU2l6ZSBDb250ZW50U2l6ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9jb250ZW50U2l6ZTsKKyAgICB9CisKKyAgICBmbG9hdCBDb250ZW50
V2lkdGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29udGVudFNpemUud2lkdGg7CisgICAg
fQorCisgICAgZmxvYXQgQ29udGVudEhlaWdodCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9j
b250ZW50U2l6ZS5oZWlnaHQ7CisgICAgfQorCisgICAgQlBvaW50IFNjcm9sbE9mZnNldCgpCisg
ICAgeworICAgICAgICBpZiAoVGFyZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gVGFyZ2V0KCkt
PkxlZnRUb3AoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEJQb2ludCgwLCAw
KTsKKyAgICB9CisKKyAgICB2b2lkIFNjcm9sbEJ5KGZsb2F0IGRoLCBmbG9hdCBkdikKKyAgICB7
CisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIFRhcmdldCgpLT5TY3JvbGxCeShk
aCwgZHYpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpTY3JvbGxWaWV3KiBtX3Nj
cm9sbFZpZXc7CisgICAgQlNpemUgbV9jb250ZW50U2l6ZTsKK307CisKK3ZvaWQgU2Nyb2xsVmll
dzo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX2RhdGEgPSBuZXcgU2Nyb2xsVmlld1ByaXZhdGUo
dGhpcyk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBk
ZWxldGUgbV9kYXRhOworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OnBsYXRmb3JtVmlzaWJsZUNv
bnRlbnRSZWN0KGJvb2wpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+VmlzaWJsZUZyYW1l
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxiYXJNb2RlcygpCit7
CisgICAgaWYgKG1fZGF0YS0+U2Nyb2xsQmFyTW9kZShCX0hPUklaT05UQUwpICE9IGhvcml6b250
YWxTY3JvbGxiYXJNb2RlKCkpCisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hP
UklaT05UQUwsIGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkpOworCisgICAgaWYgKG1fZGF0YS0+
U2Nyb2xsQmFyTW9kZShCX1ZFUlRJQ0FMKSAhPSB2ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKSkKKyAg
ICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwsIHZlcnRpY2FsU2Nyb2xs
YmFyTW9kZSgpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbGJhck1vZGVz
KFNjcm9sbGJhck1vZGUmIGhvcml6b250YWwsIFNjcm9sbGJhck1vZGUmIHZlcnRpY2FsKSBjb25z
dAoreworICAgIC8vIEZJWE1FOiBzdGlsbCBwcm9ibG1lcyB3aXRoIGRpZmZlcmVudCBzY3JvbGxi
YXIgbW9kZXMuCisgICAgI2lmIDAKKworICAgIGlmICghbV9kYXRhKQorICAgICAgICByZXR1cm47
CisKKyAgICBzd2l0Y2ggKGhvcml6b250YWwpIHsKKyAgICBjYXNlIFNjcm9sbGJhckF1dG86Cisg
ICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hPUklaT05UQUwsIFNjcm9sbGJhckF1
dG8pOwkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxiYXJBbHdheXNPbjoKKyAgICAg
ICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfSE9SSVpPTlRBTCwgU2Nyb2xsYmFyQWx3YXlz
T24pOyAKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxiYXJBbHdheXNPZmY6CisgICAg
ICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hPUklaT05UQUwsIFNjcm9sbGJhckFsd2F5
c09mZik7IAorICAgICAgICBicmVhazsJCisgICAgfQorCisgICAgc3dpdGNoICh2ZXJ0aWNhbCkg
eworICAgIGNhc2UgU2Nyb2xsYmFyQXV0bzoKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJN
b2RlKEJfVkVSVElDQUwsIFNjcm9sbGJhckF1dG8pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNjcm9sbGJhckFsd2F5c09uOgorICAgICAgICBtX2RhdGEtPlNldFNjcm9sbEJhck1vZGUoQl9W
RVJUSUNBTCwgU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNj
cm9sbGJhckFsd2F5c09mZjoKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfVkVS
VElDQUwsIFNjcm9sbGJhckFsd2F5c09mZik7CisgICAgICAgIGJyZWFrOwkKKyAgICB9CisKKyAg
ICAjZW5kaWYKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKFdpZGdldCog
Y2hpbGQpCit7CisgICAgQlZpZXcqIHRhcmdldCA9IG1fZGF0YS0+VGFyZ2V0KCk7CisgICAgaWYg
KHRhcmdldCkKKyAgICAgICAgY2hpbGQtPnNldFBhcmVudFdpZGdldCh0YXJnZXQpOworfQorCit2
b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVtb3ZlQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKK3sgCisg
ICAgQlZpZXcqIHRhcmdldCA9IG1fZGF0YS0+VGFyZ2V0KCk7CisKKyAgICBpZiAodGFyZ2V0ICYm
IHRhcmdldC0+TG9ja0xvb3BlcigpKSB7CisgICAgICAgIGNoaWxkLT5oYWlrdVdpZGdldCgpLT5S
ZW1vdmVTZWxmKCk7CisgICAgICAgIHRhcmdldC0+VW5sb2NrTG9vcGVyKCk7CisgICAgfQorfQor
Cit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q29udGVudHNTaXplKCkKK3sKKyAgICAvL3Nj
cm9sbGJhciBmaXg6CisgICAgLy8gbV9kYXRhLT5TY3JvbGxCYXIoQl9IT1JJWk9OVEFMKS0+U2V0
UmFuZ2UoMCwgdyAtIHdpZHRoKCkgLTEgKyBCX1ZfU0NST0xMX0JBUl9XSURUSCk7CisgICAgLy8g
bV9kYXRhLT5TY3JvbGxCYXIoQl9IT1JJWk9OVEFMKS0+U2V0UHJvcG9ydGlvbiggIHdpZHRoKCkg
IC8gKGZsb2F0KSh3LTEpKTsKKworICAgIC8vIG1fZGF0YS0+U2Nyb2xsQmFyKEJfVkVSVElDQUwp
LT5TZXRSYW5nZSgwLCBoIC0gaGVpZ2h0KCkgLTEgKyBCX0hfU0NST0xMX0JBUl9IRUlHSFQpOwor
ICAgIC8vIG1fZGF0YS0+U2Nyb2xsQmFyKEJfVkVSVElDQUwpLT5TZXRQcm9wb3J0aW9uKCAgaGVp
Z2h0KCkgIC8gKGZsb2F0KShoLTEpKTsKK30KKworSW50U2l6ZSBTY3JvbGxWaWV3OjpwbGF0Zm9y
bUNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVp
Z2h0ID0gMDsKKyAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgeworICAgICAgICBCU2l6ZSBmcmFt
ZSA9IHBsYXRmb3JtV2lkZ2V0KCktPlByZWZlcnJlZFNpemUoKTsKKyAgICAgICAgd2lkdGggPSBm
cmFtZS5JbnRlZ2VyV2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gZnJhbWUuSW50ZWdlckhlaWdo
dCgpOworICAgICAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7CisgICAgfQor
ICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFNjcm9sbFZpZXc6
OnBsYXRmb3JtU2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1S
ZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5v
dykKK3sKKyAgICBpZiAodXBkYXRlUmVjdC53aWR0aCgpID09IDAgfHwgdXBkYXRlUmVjdC5oZWln
aHQoKSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBCUmVjdCB1cGRhdGUodXBkYXRlUmVj
dCk7CisKKyAgICBCVmlldyogdGFyZ2V0ID0gbV9kYXRhLT5UYXJnZXQoKTsKKworICAgIGlmICgh
dXBkYXRlLklzVmFsaWQoKSB8fCB0YXJnZXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdXBkYXRlID0gdXBkYXRlICYgbV9kYXRhLT5WaXNpYmxlRnJhbWUoKTsKKworICAgIHRhcmdl
dC0+SW52YWxpZGF0ZSh1cGRhdGUpOworCisgICAgaWYgKG5vdykKKyAgICAgICAJdGFyZ2V0LT5T
eW5jKCk7CisgICAgZWxzZQorICAgICAgIAl0YXJnZXQtPkZsdXNoKCk7Cit9CisKK0ludFBvaW50
IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFJl
Y3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0Cit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gcmVjdDsKK30KKwordm9pZCBT
Y3JvbGxWaWV3OjpwbGF0Zm9ybVNldENhbkJsaXRPblNjcm9sbChib29sIGZsYWcpCit7CisgICAg
aWYoIW1fZGF0YSB8fCAhbV9kYXRhLT5UYXJnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCQorICAg
IGlmIChtX2RhdGEtPlZpZXdDb2xvcigpID09IEJfVFJBTlNQQVJFTlRfQ09MT1IgJiYgIWZsYWcp
IHsKKyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7CisgICAgICAg
IG1fZGF0YS0+VGFyZ2V0KCktPlNldFZpZXdDb2xvcigyNTUsIDI1NSwgMjU1KTsKKyAgICAgICAg
bV9kYXRhLT5UYXJnZXQoKS0+SW52YWxpZGF0ZSgpOworICAgIH0gZWxzZSBpZiAobV9kYXRhLT5W
aWV3Q29sb3IoKSAhPSBCX1RSQU5TUEFSRU5UX0NPTE9SICYmIGZsYWcpIHsKKyAgICAgICAgbV9k
YXRhLT5TZXRWaWV3Q29sb3IoQl9UUkFOU1BBUkVOVF9DT0xPUik7CisgICAgICAgIG1fZGF0YS0+
VGFyZ2V0KCktPlNldFZpZXdDb2xvcihCX1RSQU5TUEFSRU5UX0NPTE9SKTsKKyAgICAgICAgbV9k
YXRhLT5UYXJnZXQoKS0+SW52YWxpZGF0ZSgpOworICAgIH0KKy8vICAgIGlmKGZsYWcpCisvLyAg
ICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7CisvLyAgICBlbHNlCisv
LyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoQl9UUkFOU1BBUkVOVF9DT0xPUik7Cit9CisK
K2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1DYW5CbGl0T25TY3JvbGwoKSBjb25zdAoreworICAg
IHJldHVybiBtX2RhdGEtPlZpZXdDb2xvcigpID09IEJfVFJBTlNQQVJFTlRfQ09MT1I7Cit9CisK
K2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jc09mZnNjcmVlbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFwbGF0Zm9ybVdpZGdldCgpIHx8ICFwbGF0Zm9ybVdpZGdldCgpLT5Jc0hpZGRlbigpOwor
fQorCitib29sIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0UGFyZW50V2lkZ2V0KEJWaWV3KiBwYXJlbnQp
Cit7ICAKKyAgICBpZiAoaXNGcmFtZVZpZXcoKSkgeworICAgICAgICBTY3JvbGxWaWV3Q2FudmFz
SGFpa3UqIGNhbnZhcyA9IHN0YXRpY19jYXN0PFNjcm9sbFZpZXdDYW52YXNIYWlrdSo+KG1fZGF0
YS0+VGFyZ2V0KCkpOworICAgICAgICBpZiAoY2FudmFzKQorICAgICAgICAJY2FudmFzLT5TZXRT
Y3JvbGxWaWV3KHRoaXMpOworICAgIH0KKworICAgIFdpZGdldDo6c2V0UGFyZW50V2lkZ2V0KHBh
cmVudCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0QWxsb3dzU2Nyb2xsaW5nKGJvb2wgYWxs
b3dzKQoreworICAgLy9kaXNhYmxlIHNjcm9sbGJhcnMgb3IgaGlkZSBzY3JvbGxiYXJzPworICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjQyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcApAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5o
IgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcu
aCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlYXJjaFBvcHVwTWVudTo6U2VhcmNoUG9w
dXBNZW51KFBvcHVwTWVudUNsaWVudCogY2xpZW50KQorICAgIDogUG9wdXBNZW51KGNsaWVudCkK
K3sKK30KKwordm9pZCBTZWFyY2hQb3B1cE1lbnU6OnNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcykKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNlYXJjaFBvcHVwTWVudTo6bG9hZFJl
Y2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9yPFN0cmluZz4mIHNl
YXJjaEl0ZW1zKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgU2VhcmNoUG9w
dXBNZW51OjplbmFibGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9TaGFyZWRUaW1lckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5hYzkyYzIyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9T
aGFyZWRUaW1lckhhaWt1LmNwcApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2hhcmVkVGltZXJIYWlrdS5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKworI2lu
Y2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxNZXNzYWdlUnVubmVyLmg+CisjaW5jbHVkZSA8
c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRlIDxzdXBwb3J0L0F1dG9sb2NrLmg+CisjaW5jbHVk
ZSA8TG9vcGVyLmg+CisKKyNkZWZpbmUgRklSRV9NRVNTQUdFICdmaXJlJworCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU2hhcmVkVGltZXJIYWlrdTo6U2hhcmVkVGltZXJIYWlrdSgpCisgICAg
OiBCTWVzc2FnZUZpbHRlcihGSVJFX01FU1NBR0UpCisgICAgLCBtX2ZpcmVUaW1lKDApCisgICAg
LCBtX3Nob3VsZFJ1bih0cnVlKSwgbV90aW1lckZ1bmN0aW9uKE5VTEwpCit7Cit9CisKK2ZpbHRl
cl9yZXN1bHQgU2hhcmVkVGltZXJIYWlrdTo6RmlsdGVyKEJNZXNzYWdlKiBtZXNzYWdlLCBCSGFu
ZGxlcioqIF90YXJnZXQpCit7CisgICAgaWYgKG1fdGltZXJGdW5jdGlvbiAmJiBtX3Nob3VsZFJ1
bikKKyAgICAgICAgbV90aW1lckZ1bmN0aW9uKCk7CisKKyAgICByZXR1cm4gQl9TS0lQX01FU1NB
R0U7CQorfQorCitTaGFyZWRUaW1lckhhaWt1Ojp+U2hhcmVkVGltZXJIYWlrdSgpCit7Cit9CisK
K3ZvaWQgU2hhcmVkVGltZXJIYWlrdTo6c2V0RmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKQorewor
ICAgIG1fZmlyZVRpbWUgPSBmaXJlVGltZTsKKyAgICBpZiAobV9maXJlVGltZSA+IDAgJiYgbV9z
aG91bGRSdW4pIHsKKyAgICAgICAgYmlndGltZV90IHNsZWVweVRpbWUgPSAoYmlndGltZV90KSgo
bV9maXJlVGltZSAtIFdURjo6Y3VycmVudFRpbWUoKSkgKiAxMDAwMDAwKTsKKyAgICAgICAgCisg
ICAgICAgIGlmKHNsZWVweVRpbWU8MCkKKyAgICAgICAgICAgIHNsZWVweVRpbWUgPSAwOworCisg
ICAgICAgIEJNZXNzYWdlUnVubmVyOjpTdGFydFNlbmRpbmcoTG9vcGVyKCksIG5ldyBCTWVzc2Fn
ZShGSVJFX01FU1NBR0UpLCBzbGVlcHlUaW1lLCAxKTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhcmVk
VGltZXJIYWlrdTo6c2V0RmlyZUZ1bmN0aW9uKHZvaWQgKCpmKSgpKQoreworICAgIG1fdGltZXJG
dW5jdGlvbiA9IGY7Cit9CisKK3ZvaWQgU2hhcmVkVGltZXJIYWlrdTo6c2V0U2hvdWxkUnVuKGJv
b2wgc2hvdWxkUnVuKQoreworICAgIG1fc2hvdWxkUnVuID0gc2hvdWxkUnVuOworfQorCisvLyBT
dGF0aWMgaW5zdGFuY2UKK1NoYXJlZFRpbWVySGFpa3UqIGdldFNoYXJlZFRpbWVySGFpa3UoKQor
eworICAgIC8vIFBsZWFzZSBub3RlIHRoaXMgaXMgc3RpbGwgYW4gZXhwZXJpbWVudGFsIHNvbHV0
aW9uLgorCisgICAgQkxvb3BlciAqbG9vcGVyID0gQkxvb3Blcjo6TG9vcGVyRm9yVGhyZWFkKGZp
bmRfdGhyZWFkKE5VTEwpKTsKKyAgICAvLyBBU1NFUlQobG9vcGVyKTsKKyAgICAvLyBGSVhNRTog
d2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBjdXJyZW50IGxvb3BlciBoYXMgYSB2YWxpZCBpZiBub3Qg
YWRkIGEgbmV3IG9uZS4KKyAgICAvLyB3ZSBzaG91bGQgYWxzbyBiZSBzdXJlIHRoZSBsb29wZXIg
aXMgYSBCV2luZG93Li4KKworICAgIHN0YXRpYyBTaGFyZWRUaW1lckhhaWt1KiBzaGFyZWRUaW1l
cj1OVUxMOworCisgICAgaWYgKHNoYXJlZFRpbWVyID09IE5VTEwpIHsKKyAgICAgICAgQkF1dG9s
b2NrIGxvY2sobG9vcGVyKTsKKyAgICAgICAgc2hhcmVkVGltZXIgPSBuZXcgU2hhcmVkVGltZXJI
YWlrdSgpOworICAgICAgICBsb29wZXItPkFkZENvbW1vbkZpbHRlcihzaGFyZWRUaW1lcik7ICAg
IAkKKyAgICB9CisKKyAgICByZXR1cm4gc2hhcmVkVGltZXI7Cit9CisKKy8vIFdlYkNvcmUgZnVu
Y3Rpb25zCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKK3sK
KyAgICBTaGFyZWRUaW1lckhhaWt1KiB0aW1lcj1nZXRTaGFyZWRUaW1lckhhaWt1KCk7CisgICAg
QkF1dG9sb2NrIGxvY2sodGltZXItPkxvb3BlcigpKTsKKyAgICB0aW1lci0+c2V0RmlyZUZ1bmN0
aW9uKGYpOworfQorCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZG91YmxlIGZpcmVUaW1l
KQoreworICAgIFNoYXJlZFRpbWVySGFpa3UqIHRpbWVyPWdldFNoYXJlZFRpbWVySGFpa3UoKTsK
KyAgICBCQXV0b2xvY2sgbG9jayh0aW1lci0+TG9vcGVyKCkpOworICAgIHRpbWVyLT5zZXRTaG91
bGRSdW4odHJ1ZSk7CisgICAJdGltZXItPnNldEZpcmVUaW1lKGZpcmVUaW1lKTsKK30KKwordm9p
ZCBzdG9wU2hhcmVkVGltZXIoKQoreworICAgIFNoYXJlZFRpbWVySGFpa3UqIHRpbWVyPWdldFNo
YXJlZFRpbWVySGFpa3UoKTsKKyAgICBCQXV0b2xvY2sgbG9jayh0aW1lci0+TG9vcGVyKCkpOwor
ICAgIHRpbWVyLT5zZXRTaG91bGRSdW4oZmFsc2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlr
dS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1NGI5NgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5oCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNo
YXJlZFRpbWVySGFpa3VfaAorI2RlZmluZSBTaGFyZWRUaW1lckhhaWt1X2gKKworI2luY2x1ZGUg
PE9TLmg+CisjaW5jbHVkZSA8TWVzc2FnZUZpbHRlci5oPgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICBjbGFzcyBTaGFyZWRUaW1lckhhaWt1IDogcHVibGljIEJNZXNzYWdlRmlsdGVyIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgU2hhcmVkVGltZXJIYWlrdSgpOworICAgICAg
ICAgICAgflNoYXJlZFRpbWVySGFpa3UoKTsKKworICAgICAgICAgICAgdm9pZCBzZXRGaXJlVGlt
ZShkb3VibGUgZmlyZVRpbWUpOworICAgICAgICAgICAgdm9pZCBzZXRGaXJlRnVuY3Rpb24odm9p
ZCAoKmYpKCkpOworICAgICAgICAgICAgdm9pZCBzZXRTaG91bGRSdW4oYm9vbCBzaG91bGRSdW4p
OworCisgICAgICAgICAgICAvL3ZvaWQJTWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdlKiBtZXNzYWdl
KTsKKyAgICAgICAgICAgIHZpcnR1YWwJZmlsdGVyX3Jlc3VsdCBGaWx0ZXIoQk1lc3NhZ2UqIG1l
c3NhZ2UsIEJIYW5kbGVyKiogX3RhcmdldCk7CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIC8vdm9pZCB3YWl0KCk7CisgICAgICAgICAgICAvL3N0YXRpYyBpbnQzMiB0aHJlYWRGdW5j
dGlvbih2b2lkICpkYXRhKTsKKworICAgICAgICAgICAgLy90aHJlYWRfaWQgbV90aHJlYWQ7Cisg
ICAgICAgICAgICAvL3NlbV9pZCBtX3dhaXRTZW07CisgICAgICAgICAgICBkb3VibGUgbV9maXJl
VGltZTsKKyAgICAgICAgICAgIHZvaWQgKCptX3RpbWVyRnVuY3Rpb24pKCk7CisgICAgICAgICAg
ICBib29sIG1fc2hvdWxkUnVuOworICAgIH07CisKKyAgICBTaGFyZWRUaW1lckhhaWt1KiBnZXRT
aGFyZWRUaW1lckhhaWt1KCk7Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBT
aGFyZWRUaW1lckhhaWt1X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9T
b3VuZEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU291bmRIYWlrdS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlZTkzZgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU291bmRIYWlrdS5jcHAKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RA
Z21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdW5kLmgiCisKKyNpbmNsdWRlIDxCZWVwLmg+CisKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIHN5c3RlbUJlZXAoKQoreworICAgIGJlZXAoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1N5c3RlbVRpbWVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1N5
c3RlbVRpbWVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYw
ZDAxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU3lzdGVtVGlt
ZUhhaWt1LmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4g
TGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzdGVtVGltZS5o
IgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Rv
dWJsZSBjdXJyZW50VGltZSgpCit7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgc3RydWN0
IHRpbWV6b25lIHR6OworCisgICAgZ2V0dGltZW9mZGF5KCZ0diwgJnR6KTsKKyAgICByZXR1cm4g
KGRvdWJsZSl0di50dl9zZWMgKyAoZG91YmxlKSh0di50dl91c2VjIC8gMTAwMDAwMC4wKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDdhMDlhOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcApAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNv
bT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAi
Tm9kZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIldpZGdldC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2lu
Y2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIktVUkwu
aCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2Uu
aCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisj
aW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiU2NyZWVuLmgiCisjaW5jbHVkZSAiSGlz
dG9yeS5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgorI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIK
KyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiSWNvbkxvYWRlci5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gTG9jYWxpemVkU3RyaW5ncworU3Ry
aW5nIFdlYkNvcmU6OnN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpIHsgcmV0dXJuICJTdWJtaXQi
OyB9CitTdHJpbmcgV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4dCgpIHsgcmV0dXJuIFN0cmlu
ZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6cmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKSB7IHJldHVy
biAiUmVzZXQiOyB9CitTdHJpbmcgV2ViQ29yZTo6ZGVmYXVsdExhbmd1YWdlKCkgeyByZXR1cm4g
ImVuIjsgfQorU3RyaW5nIFdlYkNvcmU6OnNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpIHsg
cmV0dXJuICJTZWFyY2hhYmxlIEluZGV4IjsgfQorU3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0b25D
aG9vc2VGaWxlTGFiZWwoKSB7IHJldHVybiAiQ2hvb3NlIEZpbGUiOyB9CitTdHJpbmcgV2ViQ29y
ZTo6ZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKSB7IHJldHVybiAiTm8gZmlsZSBzZWxl
Y3RlZCI7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3
V2luZG93KCkgeyByZXR1cm4gU3RyaW5nKCAiT3BlbiBpbiBuZXcgdGFiIiApOyB9CitTdHJpbmcg
V2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrKCkgeyByZXR1cm4g
U3RyaW5nKCAiRG93bmxvYWQgbGluayB0byBkaXNrIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpIHsgcmV0dXJuIFN0cmluZyggIkNv
cHkgbGluayB0byBjbGlwYm9hcmQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdygpIHsgcmV0dXJuIFN0cmluZyggIk9wZW4gaW1hZ2Ug
aW4gbmV3IHdpbmRvdyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkSW1hZ2VUb0Rpc2soKSB7IHJldHVybiBTdHJpbmcoICJEb3dubG9hZCBpbWFnZSB0byBk
aXNrIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9D
bGlwYm9hcmQoKSB7IHJldHVybiBTdHJpbmcoICJDb3B5IGltYWdlIHRvIGNsaXBib2FyZCIgKTsg
fQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93
KCkgeyByZXR1cm4gU3RyaW5nKCAiT3BlbiBmcmFtZSBpbiBuZXcgd2luZG93IiApOyB9CitTdHJp
bmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ29weSgpIHsgcmV0dXJuIFN0cmluZyggIkNv
cHkiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2soKSB7IHJl
dHVybiBTdHJpbmcoICJHbyBiYWNrIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJ
dGVtVGFnR29Gb3J3YXJkKCkgeyByZXR1cm4gU3RyaW5nKCAiR28gZm9yd2FyZCIgKTsgfQorU3Ry
aW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSB7IHJldHVybiBTdHJpbmcoICJT
dG9wIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkgeyBy
ZXR1cm4gU3RyaW5nKCAiUmVsb2FkIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJ
dGVtVGFnQ3V0KCkgeyByZXR1cm4gU3RyaW5nKCAiQ3V0IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6
Y29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKSB7IHJldHVybiBTdHJpbmcoICJQYXN0ZSIgKTsgfQor
U3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCkgeyByZXR1
cm4gU3RyaW5nKCAiTm8gZ3Vlc3NlcyBmb3VuZCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRl
eHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkgeyByZXR1cm4gU3RyaW5nKCAiSWdub3JlIHNw
ZWxsaW5nIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVs
bGluZygpIHsgcmV0dXJuIFN0cmluZyggIkxlYXJuIHNwZWxsaW5nIiApOyB9CitTdHJpbmcgV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkgeyByZXR1cm4gU3RyaW5nKCAiU2Vh
cmNoIHdlYiIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcElu
RGljdGlvbmFyeSgpIHsgcmV0dXJuIFN0cmluZyggIkxvb2t1cCBpbiBkaWN0aW9uYXJ5IiApOyB9
CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmsoKSB7IHJldHVybiBT
dHJpbmcoICJPcGVuIGxpbmsiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdJZ25vcmVHcmFtbWFyKCkgeyByZXR1cm4gU3RyaW5nKCAiSWdub3JlIGdyYW1tYXIiICk7IH0K
K1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKSB7IHJldHVy
biBTdHJpbmcoICJTcGVsbGluZyBtZW51IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1l
bnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwoYm9vbCBzaG93KSB7IHJldHVybiBTdHJpbmcoICJT
aG93IHNwZWxsaW5nIHBhbmVsIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnQ2hlY2tTcGVsbGluZygpIHsgcmV0dXJuIFN0cmluZyggIkNoZWNrIHNwZWxsaW5nIiApOyB9
CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlw
aW5nKCkgeyByZXR1cm4gU3RyaW5nKCAiQ2hlY2sgc3BlbGxpbmcgd2hpbGUgdHlwaW5nIiApOyB9
CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxs
aW5nKCkgeyByZXR1cm4gU3RyaW5nKCAiQ2hlY2sgZm9yIGdyYW1tYXIgd2l0aCBzcGVsbGluZyIg
KTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkgeyByZXR1
cm4gU3RyaW5nKCAiRm9udCBtZW51IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJ
dGVtVGFnQm9sZCgpIHsgcmV0dXJuIFN0cmluZyggIkJvbGQiICk7IH0KK1N0cmluZyBXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKSB7IHJldHVybiBTdHJpbmcoICJJdGFsaWMiICk7
IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKSB7IHJldHVy
biBTdHJpbmcoICJVbmRlcmxpbmUiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdPdXRsaW5lKCkgeyByZXR1cm4gU3RyaW5nKCAiT3V0bGluZSIgKTsgfQorU3RyaW5nIFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51KCkgeyByZXR1cm4g
U3RyaW5nKCAiV3JpdGluZyBkaXJlY3Rpb24gbWVudSIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNv
bnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSB7IHJldHVybiBTdHJpbmcoICJEZWZh
dWx0IGRpcmVjdGlvbiIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xl
ZnRUb1JpZ2h0KCkgeyByZXR1cm4gU3RyaW5nKCAiTGVmdCB0byByaWdodCIgKTsgfQorU3RyaW5n
IFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KCkgeyByZXR1cm4gU3RyaW5n
KCAiUmlnaHQgdG8gbGVmdCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z0luc3BlY3RFbGVtZW50KCkgeyByZXR1cm4gU3RyaW5nKCAiSW5zcGVjdCIgKTsgfQorU3RyaW5n
IFdlYkNvcmU6OnNlYXJjaE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpIHsgcmV0dXJuIFN0cmlu
ZyggIk5vIHJlY2VudCB0ZXh0IHNlYXJjaGVzIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6c2VhcmNo
TWVudVJlY2VudFNlYXJjaGVzVGV4dCgpIHsgcmV0dXJuIFN0cmluZyggIlJlY2VudCB0ZXh0IHNl
YXJjaGVzIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6c2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNo
ZXNUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCAiQ2xlYXIgcmVjZW50IHRleHQgc2VhcmNoZXMiICk7
IH0KK1N0cmluZyBXZWJDb3JlOjp1bmtub3duRmlsZVNpemVUZXh0KCkgeyByZXR1cm4gU3RyaW5n
KCJVbmtub3duIik7IH0KK1N0cmluZyBXZWJDb3JlOjpBWFdlYkFyZWFUZXh0KCkgeyByZXR1cm4g
U3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWExpbmtUZXh0KCkgeyByZXR1cm4gU3RyaW5n
KCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWExpc3RNYXJrZXJUZXh0KCkgeyByZXR1cm4gU3RyaW5n
KCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWEltYWdlTWFwVGV4dCgpIHsgcmV0dXJuIFN0cmluZygp
OyB9CitTdHJpbmcgV2ViQ29yZTo6QVhIZWFkaW5nVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9
CitTdHJpbmcgV2ViQ29yZTo6aW1hZ2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBJbnRTaXplJiBzaXplKSB7IHJldHVybiBTdHJpbmcoIkltYWdlIik7IH0KK1N0cmluZyBXZWJD
b3JlOjpjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgpIHsgcmV0dXJuIFN0cmlu
ZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhCdXR0b25BY3Rpb25WZXJiKCkgeyByZXR1cm4gU3Ry
aW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWFRleHRGaWVsZEFjdGlvblZlcmIoKSB7IHJldHVy
biBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OkFYUmFkaW9CdXR0b25BY3Rpb25WZXJiKCkg
eyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWENoZWNrZWRDaGVja0JveEFj
dGlvblZlcmIoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OkFYVW5jaGVj
a2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJD
b3JlOjpBWExpbmtBY3Rpb25WZXJiKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJD
b3JlOjpBWERlZmluaXRpb25MaXN0VGVybVRleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3Ry
aW5nIFdlYkNvcmU6OkFYRGVmaW5pdGlvbkxpc3REZWZpbml0aW9uVGV4dCgpIHsgcmV0dXJuIFN0
cmluZygpOyB9CisKK1ZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QgY2hh
ciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gVmVjdG9yPGNoYXI+KCk7
Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBoaXN0b3J5Q29udGFpbnMoU3RyaW5n
IGNvbnN0JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IHN1cHBv
cnRlZEtleVNpemVzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBWZWN0
b3I8U3RyaW5nPigpOworfQorCitTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3Ry
aW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcs
IGNvbnN0IEtVUkwgJnVybCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Zsb2F0IHVz
ZXJJZGxlVGltZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMC4wOwor
fQorCit2b2lkIGNhbGxPbk1haW5UaHJlYWQodm9pZCAoKikoKSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVh
dGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCitTdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CitTY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZSB0aGVtZTsKKyAgICBy
ZXR1cm4gJnRoZW1lOworfQorCit2b2lkIGdldFN1cHBvcnRlZEtleVNpemVzKFZlY3RvcjxTdHJp
bmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEluc3BlY3RvckNvbnRyb2xsZXIqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRl
Y29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4MjcwMwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuY3BwCkBAIC0w
LDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1v
bi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRyYW5zbGF0b3JEZWNvZGVyLmgiCisKKyNp
bmNsdWRlIDxUcmFuc2xhdGlvblV0aWxzLmg+CisjaW5jbHVkZSA8RGF0YUlPLmg+CisKKworbmFt
ZXNwYWNlIFdlYkNvcmUKK3sKKworVHJhbnNsYXRvckRlY29kZXI6OlRyYW5zbGF0b3JEZWNvZGVy
KCkKK3sKKyAgICBtX2ltYWdlID0gTlVMTDsKKyAgICBzZXRTaXplKC0xLC0xKTsKK30KKworYm9v
bCBUcmFuc2xhdG9yRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIShzaXplKCkgPT0gSW50U2l6ZSgtMSwgLTEpKTsKK30KKworUkdCQTMyQnVmZmVyKiBUcmFu
c2xhdG9yRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKworLy8gQWxsIHNwZWNpZmljIGRlY29kZXIgcGx1Z2lucyBtdXN0IGRvIHNv
bWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgordm9pZCBUcmFuc2xhdG9yRGVj
b2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSAK
K3sgCisgICAgaWYoYWxsRGF0YVJlY2VpdmVkKSB7IC8vcHJvZ3Jlc3NpdmUgbG9hZGluZz8KKyAg
ICAgICAgQk1lbW9yeUlPCWlvKGRhdGEtPmRhdGEoKSxkYXRhLT5zaXplKCkpOworICAgICAgICBt
X2ltYWdlID0gQlRyYW5zbGF0aW9uVXRpbHM6OkdldEJpdG1hcCgmaW8pOworICAgICAgICBpZiAo
bV9pbWFnZSkgeworICAgICAgICAgICAgLy9zZXQgdGhlIGltYWdlIHNpemUgZGVjb2RlZC4KKyAg
ICAgICAgICAgIHNldFNpemUobV9pbWFnZS0+Qm91bmRzKCkuV2lkdGgoKSArIDEsIG1faW1hZ2Ut
PkJvdW5kcygpLkhlaWdodCgpICsgMSk7CisgICAgICAgIH0JCisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJh
bnNsYXRvckRlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29k
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZmZDhkCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5oCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxz
aW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBUcmFuc2xhdG9yRGVjb2Rlcl9oCisjZGVmaW5lIFRyYW5zbGF0b3JEZWNvZGVy
X2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgPEJpdG1hcC5oPgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBUcmFuc2xhdG9yRGVjb2RlciA6IHB1Ymxp
YyBJbWFnZURlY29kZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhbnNsYXRvckRlY29kZXIo
KTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CisKKyAg
ICAgICAgLy8gQWxsIHNwZWNpZmljIGRlY29kZXIgcGx1Z2lucyBtdXN0IGRvIHNvbWV0aGluZyB3
aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0
YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSA7CisKKyAgICAgICAg
dmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwor
CisgICAgICAgIEJCaXRtYXAqIGdldEJpdG1hcCgpIHsgcmV0dXJuIG1faW1hZ2U7IH0KKworICAg
IHByaXZhdGU6CisJCUJCaXRtYXAqIG1faW1hZ2U7CisgICAgfTsKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFRyYW5zbGF0b3JEZWNvZGVyX2gKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZpZXcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9XS1Njcm9sbFZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmM0YjZiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Ny
b2xsVmlldy5jcHAKQEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1
LCBBeGVsIETDtnJmbGVyLCBheGVsZEBwaW5jLXNvZnR3YXJlLmRlLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tTY3JvbGxWaWV3LmgiCisK
KyNpbmNsdWRlIDxMYXlvdXRVdGlscy5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRl
IDxXaW5kb3cuaD4KKworCitXS1Njcm9sbFZpZXc6OldLU2Nyb2xsVmlldyhjb25zdCBjaGFyICpu
YW1lLCBCVmlldyAqdGFyZ2V0LCB1aW50MzIgcmVzaXppbmdNb2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyIGZsYWdzKQorICAgIDogQlZpZXcoQ2FsY0ZyYW1lKHRhcmdldCwg
dHJ1ZSwgdHJ1ZSksIG5hbWUsIHJlc2l6aW5nTW9kZSwgTW9kaWZ5RmxhZ3MoZmxhZ3MpKSwKKyAg
ICBmVGFyZ2V0KHRhcmdldCksCisgICAgZkhvcml6b250YWxTY3JvbGxCYXIoTlVMTCksCisgICAg
ZlZlcnRpY2FsU2Nyb2xsQmFyKE5VTEwpLAorICAgIGZIaWdobGlnaHRlZChmYWxzZSksCisgICAg
ZlZlcnRpY2FsU2Nyb2xsQmFyTW9kZShTY3JvbGxiYXJBbHdheXNPbiksCisgICAgZkhvcml6b250
YWxTY3JvbGxCYXJNb2RlKFNjcm9sbGJhckFsd2F5c09uKQkKK3sKKwlib29sIGhvcml6b250YWwg
PSB0cnVlOworCWJvb2wgdmVydGljYWwgPSB0cnVlOworCQorCUJSZWN0IHRhcmdldEZyYW1lOwor
CWlmIChmVGFyZ2V0KSB7CisJCS8vIGxheW91dCB0YXJnZXQgYW5kIGFkZCBpdAorCQkvL2ZUYXJn
ZXQtPlRhcmdldGVkQnlTY3JvbGxWaWV3KHRoaXMpOworCQlmVGFyZ2V0LT5Nb3ZlVG8oQl9PUklH
SU4pOworICAgICAgICAKKwkJQWRkQ2hpbGQoZlRhcmdldCk7CisJCXRhcmdldEZyYW1lID0gZlRh
cmdldC0+RnJhbWUoKTsKKwl9IGVsc2UgeworCQkvLyBubyB0YXJnZXQgc3BlY2lmaWVkCisJCXRh
cmdldEZyYW1lID0gQm91bmRzKCk7CisJCWlmIChob3Jpem9udGFsKQorCQkJdGFyZ2V0RnJhbWUu
Ym90dG9tIC09IEJfSF9TQ1JPTExfQkFSX0hFSUdIVCArIDE7CisJCWlmICh2ZXJ0aWNhbCkKKwkJ
CXRhcmdldEZyYW1lLnJpZ2h0IC09IEJfVl9TQ1JPTExfQkFSX1dJRFRIICsgMTsKKwl9CisgICAg
CisJaWYgKGhvcml6b250YWwpIHsKKwkJQlJlY3QgcmVjdCA9IHRhcmdldEZyYW1lOworCQlyZWN0
LnRvcCA9IHJlY3QuYm90dG9tICsgMTsKKwkJcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIEJfSF9T
Q1JPTExfQkFSX0hFSUdIVDsKKwkJZkhvcml6b250YWxTY3JvbGxCYXIgPSBuZXcgQlNjcm9sbEJh
cihyZWN0LCAiX0hTQl8iLCBmVGFyZ2V0LCAwLCAxMDAwLCBCX0hPUklaT05UQUwpOworCQlBZGRD
aGlsZChmSG9yaXpvbnRhbFNjcm9sbEJhcik7CisJfQorICAgIAorCWlmICh2ZXJ0aWNhbCkgewor
CQlCUmVjdCByZWN0ID0gdGFyZ2V0RnJhbWU7CisJCXJlY3QubGVmdCA9IHJlY3QucmlnaHQgKyAx
OworCQlyZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgQl9WX1NDUk9MTF9CQVJfV0lEVEg7CisJCWZW
ZXJ0aWNhbFNjcm9sbEJhciA9IG5ldyBCU2Nyb2xsQmFyKHJlY3QsICJfVlNCXyIsIGZUYXJnZXQs
IDAsIDEwMDAsIEJfVkVSVElDQUwpOworCQlBZGRDaGlsZChmVmVydGljYWxTY3JvbGxCYXIpOwor
CX0KKyAgICAKKwlmUHJldmlvdXNXaWR0aCA9IHVpbnQxNihCb3VuZHMoKS5XaWR0aCgpKTsKKwlm
UHJldmlvdXNIZWlnaHQgPSB1aW50MTYoQm91bmRzKCkuSGVpZ2h0KCkpOworfQorCisKK1dLU2Ny
b2xsVmlldzo6V0tTY3JvbGxWaWV3KEJNZXNzYWdlICphcmNoaXZlKQorOiBCVmlldyhhcmNoaXZl
KSwKK2ZIaWdobGlnaHRlZChmYWxzZSkKK3sKKwkvLyBJbiBhIHNoYWxsb3cgYXJjaGl2ZSwgd2Ug
bWF5IG5vdCBoYXZlIGEgdGFyZ2V0IGFueW1vcmUuIFdlIG11c3QKKwkvLyBiZSBwcmVwYXJlZCBm
b3IgdGhpcyBjYXNlCisgICAgCisJLy8gZG9uJ3QgY29uZnVzZSBvdXIgc2Nyb2xsIGJhcnMgd2l0
aCBvdXIgKGV2ZW50dWFsKSB0YXJnZXQKKwlpbnQzMiBmaXJzdEJhciA9IDA7CisJaWYgKCFhcmNo
aXZlLT5GaW5kQm9vbCgiX25vX3RhcmdldF8iKSkgeworCQlmVGFyZ2V0ID0gQ2hpbGRBdCgwKTsK
KwkJZmlyc3RCYXIrKzsKKwl9IGVsc2UKKwkJZlRhcmdldCA9IE5VTEw7CisgICAgCisJLy8gc2Vh
cmNoIGZvciBvdXIgc2Nyb2xsIGJhcnMKKyAgICAKKwlmSG9yaXpvbnRhbFNjcm9sbEJhciA9IE5V
TEw7CisJZlZlcnRpY2FsU2Nyb2xsQmFyID0gTlVMTDsKKyAgICAKKwlCVmlldyAqdmlldzsKKwl3
aGlsZSAoKHZpZXcgPSBDaGlsZEF0KGZpcnN0QmFyKyspKSAhPSBOVUxMKSB7CisJCUJTY3JvbGxC
YXIgKmJhciA9IGR5bmFtaWNfY2FzdDxCU2Nyb2xsQmFyICo+KHZpZXcpOworCQlpZiAoYmFyID09
IE5VTEwpCisJCQljb250aW51ZTsKKwkJCisJCWlmIChiYXItPk9yaWVudGF0aW9uKCkgPT0gQl9I
T1JJWk9OVEFMKQorCQkJZkhvcml6b250YWxTY3JvbGxCYXIgPSBiYXI7CisJCWVsc2UgaWYgKGJh
ci0+T3JpZW50YXRpb24oKSA9PSBCX1ZFUlRJQ0FMKQorCQkJZlZlcnRpY2FsU2Nyb2xsQmFyID0g
YmFyOworCX0KKyAgICAKKwlmUHJldmlvdXNXaWR0aCA9IHVpbnQxNihCb3VuZHMoKS5XaWR0aCgp
KTsKKwlmUHJldmlvdXNIZWlnaHQgPSB1aW50MTYoQm91bmRzKCkuSGVpZ2h0KCkpOworfQorCisK
K1dLU2Nyb2xsVmlldzo6fldLU2Nyb2xsVmlldygpCit7Cit9CisKKworQkFyY2hpdmFibGUgKgor
V0tTY3JvbGxWaWV3OjpJbnN0YW50aWF0ZShCTWVzc2FnZSAqYXJjaGl2ZSkKK3sKKwlpZiAodmFs
aWRhdGVfaW5zdGFudGlhdGlvbihhcmNoaXZlLCAiV0tTY3JvbGxWaWV3IikpCisJCXJldHVybiBu
ZXcgV0tTY3JvbGxWaWV3KGFyY2hpdmUpOworICAgIAorCXJldHVybiBOVUxMOworfQorCisKK3N0
YXR1c190CitXS1Njcm9sbFZpZXc6OkFyY2hpdmUoQk1lc3NhZ2UgKmFyY2hpdmUsIGJvb2wgZGVl
cCkgY29uc3QKK3sKKwlzdGF0dXNfdCBzdGF0dXMgPSBCVmlldzo6QXJjaGl2ZShhcmNoaXZlLCBk
ZWVwKTsKKwlpZiAoc3RhdHVzICE9IEJfT0spCisJCXJldHVybiBzdGF0dXM7CisgICAgCisJLy8g
SWYgdGhpcyBpcyBhIGRlZXAgYXJjaGl2ZSwgdGhlIEJWaWV3IGNsYXNzIHdpbGwgdGFrZSBjYXJl
CisJLy8gb2Ygb3VyIGNoaWxkcmVuLgorICAgIAorCWlmIChzdGF0dXMgPT0gQl9PSyAmJiBmVGFy
Z2V0ID09IE5VTEwpCisJCXN0YXR1cyA9IGFyY2hpdmUtPkFkZEJvb2woIl9ub190YXJnZXRfIiwg
dHJ1ZSk7CisgICAgCisJLy8gVGhlIGhpZ2hsaWdodGVkIHN0YXRlIGlzIG5vdCBhcmNoaXZlZCwg
YnV0IHNpbmNlIGl0IGlzCisJLy8gdXN1YWxseSAob3Igc2hvdWxkIGJlKSB1c2VkIHRvIGluZGlj
YXRlIGZvY3VzLCB0aGlzCisJLy8gaXMgcHJvYmFibHkgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgor
ICAgIAorCXJldHVybiBzdGF0dXM7Cit9CisKKwordm9pZAorV0tTY3JvbGxWaWV3OjpBdHRhY2hl
ZFRvV2luZG93KCkKK3sKKwlCVmlldzo6QXR0YWNoZWRUb1dpbmRvdygpOworICAgIAorCWlmICgo
Zkhvcml6b250YWxTY3JvbGxCYXIgPT0gTlVMTCAmJiBmVmVydGljYWxTY3JvbGxCYXIgPT0gTlVM
TCkKKwkJfHwgKGZIb3Jpem9udGFsU2Nyb2xsQmFyICE9IE5VTEwgJiYgZlZlcnRpY2FsU2Nyb2xs
QmFyICE9IE5VTEwpCisJCXx8IFdpbmRvdygpLT5Mb29rKCkgIT0gQl9ET0NVTUVOVF9XSU5ET1df
TE9PSykKKwkJcmV0dXJuOworICAgIAorCS8vIElmIHdlIGhhdmUgb25seSBvbmUgYmFyLCB3ZSBu
ZWVkIHRvIGNoZWNrIGlmIHdlIGFyZSBpbiB0aGUKKwkvLyBib3R0b20gcmlnaHQgZWRnZSBvZiBh
IHdpbmRvdyB3aXRoIHRoZSBCX0RPQ1VNRU5UX0xPT0sgdG8KKwkvLyBhZGp1c3QgdGhlIHNpemUg
b2YgdGhlIGJhciB0byBhY2tub3dsZWRnZSB0aGUgcmVzaXplIGtub2IuCisgICAgCisJQlJlY3Qg
Ym91bmRzID0gQ29udmVydFRvU2NyZWVuKEJvdW5kcygpKTsKKwlCUmVjdCB3aW5kb3dCb3VuZHMg
PSBXaW5kb3coKS0+RnJhbWUoKTsKKyAgICAKKyAgICAKKwlpZiAoZkhvcml6b250YWxTY3JvbGxC
YXIpCisJCWZIb3Jpem9udGFsU2Nyb2xsQmFyLT5SZXNpemVCeSgtQl9WX1NDUk9MTF9CQVJfV0lE
VEgsIDApOworCWVsc2UgaWYgKGZWZXJ0aWNhbFNjcm9sbEJhcikKKwkJZlZlcnRpY2FsU2Nyb2xs
QmFyLT5SZXNpemVCeSgwLCAtQl9IX1NDUk9MTF9CQVJfSEVJR0hUKTsKK30KKworCit2b2lkCitX
S1Njcm9sbFZpZXc6OkRldGFjaGVkRnJvbVdpbmRvdygpCit7CisJQlZpZXc6OkRldGFjaGVkRnJv
bVdpbmRvdygpOworfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmlldzo6QWxsQXR0YWNoZWQoKQorewor
CUJWaWV3OjpBbGxBdHRhY2hlZCgpOworfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmlldzo6QWxsRGV0
YWNoZWQoKQoreworCUJWaWV3OjpBbGxEZXRhY2hlZCgpOworfQorCisKKworQlNjcm9sbEJhciAq
CitXS1Njcm9sbFZpZXc6OlNjcm9sbEJhcihvcmllbnRhdGlvbiBwb3N0dXJlKSBjb25zdAorewor
CWlmIChwb3N0dXJlID09IEJfSE9SSVpPTlRBTCkKKwkJcmV0dXJuIGZIb3Jpem9udGFsU2Nyb2xs
QmFyOworICAgIAorCXJldHVybiBmVmVydGljYWxTY3JvbGxCYXI7Cit9CisKK1Njcm9sbGJhck1v
ZGUJCQorV0tTY3JvbGxWaWV3OjpTY3JvbGxCYXJNb2RlKG9yaWVudGF0aW9uIHBvc3R1cmUpCit7
CisgICAgLy8JcmV0dXJuIFNjcm9sbGJhckF1dG87CisJCisJaWYgKHBvc3R1cmUgPT0gQl9IT1JJ
Wk9OVEFMKXsKKwkJcHJpbnRmKCIrKysrIEggZ2V0ICVkXG4iLGZIb3Jpem9udGFsU2Nyb2xsQmFy
TW9kZSk7CisJCXJldHVybiBmSG9yaXpvbnRhbFNjcm9sbEJhck1vZGU7CisJfQorICAgIAorCXBy
aW50ZigiKysrKyBWIGdldCAlZFxuIixmVmVydGljYWxTY3JvbGxCYXJNb2RlKTsJCisJcmV0dXJu
IGZWZXJ0aWNhbFNjcm9sbEJhck1vZGU7CQorfQorCit2b2lkCitXS1Njcm9sbFZpZXc6OlNldFNj
cm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9zdHVyZSwgU2Nyb2xsYmFyTW9kZSBtb2RlKQorewor
CWlmIChwb3N0dXJlID09IEJfSE9SSVpPTlRBTCAmJiBtb2RlICE9IGZIb3Jpem9udGFsU2Nyb2xs
QmFyTW9kZSkgeworICAgICAgICAKKwkJcHJpbnRmKCIrKysrIEggY3VycmVudCAlbGQgd2FudCAl
bGRcbiIsZkhvcml6b250YWxTY3JvbGxCYXJNb2RlLG1vZGUpOworICAgICAgICAKKwkJaWYobW9k
ZSA9PSBTY3JvbGxiYXJBbHdheXNPbiB8fCBtb2RlID09IFNjcm9sbGJhckF1dG8gKSB7CisJCQlw
cmludGYoIisrKysrIEggU2hvdyglZClcbiIsKGludCl0aGlzKTsKKwkJCWlmKGZIb3Jpem9udGFs
U2Nyb2xsQmFyLT5Jc0hpZGRlbigpKXsKKwkJCQlmSG9yaXpvbnRhbFNjcm9sbEJhci0+U2hvdygp
OworCQkJCWlmIChUYXJnZXQoKSkKKwkJCQkJVGFyZ2V0KCktPlJlc2l6ZUJ5KDAsIC1CX0hfU0NS
T0xMX0JBUl9IRUlHSFQpOworCQkJfQorCQl9CisJCWlmKG1vZGUgPT0gU2Nyb2xsYmFyQWx3YXlz
T2ZmKXsKKwkJCXByaW50ZigiKysrKysgSCBIaWRlKCVkKVxuIiwoaW50KXRoaXMpOwkJCisJCQlp
ZighZkhvcml6b250YWxTY3JvbGxCYXItPklzSGlkZGVuKCkpeworCQkJCWZIb3Jpem9udGFsU2Ny
b2xsQmFyLT5IaWRlKCk7CisJCQkJaWYgKFRhcmdldCgpKQorCQkJCQlUYXJnZXQoKS0+UmVzaXpl
QnkoMCwgQl9IX1NDUk9MTF9CQVJfSEVJR0hUKTsKKwkJCX0KKwkJfQkKKwkJCisJCS8vc2V0IHRo
ZSBuZXcgbW9kZS4KKwkJZkhvcml6b250YWxTY3JvbGxCYXJNb2RlID0gbW9kZTsJCisJfSAKKwkK
KwkKKyAgICAKKwlpZiAocG9zdHVyZSA9PSBCX1ZFUlRJQ0FMICYmIG1vZGUgIT0gZlZlcnRpY2Fs
U2Nyb2xsQmFyTW9kZSApIHsKKyAgICAgICAgCisJCXByaW50ZigiKysrKyBWIGN1cnJlbnQgJWxk
IHdhbnQgJWxkXG4iLGZWZXJ0aWNhbFNjcm9sbEJhck1vZGUsbW9kZSk7CisgICAgICAgIAorCQlp
ZiAobW9kZSA9PSBTY3JvbGxiYXJBbHdheXNPbiB8fCBtb2RlID09IFNjcm9sbGJhckF1dG8pIHsK
KwkJCXByaW50ZigiKysrKysgViBTaG93KCVkKVxuIiwoaW50KXRoaXMpOworCQkJaWYoZlZlcnRp
Y2FsU2Nyb2xsQmFyLT5Jc0hpZGRlbigpKXsKKwkJCQlmVmVydGljYWxTY3JvbGxCYXItPlNob3co
KTsKKwkJCQlpZiAoVGFyZ2V0KCkpCQkJCisJCQkJCVRhcmdldCgpLT5SZXNpemVCeSgtQl9WX1ND
Uk9MTF9CQVJfV0lEVEgsIDApOworCQkJfQorCQl9CisJCWlmIChtb2RlID09IFNjcm9sbGJhckFs
d2F5c09mZikgewkJCisJCQlwcmludGYoIisrKysrIFYgSGlkZSglZClcbiIsKGludCl0aGlzKTsK
KwkJCWlmKCFmVmVydGljYWxTY3JvbGxCYXItPklzSGlkZGVuKCkpIHsKKwkJCQlmVmVydGljYWxT
Y3JvbGxCYXItPkhpZGUoKTsKKwkJCQlpZiAoVGFyZ2V0KCkpCQkJCisJCQkJCVRhcmdldCgpLT5S
ZXNpemVCeShCX1ZfU0NST0xMX0JBUl9XSURUSCwgMCk7CisJCQl9CisJCX0JCisJCQorCQkvL3Nl
dCB0aGUgbmV3IG1vZGU6CisJCWZWZXJ0aWNhbFNjcm9sbEJhck1vZGUgPSBtb2RlOwkJCQorCX0g
CisgICAgCit9CisKKwordm9pZAorV0tTY3JvbGxWaWV3OjpTZXRUYXJnZXQoQlZpZXcgKnRhcmdl
dCkKK3sKKwlpZiAoZlRhcmdldCA9PSB0YXJnZXQpCisJCXJldHVybjsKKyAgICAKKwlpZiAoZlRh
cmdldCAhPSBOVUxMKSB7CisJCWZUYXJnZXQtPlRhcmdldGVkQnlTY3JvbGxWaWV3KE5VTEwpOwor
CQlSZW1vdmVDaGlsZChmVGFyZ2V0KTsKKyAgICAgICAgCisJCS8vIHdlIGFyZSBub3Qgc3VwcG9z
ZWQgdG8gZGVsZXRlIHRoZSB2aWV3CisJfQorICAgIAorCWZUYXJnZXQgPSB0YXJnZXQ7CisJaWYg
KGZIb3Jpem9udGFsU2Nyb2xsQmFyICE9IE5VTEwpCisJCWZIb3Jpem9udGFsU2Nyb2xsQmFyLT5T
ZXRUYXJnZXQodGFyZ2V0KTsKKwlpZiAoZlZlcnRpY2FsU2Nyb2xsQmFyICE9IE5VTEwpCisJCWZW
ZXJ0aWNhbFNjcm9sbEJhci0+U2V0VGFyZ2V0KHRhcmdldCk7CisgICAgCisJaWYgKHRhcmdldCAh
PSBOVUxMKSB7CisJCS8vdGFyZ2V0LT5UYXJnZXRlZEJ5U2Nyb2xsVmlldyh0aGlzKTsKKyAgICAg
ICAgCisJCUFkZENoaWxkKHRhcmdldCwgQ2hpbGRBdCgwKSk7CisgICAgICAgIC8vIFRoaXMgd2F5
LCB3ZSBhcmUgbWFraW5nIHN1cmUgdGhhdCB0aGUgdGFyZ2V0IHdpbGwKKyAgICAgICAgLy8gYmUg
YWRkZWQgdG9wIG1vc3QgaW4gdGhlIGxpc3QgKHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICAv
LyBmb3IgdW5hcmNoaXZpbmcpCisJfQorfQorCisKK0JWaWV3ICoKK1dLU2Nyb2xsVmlldzo6VGFy
Z2V0KCkgY29uc3QKK3sKKwlyZXR1cm4gZlRhcmdldDsKK30KKworCit2b2lkCitXS1Njcm9sbFZp
ZXc6Ok1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSAqbWVzc2FnZSkKK3sKKwlzd2l0Y2ggKG1lc3Nh
Z2UtPndoYXQpIHsKKwkJZGVmYXVsdDoKKwkJCUJWaWV3OjpNZXNzYWdlUmVjZWl2ZWQobWVzc2Fn
ZSk7CisJfQorfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmlldzo6TW91c2VEb3duKEJQb2ludCBwb2lu
dCkKK3sKKwlCVmlldzo6TW91c2VEb3duKHBvaW50KTsKK30KKworCit2b2lkCitXS1Njcm9sbFZp
ZXc6Ok1vdXNlVXAoQlBvaW50IHBvaW50KQoreworCUJWaWV3OjpNb3VzZVVwKHBvaW50KTsKK30K
KworCit2b2lkCitXS1Njcm9sbFZpZXc6Ok1vdXNlTW92ZWQoQlBvaW50IHBvaW50LCB1aW50MzIg
Y29kZSwgY29uc3QgQk1lc3NhZ2UgKmRyYWdNZXNzYWdlKQoreworCUJWaWV3OjpNb3VzZU1vdmVk
KHBvaW50LCBjb2RlLCBkcmFnTWVzc2FnZSk7Cit9CisKKwordm9pZAorV0tTY3JvbGxWaWV3OjpG
cmFtZU1vdmVkKEJQb2ludCBwb3NpdGlvbikKK3sKKwlCVmlldzo6RnJhbWVNb3ZlZChwb3NpdGlv
bik7Cit9CisKKwordm9pZCAKK1dLU2Nyb2xsVmlldzo6UmVzaXplVG9QcmVmZXJyZWQoKQorewor
CUJWaWV3OjpSZXNpemVUb1ByZWZlcnJlZCgpOworfQorCisKK3ZvaWQgCitXS1Njcm9sbFZpZXc6
OkdldFByZWZlcnJlZFNpemUoZmxvYXQgKl93aWR0aCwgZmxvYXQgKl9oZWlnaHQpCit7CisJQlJl
Y3QgZnJhbWUgPSBDYWxjRnJhbWUoZlRhcmdldCwgZkhvcml6b250YWxTY3JvbGxCYXIsIGZWZXJ0
aWNhbFNjcm9sbEJhcik7CisgICAgCisJaWYgKGZUYXJnZXQgIT0gTlVMTCkgeworCQlmbG9hdCB3
aWR0aCwgaGVpZ2h0OworCQlmVGFyZ2V0LT5HZXRQcmVmZXJyZWRTaXplKCZ3aWR0aCwgJmhlaWdo
dCk7CisgICAgICAgIAorCQlmcmFtZS5yaWdodCArPSB3aWR0aCAtIGZUYXJnZXQtPkZyYW1lKCku
V2lkdGgoKTsKKwkJZnJhbWUuYm90dG9tICs9IGhlaWdodCAtIGZUYXJnZXQtPkZyYW1lKCkuSGVp
Z2h0KCk7CisJfQorICAgIAorCWlmIChfd2lkdGgpCisJCSpfd2lkdGggPSBmcmFtZS5XaWR0aCgp
OworCWlmIChfaGVpZ2h0KQorCQkqX2hlaWdodCA9IGZyYW1lLkhlaWdodCgpOworfQorCisKKwor
CisvKiogVGhpcyBzdGF0aWMgbWV0aG9kIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBmcmFtZSB0
aGF0IHRoZQorICoJU2Nyb2xsVmlldyB3aWxsIGNvdmVyIGRlcGVuZGluZyBvbiB0aGUgZnJhbWUg
b2YgaXRzIHRhcmdldAorICoJCisgKglJdCBpcyB1c2VkIGluIHRoZSBjb25zdHJ1Y3RvciBhbmQg
YXQgb3RoZXIgcGxhY2VzLgorICovCisKK0JSZWN0CitXS1Njcm9sbFZpZXc6OkNhbGNGcmFtZShC
VmlldyAqdGFyZ2V0LCBib29sIGhvcml6b250YWwsIGJvb2wgdmVydGljYWwpCit7CisJQlJlY3Qg
ZnJhbWUgPSB0YXJnZXQgIT0gTlVMTCA/IHRhcmdldC0+RnJhbWUoKSA6IEJSZWN0KDAsIDAsIDgw
LCA4MCk7CisgICAgCisJaWYgKHZlcnRpY2FsKQorCQlmcmFtZS5yaWdodCArPSBCX1ZfU0NST0xM
X0JBUl9XSURUSDsKKwlpZiAoaG9yaXpvbnRhbCkKKwkJZnJhbWUuYm90dG9tICs9IEJfSF9TQ1JP
TExfQkFSX0hFSUdIVDsKKyAgICAKKwkKKyAgICAKKwlpZiAodmVydGljYWwpCisgICAgICAgIGZy
YW1lLnJpZ2h0Kys7CisJaWYgKGhvcml6b250YWwpCisgICAgICAgIGZyYW1lLmJvdHRvbSsrOwor
CQorCXJldHVybiBmcmFtZTsKK30KKworCisKKworLyoqIFRoaXMgbWV0aG9kIGNoYW5nZXMgdGhl
ICJmbGFncyIgYXJndW1lbnQgYXMgcGFzc2VkIG9uIHRvCisgKgl0aGUgQlZpZXcgY29uc3RydWN0
b3IuCisgKi8KKworaW50MzIKK1dLU2Nyb2xsVmlldzo6TW9kaWZ5RmxhZ3MoaW50MzIgZmxhZ3Mp
Cit7CisJcmV0dXJuIGZsYWdzICYgfihCX1dJTExfRFJBVyB8IEJfRlJBTUVfRVZFTlRTIHwgQl9G
VUxMX1VQREFURV9PTl9SRVNJWkUpOworfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmlldzo6V2luZG93
QWN0aXZhdGVkKGJvb2wgYWN0aXZlKQoreworCWlmIChmSGlnaGxpZ2h0ZWQpCisJCUludmFsaWRh
dGUoKTsKKyAgICAKKwlCVmlldzo6V2luZG93QWN0aXZhdGVkKGFjdGl2ZSk7Cit9CisKKwordm9p
ZCAKK1dLU2Nyb2xsVmlldzo6TWFrZUZvY3VzKGJvb2wgc3RhdGUpCit7CisJQlZpZXc6Ok1ha2VG
b2N1cyhzdGF0ZSk7Cit9CisKKworQkhhbmRsZXIgKgorV0tTY3JvbGxWaWV3OjpSZXNvbHZlU3Bl
Y2lmaWVyKEJNZXNzYWdlICptc2csIGludDMyIGluZGV4LCBCTWVzc2FnZSAqc3BlY2lmaWVyLCBp
bnQzMiBmb3JtLCBjb25zdCBjaGFyICpwcm9wZXJ0eSkKK3sKKwlyZXR1cm4gQlZpZXc6OlJlc29s
dmVTcGVjaWZpZXIobXNnLCBpbmRleCwgc3BlY2lmaWVyLCBmb3JtLCBwcm9wZXJ0eSk7Cit9CisK
Kworc3RhdHVzX3QgCitXS1Njcm9sbFZpZXc6OkdldFN1cHBvcnRlZFN1aXRlcyhCTWVzc2FnZSAq
ZGF0YSkKK3sKKwlyZXR1cm4gQlZpZXc6OkdldFN1cHBvcnRlZFN1aXRlcyhkYXRhKTsKK30KKwor
CitCU2l6ZQorV0tTY3JvbGxWaWV3OjpNaW5TaXplKCkKK3sKKyAgICAvLyBUT0RPOiBUaGlzIGlz
IG5vdCB5ZXQgY29ycmVjdC4KKwlCU2l6ZSBzaXplID0gKGZUYXJnZXQgPyBmVGFyZ2V0LT5NaW5T
aXplKCkgOiBCU2l6ZSgtMSwgLTEpKTsKKyAgICAKKwlpZiAoZlZlcnRpY2FsU2Nyb2xsQmFyKQor
CQlzaXplLndpZHRoICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOworCWlmIChmSG9yaXpvbnRhbFNj
cm9sbEJhcikKKwkJc2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9MTF9CQVJfSEVJR0hUOworICAgIAor
CXJldHVybiBCTGF5b3V0VXRpbHM6OkNvbXBvc2VTaXplKEV4cGxpY2l0TWluU2l6ZSgpLCBzaXpl
KTsKK30KKworCitCU2l6ZQorV0tTY3JvbGxWaWV3OjpQcmVmZXJyZWRTaXplKCkKK3sKKyAgICAv
LyBUT0RPOiBUaGlzIGlzIG5vdCB5ZXQgY29ycmVjdC4KKwlCU2l6ZSBzaXplID0gKGZUYXJnZXQg
PyBmVGFyZ2V0LT5QcmVmZXJyZWRTaXplKCkgOiBCU2l6ZSgtMSwgLTEpKTsKKyAgICAKKwlpZiAo
ZlZlcnRpY2FsU2Nyb2xsQmFyKQorCQlzaXplLndpZHRoICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRI
OworCWlmIChmSG9yaXpvbnRhbFNjcm9sbEJhcikKKwkJc2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9M
TF9CQVJfSEVJR0hUOworICAgIAorCXJldHVybiBCTGF5b3V0VXRpbHM6OkNvbXBvc2VTaXplKEV4
cGxpY2l0TWluU2l6ZSgpLCBzaXplKTsKK30KKworCitzdGF0dXNfdAorV0tTY3JvbGxWaWV3OjpQ
ZXJmb3JtKHBlcmZvcm1fY29kZSBkLCB2b2lkICphcmcpCit7CisJcmV0dXJuIEJWaWV3OjpQZXJm
b3JtKGQsIGFyZyk7Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tT
Y3JvbGxWaWV3LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmYwMGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oCkBAIC0wLDAgKzEsODQgQEAK
Ky8qCisgKiogQ29weXJpZ2h0IDIwMDQsIE9wZW5CZU9TLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgT3BlbkJlT1MgTGljZW5zZS4K
KyAqLworI2lmbmRlZiBfV0tfU0NST0xMX1ZJRVdfSAorI2RlZmluZSBfV0tfU0NST0xMX1ZJRVdf
SAorCisvKioJVGhlIFdLU2Nyb2xsVmlldyBpcyBhIGNvbnZlbmllbmNlIGNsYXNzIHRvIGFkZCBh
IHNjcm9sbGluZworICoJbWVjaGFuaXNtIHRvIHRoZSB0YXJnZXQgdmlldy4KKyAqLworCisjaW5j
bHVkZSA8U2Nyb2xsQmFyLmg+CisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFdLU2Nyb2xsVmlldyA6IHB1YmxpYyBCVmlldyB7Citw
dWJsaWM6CisgICAgV0tTY3JvbGxWaWV3KGNvbnN0IGNoYXIgKm5hbWUsIEJWaWV3ICp0YXJnZXQs
CisgICAgICAgICAgICAgICAgIHVpbnQzMiByZXNpemluZ01vZGUgPSBCX0ZPTExPV19MRUZUIHwg
Ql9GT0xMT1dfVE9QLAorICAgICAgICAgICAgICAgICB1aW50MzIgZmxhZ3MgPSAwKTsKKyAgICBX
S1Njcm9sbFZpZXcoQk1lc3NhZ2UgKmFyY2hpdmUpOworICAgIHZpcnR1YWwgfldLU2Nyb2xsVmll
dygpOworICAgIAorICAgIHN0YXRpYyBCQXJjaGl2YWJsZQkqSW5zdGFudGlhdGUoQk1lc3NhZ2Ug
KmFyY2hpdmUpOworICAgIHZpcnR1YWwgc3RhdHVzX3QJQXJjaGl2ZShCTWVzc2FnZSAqYXJjaGl2
ZSwgYm9vbCBkZWVwID0gdHJ1ZSkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCB2b2lkCQlBdHRh
Y2hlZFRvV2luZG93KCk7CisgICAgCisgICAgQlNjcm9sbEJhcgkJCSpTY3JvbGxCYXIob3JpZW50
YXRpb24gcG9zdHVyZSkgY29uc3Q7CisgICAgU2Nyb2xsYmFyTW9kZQkJU2Nyb2xsQmFyTW9kZShv
cmllbnRhdGlvbiBwb3N0dXJlKTsKKyAgICB2b2lkCQkJCVNldFNjcm9sbEJhck1vZGUob3JpZW50
YXRpb24gcG9zdHVyZSwgU2Nyb2xsYmFyTW9kZSBtb2RlKTsKKyAgICAKKyAgICB2b2lkCQkJCVNl
dFRhcmdldChCVmlldyAqdGFyZ2V0KTsKKyAgICBCVmlldwkJCQkqVGFyZ2V0KCkgY29uc3Q7Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkCQlNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2UgKm1lc3NhZ2Up
OworICAgIHZpcnR1YWwgdm9pZAkJTW91c2VEb3duKEJQb2ludCBwb2ludCk7CisgICAgCisgICAg
dmlydHVhbCB2b2lkCQlXaW5kb3dBY3RpdmF0ZWQoYm9vbCBhY3RpdmUpOworICAgIHZpcnR1YWwJ
dm9pZAkJTW91c2VVcChCUG9pbnQgcG9pbnQpOworICAgIHZpcnR1YWwJdm9pZAkJTW91c2VNb3Zl
ZChCUG9pbnQgcG9pbnQsIHVpbnQzMiBjb2RlLCBjb25zdCBCTWVzc2FnZSAqbXNnKTsKKyAgICAK
KyAgICB2aXJ0dWFsCXZvaWQJCURldGFjaGVkRnJvbVdpbmRvdygpOworICAgIHZpcnR1YWwJdm9p
ZAkJQWxsQXR0YWNoZWQoKTsKKyAgICB2aXJ0dWFsCXZvaWQJCUFsbERldGFjaGVkKCk7CisgICAg
CisgICAgdmlydHVhbAl2b2lkCQlGcmFtZU1vdmVkKEJQb2ludCBwb3NpdGlvbik7CisgICAgCisg
ICAgdmlydHVhbCBCSGFuZGxlcgkqUmVzb2x2ZVNwZWNpZmllcihCTWVzc2FnZSAqbWVzc2FnZSwg
aW50MzIgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
TWVzc2FnZSAqc3BlY2lmaWVyLCBpbnQzMiBmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvcGVydHkpOworICAgIAorICAgIHZpcnR1
YWwgdm9pZAkJUmVzaXplVG9QcmVmZXJyZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQJCUdldFByZWZl
cnJlZFNpemUoZmxvYXQgKl93aWR0aCwgZmxvYXQgKl9oZWlnaHQpOworICAgIHZpcnR1YWwgdm9p
ZAkJTWFrZUZvY3VzKGJvb2wgc3RhdGUgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190CUdl
dFN1cHBvcnRlZFN1aXRlcyhCTWVzc2FnZSAqZGF0YSk7CisgICAgCisgICAgdmlydHVhbAlCU2l6
ZQkJTWluU2l6ZSgpOworICAgIHZpcnR1YWwJQlNpemUJCVByZWZlcnJlZFNpemUoKTsKKyAgICAK
KyAgICAvLyBwcml2YXRlIG9yIHJlc2VydmVkIG1ldGhvZHMgYXJlIGZvbGxvd2luZworICAgIAor
ICAgIHZpcnR1YWwgc3RhdHVzX3QJUGVyZm9ybShwZXJmb3JtX2NvZGUgZCwgdm9pZCAqYXJnKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJWaWV3OworICAgIAorICAgIHN0YXRp
YyBCUmVjdAkJQ2FsY0ZyYW1lKEJWaWV3ICp0YXJnZXQsIGJvb2wgaCwgYm9vbCB2KTsKKyAgICBz
dGF0aWMgaW50MzIJCU1vZGlmeUZsYWdzKGludDMyIGZsYWdzKTsKKyAgICAKKyAgICBCVmlldwkJ
CQkqZlRhcmdldDsKKyAgICBCU2Nyb2xsQmFyCQkJKmZIb3Jpem9udGFsU2Nyb2xsQmFyOworICAg
IEJTY3JvbGxCYXIJCQkqZlZlcnRpY2FsU2Nyb2xsQmFyOworICAgIHVpbnQxNgkJCQlmUHJldmlv
dXNXaWR0aDsKKyAgICB1aW50MTYJCQkJZlByZXZpb3VzSGVpZ2h0OworICAgIGJvb2wJCQkJZkhp
Z2hsaWdodGVkOworICAgIAorICAgIFNjcm9sbGJhck1vZGUJCWZWZXJ0aWNhbFNjcm9sbEJhck1v
ZGU7CisgICAgU2Nyb2xsYmFyTW9kZQkJZkhvcml6b250YWxTY3JvbGxCYXJNb2RlOwkJCit9Owor
CisjZW5kaWYgIC8qIF9XS19TQ1JPTExfVklFV19IICovCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9X
aWRnZXRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2N2Q3
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3Uu
Y3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNp
bmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPENv
bnRyb2wuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dHJ1Y3QgV2lkZ2V0UHJpdmF0ZQoreworICAgIFdpZGdldFByaXZhdGUoKQorICAgICAgICA6IG1f
cGFyZW50KDApCisgICAgICAgICwgbV93aWRnZXQoMCkKKyAgICAgICAgLCBtX3Zpc2libGUodHJ1
ZSkKKyAgICB7IH0KKyAgICB+V2lkZ2V0UHJpdmF0ZSgpIHsgZGVsZXRlIG1fd2lkZ2V0OyB9CisK
KyAgICBCVmlldyogbV9wYXJlbnQ7CisgICAgQlZpZXcqIG1fd2lkZ2V0OworICAgIFdpZGdldENs
aWVudCogbV9jbGllbnQ7CisgICAgYm9vbCBtX3Zpc2libGU7Cit9OworCitXaWRnZXQ6OldpZGdl
dChCVmlldyopCisgICAgOiBkYXRhKG5ldyBXaWRnZXRQcml2YXRlKCkpCit7CisvLyAgICBwcmlu
dGYoIldpZGdldDo6V2lkZ2V0XG4iKTsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKKyAgICBk
ZWxldGUgZGF0YTsKKyAgICBkYXRhID0gMDsKK30KKworSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVj
dCgpIGNvbnN0Cit7CisgICAgaWYgKCFkYXRhLT5tX3dpZGdldCkKKyAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKKyAgICBJbnRSZWN0IHJlY3Q7CisgICAgaWYoZGF0YS0+bV93aWRnZXQtPkxvY2tM
b29wZXIoKSl7CisgICAgICAgIHJlY3QgPSBkYXRhLT5tX3dpZGdldC0+RnJhbWUoKTsKKyAgICAg
ICAgZGF0YS0+bV93aWRnZXQtPlVubG9ja0xvb3BlcigpOworICAgIH0KKworICAgIHJldHVybiBy
ZWN0OworfQorCit2b2lkIFdpZGdldDo6c2V0Rm9jdXMoKQoreworLy8gICAgcHJpbnRmKCJXaWRn
ZXQ6OnNldEZvY3VzXG4iKTsKKyAgICBpZiAoZGF0YS0+bV93aWRnZXQpCisgICAgICAgIGRhdGEt
Pm1fd2lkZ2V0LT5NYWtlRm9jdXMoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25z
dCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBpZiAoZGF0YS0+bV93aWRnZXQpCisgICAgICAgIGRh
dGEtPm1fd2lkZ2V0LT5TZXRWaWV3Q3Vyc29yKGN1cnNvci5pbXBsKCkpOworfQorCit2b2lkIFdp
ZGdldDo6c2hvdygpCit7CisvLyAgICBwcmludGYoIldpZGdldDo6c2hvd1xuIik7CisgICAgaWYg
KCFkYXRhLT5tX3Zpc2libGUgJiYgZGF0YS0+bV93aWRnZXQpCisgICAgCSAgIAlkYXRhLT5tX3dp
ZGdldC0+U2hvdygpOworICAgIGRhdGEtPm1fdmlzaWJsZSA9IHRydWU7Cit9CisKK3ZvaWQgV2lk
Z2V0OjpoaWRlKCkKK3sKKy8vICAgIHByaW50ZigiV2lkZ2V0OjpoaWRlXG4iKTsKKyAgICBpZiAo
ZGF0YS0+bV92aXNpYmxlICYmIGRhdGEtPm1fd2lkZ2V0KQorICAgICAgICAJZGF0YS0+bV93aWRn
ZXQtPkhpZGUoKTsKKyAgICBkYXRhLT5tX3Zpc2libGUgPSBmYWxzZTsKK30KKwordm9pZCBXaWRn
ZXQ6OnNldEhhaWt1V2lkZ2V0KEJWaWV3KiBjaGlsZCkKK3sKKy8vICAgIHByaW50ZigiV2lkZ2V0
OjpzZXRIYWlrdVdpZGdldFxuIik7CisgICAgZGVsZXRlIGRhdGEtPm1fd2lkZ2V0OworICAgIGRh
dGEtPm1fd2lkZ2V0ID0gY2hpbGQ7Cit9CisKK0JWaWV3KiBXaWRnZXQ6OmhhaWt1V2lkZ2V0KCkK
K3sKKyAgICByZXR1cm4gZGF0YS0+bV93aWRnZXQ7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQYXJl
bnRXaWRnZXQoQlZpZXcqIHBhcmVudCkKK3sKKy8vICAgIHByaW50ZigiV2lkZ2V0OjpzZXRQYXJl
bnRXaWRnZXRcbiIpOworICAgIGRhdGEtPm1fcGFyZW50ID0gcGFyZW50OworICAgIGlmIChkYXRh
LT5tX3dpZGdldCAhPSBOVUxMICYmIGRhdGEtPm1fd2lkZ2V0LT5QYXJlbnQoKSA9PSBOVUxMKQor
ICAgICAgICBwYXJlbnQtPkFkZENoaWxkKGRhdGEtPm1fd2lkZ2V0KTsKK30KKworQlZpZXcqIFdp
ZGdldDo6cGFyZW50V2lkZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGF0YS0+bV9wYXJlbnQ7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAoIWRhdGEtPm1fd2lkZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZnJh
bWVSZWN0KCkgIT0gcmVjdCl7CisgICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5Nb3ZlVG8ocmVjdC54
KCksIHJlY3QueSgpKTsKKyAgICAgICAgZGF0YS0+bV93aWRnZXQtPlJlc2l6ZVRvKHJlY3Qud2lk
dGgoKSAtIDEsIHJlY3QuaGVpZ2h0KCkgLSAxKTsKKwl9Cit9CisKK3ZvaWQgV2lkZ2V0OjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIHAsIEludFJlY3QgY29uc3QmIHIpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworLy8gYm9vbCBXaWRnZXQ6OmlzRW5hYmxlZCgpIGNvbnN0CisvLyB7Cisv
LyAgICAgaWYgKCFkYXRhLT5tX3dpZGdldCkKKy8vICAgICAgICAgcmV0dXJuIGZhbHNlOworLy8g
ICAgICAgICAKKy8vICAgICBCQ29udHJvbCogY29udHJvbCA9IGR5bmFtaWNfY2FzdDxCQ29udHJv
bCo+KGRhdGEtPm1fd2lkZ2V0KTsKKy8vICAgICBpZiAoY29udHJvbCAhPSBOVUxMKQorLy8gICAg
ICAgICByZXR1cm4gY29udHJvbC0+SXNFbmFibGVkKCk7CisvLyAKKy8vICAgICByZXR1cm4gdHJ1
ZTsKKy8vIH0KKwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCisvLyB2b2lkIFdpZGdldDo6c2V0RW5hYmxlZChib29sIGVuKQor
Ly8geworLy8gICBpZiAoIWRhdGEtPm1fd2lkZ2V0KQorLy8gICAgICAgICByZXR1cm47CisvLwor
Ly8gICAgIEJDb250cm9sKiBjb250cm9sID0gZHluYW1pY19jYXN0PEJDb250cm9sKj4oZGF0YS0+
bV93aWRnZXQpOworLy8gICAgIGlmIChjb250cm9sICE9IE5VTEwpCisvLyAgICAgICAgIGNvbnRy
b2wtPlNldEVuYWJsZWQoZW4pOworLy8gfQorCit2b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBkYXRhLT5tX3dpZGdldC0+SW52YWxpZGF0ZShy
ZWN0KTsKKyAgICBkYXRhLT5tX3dpZGdldC0+Rmx1c2goKTsKK30KKworLy8gdm9pZCBXaWRnZXQ6
OnJlbW92ZUZyb21QYXJlbnQoKQorLy8geworLy8gICAgIGlmIChkYXRhLT5tX3dpZGdldCkgewor
Ly8gLy8gICAgICAgIHByaW50ZigiUmVtb3ZlICVzXG4iLCBkYXRhLT5tX3dpZGdldC0+TmFtZSgp
KTsKKy8vICAgICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5SZW1vdmVTZWxmKCk7CisvLyAgICAgfQor
Ly8gfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyYjdiZAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFp
a3UuY3BwCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxCaXRtYXAu
aD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVy
KCkKKyAgICA6IG1faGFzQWxwaGEoZmFsc2UpCisgICAgLCBtX3N0YXR1cyhGcmFtZUVtcHR5KQor
ICAgICwgbV9kdXJhdGlvbigwKQorICAgICwgbV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3Bl
Y2lmaWVkKQoreworfSAKKwordm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkKK3sKKyAgICBtX2J5
dGVzLmNsZWFyKCk7CisgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OworICAgIC8vIE5PVEU6IERv
IG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpCisg
ICAgLy8gY2FsbHMgdGhpcyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0
aW9ucyBsaWtlCisgICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUoKSBt
YXkgc3RpbGwgbmVlZCB0byByZWFkCisgICAgLy8gb3RoZXIgbWV0YWRhdGEgb3V0IG9mIHRoaXMg
ZnJhbWUgbGF0ZXIuCit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjp6ZXJvRmlsbCgpCit7CisgICAg
bV9ieXRlcy5maWxsKDApOworICAgIG1faGFzQWxwaGEgPSB0cnVlOworfQorCit2b2lkIFJHQkEz
MkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKK3sKKyAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYnl0ZXMgPSBv
dGhlci5tX2J5dGVzOworICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworfQorCiti
b29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCit7
CisgICAgLy8gTk9URTogVGhpcyBoYXMgbm8gd2F5IHRvIGNoZWNrIGZvciBhbGxvY2F0aW9uIGZh
aWx1cmUgaWYgdGhlCisgICAgLy8gcmVxdWVzdGVkIHNpemUgd2FzIHRvbyBiaWcuLi4KKyAgICBt
X2J5dGVzLnJlc2l6ZShuZXdXaWR0aCAqIG5ld0hlaWdodCk7CisgICAgbV9zaXplID0gSW50U2l6
ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKworICAgIC8vIFplcm8gdGhlIGltYWdlLgorICAgIHpl
cm9GaWxsKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIgUkdCQTMy
QnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKK3sKKyAgICBjb25zdCB2b2lkKiBieXRl
cyA9IChjb25zdCB2b2lkKiltX2J5dGVzLmRhdGEoKTsKKworICAgIEJCaXRtYXAqIGJtcCA9IG5l
dyBCQml0bWFwKEJSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSwgQl9SR0IzMik7CisgICAg
Ym1wLT5TZXRCaXRzKGJ5dGVzLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSwgMCwg
Ql9SR0IzMik7CisKKyAgICByZXR1cm4gYm1wOworfQorCitib29sIFJHQkEzMkJ1ZmZlcjo6aGFz
QWxwaGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc0FscGhhOworfQorCit2b2lkIFJHQkEz
MkJ1ZmZlcjo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKK3sKKyAgICBtX2hhc0FscGhhID0gYWxw
aGE7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVz
KQoreworICAgIG1fc3RhdHVzID0gc3RhdHVzOworfQorCitSR0JBMzJCdWZmZXImIFJHQkEzMkJ1
ZmZlcjo6b3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX2J5dGVzID0gb3Ro
ZXIubV9ieXRlczsKKyAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgc2V0SGFzQWxwaGEo
b3RoZXIuaGFzQWxwaGEoKSk7CisgICAgc2V0UmVjdChvdGhlci5yZWN0KCkpOworICAgIHNldFN0
YXR1cyhvdGhlci5zdGF0dXMoKSk7CisgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7
CisgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitpbnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0IHsKKyAgICBy
ZXR1cm4gbV9zaXplLndpZHRoKCk7Cit9CisKK2ludCBSR0JBMzJCdWZmZXI6OmhlaWdodCgpIGNv
bnN0IHsKKyAgICByZXR1cm4gbV9zaXplLmhlaWdodCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oYWlrdS9TdHJpbmdI
YWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFpa3UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMGZkM2YKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFpa3UuY3BwCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2
ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlIDxT
dHJpbmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFN0cmluZyBjb252ZXJzaW9u
cworU3RyaW5nOjpTdHJpbmcoY29uc3QgQlN0cmluZyYgc3RyKQoreworICAgIG1faW1wbCA9IFN0
cmluZzo6ZnJvbVVURjgoc3RyLlN0cmluZygpLCBzdHIuTGVuZ3RoKCkpLmltcGwoKTsKK30KKwor
U3RyaW5nOjpvcGVyYXRvciBCU3RyaW5nKCkgY29uc3QKK3sKKyAgICBCU3RyaW5nIHN0cmluZzsK
KyAgICBzdHJpbmcuU2V0VG8odXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gc3RyaW5nOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVSGFpa3UuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L2hhaWt1L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliMjAzNAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRv
ckludGVybmFsSUNVSGFpa3UuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkK
K3sKKyAgICByZXR1cm4gImVuX3VzIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9DaGVja2VyYm9hcmRWaWV3LmNw
cCBiL1dlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0NoZWNrZXJib2FyZFZpZXcuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOWJmYjcKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9DaGVja2VyYm9hcmRWaWV3LmNwcApAQCAtMCww
ICsxLDExNyBAQAorLy9+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisvLworLy8gQ29weXJpZ2h0IDIwMDYs
IFJ5YW4gTGVhdmVuZ29vZCwgbGVhdmVuZ29vZEBnbWFpbC5jb20KKy8vIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLworLy9+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyNpbmNsdWRlICJDaGVja2VyYm9h
cmRWaWV3LmgiCisKKy8vI2luY2x1ZGUgPEdyYXBoaWNzRGVmcy5oPgorLy8jaW5jbHVkZSA8QXBw
bGljYXRpb24uaD4KKy8vI2luY2x1ZGUgPEZvbnQuaD4KKy8vI2luY2x1ZGUgPFNjcmVlbi5oPgor
Ly8jaW5jbHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8U2Nyb2xsVmlldy5oPgorI2luY2x1ZGUg
PFN1cHBvcnREZWZzLmg+CisvLyNpbmNsdWRlIDxPUy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4K
Ky8vI2luY2x1ZGUgPHN0cmluZy5oPgorCisKK0NoZWNrZXJib2FyZFZpZXc6OkNoZWNrZXJib2Fy
ZFZpZXcoY29uc3QgY2hhciAqbmFtZSwgaW50MzIgbnVtUm93cywgaW50MzIgbnVtQ29scywgaW50
MzIgc3F1YXJlU2l6ZSkKKwk6IEJWaWV3KG5hbWUsIEJfV0lMTF9EUkFXIHwgQl9GUkFNRV9FVkVO
VFMpLy8gfCBCX0ZVTExfVVBEQVRFX09OX1JFU0laRSkKKwksIGZOdW1Sb3dzKG51bVJvd3MpCisJ
LCBmTnVtQ29scyhudW1Db2xzKQorCSwgZlNxdWFyZVNpemUoc3F1YXJlU2l6ZSkKKwksIGZTY3Jv
bGxWaWV3KDApCit7CisJLy8gQSBzaGFkZSBvZiByZWQKKwlTZXRWaWV3Q29sb3IoMjAwLCAwLCAw
KTsKKwlTZXRGb250KGJlX2ZpeGVkX2ZvbnQpOworfQorCisKK0NoZWNrZXJib2FyZFZpZXc6On5D
aGVja2VyYm9hcmRWaWV3KCkKK3sKK30KKworCit2b2lkCitDaGVja2VyYm9hcmRWaWV3OjpBdHRh
Y2hlZFRvV2luZG93KCkKK3sKKwlfQWRqdXN0U2Nyb2xsQmFycygpOworfQorCisKK3ZvaWQKK0No
ZWNrZXJib2FyZFZpZXc6OkRyYXcoQlJlY3QgdXBkYXRlUmVjdCkKK3sKKwlyZ2JfY29sb3Igd2hp
dGUgPSB7MjU1LCAyNTUsIDI1NSwgMjU1fTsKKwlyZ2JfY29sb3IgYmxhY2sgPSB7MCwgMCwgMCwg
MjU1fTsKKworCWNoYXIgc3RyWzEwMF07CisJZm9yIChpbnQzMiB5ID0gMDsgeSA8IGZOdW1Sb3dz
ICogZlNxdWFyZVNpemU7IHkgKz0gZlNxdWFyZVNpemUpIHsKKwkJaW50MzIgeVNjYWxlZCA9IHkg
LyBmU3F1YXJlU2l6ZTsKKwkJZm9yIChpbnQzMiB4ID0gMDsgeCA8IGZOdW1Db2xzICogZlNxdWFy
ZVNpemU7IHggKz0gZlNxdWFyZVNpemUpIHsKKwkJCWJvb2wgd2lsbERyYXcgPSBmYWxzZTsKKwkJ
CWludDMyIHhTY2FsZWQgPSB4IC8gZlNxdWFyZVNpemU7CisJCQlpZiAoeVNjYWxlZCAlIDIgPT0g
MCkgeworCQkJCWlmICh4U2NhbGVkICUgMiA9PSAwKQorCQkJCQl3aWxsRHJhdyA9IHRydWU7CisJ
CQl9IGVsc2UgeworCQkJCWlmICh4U2NhbGVkICUgMiA9PSAxKQorCQkJCQl3aWxsRHJhdyA9IHRy
dWU7CisJCQl9CisJCQlpZiAod2lsbERyYXcpIHsKKwkJCQlTZXRIaWdoQ29sb3IoYmxhY2spOwor
CQkJCUZpbGxSZWN0KEJSZWN0KHgsIHksIHggKyBmU3F1YXJlU2l6ZSwgeSArIGZTcXVhcmVTaXpl
KSk7CisJCQl9CisJCQlzcHJpbnRmKHN0ciwgIiVkLCVkIiwgeFNjYWxlZCwgeVNjYWxlZCk7CisJ
CQlCRm9udCBmb250OworCQkJR2V0Rm9udCgmZm9udCk7CisJCQlmb250X2hlaWdodCBmb250SGVp
Z2h0OworCQkJZm9udC5HZXRIZWlnaHQoJmZvbnRIZWlnaHQpOworCQkJZmxvYXQgbGluZUhlaWdo
dCA9IGZvbnRIZWlnaHQuYXNjZW50ICsgZm9udEhlaWdodC5kZXNjZW50ICsgZm9udEhlaWdodC5s
ZWFkaW5nOworCQkJZmxvYXQgc3RyaW5nV2lkdGggPSBmb250LlN0cmluZ1dpZHRoKHN0cik7CisJ
CQlTZXRIaWdoQ29sb3Iod2hpdGUpOworCQkJRHJhd1N0cmluZyhzdHIsIEJQb2ludCh4ICsgKGZT
cXVhcmVTaXplIC0gc3RyaW5nV2lkdGgpIC8gMiwgeSArIChmU3F1YXJlU2l6ZSAtIGxpbmVIZWln
aHQpKSk7CisJCX0KKwl9CisKK30KKwordm9pZAorQ2hlY2tlcmJvYXJkVmlldzo6TW91c2VEb3du
KEJQb2ludCBwb2ludCkKK3sKKwlpZiAoZlNjcm9sbFZpZXcpIHsKKwkJQlBvaW50IGxlZnRUb3Ag
PSBMZWZ0VG9wKCk7CisJCXByaW50ZigiTGVmdFRvcCBpcyBsZWZ0ID0gJS4wZiwgdG9wID0gJS4w
ZlxuIiwgbGVmdFRvcC54LCBsZWZ0VG9wLnkpOworCX0KK30KKwordm9pZAorQ2hlY2tlcmJvYXJk
Vmlldzo6RnJhbWVSZXNpemVkKGZsb2F0IGhlaWdodCwgZmxvYXQgd2lkdGgpCit7CisJcHJpbnRm
KCJGcmFtZSByZXNpemVkIHRvIGhlaWdodCAlLjBmLCB3aWR0aCAlLjBmXG4iLCBoZWlnaHQsIHdp
ZHRoKTsKKwlfQWRqdXN0U2Nyb2xsQmFycygpOworfQorCit2b2lkCitDaGVja2VyYm9hcmRWaWV3
OjpUYXJnZXRlZEJ5U2Nyb2xsVmlldyhCU2Nyb2xsVmlldyAqdmlldykKK3sKKwlmU2Nyb2xsVmll
dyA9IHZpZXc7Cit9CisKK3ZvaWQgCitDaGVja2VyYm9hcmRWaWV3OjpfQWRqdXN0U2Nyb2xsQmFy
cygpCit7CisJaWYgKGZTY3JvbGxWaWV3KSB7CisJCWZsb2F0IHJpZ2h0ID0gKGZsb2F0KSBmTnVt
Q29scyAqIGZTcXVhcmVTaXplIC0gRnJhbWUoKS5XaWR0aCgpOworCQlmbG9hdCBib3R0b20gPSAo
ZmxvYXQpIGZOdW1Sb3dzICogZlNxdWFyZVNpemUgLSBGcmFtZSgpLkhlaWdodCgpOworCQlmU2Ny
b2xsVmlldy0+U2Nyb2xsQmFyKEJfSE9SSVpPTlRBTCktPlNldFJhbmdlKDAsIHJpZ2h0KTsKKwkJ
ZlNjcm9sbFZpZXctPlNjcm9sbEJhcihCX1ZFUlRJQ0FMKS0+U2V0UmFuZ2UoMCwgYm90dG9tKTsK
Kwl9Cit9CisKZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0NoZWNrZXJi
b2FyZFZpZXcuaCBiL1dlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0NoZWNrZXJib2FyZFZpZXcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWNlYzQ5Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvQ2hlY2tlcmJvYXJkVmlldy5oCkBA
IC0wLDAgKzEsMzcgQEAKKy8vfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorLy8KKy8vIENvcHlyaWdodCAy
MDA3LCBSeWFuIExlYXZlbmdvb2QsIGxlYXZlbmdvb2RAZ21haWwuY29tCisvLyBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8KKy8vfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisjaWZuZGVmIENIRUNLRVJC
T0FSRF9WSUVXX0gKKyNkZWZpbmUgQ0hFQ0tFUkJPQVJEX1ZJRVdfSAorCisKKyNpbmNsdWRlIDxS
ZWN0Lmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisKK2NsYXNzIENoZWNrZXJib2FyZFZpZXcgOiBw
dWJsaWMgQlZpZXcgeworCXB1YmxpYzoKKwkJQ2hlY2tlcmJvYXJkVmlldyhjb25zdCBjaGFyICpu
YW1lLCBpbnQzMiBudW1Sb3dzLCBpbnQzMiBudW1Db2xzLCBpbnQzMiBzcXVhcmVTaXplID0gNDAp
OworCQl+Q2hlY2tlcmJvYXJkVmlldygpOworCisJCXZvaWQgQXR0YWNoZWRUb1dpbmRvdygpOwor
CQl2b2lkIERyYXcoQlJlY3QgdXBkYXRlUmVjdCk7CisJCXZvaWQgRnJhbWVSZXNpemVkKGZsb2F0
IGhlaWdodCwgZmxvYXQgd2lkdGgpOworCQl2b2lkIE1vdXNlRG93bihCUG9pbnQgcG9pbnQpOwor
CQl2b2lkIFRhcmdldGVkQnlTY3JvbGxWaWV3KEJTY3JvbGxWaWV3ICp2aWV3KTsKKworICBwcml2
YXRlOgorCQl2b2lkIF9BZGp1c3RTY3JvbGxCYXJzKCk7CisKKwkJaW50MzIgZk51bVJvd3M7CisJ
CWludDMyIGZOdW1Db2xzOworCQlpbnQzMiBmU3F1YXJlU2l6ZTsKKwkJQlNjcm9sbFZpZXcqIGZT
Y3JvbGxWaWV3OworfTsKKworI2VuZGlmCS8vIENIRUNLRVJCT0FSRF9WSUVXX0gKKwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJBcHAuY3BwIGIvV2ViS2l0
L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJBcHAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjg5YjYyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvaGFpa3Uv
SGFpa3VMYXVuY2hlci9MYXVuY2hlckFwcC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJMYXVuY2hlckFwcC5o
IgorI2luY2x1ZGUgIkxhdW5jaGVyV2luZG93LmgiCisKKyNpbmNsdWRlIDxBbGVydC5oPgorI2lu
Y2x1ZGUgPE9TLmg+CisKK2V4dGVybiBjb25zdCBjaGFyICprQXBwbGljYXRpb25TaWduYXR1cmUg
PSAiYXBwbGljYXRpb24veC12bmQuUkpMLUhhaWt1TGF1bmNoZXIiOworCitMYXVuY2hlckFwcDo6
TGF1bmNoZXJBcHAoKQorICAgIDogQkFwcGxpY2F0aW9uKGtBcHBsaWNhdGlvblNpZ25hdHVyZSkK
K3sKK30KKworTGF1bmNoZXJBcHA6On5MYXVuY2hlckFwcCgpCit7Cit9CisKK3ZvaWQgTGF1bmNo
ZXJBcHA6OkFib3V0UmVxdWVzdGVkKCkKK3sKKyAgICBCQWxlcnQqIGFsZXJ0ID0gbmV3IEJBbGVy
dCgiQWJvdXQgSGFpa3VMYXVuY2hlciIsCisgICAgICAgICJGb3IgdGVzdGluZyBXZWJLaXQuLi5c
blxuYnkgUnlhbiBMZWF2ZW5nb29kIiwgIlN3ZWV0ISIpOworICAgIGFsZXJ0LT5HbygpOworfQor
Cit2b2lkIExhdW5jaGVyQXBwOjpSZWFkeVRvUnVuKCkKK3sKKyAgICBMYXVuY2hlcldpbmRvdyAq
d2luID0gbmV3IExhdW5jaGVyV2luZG93KCk7CisgICAgd2luLT5TaG93KCk7Cit9CisKK3ZvaWQg
TGF1bmNoZXJBcHA6Ok1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSAqbWVzc2FnZSkKK3sKKyAgICBz
d2l0Y2ggKG1lc3NhZ2UtPndoYXQpIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEJB
cHBsaWNhdGlvbjo6TWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitib29sIExhdW5jaGVyQXBwOjpRdWl0UmVxdWVzdGVkKCkKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworaW50CittYWluKGludCwgY2hhciAqKikKK3sKKyAgICBuZXcgTGF1
bmNoZXJBcHAoKTsKKyAgICBiZV9hcHAtPlJ1bigpOworICAgIGRlbGV0ZSBiZV9hcHA7CisgICAg
cmV0dXJuIDA7Cit9CisKKy8vIHZpbTogc3c9NCB0cz00IGV0CisKZGlmZiAtLWdpdCBhL1dlYktp
dC9oYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyQXBwLmggYi9XZWJLaXQvaGFpa3UvSGFpa3VM
YXVuY2hlci9MYXVuY2hlckFwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmQ5ZjUyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9M
YXVuY2hlckFwcC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisjaWZuZGVmIExBVU5DSEVSX0FQUF9ICisjZGVmaW5lIExBVU5DSEVS
X0FQUF9ICisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPEFwcGxpY2F0aW9uLmg+
CisKK2NsYXNzIExhdW5jaGVyQXBwIDogcHVibGljIEJBcHBsaWNhdGlvbiB7CisgICAgcHVibGlj
OgorICAgICAgICBMYXVuY2hlckFwcCgpOworICAgICAgICB+TGF1bmNoZXJBcHAoKTsKKworICAg
ICAgICB2b2lkIEFib3V0UmVxdWVzdGVkKCk7CisgICAgICAgIHZvaWQgTWVzc2FnZVJlY2VpdmVk
KEJNZXNzYWdlICptZXNzYWdlKTsKKyAgICAgICAgdm9pZCBSZWFkeVRvUnVuKCk7CisgICAgICAg
IGJvb2wgUXVpdFJlcXVlc3RlZCgpOworLy8gIHByaXZhdGU6Cit9OworCitleHRlcm4gY29uc3Qg
Y2hhciAqa0FwcGxpY2F0aW9uU2lnbmF0dXJlOworCisjZGVmaW5lIG15X2FwcCBkeW5hbWljX2Nh
c3Q8TGF1bmNoZXJBcHAqPihiZV9hcHApCisKKyNlbmRpZiAvLyBMQVVOQ0hFUl9BUFBfSAorCisv
LyB2aW06IHN3PTQgdHM9NCBldAorCmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvSGFpa3VMYXVu
Y2hlci9MYXVuY2hlclZpZXcuY3BwIGIvV2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNo
ZXJWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2NkMzZkCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJWaWV3
LmNwcApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbmRyZWEg
QW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJMYXVuY2hlclZpZXcuaCIKKworLy8jaW5jbHVkZSA8
R3JhcGhpY3NEZWZzLmg+CisjaW5jbHVkZSA8QXBwbGljYXRpb24uaD4KKyNpbmNsdWRlIDxGb250
Lmg+CisjaW5jbHVkZSA8U2NyZWVuLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8
U3VwcG9ydERlZnMuaD4KKyNpbmNsdWRlIDxPUy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJDaHJvbWVDbGllbnRIYWlrdS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50
SGFpa3UuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZUludGVybmFsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudEhhaWt1Lmgi
CisjaW5jbHVkZSAiRHJhZ0NsaWVudEhhaWt1LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50
SGFpa3UuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEhhaWt1LmgiCisjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0
ZW0uaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lVHJlZS5oIgorI2luY2x1ZGUgInBhZ2UvRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAicGFn
ZS9QYWdlLmgiCisjaW5jbHVkZSAiaGlzdG9yeS9QYWdlQ2FjaGUuaCIKKyNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KworCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisKK0xhdW5jaGVyVmlldzo6TGF1
bmNoZXJWaWV3KGNvbnN0IGNoYXIgKm5hbWUpCisgICAgOiBCVmlldyhuYW1lLCBCX1dJTExfRFJB
V3xCX0ZSQU1FX0VWRU5UU3xCX0ZVTExfVVBEQVRFX09OX1JFU0laRSkKK3sKKyAgICBXZWJDb3Jl
OjpDaHJvbWVDbGllbnRIYWlrdSogY2hyb21lID0gbmV3IFdlYkNvcmU6OkNocm9tZUNsaWVudEhh
aWt1KCk7CisgICAgV2ViQ29yZTo6Q29udGV4dE1lbnVDbGllbnRIYWlrdSogY29udGV4dE1lbnUg
PSBuZXcgV2ViQ29yZTo6Q29udGV4dE1lbnVDbGllbnRIYWlrdSgpOworICAgIFdlYkNvcmU6OkVk
aXRvckNsaWVudEhhaWt1KiBlZGl0b3IgPSBuZXcgV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3Uo
KTsKKyAgICBwYWdlID0gbmV3IFdlYkNvcmU6OlBhZ2UoY2hyb21lLCBjb250ZXh0TWVudSwgZWRp
dG9yLCBuZXcgV2ViQ29yZTo6RHJhZ0NsaWVudEhhaWt1KCksIG5ldyBXZWJDb3JlOjpJbnNwZWN0
b3JDbGllbnRIYWlrdSgpKTsKKyAgICBlZGl0b3ItPnNldFBhZ2UocGFnZSk7CisgICAgCisgICAg
V2ViQ29yZTo6U2V0dGluZ3MgKnNldHRpbmdzID0gcGFnZS0+c2V0dGluZ3MoKTsKKyAgICBzZXR0
aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOworICAgIHNldHRpbmdzLT5z
ZXRNaW5pbXVtRm9udFNpemUoNSk7CisgICAgc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9u
dFNpemUoNSk7CisgICAgc2V0dGluZ3MtPnNldFNob3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7
CisgICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOworCisgICAgc2V0dGlu
Z3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmYXVs
dEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJCaXRzdHJl
YW0gVmVyYSBTZXJpZiIpOworICAgIHNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJC
aXRzdHJlYW0gVmVyYSBTYW5zIik7CisgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgi
Qml0c3RyZWFtIFZlcmEgU2FucyBNb25vIik7CisgICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9u
dEZhbWlseSgiQml0c3RyZWFtIFZlcmEgU2FucyIpOworICAgIHNldHRpbmdzLT5zZXREZWZhdWx0
VGV4dEVuY29kaW5nTmFtZSgiVVRGLTgiKTsKKyAgICAKKworCWZyYW1lVmlldyA9IE5VTEw7Cisg
ICAgCisgICAgU2V0Vmlld0NvbG9yKDI1NSwgMjU1LCAyNTUpOyAvL0JfVFJBTlNQQVJFTlRfQ09M
T1IpOworICAgIAorfQorCitMYXVuY2hlclZpZXc6On5MYXVuY2hlclZpZXcoKQoreworICAgIC8v
ZGVsZXRlIGNvbnRleHQ7Cit9CisKK3ZvaWQJCitMYXVuY2hlclZpZXc6OkF0dGFjaGVkVG9XaW5k
b3coKXsKK30KKwordm9pZAorTGF1bmNoZXJWaWV3OjpDcmVhdGVGcmFtZSgpeworCS8vbW92ZSB0
aGlzIHRvIGEgbmV3IGNsYXNzOiAgIAorICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFp
a3UqIGxvYWRlckNsaWVudCA9IG5ldyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1KCk7
CisgICAgZnJhbWUgPSBXZWJDb3JlOjpGcmFtZTo6Y3JlYXRlKHBhZ2UsIDAsIGxvYWRlckNsaWVu
dCk7CisgICAgbG9hZGVyQ2xpZW50LT5zZXRGcmFtZShmcmFtZS5nZXQoKSk7CisgICAgCisgICAg
ZnJhbWVWaWV3ID0gV2ViQ29yZTo6RnJhbWVWaWV3OjpjcmVhdGUoZnJhbWUuZ2V0KCkpOworCisg
ICAgLy9mcmFtZVZpZXctPmRlcmVmKCk7CisgICAgZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3Lmdl
dCgpKTsKKyAgICBmcmFtZS0+aW5pdCgpOworCQorCWZyYW1lVmlldy0+c2V0UGFyZW50V2lkZ2V0
KHRoaXMpOwkKKwlmcmFtZVZpZXctPmhhaWt1V2lkZ2V0KCktPk1vdmVUbygwLCAwKTsKKwlmcmFt
ZVZpZXctPmhhaWt1V2lkZ2V0KCktPlJlc2l6ZVRvKEJvdW5kcygpLldpZHRoKCksIEJvdW5kcygp
LkhlaWdodCgpKTsKKwlmcmFtZVZpZXctPmhhaWt1V2lkZ2V0KCktPlNldFJlc2l6aW5nTW9kZShC
X0ZPTExPV19BTExfU0lERVMpOworfQorCit2b2lkCitMYXVuY2hlclZpZXc6OkdvVG9VcmwoY29u
c3QgY2hhciogdXJsKXsKKwkKKwlpZighZnJhbWVWaWV3KQorCQlDcmVhdGVGcmFtZSgpOworCQkK
KwlXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKKyAgICByZXF1ZXN0LnNldFVSTChX
ZWJDb3JlOjpLVVJMKHVybCkpOworICAgIFdlYkNvcmU6OkZyYW1lTG9hZFJlcXVlc3QgZnJhbWVS
ZXF1ZXN0KHJlcXVlc3QpOworICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZChmcmFtZVJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCksIHRydWUpOworICAgIAorfQorCitjb25zdCBjaGFyKiAKK0xhdW5j
aGVyVmlldzo6R2V0VXJsKCl7CisJCisJaWYoIWZyYW1lVmlldykKKwkJcmV0dXJuIE5VTEw7CisJ
CQorCVdlYkNvcmU6OktVUkwga3VybChmcmFtZS0+bG9hZGVyKCktPnVybCgpKTsKKwlyZXR1cm4g
a3VybC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKTsKK30KKworLyoKK3ZvaWQgTGF1bmNoZXJWaWV3
OjpEcmF3KEJSZWN0IHVwZGF0ZVJlY3QpCit7CisJQlZpZXc6OkRyYXcodXBkYXRlUmVjdCk7Cit9
CisKK3ZvaWQgTGF1bmNoZXJWaWV3OjpNb3VzZURvd24oQlBvaW50IHBvaW50KQoreworfQorCisK
K3ZvaWQgTGF1bmNoZXJWaWV3OjpGcmFtZVJlc2l6ZWQoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCkKK3sKK30KKyovCisvLyB2aW06IHN3PTQgdHM9NCBldAorCmRpZmYgLS1naXQgYS9XZWJLaXQv
aGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlclZpZXcuaCBiL1dlYktpdC9oYWlrdS9IYWlrdUxh
dW5jaGVyL0xhdW5jaGVyVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmRkNjAxODcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9M
YXVuY2hlclZpZXcuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBMQVVOQ0hFUl9WSUVXX0gKKyNkZWZpbmUg
TEFVTkNIRVJfVklFV19ICisKKyNkZWZpbmUgSlNfRVhQT1JUREFUQSBfX2RlY2xzcGVjKGRsbGV4
cG9ydCkKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KworI2luY2x1ZGUgPFZpZXcuaD4KKworI2luY2x1ZGUgInBhZ2UvUGFnZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworfTsKKworY2xhc3MgTGF1
bmNoZXJWaWV3IDogcHVibGljIEJWaWV3IHsKKyAgICBwdWJsaWM6CisgICAgICAgIExhdW5jaGVy
Vmlldyhjb25zdCBjaGFyICpuYW1lKTsKKyAgICAgICAgfkxhdW5jaGVyVmlldygpOworCisgICAg
ICAgIHZvaWQJCUdvVG9VcmwoY29uc3QgY2hhciogdXJsKTsKKyAgICAgICAgY29uc3QgY2hhciog
R2V0VXJsKCk7CisgICAgICAgIAorICAgICAgICB2b2lkCUF0dGFjaGVkVG9XaW5kb3coKTsKKyAg
ICAgICAgdm9pZAlDcmVhdGVGcmFtZSgpOworICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAg
dm9pZCBEcmF3KEJSZWN0IHVwZGF0ZVJlY3QpOworICAgICAgICB2b2lkIEZyYW1lUmVzaXplZChm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KTsKKyAgICAgICAgdm9pZCBNb3VzZURvd24oQlBvaW50
IHBvaW50KTsKKyAgICAgICAgKi8KKyAgICBwcml2YXRlOgorICAgICAgICBXVEY6OlJlZlB0cjxX
ZWJDb3JlOjpGcmFtZVZpZXc+IGZyYW1lVmlldzsKKyAgICAgICAgV1RGOjpSZWZQdHI8V2ViQ29y
ZTo6RnJhbWU+IGZyYW1lOworICAgICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlOworfTsKKworI2Vu
ZGlmIC8vIExBVU5DSEVSX1ZJRVdfSAorCisvLyB2aW06IHN3PTQgdHM9NCBldAorCmRpZmYgLS1n
aXQgYS9XZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlcldpbmRvdy5jcHAgYi9XZWJL
aXQvaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlcldpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmNjZhYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9o
YWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyV2luZG93LmNwcApAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21h
aWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
IkxhdW5jaGVyQXBwLmgiCisjaW5jbHVkZSAiQ2hlY2tlcmJvYXJkVmlldy5oIgorI2luY2x1ZGUg
IkxhdW5jaGVyV2luZG93LmgiCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvbi5oPgorI2luY2x1ZGUg
PFNjcm9sbFZpZXcuaD4KKyNpbmNsdWRlIDxTdXBwb3J0RGVmcy5oPgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjaW5jbHVkZSA8QnV0dG9uLmg+CisjaW5jbHVkZSA8R3JvdXBMYXlvdXQuaD4KKyNpbmNs
dWRlIDxHcm91cExheW91dEJ1aWxkZXIuaD4KKyNpbmNsdWRlIDxHcmlkTGF5b3V0QnVpbGRlci5o
PgorCisjZGVmaW5lIEdPVE9fVVJMCSdnb3RvJworI2RlZmluZSBMT0FEX1VSTAknbG9hZCcKKwor
TGF1bmNoZXJXaW5kb3c6OkxhdW5jaGVyV2luZG93KCkKKyAgICA6IEJXaW5kb3coQlJlY3QoMTAw
LCAxMDAsIDYwMCwgNjAwKSwgIkhhaWt1TGF1bmNoZXIiLCBCX0RPQ1VNRU5UX1dJTkRPVywgMCkK
K3sKKyAgICBmVXJsID0gbmV3IEJUZXh0Q29udHJvbCgidXJsIiwgInVybCIsICJmaWxlOi8vL2Jv
b3QvaG9tZS90ZXN0Lmh0bWwiLCBuZXcgQk1lc3NhZ2UoR09UT19VUkwpKTsKKyAgICBmVXJsLT5T
ZXREaXZpZGVyKDUwLjApOworCisJQkJ1dHRvbiogYnV0dG9uID0gbmV3IEJCdXR0b24oIiIsICJH
byIsIG5ldyBCTWVzc2FnZShMT0FEX1VSTCkpOworICAgIAorICAgIGZMYXVuY2hlclZpZXcgPSBu
ZXcgTGF1bmNoZXJWaWV3KCJsYXVuY2hlcl92aWV3Iik7CisKKwlTZXRMYXlvdXQobmV3IEJHcm91
cExheW91dChCX0hPUklaT05UQUwpKTsKKwlBZGRDaGlsZChCR3JvdXBMYXlvdXRCdWlsZGVyKEJf
VkVSVElDQUwsIDEwKQorCQkuQWRkKEJHcmlkTGF5b3V0QnVpbGRlcig1LCA1KQorCQkJIC5BZGQo
ZlVybCwgMCwgMCkKKwkJCSAuQWRkKGJ1dHRvbiwgMSwgMCkKKwkJKQorCQkuQWRkKGZMYXVuY2hl
clZpZXcpCisJCS5TZXRJbnNldHMoNSwgNSwgNSwgNSkKKwkpOworfQorCitMYXVuY2hlcldpbmRv
dzo6fkxhdW5jaGVyV2luZG93KCkKK3sKK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6TWVzc2Fn
ZVJlY2VpdmVkKEJNZXNzYWdlICptZXNzYWdlKQoreworICAgIHN3aXRjaCAobWVzc2FnZS0+d2hh
dCkgeworICAgICAgICBjYXNlIEdPVE9fVVJMOgorICAgICAgICAJZkxhdW5jaGVyVmlldy0+R29U
b1VybChmVXJsLT5UZXh0KCkpOworICAgICAgICAJYnJlYWs7CisgICAgICAgIGNhc2UgTE9BRF9V
Ukw6CisgICAgICAgIAlmTGF1bmNoZXJWaWV3LT5Hb1RvVXJsKGZVcmwtPlRleHQoKSk7CisgICAg
ICAgIAlicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEJXaW5kb3c6Ok1lc3Nh
Z2VSZWNlaXZlZChtZXNzYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9v
bCBMYXVuY2hlcldpbmRvdzo6UXVpdFJlcXVlc3RlZCgpCit7CisgICAgYmVfYXBwLT5Qb3N0TWVz
c2FnZShCX1FVSVRfUkVRVUVTVEVEKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gdmltOiBz
dz00IHRzPTQgZXQKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1
bmNoZXJXaW5kb3cuaCBiL1dlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyV2luZG93
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlNDA5OAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyV2luZG93LmgKQEAg
LTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2Qg
PGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KyNpZm5kZWYgTEFVTkNIRVJfV0lORE9XX0gKKyNkZWZpbmUgTEFVTkNIRVJfV0lORE9XX0gKKwor
I2luY2x1ZGUgPE1lbnUuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKyNpbmNsdWRlIDxXaW5kb3cu
aD4KKyNpbmNsdWRlIDxUZXh0Q29udHJvbC5oPgorI2luY2x1ZGUgIkxhdW5jaGVyVmlldy5oIgor
CitjbGFzcyBMYXVuY2hlcldpbmRvdyA6IHB1YmxpYyBCV2luZG93IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIExhdW5jaGVyV2luZG93KCk7CisgICAgICAgIH5MYXVuY2hlcldpbmRvdygpOworCisg
ICAgICAgIHZvaWQgTWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdlICptZXNzYWdlKTsKKyAgICAgICAg
Ym9vbCBRdWl0UmVxdWVzdGVkKCk7CisgICAgcHJpdmF0ZToKKyAgICAKKyAgICBCVGV4dENvbnRy
b2wqCWZVcmw7CisgICAgTGF1bmNoZXJWaWV3KglmTGF1bmNoZXJWaWV3OworfTsKKworI2VuZGlm
IC8vIExBVU5DSEVSX1dJTkRPV19ICisKKy8vIHZpbTogc3c9NCB0cz00IGV0CisKLS0gCjEuNi4z
LjMKCg==
</data>
<flag name="review"
          id="16423"
          type_id="1"
          status="-"
          setter="manyoso"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31941</attachid>
            <date>2009-06-26 12:33:20 -0700</date>
            <delta_ts>2009-06-30 04:22:15 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for JavaScriptCore.</desc>
            <filename>0001-Added-Haiku-specific-files-for-JavaScriptCore.patch</filename>
            <type>text/plain</type>
            <size>3109</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBhNGY0ZGQwNDhhY2E0MDkxYjMyNDdlMzg1MTZjMDJhZDg5NWQxYjM4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMjYgSnVuIDIwMDkgMjE6MjQ6MTYgKzAyMDAKU3ViamVjdDogW1BBVENIIDEv
M10gQWRkZWQgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIEphdmFTY3JpcHRDb3JlLgoKLS0tCiBK
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKysrKysr
CiBKYXZhU2NyaXB0Q29yZS93dGYvaGFpa3UvTWFpblRocmVhZEhhaWt1LmNwcCB8ICAgNDUgKysr
KysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygr
KSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2NyaXB0Q29yZS93dGYv
aGFpa3UvTWFpblRocmVhZEhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1NTUxOGY1Li5lNDViZDMw
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDYtMjYgIE1heGltZSBTaW1vbiAg
PHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIEphdmFTY3Jp
cHRDb3JlLgorCisgICAgICAgICogd3RmL2hhaWt1L01haW5UaHJlYWRIYWlrdS5jcHA6IEFkZGVk
LgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKToKKyAgICAgICAg
KFdURjo6c2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCk6CisKIDIwMDktMDYt
MjQgIFpvbHRhbiBIb3J2YXRoICA8aHpvbHRhbkBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS93dGYvaGFpa3UvTWFpblRocmVhZEhhaWt1LmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9oYWlr
dS9NYWluVGhyZWFkSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmY2ZmY0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvaGFpa3UvTWFp
blRocmVhZEhhaWt1LmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEtldmluIE9sbGl2aWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKKworCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCkKK3sKK30KKwor
dm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCkKK3sKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKLS0gCjEuNi4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31942</attachid>
            <date>2009-06-26 12:33:59 -0700</date>
            <delta_ts>2009-06-30 04:22:47 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore.</desc>
            <filename>0003-Added-Haiku-specific-files-for-WebCore.patch</filename>
            <type>text/plain</type>
            <size>388037</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA3M2NhOTRiMmQ1NjIyNGJlNGZhZjIxYzgwZjgzM2E3OGM3MWZmNjU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMjYgSnVuIDIwMDkgMjE6Mjc6NTEgKzAyMDAKU3ViamVjdDogW1BBVENIIDMv
M10gQWRkZWQgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCgotLS0KIFdlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDg4MyArKysrKysr
KysrKysrKysrKysrKwogV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcCAg
ICAgICAgICAgfCAgMTUwICsrKysKIFdlYkNvcmUvcGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcCAg
ICAgICAgICAgICAgICAgIHwgICA0MyArCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0NvbG9ySGFpa3UuY3BwICAgICB8ICAgNTQgKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9GbG9hdFBvaW50SGFpa3UuY3BwICAgIHwgICA0OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAgfCAgIDUwICsrCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcCB8ICAgOTggKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnREYXRhSGFpa3UuY3BwICB8ICAgODIgKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcCAgICAgIHwgIDEwMCArKysK
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oIHwgICA2
OSArKwogLi4uL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAgICAgICAg
fCAgMTgwICsrKysKIC4uLi9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNw
cCAgICAgIHwgICA2NCArKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVu
dEhhaWt1LmNwcCAgfCAgIDUzICsrCiAuLi4vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0
SGFpa3UuY3BwICAgICAgICB8ICA1NjAgKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwICAgICAgfCAgIDYzICsrCiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oICB8ICAgNDYgKwogLi4uL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwICAgfCAgIDgxICsrCiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwICAgICB8ICAxNzIgKysr
KwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwICAgfCAg
MjE5ICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3Uu
Y3BwICB8ICAgNDggKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhh
aWt1LmNwcCAgIHwgICA0OSArKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRT
aXplSGFpa3UuY3BwICAgfCAgIDQ4ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L1BhdGhIYWlrdS5jcHAgICAgICB8ICAxNTkgKysrKwogLi4uL2dyYXBoaWNzL2hhaWt1L1NpbXBs
ZUZvbnREYXRhSGFpa3UuY3BwICAgICAgICAgfCAgMTA0ICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9DaHJvbWVDbGllbnRIYWlrdS5jcHAgICAgICAgfCAgMzU0ICsrKysrKysrCiBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0Nocm9tZUNsaWVudEhhaWt1LmggICAgICAgICB8ICAxNDEgKysrKwog
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAgICAgICAgICAgfCAgMTk0
ICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmggICAgICAgICAg
ICB8ICAgNzAgKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVDbGllbnRIYWlr
dS5jcHAgIHwgICA3OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUNsaWVu
dEhhaWt1LmggICAgfCAgIDUyICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51
SGFpa3UuY3BwICAgICAgICB8ICAxNDUgKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250
ZXh0TWVudUl0ZW1IYWlrdS5jcHAgICAgfCAgMTY0ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ29va2llSmFySGFpa3UuY3BwICAgICAgICAgIHwgICA2MCArKwogV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAgICAgICAgICAgICAgfCAgMjM3ICsrKysrKwogV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9EcmFnQ2xpZW50SGFpa3UuY3BwICAgICAgICAgfCAgIDc0ICsrCiBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdDbGllbnRIYWlrdS5oICAgICAgICAgICB8ICAgNDYg
KwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnRGF0YUhhaWt1LmNwcCAgICAgICAgICAgfCAg
MTA4ICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VIYWlrdS5jcHAgICAgICAg
ICAgfCAgIDczICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0VkaXRvckNsaWVudEhhaWt1LmNw
cCAgICAgICB8ICA0NzggKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRWRpdG9y
Q2xpZW50SGFpa3UuaCAgICAgICAgIHwgIDEyNCArKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
RXZlbnRMb29wSGFpa3UuY3BwICAgICAgICAgIHwgICA0MSArCiBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0ZpbGVDaG9vc2VySGFpa3UuY3BwICAgICAgICB8ICAgNDYgKwogV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9GaWxlU3lzdGVtSGFpa3UuY3BwICAgICAgICAgfCAgIDgxICsrCiBXZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwICB8ICA3NjYgKysrKysrKysr
KysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5o
ICAgIHwgIDIzNCArKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvSW5zcGVjdG9yQ2xpZW50
SGFpa3UuY3BwICAgIHwgIDExOCArKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvSW5zcGVjdG9y
Q2xpZW50SGFpa3UuaCAgICAgIHwgICA3MSArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9LZXli
b2FyZENvZGVzLmggICAgICAgICAgICAgfCAgNTQ0ICsrKysrKysrKysrKwogV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9NSU1FVHlwZVJlZ2lzdHJ5SGFpa3UuY3BwICAgfCAgIDc1ICsrCiBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAgICAgICAgICB8ICAxMjUgKysrCiAu
Li4vcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwICB8ICAyMDEg
KysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3Bw
IHwgICA4OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhci5oICAg
ICAgICAgfCAgIDYzICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFy
SGFpa3UuY3BwICB8ICAxMjQgKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hl
ZWxFdmVudEhhaWt1LmNwcCB8ICAgNDQgKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Qb3B1cE1l
bnVIYWlrdS5jcHAgICAgICAgICAgfCAgIDY4ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Jl
bmRlclRoZW1lSGFpa3UuY3BwICAgICAgICB8ICAzNTIgKysrKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU2NyZWVuSGFpa3UuY3BwICAgICAgICAgICAgIHwgIDEwMSArKysKIFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcCAgIHwgIDIwMSArKysrKwog
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaCAgICAgfCAgIDc3
ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAgICAgICAgICB8
ICAzMjggKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFp
a3UuY3BwICAgIHwgICA1MSArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhh
aWt1LmNwcCAgICAgICAgfCAgMTMxICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRU
aW1lckhhaWt1LmggICAgICAgICAgfCAgIDYzICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Nv
dW5kSGFpa3UuY3BwICAgICAgICAgICAgICB8ICAgNDIgKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9TeXN0ZW1UaW1lSGFpa3UuY3BwICAgICAgICAgfCAgIDQ3ICsKIFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcCAgICAgIHwgIDIwMyArKysrKwogV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5jcHAgICAgICAgfCAgIDY4ICsrCiBXZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmggICAgICAgICB8ICAgNTUgKysK
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmNwcCAgICAgICAgICAgIHwgIDQ3
NiArKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZpZXcuaCAgICAg
ICAgICAgICAgfCAgIDg0ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNw
cCAgICAgICAgICAgICB8ICAxOTQgKysrKysKIC4uLi9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFn
ZURlY29kZXJIYWlrdS5jcHAgICAgIHwgIDEyOSArKysKIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9o
YWlrdS9TdHJpbmdIYWlrdS5jcHAgICAgICAgIHwgICA1MSArKwogLi4uL2hhaWt1L1RleHRCcmVh
a0l0ZXJhdG9ySW50ZXJuYWxJQ1VIYWlrdS5jcHAgICAgfCAgIDMzICsKIDc1IGZpbGVzIGNoYW5n
ZWQsIDExMTk2IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRI
YWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0Zsb2F0UmVjdEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9u
dFBsYXRmb3JtRGF0YS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhLmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdl
QnVmZmVySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0
SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbnRTaXplSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2hyb21lQ2xpZW50SGFpa3UuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DaHJvbWVDbGllbnRI
YWlrdS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9h
cmRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Ns
aXBib2FyZEhhaWt1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUNsaWVudEhhaWt1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUl0ZW1IYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFp
a3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnQ2xp
ZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9E
cmFnQ2xpZW50SGFpa3UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvRHJhZ0RhdGFIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvRWRpdG9yQ2xpZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9FZGl0b3JDbGllbnRIYWlrdS5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVDaG9vc2VySGFpa3UuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlU3lzdGVtSGFpa3UuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GcmFtZUxvYWRlckNs
aWVudEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
RnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0luc3BlY3RvckNsaWVudEhhaWt1LmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0tleWJvYXJkQ29kZXMuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGFzdGVib2FyZEhh
aWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZv
cm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3UuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVs
RXZlbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1BvcHVwTWVudUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvUmVuZGVyVGhlbWVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmgKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVu
dUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hh
cmVkVGltZXJIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1NoYXJlZFRpbWVySGFpa3UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU291bmRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1N5c3RlbVRpbWVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFp
a3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2hhaWt1L1N0cmluZ0hhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVSGFpa3Uu
Y3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAyNTQyN2JjLi43MGU5NmM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4NiBAQAorMjAwOS0wNi0yNiAgTWF4aW1l
IFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3Ig
V2ViQ29yZS4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5H
RUQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJIYWlrdS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0SW5z
dGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAqIGVkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZCk6
CisgICAgICAgICogcGFnZS9oYWlrdS9EcmFnQ29udHJvbGxlckhhaWt1LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAg
IChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnQ29udHJvbGxlcjo6bWF4RHJhZ0ltYWdlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6Y2xlYW51cEFmdGVyU3lzdGVtRHJhZyk6CisgICAgICAgICogcGFn
ZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
aXNLZXlib2FyZE9wdGlvblRhYik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Omlu
dmVydFNlbnNlT2ZUYWJzVG9MaW5rcyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnRhYnNUb0FsbENvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Zm9j
dXNEb2N1bWVudFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lk
Z2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJm
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1vZGlmaWVy
cyk6CisgICAgICAgICogcGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9Db2xvckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yIHJn
Yl9jb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6b3BlcmF0
b3IgQlJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhh
aWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHA6IEFkZGVk
LgorICAgICAgICAoY2hhcl91bmljb2RlX3RvX3V0ZjgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvRm9udEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpjYW5S
ZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFibGVEZWxldGVk
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURh
dGFIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjp+
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpp
c0ZpeGVkUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxh
dGZvcm1HcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQ
b2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09y
QmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0RWxsaXBzZUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SWNvbjo6SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6
cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0
YS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZl
ckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6Oklt
YWdlQnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW1hZ2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbml0UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpnZXRCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdl
U291cmNlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0
aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBl
dGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0
ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW50UG9pbnQ6OkludFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBv
aW50OjpvcGVyYXRvciBCUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ludFJlY3RIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjpJbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dFNpemU6Om9wZXJhdG9yIEJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9QYXRoSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNvbnRhaW5zKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpib3Vu
ZGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6bW92ZVRvKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6OmFkZExpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRRdWFk
Q3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEFyY1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6
OmNsb3NlU3VicGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRBcmMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YWRkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRF
bGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6ZGVidWdTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUJvdW5kaW5nUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlr
dS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
SW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lk
dGhJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgor
ICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0Nocm9tZUNsaWVudEhhaWt1LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6Q2hyb21lQ2xpZW50SGFpa3UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6On5DaHJvbWVDbGllbnRIYWlrdSk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6Y2hyb21lRGVzdHJveWVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZXRXaW5kb3dSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojp3aW5kb3dSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpwYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWVDbGllbnRIYWlrdTo6c2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lQ2xpZW50SGFpa3U6OmZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhh
aWt1Ojp1bmZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpjYW5U
YWtlRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnRha2VGb2N1
cyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6Y3JlYXRlV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpjcmVhdGVNb2RhbERpYWxvZyk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6Y2FuUnVuTW9kYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnJ1bk1vZGFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
ZUNsaWVudEhhaWt1OjpzZXRUb29sYmFyc1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lQ2xpZW50SGFpa3U6OnRvb2xiYXJzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWVDbGllbnRIYWlrdTo6c2V0U3RhdHVzYmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRIYWlrdTo6c3RhdHVzYmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRIYWlrdTo6c2V0U2Nyb2xsYmFyc1Zpc2libGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnNjcm9sbGJhcnNWaXNpYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZXRNZW51YmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6bWVudWJhclZpc2libGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnNldFJlc2l6YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRIYWlrdTo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWVDbGllbnRIYWlrdTo6Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpydW5CZWZvcmVVbmxvYWRDb25maXJt
UGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OmNsb3NlV2luZG93
U29vbik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6cnVuSmF2YVNjcmlw
dEFsZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpydW5KYXZhU2Ny
aXB0Q29uZmlybSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6cnVuSmF2
YVNjcmlwdFByb21wdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6c2V0
U3RhdHVzYmFyVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6c2hv
dWxkSW50ZXJydXB0SmF2YVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRI
YWlrdTo6dGFic1RvTGlua3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6
OndpbmRvd1Jlc2l6ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1
OjpyZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnNjcmVlblRvV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojp3aW5kb3dUb1NjcmVlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6cGxhdGZvcm1XaW5kb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OmNvbnRlbnRzU2l6ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnNjcm9sbFJlY3RJbnRvVmlldyk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6YWRkVG9EaXJ0eVJlZ2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojp1cGRhdGVCYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6Om1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZXRUb29s
VGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpwcmludCk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpyZXF1ZXN0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6
OnJ1bk9wZW5QYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6c2V0
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojpmb3JtU3RhdGVE
aWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OmNyZWF0ZUhU
TUxQYXJzZXJRdWlya3MpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0Nocm9tZUNsaWVudEhh
aWt1Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Q2xpcGJvYXJkSGFp
a3UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmNsZWFyRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Y2xlYXJBbGxEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZEhhaWt1OjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZEhhaWt1OjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1Ojp0
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZHJhZ0xvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpkcmFnSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OnNldERyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRIYWlrdTo6ZHJhZ0ltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRIYWlrdTo6Y3JlYXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZEhhaWt1OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xpcGJvYXJkSGFpa3U6OndyaXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhh
aWt1Ojp3cml0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpoYXNE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1Ojp+Q2xpcGJvYXJkSGFpa3UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50SGFpa3U6OmNvbnRleHRNZW51RGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50SGFpa3U6OmdldEN1
c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51
Q2xpZW50SGFpa3U6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRleHRNZW51Q2xpZW50SGFpa3U6OmRvd25sb2FkVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRleHRNZW51Q2xpZW50SGFpa3U6Omxvb2tVcEluRGljdGlvbmFyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZXh0TWVudUNsaWVudEhhaWt1OjpzcGVhayk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNsaWVudEhhaWt1OjpzdG9wU3BlYWtpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dE1lbnVDbGllbnRIYWlrdTo6c2VhcmNoV2l0aEdvb2dsZSk6CisgICAgICAgICog
cGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVDbGllbnRIYWlrdS5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZXh0TWVudVJlY2VpdmVyOjpDb250ZXh0TWVudVJlY2VpdmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51UmVjZWl2ZXI6OkhhbmRsZU1lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGV4dE1lbnVSZWNlaXZlcjo6UmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
TWVudTo6fkNvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBl
bmRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppdGVtQ291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6Omluc2VydEl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dE1lbnU6OnNldFBsYXRmb3JtRGVzY3JpcHRpb24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2hhaWt1L0NvbnRleHRNZW51SXRlbUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChDb250ZXh0
TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbSk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06On5D
b250ZXh0TWVudUl0ZW0pOgorICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjpyZWxlYXNlUGxhdGZv
cm1EZXNjcmlwdGlvbik6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OnR5cGUpOgorICAgICAg
ICAoQ29udGV4dE1lbnVJdGVtOjpzZXRUeXBlKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6
YWN0aW9uKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKToKKyAgICAgICAg
KENvbnRleHRNZW51SXRlbTo6dGl0bGUpOgorICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjpzZXRU
aXRsZSk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OnBsYXRmb3JtU3ViTWVudSk6CisgICAg
ICAgIChDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUpOgorICAgICAgICAoQ29udGV4dE1lbnVJ
dGVtOjpzZXRDaGVja2VkKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6c2V0RW5hYmxlZCk6
CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2hhaWt1L0Nvb2tpZUphckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Y29va2llc0VuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0N1cnNvckhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJzb3I6On5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjpvcGVy
YXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRlckN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjptb3ZlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyb3NzQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmhhbmRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6aUJlYW1DdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6d2FpdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpoZWxw
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmVhc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6bm9ydGhSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhFYXN0
UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoV2VzdFJlc2l6ZUN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpzb3V0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpzb3V0aEVhc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6c291dGhXZXN0UmVz
aXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Ondlc3RSZXNpemVDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6bm9ydGhTb3V0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpl
YXN0V2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aEVhc3RTb3V0aFdl
c3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhXZXN0U291dGhFYXN0UmVz
aXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtblJlc2l6ZUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpyb3dSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6dmVydGlj
YWxUZXh0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNlbGxDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udGV4dE1lbnVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9Ecm9wQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
cHJvZ3Jlc3NDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6YWxpYXNDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6bm9uZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3RBbGxvd2VkQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6Onpvb21JbkN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
Ojp6b29tT3V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmdyYWJDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Z3JhYmJpbmdDdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0Ry
YWdDbGllbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEhh
aWt1OjphY3Rpb25NYXNrRm9yRHJhZyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ2xpZW50SGFp
a3U6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdDbGllbnRIYWlrdTo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NsaWVudEhhaWt1OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRIYWlrdTo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRIYWlrdTo6c3RhcnREcmFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRIYWlrdTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvRHJhZ0NsaWVudEhhaWt1Lmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNv
bnRhaW5zRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRmlsZW5hbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmFnRGF0YTo6YXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
Z0RhdGE6OmFzQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNyZWF0ZUNsaXBi
b2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VIYWlrdS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ0ltYWdlU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpkZWxldGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2NhbGVEcmFnSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2hhaWt1L0VkaXRvckNsaWVudEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3JDbGllbnRIYWlrdTo6RWRpdG9yQ2xpZW50SGFpa3UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnNldFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Q2xpZW50SGFpa3U6OnBhZ2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xp
ZW50SGFpa3U6OnNob3VsZERlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNs
aWVudEhhaWt1OjpzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvckNsaWVudEhhaWt1OjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6aXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFp
a3U6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudEhhaWt1Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnRvZ2dsZUdyYW1tYXJDaGVja2luZyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmlzRWRpdGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkRW5kRWRpdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkSW5zZXJ0Tm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkSW5zZXJ0VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkQXBwbHlTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkTW92ZVJhbmdl
QWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmRpZEJl
Z2luRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6cmVzcG9u
ZFRvQ2hhbmdlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNs
aWVudEhhaWt1OjpkaWRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVu
dEhhaWt1OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3JDbGllbnRIYWlrdTo6ZGlkU2V0U2VsZWN0aW9uVHlwZXNGb3JQYXN0ZWJvYXJkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpyZWdpc3RlckNvbW1hbmRGb3JV
bmRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpyZWdpc3RlckNvbW1h
bmRGb3JSZWRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpjbGVhclVu
ZG9SZWRvT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6
Y2FuVW5kbyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6Y2FuUmVkbyk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6dW5kbyk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6cmVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3JDbGllbnRIYWlrdTo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3JDbGllbnRIYWlrdTo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvckNsaWVudEhhaWt1Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnRleHREaWRDaGFuZ2VJblRl
eHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6ZG9UZXh0Rmll
bGRDb21tYW5kRnJvbUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1
Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
ckNsaWVudEhhaWt1Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3JDbGllbnRIYWlrdTo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvckNsaWVudEhhaWt1OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1p
c3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpjaGVj
a0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudEhhaWt1Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpzaG93U3BlbGxpbmdVSSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c3BlbGxpbmdVSUlzU2hvd2luZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnNldElucHV0TWV0aG9kU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmlzRWRpdGluZyk6CisgICAg
ICAgICogcGxhdGZvcm0vaGFpa3UvRWRpdG9yQ2xpZW50SGFpa3UuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vaGFpa3UvRXZlbnRMb29wSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50TG9vcDo6Y3ljbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0ZpbGVD
aG9vc2VySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpG
aWxlQ2hvb3Nlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6YmFzZW5hbWVGb3JX
aWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvRmlsZVN5c3RlbUhhaWt1LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6aG9tZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6b3BlblRl
bXBvcmFyeUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlVG9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnVubG9hZE1vZHVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlr
dS9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpGcmFtZUxvYWRlckNsaWVudEhhaWt1KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZyYW1lTG9hZGVyRGVzdHJveWVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6Omhhc1dlYlZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6aGFzRnJhbWVWaWV3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6bWFrZURvY3Vt
ZW50Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjptYWtl
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6Zm9yY2VMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6Zm9yY2VMYXlvdXRGb3JOb25IVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OnNldENvcGllc09uU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmRldGFjaGVkRnJvbVBhcmVudDIpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGV0YWNoZWRGcm9tUGFyZW50Myk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkZXRhY2hlZEZyb21QYXJlbnQ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmFzc2lnbklkZW50aWZp
ZXJUb0luaXRpYWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0
Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRSZXNv
dXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dEhhaWt1OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRIYW5kbGVPbmxv
YWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRDYW5jZWxDbGll
bnRSZWRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpk
aXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxs
Q2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0
Y2hEaWRSZWNlaXZlSWNvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhh
aWt1OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkQ29tbWl0TG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERp
ZEZhaWxQcm92aXNpb25hbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZpbmlzaERvY3VtZW50TG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZpbmlzaExvYWQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRG
aXJzdExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpk
aXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaENyZWF0ZVBhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hTaG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9y
TUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbmNl
bFBvbGljeUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRNYWluUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmV2ZXJ0VG9Q
cm92aXNpb25hbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OnNldE1haW5Eb2N1bWVudEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmNsZWFyVW5hcmNoaXZpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnBvc3RQcm9ncmVzc0Vz
dGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEhhaWt1Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRNYWluRnJhbWVEb2N1bWVudFJl
YWR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnN0YXJ0RG93
bmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6d2lsbENo
YW5nZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
ZENoYW5nZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmNvbW1pdHRlZExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6ZmluaXNoZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmZpbmFsU2V0dXBGb3JSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OnVwZGF0ZUdsb2JhbEhpc3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3Mp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlR2xvYmFs
SGlzdG9yeUZvclN0YW5kYXJkTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudEhhaWt1Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yUmVsb2FkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNob3VsZEdvVG9IaXN0b3J5SXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjYW5jZWxsZWRFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpibG9ja2VkRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2Fubm90U2hvd1VSTEVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmludGVycnVw
dEZvclBvbGljeUNoYW5nZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZpbGVEb2VzTm90RXhpc3RFcnJvcik6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNob3VsZEZhbGxC
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldERlZmVy
c0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6d2ls
bFVzZUFyY2hpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
aXNBcmNoaXZlTG9hZFBlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6Y2FuY2VsUGVuZGluZ0FyY2hpdmVMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNsZWFyQXJjaGl2ZWRSZXNvdXJjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuSGFuZGxlUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjYW5TaG93TUlNRVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmVwcmVzZW50YXRpb25F
eGlzdHNGb3JVUkxTY2hlbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6Z2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZnJhbWVMb2FkQ29tcGxldGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNhdmVWaWV3U3RhdGVUb0l0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmVzdG9yZVZpZXdTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwcm92aXNpb25hbExv
YWRTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
ZEZpbmlzaExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
cHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVEb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dHJhbnNpdGlvblRvQ29t
bWl0dGVkRnJvbUNhY2hlZEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuQ2FjaGVQYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNyZWF0ZUZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpyZWRpcmVjdERhdGFUb1BsdWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVKYXZhQXBwbGV0V2lk
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6Om9iamVjdENv
bnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6Om92
ZXJyaWRlTWVkaWFUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZG9jdW1lbnRFbGVtZW50
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9GcmFtZUxvYWRlckNsaWVudEhh
aWt1Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
fkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6c2V0RnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0luc3BlY3Rv
ckNsaWVudEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGll
bnRIYWlrdTo6aW5zcGVjdG9yRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNsaWVudEhhaWt1OjpjcmVhdGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNs
aWVudEhhaWt1Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNsaWVudEhhaWt1OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2xpZW50SGFpa3U6OnNob3dXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2xpZW50SGFpa3U6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNs
aWVudEhhaWt1OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xp
ZW50SGFpa3U6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGll
bnRIYWlrdTo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ2xpZW50SGFpa3U6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDbGllbnRIYWlrdTo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDbGllbnRIYWlrdTo6aW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDbGllbnRIYWlrdTo6cG9wdWxhdGVTZXR0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNsaWVudEhhaWt1OjpzdG9yZVNldHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ2xpZW50SGFpa3U6OnJlbW92ZVNldHRpbmcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2hhaWt1L0luc3BlY3RvckNsaWVudEhhaWt1Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2hhaWt1L0tleWJvYXJkQ29kZXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaGFpa3Uv
TUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgor
ICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFzdGVib2FyZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cGxh
aW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2
ZW50SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZpZXJGb3JI
YWlrdUtleUNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0tleUNvZGVGb3JLZXlFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5
Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRp
c2FtYmlndWF0ZUtleURvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlr
dS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1TY3JvbGxiYXI6OmlzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
U2Nyb2xsYmFyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAg
IChIYWlrdVNjcm9sbEJhcjo6SGFpa3VTY3JvbGxCYXIpOgorICAgICAgICAoSGFpa3VTY3JvbGxC
YXI6OlZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1T
Y3JvbGxiYXIpOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6On5QbGF0Zm9ybVNjcm9sbGJh
cik6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAg
KFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9uKToKKyAgICAgICAgKFBsYXRm
b3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24pOgorICAgICAgICAoUGxhdGZvcm1T
Y3JvbGxiYXI6OndpZHRoKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpoZWlnaHQpOgor
ICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QpOgorICAgICAgICAoUGxhdGZvcm1T
Y3JvbGxiYXI6OnNldEVuYWJsZWQpOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdo
ZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OlBvcHVwTWVudSk6CisgICAgICAg
IChXZWJDb3JlOjpQb3B1cE1lbnU6On5Qb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBNZW51OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6aGlkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBvcHVwTWVudTo6aXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwpOgorICAgICAg
ICAqIHBsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OlJlbmRlclRoZW1lSGFpa3UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6flJlbmRlclRoZW1lSGFpa3UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6c3VwcG9ydHNIb3Zlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVIYWlrdTo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6cGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUhhaWt1OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6
OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6cGFp
bnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjphZGp1c3RNZW51
TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OnBhaW50TWVu
dUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6dGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVIYWlrdTo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUhhaWt1OjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVI
YWlrdTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjp0aGVt
ZUZvclBhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlbkF2YWlsYWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuRGVwdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6c2NyZWVuSXNNb25vY2hyb21lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9TY3JvbGxW
aWV3Q2FudmFzSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdD
YW52YXNIYWlrdTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbFZpZXdDYW52YXNIYWlrdTo6RHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
Q2FudmFzSGFpa3U6Ok1lc3NhZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3Q2FudmFzSGFpa3U6Ok1vdXNlTW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
d0NhbnZhc0hhaWt1OjpNb3VzZURvd24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0Nh
bnZhc0hhaWt1OjpNb3VzZVVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNI
YWlrdTo6RG9TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1
OjpLZXlEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6S2V5
VXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpXaW5kb3dBY3Rp
dmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpGcmFtZVJl
c2l6ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6U2V0U2Ny
b2xsQmFyTWF4Vik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OlNl
dFNjcm9sbEJhck1heEgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1
OjpTZXRTY3JvbGxWaWV3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3SGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQ
cml2YXRlOjpTY3JvbGxWaWV3UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
OjpTY3JvbGxWaWV3UHJpdmF0ZTo6QXR0YWNoZWRUb1dpbmRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6S2V5RG93bik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6S2V5VXApOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlZpc2libGVGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6U2V0Q29udGVudFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OkNv
bnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2
YXRlOjpDb250ZW50V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGU6OkNvbnRlbnRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6U2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0
Zm9ybVZpc2libGVDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpw
bGF0Zm9ybVNldFNjcm9sbGJhck1vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnBsYXRmb3JtU2Nyb2xsYmFyTW9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
cGxhdGZvcm1BZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9y
bVJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0
Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtQ29u
dGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1SZXBh
aW50Q29udGVudFJlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0
Zm9ybVNjcmVlblRvQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxh
dGZvcm1Db250ZW50c1RvU2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBs
YXRmb3JtU2V0Q2FuQmxpdE9uU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnBsYXRmb3JtQ2FuQmxpdE9uU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnBsYXRmb3JtSXNPZmZzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxh
dGZvcm1TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0UGFyZW50V2lk
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEFsbG93c1Njcm9sbGluZyk6
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudTo6U2VhcmNoUG9wdXBNZW51KToK
KyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudTo6c2F2ZVJlY2VudFNlYXJjaGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudTo6ZW5hYmxlZCk6CisgICAgICAgICog
cGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkVGltZXJIYWlrdTo6U2hhcmVkVGltZXJIYWlrdSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRUaW1lckhhaWt1OjpGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
VGltZXJIYWlrdTo6flNoYXJlZFRpbWVySGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
VGltZXJIYWlrdTo6c2V0RmlyZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkVGltZXJI
YWlrdTo6c2V0RmlyZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFp
a3U6OnNldFNob3VsZFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpnZXRTaGFyZWRUaW1lckhhaWt1
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OnN0b3BTaGFyZWRUaW1lcik6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJI
YWlrdS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpzeXN0ZW1CZWVwKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9TeXN0ZW1UaW1lSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmN1
cnJlbnRUaW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCk6
CisgICAgICAgIChXZWJDb3JlOjppbnB1dEVsZW1lbnRBbHRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OnJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRM
YW5ndWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCk6CisgICAgICAgIChXZWJD
b3JlOjpjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzayk6CisgICAgICAgIChX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2spOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ29weSk6CisgICAgICAgIChX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2spOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51
SXRlbVRhZ1N0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnUmVsb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0N1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0
TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdMZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ1NlYXJjaFdlYik6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdMb29r
VXBJbkRpY3Rpb25hcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3Bl
bkxpbmspOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1h
cik6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNw
ZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0JvbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSXRhbGljKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRl
eHRNZW51SXRlbVRhZ1VuZGVybGluZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdPdXRsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1dyaXRp
bmdEaXJlY3Rpb25NZW51KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0Rl
ZmF1bHREaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTGVm
dFRvUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6c2VhcmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQpOgorICAgICAgICAo
V2ViQ29yZTo6c2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OnVua25vd25GaWxlU2l6ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QVhXZWJBcmVh
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBWExpbmtUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFYTGlzdE1hcmtlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QVhJbWFnZU1hcFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhIZWFkaW5nVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjppbWFn
ZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rp
b25NZW51KToKKyAgICAgICAgKFdlYkNvcmU6OkFYQnV0dG9uQWN0aW9uVmVyYik6CisgICAgICAg
IChXZWJDb3JlOjpBWFRleHRGaWVsZEFjdGlvblZlcmIpOgorICAgICAgICAoV2ViQ29yZTo6QVhS
YWRpb0J1dHRvbkFjdGlvblZlcmIpOgorICAgICAgICAoV2ViQ29yZTo6QVhDaGVja2VkQ2hlY2tC
b3hBY3Rpb25WZXJiKToKKyAgICAgICAgKFdlYkNvcmU6OkFYVW5jaGVja2VkQ2hlY2tCb3hBY3Rp
b25WZXJiKToKKyAgICAgICAgKFdlYkNvcmU6OkFYTGlua0FjdGlvblZlcmIpOgorICAgICAgICAo
V2ViQ29yZTo6QVhEZWZpbml0aW9uTGlzdFRlcm1UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFY
RGVmaW5pdGlvbkxpc3REZWZpbml0aW9uVGV4dCk6CisgICAgICAgIChsb2FkUmVzb3VyY2VJbnRv
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OnN1cHBvcnRlZEtleVNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp1c2VySWRsZVRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpLVVJMOjpmaWxlU3lzdGVtUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZTo6bmF0aXZlVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3VwcG9ydGVkS2V5U2l6
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3Uv
VHJhbnNsYXRvckRlY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0
b3JEZWNvZGVyOjpUcmFuc2xhdG9yRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2xh
dG9yRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0
b3JEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNs
YXRvckRlY29kZXI6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1RyYW5zbGF0
b3JEZWNvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRvckRlY29kZXI6
OmdldEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmNwcDog
QWRkZWQuCisgICAgICAgIChXS1Njcm9sbFZpZXc6OldLU2Nyb2xsVmlldyk6CisgICAgICAgIChX
S1Njcm9sbFZpZXc6On5XS1Njcm9sbFZpZXcpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpJbnN0
YW50aWF0ZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OkFyY2hpdmUpOgorICAgICAgICAoV0tT
Y3JvbGxWaWV3OjpBdHRhY2hlZFRvV2luZG93KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6RGV0
YWNoZWRGcm9tV2luZG93KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6QWxsQXR0YWNoZWQpOgor
ICAgICAgICAoV0tTY3JvbGxWaWV3OjpBbGxEZXRhY2hlZCk6CisgICAgICAgIChXS1Njcm9sbFZp
ZXc6OlNjcm9sbEJhcik6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlNjcm9sbEJhck1vZGUpOgor
ICAgICAgICAoV0tTY3JvbGxWaWV3OjpTZXRTY3JvbGxCYXJNb2RlKToKKyAgICAgICAgKFdLU2Ny
b2xsVmlldzo6U2V0VGFyZ2V0KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6VGFyZ2V0KToKKyAg
ICAgICAgKFdLU2Nyb2xsVmlldzo6TWVzc2FnZVJlY2VpdmVkKToKKyAgICAgICAgKFdLU2Nyb2xs
Vmlldzo6TW91c2VEb3duKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TW91c2VVcCk6CisgICAg
ICAgIChXS1Njcm9sbFZpZXc6Ok1vdXNlTW92ZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpG
cmFtZU1vdmVkKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6UmVzaXplVG9QcmVmZXJyZWQpOgor
ICAgICAgICAoV0tTY3JvbGxWaWV3OjpHZXRQcmVmZXJyZWRTaXplKToKKyAgICAgICAgKFdLU2Ny
b2xsVmlldzo6Q2FsY0ZyYW1lKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TW9kaWZ5RmxhZ3Mp
OgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpXaW5kb3dBY3RpdmF0ZWQpOgorICAgICAgICAoV0tT
Y3JvbGxWaWV3OjpNYWtlRm9jdXMpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpSZXNvbHZlU3Bl
Y2lmaWVyKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6R2V0U3VwcG9ydGVkU3VpdGVzKToKKyAg
ICAgICAgKFdLU2Nyb2xsVmlldzo6TWluU2l6ZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlBy
ZWZlcnJlZFNpemUpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpQZXJmb3JtKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZpZXcuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dFByaXZhdGU6OldpZGdldFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UHJpdmF0
ZTo6fldpZGdldFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpXaWRnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojp+V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6ZnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0Rm9jdXMpOgor
ICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
V2lkZ2V0OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6aGlkZSk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldEhhaWt1V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6aGFpa3VXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRQYXJlbnRX
aWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYXJlbnRXaWRnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldElzU2VsZWN0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjp6ZXJvRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlC
aXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpS
R0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZl
cjo6c2V0U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6d2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpoZWlnaHQpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvaGFp
a3UvU3RyaW5nSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6b3BlcmF0b3IgQlN0cmluZyk6CisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJ
RCk6CisKIDIwMDktMDYtMjQgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw7guCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwIGIvV2ViQ29yZS9wYWdl
L2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43NjY3MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL2hhaWt1L0V2
ZW50SGFuZGxlckhhaWt1LmNwcApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKworI2luY2x1ZGUgIkNs
aXBib2FyZEhhaWt1LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZvY3Vz
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIK
KyNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVk
ZSAiUmVuZGVyV2lkZ2V0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1
ZGUgPGludGVyZmFjZS9WaWV3Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBk
b3VibGUgRXZlbnRIYW5kbGVyOjpUZXh0RHJhZ0RlbGF5ID0gMC4wOworCitzdGF0aWMgYm9vbCBp
c0tleWJvYXJkT3B0aW9uVGFiKEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIHJldHVybiBl
dmVudAorICAgICAgICAmJiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2
ZW50CisgICAgICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVz
c0V2ZW50KQorICAgICAgICAmJiBldmVudC0+YWx0S2V5KCkKKyAgICAgICAgJiYgZXZlbnQtPmtl
eUlkZW50aWZpZXIoKSA9PSAiVSswMDAwMDkiOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6aW52
ZXJ0U2Vuc2VPZlRhYnNUb0xpbmtzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAg
IHJldHVybiBpc0tleWJvYXJkT3B0aW9uVGFiKGV2ZW50KTsKK30KKworYm9vbCBFdmVudEhhbmRs
ZXI6OnRhYnNUb0FsbENvbnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAg
IGJvb2wgaGFuZGxpbmdPcHRpb25UYWIgPSBpc0tleWJvYXJkT3B0aW9uVGFiKGV2ZW50KTsKKwor
ICAgIHJldHVybiBoYW5kbGluZ09wdGlvblRhYjsKK30KKwordm9pZCBFdmVudEhhbmRsZXI6OmZv
Y3VzRG9jdW1lbnRWaWV3KCkKK3sKKyAgICBCVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKS0+
aGFpa3VXaWRnZXQoKTsKKyAgICBpZiAodmlldykKKyAgICAgICAgdmlldy0+TWFrZUZvY3VzKCk7
CisKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmIChwYWdlKQorICAg
ICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fZnJhbWUpOwor
fQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQo
Y29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCit7CisgICAgLy8gRmln
dXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRvLgorICAgIFJlbmRlck9iamVj
dCogdGFyZ2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5k
ZXJlcigpIDogMDsKKyAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRn
ZXQoc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4odGFyZ2V0KS0+d2lkZ2V0KCkpOworfQorCiti
b29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVy
V2lkZ2V0KiByZW5kZXJXaWRnZXQpCit7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRv
V2lkZ2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6
cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpl
dmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgY29uc3QKK3sKKyAg
ICAvL25vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEV2ZW50
SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMmIGV2ZW50LCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdp
ZGdldCogd2lkZ2V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorICAgIAorUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJh
Z2dpbmdDbGlwYm9hcmQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbmV3IENsaXBib2FyZEhhaWt1
KENsaXBib2FyZFdyaXRhYmxlLCB0cnVlKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NN
b3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1l
diwgRnJhbWUqIHN1YmZyYW1lKQoreworICAgIHJldHVybiBwYXNzU3ViZnJhbWVFdmVudFRvU3Vi
ZnJhbWUobWV2LCBzdWJmcmFtZSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VN
b3ZlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJh
bWUqIHN1YmZyYW1lLCBIaXRUZXN0UmVzdWx0KiBob3ZlcmVkTm9kZSkKK3sKKyAgICByZXR1cm4g
cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3ViZnJhbWUsIGhvdmVyZWROb2RlKTsK
K30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUo
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCit7Cisg
ICAgcmV0dXJuIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYsIHN1YmZyYW1lKTsKK30K
KwordW5zaWduZWQgRXZlbnRIYW5kbGVyOjphY2Nlc3NLZXlNb2RpZmllcnMoKQoreworICAgIHJl
dHVybiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkFsdEtleTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvaGFpa3UvRnJhbWVIYWlrdS5jcHAg
Yi9XZWJDb3JlL3BhZ2UvaGFpa3UvRnJhbWVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGI5NDgxOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9o
YWlrdS9GcmFtZUhhaWt1LmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpIAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9Db2xvckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JI
YWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0YmEzZAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlr
dS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisKKyNp
bmNsdWRlIDxJbnRlcmZhY2VEZWZzLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb2xv
cjo6Q29sb3IoY29uc3QgcmdiX2NvbG9yJiBjKQorICAgIDogbV9jb2xvcihtYWtlUkdCQShjLnJl
ZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhKSkKK3sKKyAgICBtX3ZhbGlkID0gdHJ1ZTsKK30K
KworQ29sb3I6Om9wZXJhdG9yIHJnYl9jb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2Vf
Y29sb3IocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7Cit9CisKKworQ29sb3IgZm9j
dXNSaW5nQ29sb3IoKQoreworICAgIHJldHVybiBDb2xvcihrZXlib2FyZF9uYXZpZ2F0aW9uX2Nv
bG9yKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5ZDlmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5n
b29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNpbmNsdWRlIDxQb2lu
dC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRQb2ludDo6RmxvYXRQb2ludChj
b25zdCBCUG9pbnQmIHApCisgICAgOiBtX3gocC54KQorICAgICwgbV95KHAueSkKK3sKK30KKwor
RmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQlBvaW50
KG1feCwgbV95KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZjhiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNsdWRlIDxSZWN0
Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25z
dCBCUmVjdCYgcmVjdCkKKyAgICA6IG1fbG9jYXRpb24ocmVjdC5MZWZ0VG9wKCkpCisgICAgICAv
LyBBZGRpbmcgMSBjb3BpZWQgZnJvbSBTeWxsYWJsZSBwb3J0CisgICAgLCBtX3NpemUocmVjdC5X
aWR0aCgpICsgMSwgcmVjdC5IZWlnaHQoKSArIDEpCit7Cit9CisKK0Zsb2F0UmVjdDo6b3BlcmF0
b3IgQlJlY3QoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBzdWJ0cmFjdCAxIGZyb20gaGVpZ2h0
IGFuZCB3aWR0aD8gVGhpcyB3YXMgbm90IGRvbmUgaW4gU3lsbGFibGUgcG9ydAorICAgIHJldHVy
biBCUmVjdChCUG9pbnQoeCgpLCB5KCkpLCBCU2l6ZSh3aWR0aCgpLGhlaWdodCgpKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43NTk5NDk1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgi
CisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisKKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQoreworICAgIC8vIG5vLW9wCit9CisKK2NvbnN0
IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25z
dCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAg
ICBwcmludGYoIkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzXG4iKTsgICAgCisg
ICAgRm9udFBsYXRmb3JtRGF0YSBkYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnQuZmFt
aWx5KCkuZmFtaWx5KCkpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgmZGF0YSk7Cit9
CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCit7CisKKyAg
ICBjb25zdCBCRm9udCogcGNEZWZhdWx0Rm9udCA9IGJlX3BsYWluX2ZvbnQ7CisgICAgaWYgKGZv
bnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkgPT0gRm9udERlc2NyaXB0aW9uOjpNb25vc3Bh
Y2VGYW1pbHkpCisgICAgICAgIHBjRGVmYXVsdEZvbnQgPSBiZV9maXhlZF9mb250OworICAgIGVs
c2UgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA9PSBGb250V2VpZ2h0Qm9sZCkKKyAgICAg
ICAgcGNEZWZhdWx0Rm9udCA9IGJlX2JvbGRfZm9udDsKKyAgICBmb250X2ZhbWlseSBmYW1pbHk7
CisgICAgcGNEZWZhdWx0Rm9udC0+R2V0RmFtaWx5QW5kU3R5bGUoJmZhbWlseSwgTlVMTCk7Cisg
ICAgcHJpbnRmKCJGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQgLT4gJXNcbiIs
IGZhbWlseSk7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBzX0RlZmF1bHRTdHIoZmFtaWx5KTsK
KworICAgIC8vcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKEJG
b250KilwY0RlZmF1bHRGb250KTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShmb250RGVzY3JpcHRpb24sIHNfRGVmYXVsdFN0cik7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEq
IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgRm9u
dFBsYXRmb3JtRGF0YSogcGNEYXRhID0gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0
aW9uLCBmYW1pbHkpOworICAgIGlmIChwY0RhdGEtPmZvbnQoKSA9PSBOVUxMKQorICAgIHsKKyAg
ICAgICAgcHJpbnRmKCJDb3VsZCBub3QgZmluZCBmb250ICVzIVxuIiwgQlN0cmluZyhmYW1pbHku
c3RyaW5nKCkgKS5TdHJpbmcoKSk7CisgICAgICAgIGRlbGV0ZSBwY0RhdGE7CisgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcGNEYXRhOworfQorCit2b2lkIEZvbnRDYWNo
ZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0
b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ZvbnREYXRhSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjYwNTNmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ZvbnREYXRhSGFpa3UuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4gCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
b250RGF0YS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lu
Y2x1ZGUgPGludGVyZmFjZS9Gb250Lmg+CisjaW5jbHVkZSA8c3VwcG9ydC9VVEY4Lmg+IC8vcmVt
b3ZlLgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKworCisvLyBGaXggdGVtcCByb3V0aW5lIHRvIGNo
ZWNrIHRoZSBjb252ZXJzaW9uIHdvcmtzLCBwbGVhc2UgbW92ZSBpdCBBU0FQCQoraW50IGNoYXJf
dW5pY29kZV90b191dGY4KHVuc2lnbmVkIHNob3J0IGdseXBoLCBjaGFyKiBvdXQpIHsKKworCWlu
dCBpPTA7CisJCQorCWlmIChnbHlwaCA8IDB4MDA4MCkJeworCQlvdXRbaSsrXSA9IChjaGFyKWds
eXBoOworCX0gZWxzZQorCWlmIChnbHlwaCA8IDB4MDgwMCkgeyAvL3R3byBieXRlcwkKKyAgICAJ
CisgICAgCW91dFtpKytdID0gMHhjMCB8ICgoIGdseXBoICkgPj4gNiApOworICAgIAlvdXRbaSsr
XSA9IDB4ODAgfCAoKCBnbHlwaCApICYgMHgzRiApOworCX0gZWxzZQorCWlmIChnbHlwaCA+IDB4
MDgwMCkgeyAvLzMgYnl0ZXMJCisJCW91dFtpKytdID0gMHhlMCB8ICgoIGdseXBoICkgPj4gMTIg
KTsKKyAgICAJb3V0W2krK10gPSAweDgwIHwgKCAoKCBnbHlwaCApID4+IDYgKSAmIDB4M0YgKTsK
KyAgICAJb3V0W2krK10gPSAweDgwIHwgKCggZ2x5cGggKSAmIDB4M0YpOyAKKyAgICB9CisgICAg
CisJb3V0W2ldPSdcMCc7CisJcmV0dXJuIGk7Cit9CisJCQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkgY29uc3QKK3sKKwlub3RJbXBsZW1lbnRlZCgpOworCXJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40M2JmNjg5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiAK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPGlu
dGVyZmFjZS9Gb250Lmg+CisjaW5jbHVkZSA8Vmlldy5oPgorI2luY2x1ZGUgPFN0cmluZy5oPgor
CisKK2ludCBjaGFyX3VuaWNvZGVfdG9fdXRmOCh1bnNpZ25lZCBzaG9ydCBnbHlwaCwgY2hhciog
b3V0KTsgLy8gaW1wbGVtZW50ZWQgaW4gRm9udERhdGFIYWlrdS5jcHAKKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2Jvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhU
ZXh0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
Cit7CisgICAgQ29sb3IgY29sb3IgPSBncmFwaGljc0NvbnRleHQtPmZpbGxDb2xvcigpOworICAg
IEJWaWV3KiB2aWV3ID0gKEJWaWV3KilncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OworICAgIEJGb250KiBtX2ZvbnQ9IChCRm9udCopZm9udC0+cGxhdGZvcm1EYXRhKCkuZm9udCgp
OworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
U291cmNlT3Zlcik7CisgICAgdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsJCQorICAgIHZpZXct
PlNldEZvbnQobV9mb250KTsKKworICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGNvbnN0
X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSk7CisgICAg
ZmxvYXQgb2Zmc2V0ID0gcG9pbnQueCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyBpKyspIHsKKyAgICAgICAJY2hhciBvdXRbNF07CisgICAgCWNoYXJfdW5pY29kZV90b191
dGY4KGdseXBoc1tpXSwgb3V0KTsKKworICAgICAgICB2aWV3LT5EcmF3U3RyaW5nKG91dCwgc2l6
ZW9mKG91dCksIEJQb2ludChvZmZzZXQscG9pbnQueSgpKSk7CisgICAgICAgIG9mZnNldCArPSBn
bHlwaEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGkpOworICAgIH0KK30KKwordm9pZCBGb250Ojpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworZmxv
YXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDMuMDsKK30KKworRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9p
bnQmLCBpbnQsIGludCwgaW50KSBjb25zdAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBGbG9hdFJlY3QoKTsgCit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQsIGJvb2wpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0
Zm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWExMTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9y
bURhdGEuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVk
IGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZv
bnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICogCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFfSAor
I2RlZmluZSBGb250UGxhdGZvcm1EYXRhX0gKKworI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisj
aW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisKKy8vIEFkZGluZyBpbnRlcmZhY2UvIHRvIGF2
b2lkIGNvbmZ1c2lvbiB3aXRoIFdlYktpdCBGb250LmgKKyNpbmNsdWRlIDxpbnRlcmZhY2UvRm9u
dC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZvbnRQbGF0Zm9ybURh
dGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpOworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoKTsKKyAgICAg
ICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgQkZvbnQqIGZvbnQpOworICAgICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNp
emUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpOworICAgICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwor
CisgICAgICAgIGJvb2wgaXNGaXhlZFBpdGNoKCk7CisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQgPT0gMDsgfQorCisgICAgICAgIEJG
b250KiBmb250KCkgY29uc3Q7CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CisK
KyAgICBwcml2YXRlOgorICAgICAgICBCRm9udCogbV9mb250OworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDA4ZGQwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwCkBAIC0w
LDAgKzEsMTgwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZv
bnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9uZSBv
dGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNp
bW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKiAKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250
UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRl
ICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVk
ZSA8Rm9udC5oPgorI2luY2x1ZGUgPHN1cHBvcnQvU3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKCkKKyAgICA6IG1f
Zm9udCgwKQoreworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICA6IG1fZm9udCgwKQoreworfQorCitGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYp
Cit7CisgICAgaWYgKGYubV9mb250KQorICAgIHsKKyAgICAgICAgbV9mb250ID0gbmV3IEJGb250
KGYubV9mb250KTsKKyAgICB9Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5TmFtZSkKKyAgICA6IG1fZm9udCgwKQoreworICAgIGJvb2wgYkZvdW5kID0g
ZmFsc2U7CisgICAgYm9vbCBiSXRhbGljID0gZm9udERlc2NyaXB0aW9uLml0YWxpYygpOworICAg
IGJvb2wgYkJvbGQgPSBmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPT0gRm9udFdlaWdodEJvbGQ7
CisgICAgZm9udF9mYW1pbHkJZmFtOworICAgIC8vIFdlIHNob3VsZCBmaW5kIHRoZSBzcGVjaWZp
ZWQgZm9udC4uCisKKyAgICBwcmludGYoIlxuXG4qKiogU2VhcmNoaW5nIGZvcjogJXMgaXRhbGlj
OiVkICBib2xkOiVkXG4iLEJTdHJpbmcoZmFtaWx5TmFtZS5zdHJpbmcoKSkuU3RyaW5nKCksYkl0
YWxpYyxiQm9sZCk7CisKKyAgICBmb3IoaW50IGk9MDtpPGNvdW50X2ZvbnRfZmFtaWxpZXMoKTtp
KyspIHsKKworICAgICAgICBnZXRfZm9udF9mYW1pbHkoaSwgJmZhbSwgTlVMTCk7CisgICAgICAg
IGlmKEJTdHJpbmcoZmFtaWx5TmFtZS5zdHJpbmcoKSkuQ29tcGFyZShmYW0pID09IDApeworICAg
ICAgICAgICAgbV9mb250ID0gbmV3IEJGb250KCk7CisgICAgICAgICAgICBtX2ZvbnQtPlNldEZh
bWlseUFuZFN0eWxlKGZhbSwgTlVMTCk7IC8vIEp1c3QgaW4gY2FzZSB3ZSBkb24ndCBmaW5kIGEg
c3R5bGUuLgorICAgICAgICAgICAgbV9mb250LT5TZXRTaXplKGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFNpemUoKSk7CisKKyAgICAgICAgICAgIGJGb3VuZD10cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisJCisgICAgaWYgKGJGb3VuZCkgeyAvLyBOb3cgc2VhcmNo
IGZvciBzdHlsZS4KKworICAgICAgICBpbnQzMiBudW1TdHlsZXMgPSBjb3VudF9mb250X3N0eWxl
cyhmYW0pOworICAgICAgICBmb250X3N0eWxlIHN0eWxlIDsKKyAgICAgICAgdWludDMyIGZsYWdz
IDsKKyAgICAgICAgYkZvdW5kID0gZmFsc2U7CQkJCisKKyAgICAgICAgZm9yICggaW50IGkgPSAw
OyBpIDwgbnVtU3R5bGVzOyBpKysgKSB7CisgICAgICAgICAgICBpZiAoIGdldF9mb250X3N0eWxl
KGZhbSwgaSwgJnN0eWxlLCAmZmxhZ3MpID09IEJfT0spIHsKKworICAgICAgICAgICAgICAgIC8v
IFRoaXMgY29tcGFyaXNvbnMgaXMgdGFrZW4gZnJvbSBzeWxsYWJsZToKKyAgICAgICAgICAgICAg
ICBpZiggKCBiSXRhbGljICYmIGJCb2xkICkgJiYgICggIXN0cmNtcCggc3R5bGUsICJCb2xkSXRh
bGljIiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
IXN0cmNtcCggc3R5bGUsICJCb2xkIE9ibGlxdWUiICkgKSApCisgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgIGJGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKCAoIGJJdGFs
aWMgJiYgIWJCb2xkICkgJiYgKCAhc3RyY21wKCBzdHlsZSwgIkl0YWxpYyIgKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFzdHJjbXAoIHN0eWxlLCAi
T2JsaXF1ZSIgKSApICkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
YkZvdW5kID0gdHJ1ZTsJCQkJCisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKCAoICFiSXRhbGljICYmIGJCb2xkICkgJiYg
KCAhc3RyY21wKCBzdHlsZSwgIkJvbGQiICkgKSApCisgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgIGJGb3VuZCA9IHRydWU7CQkJCQorICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiggKCAhYkl0YWxp
YyAmJiAhYkJvbGQgKSAmJiAoICFzdHJjbXAoIHN0eWxlLCAiUm9tYSIgKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhc3RyY21wKCBzdHlsZSwgIkJv
b2siICkgfHwgIXN0cmNtcCggc3R5bGUsICJDb25kZW5zZWQiICkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXN0cmNtcCggc3R5bGUsICJSZWd1bGFy
IiApIHx8ICFzdHJjbXAoIHN0eWxlLCAiTWVkaXVtIiApICkgKQorICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICBiRm91bmQgPSB0cnVlOwkJCQkKKyAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICB9CQkJCQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYoYkZvdW5kKSAvLyBXZSBhbHNvIGZvdW5kIGEgc3R5bGUuCisg
ICAgICAgICAgICBtX2ZvbnQtPlNldEZhbWlseUFuZFN0eWxlKGZhbSwgc3R5bGUpOworICAgIH0K
K30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgQkZvbnQqIGZvbnQpCit7CisgICAgbV9mb250ID0gZm9u
dDsKKyAgICBtX2ZvbnQtPlNldFNpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsK
K30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgaXRhbGljKQoreworICAgIG1fZm9udC0+U2V0U2l6ZShzaXplKTsKKworICAg
IGlmIChib2xkICYmIGl0YWxpYykKKyAgICAgICAgbV9mb250LT5TZXRGYWNlKEJfQk9MRF9GQUNF
IHwgQl9JVEFMSUNfRkFDRSk7CisgICAgZWxzZSBpZiAoYm9sZCkKKyAgICAgICAgbV9mb250LT5T
ZXRGYWNlKEJfQk9MRF9GQUNFKTsKKyAgICBlbHNlIGlmIChpdGFsaWMpCisgICAgICAgIG1fZm9u
dC0+U2V0RmFjZShCX0lUQUxJQ19GQUNFKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQ
bGF0Zm9ybURhdGEoKQoreworICAgIGRlbGV0ZSBtX2ZvbnQ7Cit9CisKK2Jvb2wgRm9udFBsYXRm
b3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKK3sKKyAgICBpZiAobV9mb250KQorICAgICAgICByZXR1
cm4gbV9mb250LT5TcGFjaW5nKCkgPT0gQl9GSVhFRF9TUEFDSU5HOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitCRm9udCogRm9udFBsYXRmb3JtRGF0YTo6Zm9udCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZm9udDsKK30KKwordW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNv
bnN0Cit7CisgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgKHVpbnRwdHJfdClmb250KCkg
fTsKKyAgICB1bnNpZ25lZCBuUmVzdWx0ID0gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRl
cnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9m
KFVDaGFyKSk7CisgICAgcmV0dXJuIG5SZXN1bHQ7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0
YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAg
ICByZXR1cm4gKG1fZm9udCA9PSBvdGhlci5tX2ZvbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5
cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjg1NDZiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNs
dWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEpCit7CisgICAgYm9vbCBpc1V0ZjE2ID0gYnVmZmVyTGVuZ3RoICE9IEdseXBo
UGFnZTo6c2l6ZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNp
emU7IGkrKykgeworICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKworICAgICAgICBpZihpc1V0
ZjE2KSB7CisgICAgICAgICAgICBVQ2hhciBsZWFkID0gY2hhcmFjdGVyQnVmZmVyW2kgKiAyXTsK
KyAgICAgICAgICAgIFVDaGFyIHRyYWlsID0gY2hhcmFjdGVyQnVmZmVyW2kgKiAyICsgMV07Cisg
ICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2hhcmFjdGVyID0gY2hhcmFjdGVyQnVm
ZmVyW2ldOworICAgICAgICB9CisKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgY2hh
cmFjdGVyLCBmb250RGF0YSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvR3JhZGllbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NDY5YTE3ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvR3JhZGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+ICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24u
bWF4aW1lQHRoZW9sbGl2aWVycy5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHcmFkaWVudC5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR3JhZGll
bnQ6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxh
dGZvcm1HcmFkaWVudCBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTU4YWExCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKQEAg
LTAsMCArMSw1NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29k
IDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
Q1N0cmluZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJQ
ZW4uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEdyYXBoaWNzRGVmcy5oPgorCisjaW5jbHVkZSA8
Vmlldy5oPgorI2luY2x1ZGUgPFdpbmRvdy5oPgorI2luY2x1ZGUgPFJlZ2lvbi5oPgorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Cit7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKEJWaWV3KiB2
aWV3KTsKKyAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CisKKyAgICBCVmll
dyogdmlldzsKK307CisKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKEJWaWV3KiBwX3ZpZXcpCit7CisgICAgdmlldyA9IHBfdmll
dzsKK30KKworR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRl
eHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbW1vbihjcmVh
dGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCisgICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZShjb250ZXh0KSkKK3sKKyAgICBzZXRQYWludGluZ0Rpc2FibGVk
KCFjb250ZXh0KTsKK30KKworR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3sK
KyAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CisgICAgZGVsZXRl
IG1fZGF0YTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT52aWV3OworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQoreworICAgIG1fZGF0
YS0+dmlldy0+UHVzaFN0YXRlKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3Jl
UGxhdGZvcm1TdGF0ZSgpCit7CisgICAgbV9kYXRhLT52aWV3LT5Qb3BTdGF0ZSgpOworfQorCisv
LyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3LT5G
aWxsUmVjdChyKTsKKyAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAg
bV9kYXRhLT52aWV3LT5TdHJva2VSZWN0KHIsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisK
Ky8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQyKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2RhdGEtPnZpZXctPlN0cm9rZUxpbmUocG9pbnQxLCBwb2ludDIsIGdldEhhaWt1U3Ryb2tl
U3R5bGUoKSk7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBs
aXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdF
bGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3LT5GaWxsRWxsaXBzZShyZWN0
KTsKKyAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAgbV9kYXRhLT52
aWV3LT5TdHJva2VFbGxpcHNlKHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0
YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3LT5TdHJva2VBcmMocmVjdCwgc3Rh
cnRBbmdsZSwgYW5nbGVTcGFuLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRz
LCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJQb2ludCBi
UG9pbnRzW25wb2ludHNdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnBvaW50czsgaSsr
KQorICAgICAgICBiUG9pbnRzW2ldID0gcG9pbnRzW2ldOworCisgICAgbV9kYXRhLT52aWV3LT5G
aWxsUG9seWdvbihiUG9pbnRzLCBucG9pbnRzKTsKKyAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBO
b1N0cm9rZSkKKyAgICAgICAgLy8gU3Ryb2tlIHdpdGggbG93IGNvbG9yCisgICAgICAgIG1fZGF0
YS0+dmlldy0+U3Ryb2tlUG9seWdvbihiUG9pbnRzLCBucG9pbnRzLCB0cnVlLCBnZXRIYWlrdVN0
cm9rZVN0eWxlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZ2JfY29sb3Igb2xkQ29sb3IgPSBtX2Rh
dGEtPnZpZXctPkhpZ2hDb2xvcigpOworICAgIG1fZGF0YS0+dmlldy0+U2V0SGlnaENvbG9yKGMp
OworICAgIG1fZGF0YS0+dmlldy0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9kYXRhLT52aWV3LT5T
ZXRIaWdoQ29sb3Iob2xkQ29sb3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVk
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJ
bnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6
ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpIHx8ICFjb2xvci5hbHBoYSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIC8vIEZJWE1FOiBBIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBjb3Vs
ZCBqdXN0IHVzZSBGaWxsUm91bmRSZWN0IGlmIGFsbCAKKyAgICAvLyB0aGUgc2l6ZXMgYXJlIHRo
ZSBzYW1lLCBvciBldmVuIGlmIHRoZXkgYXJlIG5vdC4gT3RoZXJ3aXNlIHNldmVyYWwKKyAgICAv
LyBGaWxsUmVjdCBhbmQgRmlsbEFyYyBjYWxscyBhcmUgbmVlZGVkLgorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFBhdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEJSZWdpb24gcmVnaW9uKHJlY3QpOworICAgIC8vIEZJWE1F
OiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgLy8gc3lsbGFibGUgYWRkczoKKyAgICAvLyBjUmVjdCAr
PSBtX2RhdGEtPnAoKS0+R2V0U2Nyb2xsT2Zmc2V0KCk7IHRvIHRoZSByZWN0IGJlZm9yZQorICAg
IC8vIGNyZWF0aW4gdGhlIHJlZ2lvbi4KKyAgICBtX2RhdGEtPnZpZXctPkNvbnN0cmFpbkNsaXBw
aW5nUmVnaW9uKCZyZWdpb24pOworfQorCit2b2lkIHNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVu
Y3Rpb24odm9pZCAoKikoKSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1
c1JpbmcoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMgPSBm
b2N1c1JpbmdSZWN0cygpOworICAgIHVuc2lnbmVkIHJlY3RDb3VudCA9IHJlY3RzLnNpemUoKTsK
KworICAgIC8vIEZJWE1FOiBtYXliZSB3ZSBzaG91bGQgaW1wbGVtZW50IHRoaXMgd2l0aCBCU2hh
cGU/CisKKyAgICBpZiAocmVjdHMuc2l6ZSgpID4gMSkKKyAgICB7CisgICAgICAgIEJSZWdpb24J
cmVnaW9uOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQorICAg
ICAgICAgICAgcmVnaW9uLkluY2x1ZGUoQlJlY3QocmVjdHNbaV0pKTsKKworICAgICAgICBtX2Rh
dGEtPnZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgCQltX2RhdGEtPnZpZXctPlN0cm9rZVJl
Y3QocmVnaW9uLkZyYW1lKCksQl9NSVhFRF9DT0xPUlMpOworICAgIH0KK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQg
d2lkdGgsIGJvb2wgcHJpbnRpbmcpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBJbnRTaXpl
KHdpZHRoLCAwKTsKKyAgICBkcmF3TGluZShvcmlnaW4sIGVuZFBvaW50KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3Qg
SW50UG9pbnQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHdpZHRoLCBib29sIGdyYW1tYXIpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIGZyZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZy
ZWN0OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByLCBmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmbG9hdCBvbGRTaXplID0gbV9kYXRhLT52aWV3LT5QZW5TaXpl
KCk7CisgICAgbV9kYXRhLT52aWV3LT5TZXRQZW5TaXplKHdpZHRoKTsKKyAgICBtX2RhdGEtPnZp
ZXctPlN0cm9rZVJlY3QociwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBtX2RhdGEtPnZp
ZXctPlNldFBlblNpemUob2xkU2l6ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lQ2FwKExpbmVDYXAgbGMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FwX21vZGUgbW9kZSA9IEJfQlVUVF9DQVA7CisgICAgc3dpdGNo
IChsYykgeworICAgIGNhc2UgUm91bmRDYXA6CisgICAgICAgIG1vZGUgPSBCX1JPVU5EX0NBUDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgIG1vZGUgPSBCX1NR
VUFSRV9DQVA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQnV0dENhcDoKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2RhdGEtPnZpZXctPlNldExpbmVNb2Rl
KG1vZGUsIG1fZGF0YS0+dmlldy0+TGluZUpvaW5Nb2RlKCksIG1fZGF0YS0+dmlldy0+TGluZU1p
dGVyTGltaXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5l
Sm9pbiBsaikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBqb2luX21vZGUgbW9kZSA9IEJfTUlURVJfSk9JTjsKKyAgICBzd2l0Y2ggKGxqKSB7
CisgICAgY2FzZSBSb3VuZEpvaW46CisgICAgICAgIG1vZGUgPSBCX1JPVU5EX0pPSU47CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQmV2ZWxKb2luOgorICAgICAgICBtb2RlID0gQl9CRVZFTF9K
T0lOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1pdGVySm9pbjoKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2RhdGEtPnZpZXctPlNldExpbmVNb2RlKG1f
ZGF0YS0+dmlldy0+TGluZUNhcE1vZGUoKSwgbW9kZSwgbV9kYXRhLT52aWV3LT5MaW5lTWl0ZXJM
aW1pdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQg
bGltaXQpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9kYXRhLT52aWV3LT5TZXRMaW5lTW9kZShtX2RhdGEtPnZpZXctPkxpbmVDYXBNb2Rl
KCksIG1fZGF0YS0+dmlldy0+TGluZUpvaW5Nb2RlKCksIGxpbWl0KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvciBvcCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBkcmF3aW5nX21vZGUgbW9kZSA9IEJfT1BfQ09QWTsKKyAgICBzd2l0Y2ggKG9w
KSB7CisgICAgY2FzZSBDb21wb3NpdGVDbGVhcjoKKyAgICBjYXNlIENvbXBvc2l0ZUNvcHk6Cisg
ICAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCBhYm92ZQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IENvbXBvc2l0ZVNvdXJjZU92ZXI6CisgICAgICAgIG1vZGUgPSBCX09QX09WRVI7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0Ojpz
ZXRDb21wb3NpdGVPcGVyYXRpb246IFVuc3VwcG9ydGVkIGNvbXBvc2l0ZSBvcGVyYXRpb24gJXNc
biIsCisgICAgICAgICAgICBjb21wb3NpdGVPcGVyYXRvck5hbWUob3ApLnV0ZjgoKS5kYXRhKCkp
OworICAgIH0KKyAgICBtX2RhdGEtPnZpZXctPlNldERyYXdpbmdNb2RlKG1vZGUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+dmlldy0+
Q29uc3RyYWluQ2xpcHBpbmdSZWdpb24ocGF0aC5wbGF0Zm9ybVBhdGgoKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0
Cit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitJbnRQb2ludCBHcmFwaGljc0NvbnRleHQ6Om9y
aWdpbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50UG9pbnQoMCwg
MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91
bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRoaWNrbmVzcykKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiBsaW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnQmIGFGb250KQoreworICAgIG1fZGF0YS0+dmlldy0+
U2V0Rm9udChhRm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5mb250KCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9kYXRhLT52aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworfQorCitwYXR0ZXJu
CUdyYXBoaWNzQ29udGV4dDo6Z2V0SGFpa3VTdHJva2VTdHlsZSgpeworICAgIHN3aXRjaCAoc3Ry
b2tlU3R5bGUoKSkgeworICAgIGNhc2UgU29saWRTdHJva2U6CisgICAgICAgIHJldHVybiBCX1NP
TElEX0hJR0g7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG90dGVkU3Ryb2tlOgorICAgICAg
ICByZXR1cm4gQl9NSVhFRF9DT0xPUlM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGFzaGVk
U3Ryb2tlOgorICAgICAgICAvLyBGSVhNRTogdXNlIGEgYmV0dGVyIGRhc2hlZCBzdHJva2UhCisg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7IAorICAgICAgICByZXR1cm4gQl9NSVhFRF9DT0xPUlM7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBCX1NPTElEX0xP
VzsKKyAgICAgICAgYnJlYWs7CisJfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VTdHlsZShjb25zdCBTdHJva2VTdHlsZSYgc3Ryb2tlU3R5bGUpCit7ICAgCisJ
Ly8gRklYTUUgc2VlIGdldEhhaWt1U3Ryb2tlU3R5bGUuCisJCisgICAgLy9pZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgIC8vICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBw
cm9iYWJseSBiZSBpbXBsZW1lbnRlZCB1c2luZyBwYXR0ZXJucy4gVGhlIHN0cm9rZVN0eWxlczoK
KyAgICAvLyBlbnVtIFN0cm9rZVN0eWxlIHsKKyAgICAvLyAgICAgTm9TdHJva2UsCisgICAgLy8g
ICAgIFNvbGlkU3Ryb2tlLAorICAgIC8vICAgICBEb3R0ZWRTdHJva2UsCisgICAgLy8gICAgIERh
c2hlZFN0cm9rZQorICAgIC8vIH07CisgICAgLy9ub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tu
ZXNzKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fZGF0YS0+dmlldy0+U2V0UGVuU2l6ZSh0aGlja25lc3MpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0
YS0+dmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsZWFyUGxhdGZvcm1TaGFkb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhJbnRTaXplIGNvbnN0JixpbnQs
Q29sb3IgY29uc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JY29uSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFp
a3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTZkYmUKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5j
cHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJY29uLmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitJY29uOjpJY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitJ
Y29uOjp+SWNvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyAgICAKK1Bhc3NSZWZQ
dHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBQYXNzUmVmUHRyPEljb24+KDAp
OworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIFBhc3NSZWZQdHI8SWNvbj4oMCk7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42YTQ5YTBkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAq
IAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlQnVmZmVyRGF0
YV9oCisjZGVmaW5lIEltYWdlQnVmZmVyRGF0YV9oCisKKyNpbmNsdWRlICJPd25QdHIuaCIKKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBJbnRTaXplOworCisgICAgY2xhc3Mg
SW1hZ2VCdWZmZXJEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEltYWdlQnVmZmVyRGF0YShj
b25zdCBJbnRTaXplJik7CisgICAgfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmICAvLyBJbWFnZUJ1ZmZlckRhdGFfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40OGUzZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWls
LmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCit7Cit9
CisKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgYm9vbCBncmF5U2Nh
bGUsIGJvb2wmIHN1Y2Nlc3MpCisgICAgOiBtX2RhdGEoSW50U2l6ZSgpKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgc3VjY2VzcyA9IGZhbHNlOworfQorCitJbWFnZUJ1ZmZlcjo6fklt
YWdlQnVmZmVyKCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4
dCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
UGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJl
Y3QmLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3Ry
aW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJikgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworSW1hZ2UqIEltYWdl
QnVmZmVyOjppbWFnZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42ZWQxNGVlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEFw
cGxpY2F0aW9uLmg+CisjaW5jbHVkZSA8Qml0bWFwLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisj
aW5jbHVkZSA8bWF0aC5oPgorCisKKy8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZy
b20gV2ViS2l0CitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIq
KTsKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhcihib29s
IGNsZWFyTWV0YWRhdGEpCit7CisgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisgICAgICAgIG1faGF2
ZU1ldGFkYXRhID0gZmFsc2U7CisKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICAvLyBGSVhN
RTogTm90IHN1cmUgd2h5IGJlX2FwcCBpcyBjaGVja2VkICh0aGlzIHdhcyBjb3BpZWQgZnJvbSBT
eWxsYWJsZSkKKyAgICAgICAgaWYgKGJlX2FwcCkKKyAgICAgICAgICAgIGRlbGV0ZSBtX2ZyYW1l
OworICAgICAgICBtX2ZyYW1lID0gMDsKKyAgICAgICAgbV9kdXJhdGlvbiA9IDAuMGY7CisgICAg
ICAgIG1faGFzQWxwaGEgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorLy8gSW1hZ2UgQ2xhc3MKKy8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXVEY6OlBhc3NSZWZQdHI8SW1hZ2U+IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIFZlY3Rv
cjxjaGFyPiBhcnIgPSBsb2FkUmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7CisgICAgV1RGOjpQYXNz
UmVmUHRyPEJpdG1hcEltYWdlPiBpbWcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoYXJyLmRhdGEo
KSwgYXJyLnNpemUoKSk7CisgICAgaW1nLT5zZXREYXRhKGJ1ZmZlciwgdHJ1ZSk7CisgICAgcmV0
dXJuIGltZzsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgpCit7Cit9
CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQoreworfQorCisv
LyBEcmF3aW5nIFJvdXRpbmVzCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgQkJpdG1h
cCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2Up
IC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKKyAgICAgICAg
ZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdCwgc29saWRDb2xvcigpLCBvcCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBJbnRTaXplIHNlbGZTaXplID0gc2l6ZSgpOworCisgICAg
Y3R4dC0+c2F2ZSgpOworCisgICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisg
ICAgLy8gRklYTUU6IHdlIHNob3VsZCBzdXBwb3J0IGFsbCB0aGUgY29tcG9zaXRlIG1vZGVzIDoK
KyAgICAvLwljdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgQlZpZXcqIHZp
ZXcgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIEJSZWN0IHNyY1JlY3Qoc3JjKTsK
KyAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUgc2l0ZSBhdAorICAgIC8vIGh0dHA6Ly93d3cubWV5
ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29tcGxleHNwaXJhbC9kZW1vLmh0bWwKKyAgICB2aWV3
LT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsgICAgCisgICAgdmlldy0+RHJhd0JpdG1hcChp
bWFnZSwgc3JjUmVjdCAmIGltYWdlLT5Cb3VuZHMoKSwgZHN0KTsKKworICAgIGN0eHQtPnJlc3Rv
cmUoKTsKKworICAgIHN0YXJ0QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3sKKwkvLyBGSVhNRTogZmluaXNoIHRoaXMg
dG8gc3VwcG9ydCBhbHNvIHBoYXNlZCBwb3NpdGlvbiAoc3JjUG9pbnQpCisKKyAgICBCQml0bWFw
KiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkg
Ly8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAg
IHJldHVybjsKKworICAgIGZsb2F0IGN1cnJlbnRXID0gMDsKKyAgICBmbG9hdCBjdXJyZW50SCA9
IDA7CisKKyAgICBjdHh0LT5zYXZlKCk7CisKKyAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
U2V0RHJhd2luZ01vZGUoQl9PUF9BTFBIQSk7CisKKyAgICBjdHh0LT5jbGlwKEludFJlY3QoZHN0
UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkp
KTsKKworICAgIHdoaWxlIChjdXJyZW50VyA8IGRzdFJlY3Qud2lkdGgoKSkgeworICAgICAgICB3
aGlsZSAoY3VycmVudEggPCBkc3RSZWN0LmhlaWdodCgpKSB7CisgICAgICAgICAgICBjdHh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+RHJhd0JpdG1hcChpbWFnZSwgQlBvaW50KGRzdFJlY3QueCgpICsg
Y3VycmVudFcsIGRzdFJlY3QueSgpICsgY3VycmVudEgpKTsKKyAgICAgICAgICAgIGN1cnJlbnRI
ICs9IHRpbGVSZWN0LmhlaWdodCgpOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRXICs9IHRp
bGVSZWN0LndpZHRoKCk7CisgICAgICAgIGN1cnJlbnRIID0gMDsKKyAgICB9CisgICAgY3R4dC0+
cmVzdG9yZSgpOworCisgICAgc3RhcnRBbmltYXRpb24oKTsKK30KKwordm9pZCBCaXRtYXBJbWFn
ZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKK3sKKyAgICAvLyBGSVhNRTogSXQncyBlYXN5IHRvIGlt
cGxlbWVudCB0aGlzIG9wdGltaXphdGlvbi4KKyAgICAvLyBKdXN0IG5lZWQgdG8gY2hlY2sgdGhl
IFJHQkEzMiBidWZmZXIgdG8gc2VlIGlmIGl0IGlzIDF4MS4gICAgCisgICAgbV9pc1NvbGlkQ29s
b3IgPSBmYWxzZTsKK30KKworQkJpdG1hcCogQml0bWFwSW1hZ2U6OmdldEJpdG1hcCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Qml0bWFwSW1hZ2UqPih0aGlzKS0+ZnJhbWVBdElu
ZGV4KDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NmUxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCkBAIC0wLDAg
KzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxs
ZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6
YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2
ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pICAg
PGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICogCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiVHJhbnNsYXRvckRlY29kZXIuaCIKKyNpbmNsdWRlICJQTkdJbWFnZURlY29kZXIu
aCIKKy8vICNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiQk1QSW1hZ2VE
ZWNvZGVyLmgiCisjaW5jbHVkZSAiSUNPSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiWEJNSW1h
Z2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEJp
dG1hcC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHVzZSB0aGUgSGFpa3UgdHJhbnNsYXRvciBBUEkKK0ltYWdlRGVjb2RlciogY3JlYXRlRGVjb2Rl
cihjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0
IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcgd2l0
aC4KKyAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXplKCk7CisgICAgaWYgKGxlbmd0aCA8IDQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogdUNvbnRlbnRzID0g
KGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBkYXRhLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBjb250
ZW50cyA9IGRhdGEuZGF0YSgpOworCisgICAgLy8gR0lGcyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5
KS4KKyAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAwKQorICAgICAgICBy
ZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcigpOworCisgICAgLy8gVGVzdCBmb3IgUE5HLgorICAg
IGlmICh1Q29udGVudHNbMF0gPT0gMHg4OSAmJgorICAgICAgICB1Q29udGVudHNbMV0gPT0gMHg1
MCAmJgorICAgICAgICB1Q29udGVudHNbMl0gPT0gMHg0RSAmJgorICAgICAgICB1Q29udGVudHNb
M10gPT0gMHg0NykKKyAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIoKTsKKworICAg
IC8vIEpQRUcKKyAgICAvLyBpZiAodUNvbnRlbnRzWzBdID09IDB4RkYgJiYKKyAgICAvLyAgICAg
dUNvbnRlbnRzWzFdID09IDB4RDggJiYKKyAgICAvLyAgICAgdUNvbnRlbnRzWzJdID09IDB4RkYp
CisgICAgLy8gICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVjb2RlcigpOworCisgICAgLy8gQk1Q
CisgICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJCTSIsIDIpID09IDApCisgICAgICAgIHJldHVy
biBuZXcgQk1QSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRo
IGEgMi1ieXRlIDAgZm9sbG93ZWQgYnkgYSAyLWJ5dGUgMS4KKyAgICAvLyBDVVJzIGJlZ2luIHdp
dGggMi1ieXRlIDAgZm9sbG93ZWQgYnkgMi1ieXRlIDIuCisgICAgLy8gaWYgKCFtZW1jbXAoY29u
dGVudHMsICJcMDAwXDAwMFwwMDFcMDAwIiwgNCkgfHwKKyAgICAvLyAgICAgIW1lbWNtcChjb250
ZW50cywgIlwwMDBcMDAwXDAwMlwwMDAiLCA0KSkKKyAgICAvLyAgICAgcmV0dXJuIG5ldyBJQ09J
bWFnZURlY29kZXIoKTsKKworICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCisg
ICAgaWYgKGxlbmd0aCA+PSA4ICYmIHN0cm5jbXAoY29udGVudHMsICIjZGVmaW5lICIsIDgpID09
IDApCisgICAgICAgIHJldHVybiBuZXcgWEJNSW1hZ2VEZWNvZGVyKCk7CisKKyAgICBwcmludGYo
IkludmFsaWQgaW1hZ2UhXG4iICk7CisgICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0
IHRoZSBoZWNrIHRoaXMgaXMuCisgICAgcmV0dXJuIDA7Cit9CisKK0ltYWdlU291cmNlOjpJbWFn
ZVNvdXJjZSgpCisgICAgOiBtX2RlY29kZXIoMCkKK3sKK30KKworSW1hZ2VTb3VyY2U6On5JbWFn
ZVNvdXJjZSgpCit7CisgICAgY2xlYXIodHJ1ZSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNs
ZWFyKGJvb2wgZGVzdHJveUFsbCwgc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQor
eworICAgIGRlbGV0ZSBtX2RlY29kZXI7CisgICAgbV9kZWNvZGVyID0gMDsKK30KKworYm9vbCBJ
bWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXI7
Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5n
IHRoZSBieXRlcy4KKyAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5k
IGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdp
bi4KKyAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1p
bmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKKyAgICAvLyBtYWRl
LgorICAgIGlmKCFtX2RlY29kZXIpCisgICAgCW1fZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoZGF0
YS0+YnVmZmVyKCkpOworCisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2RlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBJ
bWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxh
YmxlKCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoKSBjb25zdAoreworICAgIGlm
ICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIG1f
ZGVjb2Rlci0+c2l6ZSgpOworfQorCitJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdElu
ZGV4KHNpemVfdCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZSgpOworfQorCitpbnQgSW1hZ2VT
b3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAg
IHJldHVybiBjQW5pbWF0aW9uTm9uZTsKKworICAgIHJldHVybiBtX2RlY29kZXItPnJlcGV0aXRp
b25Db3VudCgpOworfQorCitTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30K
Kworc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOworfQorCitOYXRpdmVJbWFn
ZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAg
ICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSR0JBMzJCdWZmZXIq
IGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAo
IWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdl
KCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90
IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
KGluZGV4KTsKKyAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMy
QnVmZmVyOjpGcmFtZUNvbXBsZXRlOworfQorCitmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJh
dGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVz
KCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBidWZmZXItPmR1cmF0aW9uKCkgLyAxMDAwLjBmOworfQorCitib29sIEltYWdlU291
cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2Rl
Y29kZXIgfHwgIW1fZGVjb2Rlci0+c3VwcG9ydHNBbHBoYSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJB
dEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJH
QkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIGJ1ZmZlci0+aGFzQWxwaGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTU1YTRiCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcApA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29v
ZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKworI2luY2x1
ZGUgPFBvaW50Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRQb2ludDo6SW50UG9p
bnQoY29uc3QgQlBvaW50JiBwKQorICAgIDogbV94KHN0YXRpY19jYXN0PGludD4ocC54KSkKKyAg
ICAsIG1feShzdGF0aWNfY2FzdDxpbnQ+KHAueSkpCit7Cit9CisKK0ludFBvaW50OjpvcGVyYXRv
ciBCUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW50UmVjdEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41NzRhZGJiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbnRSZWN0SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisKKyNpbmNsdWRlIDxSZWN0Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEJSZWN0JiByKQorICAgIDogbV9sb2NhdGlvbihy
LkxlZnRUb3AoKSkKKyAgICAsIG1fc2l6ZShyLkludGVnZXJXaWR0aCgpICsgMSwgci5JbnRlZ2Vy
SGVpZ2h0KCkgKyAxKQoreworfQorCitJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IHN1YnRyYWN0IDEgZnJvbSBoZWlnaHQgYW5kIHdpZHRoPworICAgIHJl
dHVybiBCUmVjdChCUG9pbnQoeCgpLCB5KCkpLCBCU2l6ZSh3aWR0aCgpLGhlaWdodCgpKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJhZjkxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKworI2luY2x1ZGUgPFNpemUuaD4KKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ludFNpemU6OkludFNpemUoY29uc3QgQlNpemUmIHMpCisgICAgOiBtX3dpZHRo
KHMuSW50ZWdlcldpZHRoKCkpCisgICAgLCBtX2hlaWdodChzLkludGVnZXJIZWlnaHQoKSkKK3sK
K30KKworSW50U2l6ZTo6b3BlcmF0b3IgQlNpemUoKSBjb25zdAoreworICAgIHJldHVybiBCU2l6
ZSh3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMjc4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKQEAgLTAsMCArMSwxNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29k
QGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxSZWdpb24uaD4KKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BhdGg6OlBhdGgoKQorICAgIDogbV9wYXRoKG5ldyBCUmVnaW9uKCkp
Cit7Cit9CisKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBkZWxldGUgbV9wYXRoOworfQorCitQYXRo
OjpQYXRoKGNvbnN0IFBhdGgmIG90aGVyKQorICAgIDogbV9wYXRoKG5ldyBCUmVnaW9uKCpvdGhl
ci5wbGF0Zm9ybVBhdGgoKSkpCit7Cit9CisKK1BhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQ
YXRoJiBvdGhlcikKK3sKKyAgICBpZiAoJm90aGVyICE9IHRoaXMpCisgICAgICAgIG1fcGF0aCA9
IG90aGVyLnBsYXRmb3JtUGF0aCgpOworCisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIFBh
dGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25z
dAoreworICAgIHJldHVybiBtX3BhdGgtPkNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBQYXRo
Ojp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK0Zsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BhdGgtPkZyYW1lKCk7Cit9CisKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KQoreworICAgIC8vIEZJWE1FOiBVc2UgT2Zmc2V0Qnk/CisgICAgbm90SW1w
bGVtZW50ZWQoKTsJCit9CisKK3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IHApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCit9CisKK3ZvaWQgUGF0aDo6YWRkUXVhZEN1
cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsJCit9CisKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25z
dCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2lu
dCYgcCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjphZGRBcmNU
byhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1
cykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjpjbG9zZVN1YnBh
dGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBhdGg6OmFkZEFyYyhj
b25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBh
bnRpY2xvY2t3aXNlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBhdGg6
OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQoreworICAgIG1fcGF0aC0+SW5jbHVkZShyKTsK
K30KKwordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjpjbGVhcigpCit7CisgICAgbV9wYXRo
LT5NYWtlRW1wdHkoKTsKK30KKworYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIW1fcGF0aC0+RnJhbWUoKS5Jc1ZhbGlkKCk7Cit9CisKK1N0cmluZyBQYXRoOjpkZWJ1
Z1N0cmluZygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCit2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVu
Y3Rpb24gZnVuY3Rpb24pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCit9CisKK3Zv
aWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0p
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCit9CisKK0Zsb2F0UmVjdCBQYXRoOjpzdHJva2VC
b3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2lt
cGxlRm9udERhdGFIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1Np
bXBsZUZvbnREYXRhSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZlYzJkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisj
aW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
Rm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRl
IDx1bmljb2RlL3Vub3JtLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKwordm9pZCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sgICAgCisgICAgQkZvbnQgKmZvbnQgPSBtX3Bs
YXRmb3JtRGF0YS5mb250KCk7CisgICAgaWYgKGZvbnQpIHsKKyAgICAgICAgZm9udF9oZWlnaHQg
aGVpZ2h0OworICAgICAgICBmb250LT5HZXRIZWlnaHQoJmhlaWdodCk7CisgICAgICAgIG1fYXNj
ZW50ID0gaGVpZ2h0LmFzY2VudDsKKyAgICAgICAgbV9kZXNjZW50ID0gaGVpZ2h0LmRlc2NlbnQ7
CisgICAgICAgIG1fbGluZVNwYWNpbmcgPSBoZWlnaHQubGVhZGluZzsKKyAgICAgICAgbV94SGVp
Z2h0ID0gZm9udC0+U2l6ZSgpOyAvLyBOb3Qgc3VyZSBhYm91dCB0aGlzCisgICAgICAgIG1fdW5p
dHNQZXJFbSA9IDE7IC8vIEZJWE1FIQorICAgICAgICBtX2xpbmVHYXAgPSBoZWlnaHQubGVhZGlu
ZzsKKyAgICB9Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5p
dCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7CisgICAgbV9tYXhDaGFyV2lkdGggPSAw
LmY7CisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1EZXN0cm95KCkKK3sKKyAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBt
X3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKK30KKworU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpeworICAgICAgICBG
b250RGVzY3JpcHRpb24gZGVzYyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
ICAgICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoMC43MGYqZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkU2l6ZSgpKTsKKyAgICAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGRhdGEgPSBuZXcg
Rm9udFBsYXRmb3JtRGF0YShkZXNjLCBkZXNjLmZhbWlseSgpLmZhbWlseSgpKTsKKyAgICAgICAg
bV9zbWFsbENhcHNGb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YSgqcGRhdGEpOworICAgIH0K
KyAgICByZXR1cm4gbV9zbWFsbENhcHNGb250RGF0YTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0
YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMg
dG8gbG9hZCBub24tQVNDSUkgZW5jb2Rpbmcgc2l0ZXMKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIGlmIChtX3BsYXRm
b3JtRGF0YS5mb250KCkpCisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3Jt
RGF0YS5mb250KCktPklzRml4ZWQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBmYWxzZTsKK30KKworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwLjA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DaHJvbWVDbGllbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L0Nocm9tZUNsaWVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yMjI0MDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9DaHJvbWVDbGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNocm9tZUNsaWVudEhhaWt1LmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgPEFsZXJ0Lmg+CisjaW5jbHVkZSA8U3Ry
aW5nLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKworQ2hyb21lQ2xpZW50SGFpa3U6OkNo
cm9tZUNsaWVudEhhaWt1KCkKK3sKK30KKworQ2hyb21lQ2xpZW50SGFpa3U6On5DaHJvbWVDbGll
bnRIYWlrdSgpCit7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmNocm9tZURlc3Ryb3ll
ZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlr
dTo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKQoreworICAgIC8vIGRlYnVnZ2VyKCJz
ZXRXaW5kb3dSZWN0KCkiKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGbG9hdFJlY3Qg
Q2hyb21lQ2xpZW50SGFpa3U6OndpbmRvd1JlY3QoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgLy8gZGVidWdnZXIoIndpbmRvd1JlY3QoKSIpOworICAgIHJldHVybiBGbG9hdFJlY3Qo
MCwgMCwgMjAwLCAyMDApOworfQorCitGbG9hdFJlY3QgQ2hyb21lQ2xpZW50SGFpa3U6OnBhZ2VS
ZWN0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIGRlYnVnZ2VyKCJwYWdlUmVj
dCgpIik7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCAyMDAsIDIwMCk7Cit9CisKK2Zsb2F0
IENocm9tZUNsaWVudEhhaWt1OjpzY2FsZUZhY3RvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMS4wOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1Ojpmb2N1cygp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6
dW5mb2N1cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGll
bnRIYWlrdTo6Y2FuVGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnRh
a2VGb2N1cyhGb2N1c0RpcmVjdGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQ
YWdlKiBDaHJvbWVDbGllbnRIYWlrdTo6Y3JlYXRlV2luZG93KEZyYW1lKiwgY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitQYWdlKiBDaHJvbWVDbGllbnRIYWlr
dTo6Y3JlYXRlTW9kYWxEaWFsb2coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENocm9tZUNs
aWVudEhhaWt1OjpzaG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENo
cm9tZUNsaWVudEhhaWt1OjpjYW5SdW5Nb2RhbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnJ1bk1vZGFs
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1
OjpzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Citib29sIENocm9tZUNsaWVudEhhaWt1Ojp0b29sYmFyc1Zpc2libGUoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEhh
aWt1OjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6c3RhdHVzYmFyVmlzaWJsZSgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xp
ZW50SGFpa3U6OnNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsYmFyc1Zpc2libGUoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2hy
b21lQ2xpZW50SGFpa3U6OnNldE1lbnViYXJWaXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6bWVudWJhclZpc2libGUoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENo
cm9tZUNsaWVudEhhaWt1OjpzZXRSZXNpemFibGUoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1OjphZGRNZXNzYWdlVG9Db25zb2xlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlSUQp
Cit7CisgICAgcHJpbnRmKCJNRVNTQUdFICVzOiVpICVzXG4iLCBCU3RyaW5nKHNvdXJjZUlEKS5T
dHJpbmcoKSwgbGluZU51bWJlciwgQlN0cmluZyhtZXNzYWdlKS5TdHJpbmcoKSk7Cit9CisKK3Zv
aWQgQ2hyb21lQ2xpZW50SGFpa3U6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCkKK3sKKyAgICBwcmludGYoIk1FU1NBR0UgJXM6JWkgJXNcbiIsIEJT
dHJpbmcoc291cmNlSUQpLlN0cmluZygpLCBsaW5lTnVtYmVyLCBCU3RyaW5nKG1lc3NhZ2UpLlN0
cmluZygpKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6Y2FuUnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBh
bmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqIGZyYW1lKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1
OjpjbG9zZVdpbmRvd1Nvb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
Q2hyb21lQ2xpZW50SGFpa3U6OnJ1bkphdmFTY3JpcHRBbGVydChGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgbXNnKQoreworICAgIHByaW50ZigiQ2hyb21lQ2xpZW50SGFpa3U6OnJ1bkphdmFTY3JpcHRB
bGVydCgpXG4iKTsKKyAgICBCQWxlcnQqIGFsZXJ0ID0gbmV3IEJBbGVydCgiSmF2YVNjcmlwdCIs
IEJTdHJpbmcobXNnKS5TdHJpbmcoKSwgIk9LIik7CisgICAgYWxlcnQtPkdvKCk7Cit9CisKK2Jv
b2wgQ2hyb21lQ2xpZW50SGFpa3U6OnJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBtc2cpCit7CisgICAgcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6cnVuSmF2YVNj
cmlwdENvbmZpcm0oKVxuIik7CisgICAgQkFsZXJ0KiBhbGVydCA9IG5ldyBCQWxlcnQoIkphdmFT
Y3JpcHQiLCBCU3RyaW5nKG1zZykuU3RyaW5nKCksICJZZXMiLCAiTm8iKTsKKyAgICByZXR1cm4g
KGFsZXJ0LT5HbygpID09IDApOworfQorCitib29sIENocm9tZUNsaWVudEhhaWt1OjpydW5KYXZh
U2NyaXB0UHJvbXB0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFN0YXR1
c2JhclRleHQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiti
b29sIENocm9tZUNsaWVudEhhaWt1OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDaHJvbWVD
bGllbnRIYWlrdTo6dGFic1RvTGlua3MoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworSW50UmVjdCBDaHJvbWVDbGllbnRIYWlrdTo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAor
eworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnJl
cGFpbnQoY29uc3QgSW50UmVjdCYsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRl
LCBib29sIHJlcGFpbnRDb250ZW50T25seSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIENocm9tZUNsaWVudEhhaWt1OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVs
dGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSW50UG9pbnQgQ2hyb21lQ2xpZW50SGFp
a3U6OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRQb2ludCgpOworfQorCitJbnRSZWN0IENocm9tZUNs
aWVudEhhaWt1Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK1BsYXRmb3JtV2lk
Z2V0IENocm9tZUNsaWVudEhhaWt1OjpwbGF0Zm9ybVdpbmRvdygpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1XaWRnZXQoKTsKK30KKwordm9pZCBD
aHJvbWVDbGllbnRIYWlrdTo6Y29udGVudHNTaXplQ2hhbmdlZChGcmFtZSosIGNvbnN0IEludFNp
emUmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xp
ZW50SGFpa3U6OnNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xs
VmlldyopIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVD
bGllbnRIYWlrdTo6YWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0JikKK3sKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsQmFja2luZ1N0b3JlKGludCwgaW50LCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50UmVjdCYpCit7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6
OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCit7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6Om1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdCwgdW5zaWduZWQg
Lyptb2RpZmllckZsYWdzKi8pCit7CisgICAgLy8gU29tZSBleHRyYSBpbmZvCisgICAgLy9wcmlu
dGYoIkhpdFRlc3RSZXN1bHQgdGl0bGUgWyVzXSBzcGVsbGluZ1Rvb2xUaXAgWyVzXVxuIixCU3Ry
aW5nKGhpdC50aXRsZSgpKS5TdHJpbmcoKSxCU3RyaW5nKGhpdC5zcGVsbGluZ1Rvb2xUaXAoKSku
U3RyaW5nKCkpOwkKKyAgICAvL25vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xp
ZW50SGFpa3U6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0aXApCit7CisgICAgLy9ub3RJbXBs
ZW1lbnRlZCgpOworICAgIC8vcHJpbnRmKCJzZXRUb29sVGlwIFslc11cbiIsQlN0cmluZyh0aXAp
LlN0cmluZygpKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6cHJpbnQoRnJhbWUqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmV4
Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnJl
cXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1Ojpy
dW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitib29sIENocm9tZUNsaWVudEhhaWt1OjpzZXRDdXJzb3IoUGxh
dGZvcm1DdXJzb3JIYW5kbGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKKy8vIE5vdGlmaWNhdGlvbiB0aGF0IHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQg
aGFzIGNoYW5nZWQuIFRoaXMgZnVuY3Rpb24KKy8vIHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHks
IHNvIGhhbmRsaW5nIHNob3VsZCBiZSB2ZXJ5IGZhc3QuCit2b2lkIENocm9tZUNsaWVudEhhaWt1
Ojpmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworUGFzc093blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBDaHJvbWVDbGllbnRIYWlrdTo6
Y3JlYXRlSFRNTFBhcnNlclF1aXJrcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0Nocm9tZUNsaWVudEhhaWt1LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nocm9tZUNs
aWVudEhhaWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5YWZlZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2hyb21lQ2xpZW50SGFp
a3UuaApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1
c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29k
IDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ2hyb21lQ2xpZW50SGFpa3VfSAorI2RlZmluZSBDaHJvbWVDbGllbnRIYWlr
dV9ICisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIFBhZ2U7CisgICAgc3RydWN0IEZyYW1lTG9hZFJl
cXVlc3Q7CisKKyAgICBjbGFzcyBDaHJvbWVDbGllbnRIYWlrdSA6IHB1YmxpYyBDaHJvbWVDbGll
bnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ2hyb21lQ2xpZW50SGFpa3UoKTsKKyAgICAgICAg
dmlydHVhbCB+Q2hyb21lQ2xpZW50SGFpa3UoKTsKKyAgICAgICAgdm9pZCBjaHJvbWVEZXN0cm95
ZWQoKTsKKworICAgICAgICB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7Cisg
ICAgICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisKKyAgICAgICAgRmxvYXRSZWN0IHBhZ2VS
ZWN0KCk7CisKKyAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IoKTsKKworICAgICAgICB2b2lkIGZv
Y3VzKCk7CisgICAgICAgIHZvaWQgdW5mb2N1cygpOworCisgICAgICAgIGJvb2wgY2FuVGFrZUZv
Y3VzKEZvY3VzRGlyZWN0aW9uKTsKKyAgICAgICAgdm9pZCB0YWtlRm9jdXMoRm9jdXNEaXJlY3Rp
b24pOworCisgICAgICAgIFBhZ2UqIGNyZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpOworICAgICAgICBQYWdl
KiBjcmVhdGVNb2RhbERpYWxvZyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmKTsKKyAg
ICAgICAgdm9pZCBzaG93KCk7CisKKyAgICAgICAgYm9vbCBjYW5SdW5Nb2RhbCgpOworICAgICAg
ICB2b2lkIHJ1bk1vZGFsKCk7CisKKyAgICAgICAgdm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9v
bCk7CisgICAgICAgIGJvb2wgdG9vbGJhcnNWaXNpYmxlKCk7CisKKyAgICAgICAgdm9pZCBzZXRT
dGF0dXNiYXJWaXNpYmxlKGJvb2wpOworICAgICAgICBib29sIHN0YXR1c2JhclZpc2libGUoKTsK
KworICAgICAgICB2b2lkIHNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpOworICAgICAgICBib29s
IHNjcm9sbGJhcnNWaXNpYmxlKCk7CisKKyAgICAgICAgdm9pZCBzZXRNZW51YmFyVmlzaWJsZShi
b29sKTsKKyAgICAgICAgYm9vbCBtZW51YmFyVmlzaWJsZSgpOworCisgICAgICAgIHZvaWQgc2V0
UmVzaXphYmxlKGJvb2wpOworCisgICAgICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CisJCXZvaWQgYWRk
TWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKKworCQlib29sIGNhblJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbCgpOworCisgICAgICAgIGJvb2wgcnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqIGZyYW1lKTsKKworICAg
ICAgICB2b2lkIGNsb3NlV2luZG93U29vbigpOworCisgICAgICAgIHZvaWQgcnVuSmF2YVNjcmlw
dEFsZXJ0KEZyYW1lKiwgY29uc3QgU3RyaW5nJik7CisgICAgICAgIGJvb2wgcnVuSmF2YVNjcmlw
dENvbmZpcm0oRnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgYm9vbCBydW5KYXZhU2Ny
aXB0UHJvbXB0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRl
ZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpOworICAgICAgICBib29sIHNob3VsZEludGVycnVw
dEphdmFTY3JpcHQoKTsKKworICAgICAgICB2b2lkIHNldFN0YXR1c2JhclRleHQoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJik7CisgICAgICAgIGJvb2wgdGFic1RvTGlua3MoKSBjb25zdDsgICAgICAg
IAorICAgICAgICBJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Q7CisKKyAgICAgICAg
dm9pZCByZXBhaW50KGNvbnN0IEludFJlY3QmLCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29sIGlt
bWVkaWF0ZSA9IGZhbHNlLCBib29sIHJlcGFpbnRDb250ZW50T25seSA9IGZhbHNlKTsKKyAgICAg
ICAgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3Qm
IHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOworICAgICAgICBJbnRQb2lu
dCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgICAgICBJbnRSZWN0
IHdpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICAgICAgUGxhdGZvcm1X
aWRnZXQgcGxhdGZvcm1XaW5kb3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBjb250ZW50c1NpemVD
aGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgICAgICB2b2lkIHNjcm9s
bFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0OwkJ
CisKKyAgICAgICAgdm9pZCBhZGRUb0RpcnR5UmVnaW9uKGNvbnN0IEludFJlY3QmKTsKKyAgICAg
ICAgdm9pZCBzY3JvbGxCYWNraW5nU3RvcmUoaW50LCBpbnQsIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICAg
ICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5z
aWduZWQgbW9kaWZpZXJGbGFncyk7CisKKyAgICAgICAgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0
cmluZyYpOworCisgICAgICAgIHZvaWQgcHJpbnQoRnJhbWUqKTsKKworICAgICAgICB2b2lkIGV4
Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsK
KworICAgICAgICAvLyBUaGlzIGlzIGFuIGFzeW5jaHJvbm91cyBjYWxsLiBUaGUgQ2hyb21lQ2xp
ZW50IGNhbiBkaXNwbGF5IFVJIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbgorICAgICAg
ICAvLyB0byB1c2UgR2VvbG9jb2NhdGlvbi4gVGhlIENocm9tZUNsaWVudCBtdXN0IGNhbGwgR2Vv
bG9jYXRpb246OnNldFNob3VsZENsZWFyQ2FjaGUoKSBhcHByb3ByaWF0ZWx5LgorICAgICAgICB2
b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0
aW9uKik7CisKKyAgICAgICAgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZp
bGVDaG9vc2VyPik7CisKKyAgICAgICAgYm9vbCBzZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5k
bGUpOworCisgICAgICAgIC8vIE5vdGlmaWNhdGlvbiB0aGF0IHRoZSBnaXZlbiBmb3JtIGVsZW1l
bnQgaGFzIGNoYW5nZWQuIFRoaXMgZnVuY3Rpb24KKyAgICAgICAgLy8gd2lsbCBiZSBjYWxsZWQg
ZnJlcXVlbnRseSwgc28gaGFuZGxpbmcgc2hvdWxkIGJlIHZlcnkgZmFzdC4KKyAgICAgICAgdm9p
ZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopOworCisgICAgICAgIFBhc3NPd25QdHI8
SFRNTFBhcnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpOworICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
bGlwYm9hcmRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIx
MTMyMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJk
SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNsaXBib2FyZEhhaWt1LmgiCisKKyNpbmNsdWRlICJIYXNoVGFi
bGUuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisK
KyNpbmNsdWRlIDxhcHAvQ2xpcGJvYXJkLmg+CisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1
ZGUgPFN0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2xpcGJvYXJkSGFpa3U6
OkNsaXBib2FyZEhhaWt1KENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIGJvb2wgZm9yRHJh
Z2dpbmcpIAorICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgZm9yRHJhZ2dpbmcpCit7Cit9CisKK3Zv
aWQgQ2xpcGJvYXJkSGFpa3U6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAg
Qk1lc3NhZ2UgKmRhdGEgPSAoQk1lc3NhZ2UgKikgTlVMTDsKKworICAgIGlmIChiZV9jbGlwYm9h
cmQtPkxvY2soKSkgeworICAgICAgICBpZiAoKGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkp
IHsKKyAgICAgICAgICAgIGRhdGEtPlJlbW92ZU5hbWUoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSk7
CisgICAgICAgICAgICBiZV9jbGlwYm9hcmQtPkNvbW1pdCgpOworICAgICAgICB9CisgICAgICAg
IGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorfQorCit2b2lkIENsaXBib2FyZEhhaWt1
OjpjbGVhckFsbERhdGEoKSAKK3sKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAg
ICAgICAgYmVfY2xpcGJvYXJkLT5DbGVhcigpOworICAgICAgICBiZV9jbGlwYm9hcmQtPkNvbW1p
dCgpOworICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KK30KKworU3RyaW5n
IENsaXBib2FyZEhhaWt1OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vz
cykgY29uc3QgCit7CisgICAgQlN0cmluZyByZXN1bHQ7CisgICAgc3VjY2VzcyA9IGZhbHNlOwor
ICAgIEJNZXNzYWdlICpkYXRhID0gKEJNZXNzYWdlICopIE5VTEw7CisKKyAgICBpZiAoYmVfY2xp
cGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgaWYgKChkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRh
KCkpKSB7CisgICAgICAgICAgICBpZiAoZGF0YS0+RmluZFN0cmluZyhCU3RyaW5nKHR5cGUpLlN0
cmluZygpLCAmcmVzdWx0KSA9PSBCX09LKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBDbGlwYm9hcmRIYWlrdTo6c2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkgCit7CisgICAgYm9vbCByZXN1bHQg
PSBmYWxzZTsKKyAgICBCTWVzc2FnZSAqYmRhdGEgPSAoQk1lc3NhZ2UgKikgTlVMTDsKKworICAg
IGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBpZiAoKGJkYXRhID0gYmVfY2xp
cGJvYXJkLT5EYXRhKCkpKSB7CisgICAgICAgICAgICBiZGF0YS0+UmVtb3ZlTmFtZShCU3RyaW5n
KHR5cGUpLlN0cmluZygpKTsKKyAgICAgICAgICAgIGlmIChiZGF0YS0+QWRkU3RyaW5nKEJTdHJp
bmcodHlwZSkuU3RyaW5nKCksIEJTdHJpbmcoZGF0YSkpID09IEJfT0spCisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBiZV9jbGlwYm9hcmQtPkNvbW1p
dCgpOworICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKKy8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCitIYXNoU2V0PFN0
cmluZz4gQ2xpcGJvYXJkSGFpa3U6OnR5cGVzKCkgY29uc3QgCit7CisgICAgSGFzaFNldDxTdHJp
bmc+IHJlc3VsdDsKKyAgICBCTWVzc2FnZSAqZGF0YSA9IChCTWVzc2FnZSAqKSBOVUxMOworCisg
ICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2Ns
aXBib2FyZC0+RGF0YSgpKSkgeworICAgICAgICAgICAgY2hhciAqbmFtZTsKKyAgICAgICAgICAg
IHVpbnQzMiB0eXBlOworICAgICAgICAgICAgaW50MzIgY291bnQ7CisKKyAgICAgICAgICAgIGZv
ciAoaW50MzIgaSA9IDA7CisgICAgICAgICAgICAgICAgIGRhdGEtPkdldEluZm8oQl9BTllfVFlQ
RSwgaSwgJm5hbWUsICZ0eXBlLCAmY291bnQpID09IEJfT0s7CisgICAgICAgICAgICAgICAgIGkr
KykgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQobmFtZSk7CisgICAgICAgICAgICB9IAor
ICAgICAgICB9CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworSW50UG9pbnQgQ2xpcGJvYXJkSGFpa3U6OmRyYWdMb2NhdGlv
bigpIGNvbnN0IAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRQb2lu
dCgwLDApOworfQorCitDYWNoZWRJbWFnZSogQ2xpcGJvYXJkSGFpa3U6OmRyYWdJbWFnZSgpIGNv
bnN0IAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7IAorfQorCit2b2lk
IENsaXBib2FyZEhhaWt1OjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2lu
dCYpIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK05vZGUqIENsaXBib2FyZEhhaWt1
OjpkcmFnSW1hZ2VFbGVtZW50KCkgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsgCit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9k
ZSosIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitEcmFn
SW1hZ2VSZWYgQ2xpcGJvYXJkSGFpa3U6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgZHJhZ0xv
YykgY29uc3QKK3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBDbGlwYm9hcmRIYWlrdTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKSAKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIENsaXBib2FyZEhhaWt1Ojp3cml0ZVVSTChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiwgRnJhbWUqKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IENsaXBib2FyZEhhaWt1Ojp3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKSAKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitib29sIENsaXBib2FyZEhhaWt1OjpoYXNEYXRhKCkgCit7Cisg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBCTWVzc2FnZSAqZGF0YSA9IChCTWVzc2FnZSAq
KSBOVUxMOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGlmICgo
ZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gIWRh
dGEtPklzRW1wdHkoKTsKKyAgICAgICAgfQorICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygp
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NDg4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQ2xpcGJvYXJkSGFpa3VfaAorI2RlZmluZSBDbGlwYm9hcmRIYWlr
dV9oCisKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3kuaCIKKworI2luY2x1ZGUgPHN1cHBvcnQvTG9ja2VyLmg+CisjaW5jbHVkZSA8YXBwL0Ns
aXBib2FyZC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBDYWNoZWRJbWFn
ZTsKKworICAgIC8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcg
YW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKKyAgICBjbGFzcyBDbGlwYm9hcmRIYWlrdSA6IHB1Ymxp
YyBDbGlwYm9hcmQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ2xpcGJvYXJkSGFpa3UoQ2xpcGJv
YXJkQWNjZXNzUG9saWN5IHBvbGljeSwgYm9vbCBmb3JEcmFnZ2luZyk7CisgICAgICAgIH5DbGlw
Ym9hcmRIYWlrdSgpIHsgfQorCisgICAgICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSk7CisgICAgICAgIHZvaWQgY2xlYXJBbGxEYXRhKCk7CisgICAgICAgIFN0cmluZyBnZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CisgICAgICAgIGJv
b2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisKKyAg
ICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKKyAgICAgICAgSGFzaFNldDxTdHJp
bmc+IHR5cGVzKCkgY29uc3Q7CisKKyAgICAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29u
c3Q7CisgICAgICAgIENhY2hlZEltYWdlKiBkcmFnSW1hZ2UoKSBjb25zdDsKKyAgICAgICAgdm9p
ZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOworICAgICAgICBO
b2RlKiBkcmFnSW1hZ2VFbGVtZW50KCk7CisgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVu
dChOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKKworICAgICAgICB2aXJ0dWFsIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2MpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRl
VVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKik7CisKKyAgICAgICAgdmlydHVhbCBib29s
IGhhc0RhdGEoKTsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
Q2xpcGJvYXJkSGFpa3VfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nv
bnRleHRNZW51Q2xpZW50SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0
TWVudUNsaWVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
OWJmZTkyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0
TWVudUNsaWVudEhhaWt1LmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRIYWlrdS5oIgorCisjaW5jbHVkZSAi
Q29udGV4dE1lbnUuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiS1VS
TC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAordm9pZCBDb250ZXh0TWVudUNsaWVudEhhaWt1Ojpjb250ZXh0TWVudURlc3Ryb3ll
ZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRp
b24gQ29udGV4dE1lbnVDbGllbnRIYWlrdTo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMo
Q29udGV4dE1lbnUqIG1lbnUpCit7CisgICAgcmV0dXJuIG1lbnUtPnBsYXRmb3JtRGVzY3JpcHRp
b24oKTsKK30KKwordm9pZCBDb250ZXh0TWVudUNsaWVudEhhaWt1Ojpjb250ZXh0TWVudUl0ZW1T
ZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qLCBjb25zdCBDb250ZXh0TWVudSopCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudUNsaWVudEhhaWt1Ojpkb3dubG9h
ZFVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBDb250ZXh0TWVudUNsaWVudEhhaWt1Ojpsb29rVXBJbkRpY3Rpb25hcnkoRnJhbWUqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVDbGllbnRIYWlrdTo6
c3BlYWsoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IENvbnRleHRNZW51Q2xpZW50SGFpa3U6OnN0b3BTcGVha2luZygpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudUNsaWVudEhhaWt1OjpzZWFyY2hXaXRoR29v
Z2xlKGNvbnN0IEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29u
dGV4dE1lbnVDbGllbnRIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVu
dUNsaWVudEhhaWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1M2Fk
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVD
bGllbnRIYWlrdS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
WmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb250ZXh0TWVu
dUNsaWVudEhhaWt1X2gKKyNkZWZpbmUgQ29udGV4dE1lbnVDbGllbnRIYWlrdV9oCisKKyNpbmNs
dWRlICJDb250ZXh0TWVudUNsaWVudC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBj
bGFzcyBDb250ZXh0TWVudTsKKworICAgIGNsYXNzIENvbnRleHRNZW51Q2xpZW50SGFpa3UgOiBw
dWJsaWMgQ29udGV4dE1lbnVDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2
b2lkIGNvbnRleHRNZW51RGVzdHJveWVkKCk7CisKKyAgICAgICAgdmlydHVhbCBQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbiBnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhDb250ZXh0TWVudSop
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVJdGVtKiwgY29uc3QgQ29udGV4dE1lbnUqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZG93
bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJsKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNlYXJjaFdp
dGhHb29nbGUoY29uc3QgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGxvb2tVcEluRGlj
dGlvbmFyeShGcmFtZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgc3BlYWsoY29uc3QgU3RyaW5n
Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wU3BlYWtpbmcoKTsKKyAgICB9OworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ29udGV4dE1lbnVDbGllbnRIYWlrdV9oCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzRmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIK
KworI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKyNp
bmNsdWRlIDxMb29wZXIuaD4KKyNpbmNsdWRlIDxNZW51Lmg+CisjaW5jbHVkZSA8TWVzc2FnZS5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgY2xhc3MgaXNuJ3Qg
dXNlZCB5ZXQKK2NsYXNzIENvbnRleHRNZW51UmVjZWl2ZXIgOiBwdWJsaWMgQkxvb3Blcgorewor
cHVibGljOgorICAgIENvbnRleHRNZW51UmVjZWl2ZXIoQ29udGV4dE1lbnUqIG1lbnUpCisgICAg
ICAgIDogQkxvb3BlcigiY29udGV4dF9tZW51X3JlY2VpdmVyIikKKyAgICAgICAgLCBtX21lbnUo
bWVudSkKKyAgICB7CisgICAgICAgIG1fcmVzdWx0ID0gLTE7CisgICAgfQorCisgICAgdm9pZCBI
YW5kbGVNZXNzYWdlKEJNZXNzYWdlKiBtc2cpCisgICAgeworICAgICAgICBtX3Jlc3VsdCA9IG1z
Zy0+d2hhdDsKKyAgICAgICAgaWYgKG1fcmVzdWx0ICE9IC0xKSB7CisgICAgICAgICAgICBCTWVu
dUl0ZW0qIGl0ZW0gPSBtX21lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKS0+RmluZEl0ZW0obV9y
ZXN1bHQpOworICAgICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgICAg
IHByaW50ZigiRXJyb3I6IENvbnRleHQgbWVudSBpdGVtIHdpdGggY29kZSAlaSBub3QgZm91bmQh
XG4iLCBtX3Jlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGNtSXRlbShpdGVtKTsKKyAgICAgICAgICAgIG1f
bWVudS0+Y29udHJvbGxlcigpLT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCgmY21JdGVtKTsKKyAg
ICAgICAgICAgIGNtSXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOworICAgICAgICB9
CisgICAgfQorCisgICAgaW50IFJlc3VsdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9yZXN1
bHQ7CisgICAgfQorcHJpdmF0ZToKKyAgICBDb250ZXh0TWVudSogbV9tZW51OworICAgIGludCBt
X3Jlc3VsdDsKK307CisKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQpCisgICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KSwgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uKE5VTEwpCit7CisgICAgLyogR2V0IHBvc2l0aW9uICovCisgICAgaWYgKHJlc3Vs
dC5pbm5lck5vZGUoKSAhPSBOVUxMICYmIHJlc3VsdC5pbm5lck5vZGUoKS0+ZG9jdW1lbnQoKSAh
PSBOVUxMKSB7CisgICAgICAgIEJWaWV3KiB2aWV3ID0gcmVzdWx0LmlubmVyTm9kZSgpLT5kb2N1
bWVudCgpLT5mcmFtZSgpLT52aWV3KCktPmhhaWt1V2lkZ2V0KCk7CisgICAgICAgIGludCBjaGls
ZCA9IDA7CisgICAgICAgIHdoaWxlICh2aWV3LT5DaGlsZEF0KGNoaWxkKSAhPSBOVUxMKSB7Cisg
ICAgICAgICAgICBpZiAodmlldy0+Q2hpbGRBdChjaGlsZCktPk5hbWUoKSA9PSAic2Nyb2xsX3Zp
ZXdfY2FudmFzIikgeworICAgICAgICAgICAgICAgIG1fcG9pbnQgPSB2aWV3LT5DaGlsZEF0KGNo
aWxkKS0+Q29udmVydFRvU2NyZWVuKEJQb2ludChyZXN1bHQucG9pbnQoKS54KCksIHJlc3VsdC5w
b2ludCgpLnkoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2hpbGQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGYoIkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSgpICVpICVpXG4iLCByZXN1bHQucG9pbnQoKS54KCksIHJlc3VsdC5w
b2ludCgpLnkoKSk7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJNZW51KCJjb250
ZXh0X21lbnUiKTsKK30KKworQ29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCit7CisgICAgcHJp
bnRmKCJDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KClcbiIpOworICAgIGRlbGV0ZSBtX3BsYXRm
b3JtRGVzY3JpcHRpb247Cit9CisKK3ZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4
dE1lbnVJdGVtJiBpdGVtKQoreworICAgIHByaW50ZigiQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW1c
biIpOworCisgICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOworCisgICAgQk1lbnVJdGVt
KiBiSXRlbSA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKKyAgICBpZiAoYkl0
ZW0gIT0gTlVMTCkKKyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5BZGRJdGVtKGJJdGVt
KTsKK30KKwordW5zaWduZWQgQ29udGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+Q291bnRJdGVtcygpOworfQorCit2b2lkIENv
bnRleHRNZW51OjppbnNlcnRJdGVtKHVuc2lnbmVkIHBvc2l0aW9uLCBDb250ZXh0TWVudUl0ZW0m
IGl0ZW0pCit7CisgICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOworCisgICAgQk1lbnVJ
dGVtKiBiSXRlbSA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKKyAgICBpZiAo
Ykl0ZW0gIT0gTlVMTCkKKyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5BZGRJdGVtKGJJ
dGVtLCBwb3NpdGlvbik7Cit9CisKK1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51
OjpwbGF0Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURl
c2NyaXB0aW9uOworfQorCit2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0aW9u
KFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PEJN
ZW51Kj4obWVudSkgPT0gbV9wbGF0Zm9ybURlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBkZWxldGUgbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworICAgIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbiA9IHN0YXRpY19jYXN0PEJNZW51Kj4obWVudSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUl0
ZW1IYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SXRlbUhhaWt1
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmNmMjI0Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUl0ZW1IYWlrdS5j
cHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNp
biA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8
bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDb250ZXh0TWVudUl0ZW0uaCIKKworI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPE1lbnUuaD4KKyNpbmNsdWRlIDxN
ZW51SXRlbS5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKwor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVu
dUl0ZW0oUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGl0ZW0pCit7CisgICAgbV9wbGF0Zm9y
bURlc2NyaXB0aW9uID0gaXRlbTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0
ZW0oQ29udGV4dE1lbnUqIHN1Yk1lbnUpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0g
bmV3IEJNZW51SXRlbShzdWJNZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQk1lc3NhZ2UoQ29udGV4dE1lbnVJ
dGVtVGFnTm9BY3Rpb24pKTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0o
Q29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHRpdGxlLCBDb250ZXh0
TWVudSogc3ViTWVudSkKK3sKKyAgICBpZiAodHlwZSA9PSBBY3Rpb25UeXBlKQorICAgICAgICBt
X3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgQk1lbnVJdGVtKEJTdHJpbmcodGl0bGUpLlN0cmlu
ZygpLCBuZXcgQk1lc3NhZ2UoYWN0aW9uKSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSBTZXBhcmF0
b3JUeXBlKQorICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgQlNlcGFyYXRvckl0
ZW0oKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJN
ZW51SXRlbShzdWJNZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCksIG5ldyBCTWVzc2FnZShhY3Rp
b24pKTsKKyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5TZXRMYWJlbChCU3RyaW5nKHRp
dGxlKS5TdHJpbmcoKSk7CisgICAgfQorfQorCitDb250ZXh0TWVudUl0ZW06On5Db250ZXh0TWVu
dUl0ZW0oKQoreworICAgIGRlbGV0ZSBtX3BsYXRmb3JtRGVzY3JpcHRpb247Cit9CisKK1BsYXRm
b3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnJlbGVhc2VQbGF0Zm9ybURl
c2NyaXB0aW9uKCkKK3sKKyAgICBCTWVudUl0ZW0qIGl0ZW0gPSBtX3BsYXRmb3JtRGVzY3JpcHRp
b247CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gTlVMTDsKKyAgICByZXR1cm4gaXRlbTsK
K30KKworQ29udGV4dE1lbnVJdGVtVHlwZSBDb250ZXh0TWVudUl0ZW06OnR5cGUoKSBjb25zdAor
eworICAgIGlmIChkeW5hbWljX2Nhc3Q8QlNlcGFyYXRvckl0ZW0qPihtX3BsYXRmb3JtRGVzY3Jp
cHRpb24pICE9IE5VTEwpCisgICAgICAgIHJldHVybiBTZXBhcmF0b3JUeXBlOworICAgIGlmICht
X3BsYXRmb3JtRGVzY3JpcHRpb24tPlN1Ym1lbnUoKSAhPSBOVUxMKQorICAgICAgICByZXR1cm4g
U3VibWVudVR5cGU7CisgICAgcmV0dXJuIEFjdGlvblR5cGU7Cit9CisKK3ZvaWQgQ29udGV4dE1l
bnVJdGVtOjpzZXRUeXBlKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSkKK3sKKyAgICBDb250ZXh0
TWVudUFjdGlvbiB0aGVBY3Rpb24gPSBhY3Rpb24oKTsKKyAgICBTdHJpbmcgdGhlVGl0bGUgPSB0
aXRsZSgpOworICAgIEJNZW51KiBzdWJNZW51ID0gcGxhdGZvcm1TdWJNZW51KCk7CisgICAgZGVs
ZXRlIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKworICAgIGlmICh0eXBlID09IEFjdGlvblR5cGUp
CisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBCTWVudUl0ZW0oQlN0cmluZyh0
aGVUaXRsZSkuU3RyaW5nKCksIG5ldyBCTWVzc2FnZSh0aGVBY3Rpb24pKTsKKyAgICBlbHNlIGlm
ICh0eXBlID09IFNlcGFyYXRvclR5cGUpCisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9
IG5ldyBCU2VwYXJhdG9ySXRlbSgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoc3ViTWVudSkg
eworICAgICAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJNZW51SXRlbShzdWJN
ZW51LCBuZXcgQk1lc3NhZ2UodGhlQWN0aW9uKSk7CisgICAgICAgICAgICBtX3BsYXRmb3JtRGVz
Y3JpcHRpb24tPlNldExhYmVsKEJTdHJpbmcodGhlVGl0bGUpLlN0cmluZygpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgQk1lbnVJdGVt
KEJTdHJpbmcodGhlVGl0bGUpLlN0cmluZygpLCBuZXcgQk1lc3NhZ2UodGhlQWN0aW9uKSk7Cisg
ICAgfQorfQorCitDb250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFjdGlvbigpIGNv
bnN0Cit7CisgICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9PSBOVUxMKQorICAgICAgICBy
ZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb247CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYkNvcmU6OkNvbnRleHRNZW51QWN0aW9uPihtX3BsYXRmb3JtRGVzY3JpcHRpb24tPk1lc3Nh
Z2UoKS0+d2hhdCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRBY3Rpb24oQ29udGV4
dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24gIT0g
TlVMTCkKKyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5NZXNzYWdlKCktPndoYXQgPSBh
Y3Rpb247Cit9CisKK1N0cmluZyBDb250ZXh0TWVudUl0ZW06OnRpdGxlKCkgY29uc3QgCit7Cisg
ICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9PSBOVUxMKQorICAgICAgICByZXR1cm4oICIi
ICk7CisgICAgcmV0dXJuIEJTdHJpbmcobV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5MYWJlbCgpKTsK
K30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUp
Cit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZmluZCBhIGJldHRlciB3YXkgdG8gY29udmVy
dCBXZWJLaXQgU3RyaW5ncyBpbnRvIGMgc3RyaW5ncworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlv
bi0+U2V0TGFiZWwoQlN0cmluZyh0aXRsZSkuU3RyaW5nKCkpOworfQorCitQbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnBsYXRmb3JtU3ViTWVudSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+U3VibWVudSgpOworfQorCit2b2lkIENv
bnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShDb250ZXh0TWVudSogbWVudSkKK3sKKyAgICAvLyBG
SVhNRTogV2UgYXNzdW1lIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiBpcyB2YWxpZAorICAgIGNvbnN0
IGNoYXIqIHRpdGxlID0gbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5MYWJlbCgpOworICAgIGRlbGV0
ZSBtX3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3
IEJNZW51SXRlbShtZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCksIG5ldyBCTWVzc2FnZShhY3Rp
b24oKSkpOworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+U2V0TGFiZWwodGl0bGUpOworfQor
Cit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0Q2hlY2tlZChib29sIGNoZWNrZWQpCit7CisgICAg
aWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiAhPSBOVUxMKQorICAgICAgICBtX3BsYXRmb3JtRGVz
Y3JpcHRpb24tPlNldE1hcmtlZChjaGVja2VkKTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06
OnNldEVuYWJsZWQoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlv
biAhPSBOVUxMKQorICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPlNldEVuYWJsZWQoZW5h
YmxlKTsKK30KKworYm9vbCBDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAoreworICAg
IGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+SXNFbmFibGVkKCk7Cit9CisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTkzODRjZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDb29raWVKYXIuaCIKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFNob3VsZG4n
dCB0aGlzIGJlIHNhdmVkIHRvIGFuZCByZXN0b3JlZCBmcm9tIGRpc2sgdG9vPworc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKKwordm9pZCBzZXRDb29raWVzKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypwb2xpY3lVUkwqLywgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBjb29raWVKYXIuc2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOworfQorCitTdHJp
bmcgY29va2llcyhjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIGNvb2tpZUphci5nZXQo
dXJsLnN0cmluZygpKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZCgpCit7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGEgc2V0dGluZworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvQ3Vyc29ySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JI
YWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjZDA4ZgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3UuY3BwCkBA
IC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29v
ZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPGFwcC9BcHBEZWZzLmg+CisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDdXJzb3I6OkN1cnNvcihQbGF0Zm9ybUN1cnNvciBwKQorICAg
IDogbV9pbXBsKHApCit7Cit9CisKK0N1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIp
CisgICAgOiBtX2ltcGwob3RoZXIubV9pbXBsKQoreworfQorCitDdXJzb3I6On5DdXJzb3IoKQor
eworfQorCitDdXJzb3I6OkN1cnNvcihJbWFnZSosIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1
cnNvciYgb3RoZXIpCit7CisgICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIHJldHVybiAq
dGhpczsKK30KKworc3RhdGljIEN1cnNvciBnbG9iYWxfY3Vyc29yKChQbGF0Zm9ybUN1cnNvcilC
X0NVUlNPUl9TWVNURU1fREVGQVVMVCk7CitzdGF0aWMgQ3Vyc29yIGliZWFtX2N1cnNvcigoUGxh
dGZvcm1DdXJzb3IpQl9DVVJTT1JfSV9CRUFNKTsKKworY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vy
c29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBt
b3ZlQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vy
c29yJiBjcm9zc0N1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgaUJlYW1DdXJzb3IoKQoreworICAgIHJldHVybiBpYmVhbV9jdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgd2FpdEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2Jh
bF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCit7CisgICAgcmV0dXJu
IGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFJlc2l6ZUN1cnNvcigpCit7
CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhSZXNp
emVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFJlc2l6ZUN1cnNvcigp
Cit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhF
YXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29u
c3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxf
Y3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJl
dHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVD
dXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30K
KworY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAg
IHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRo
RWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiByb3dSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVy
biBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigp
Cit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY2VsbEN1
cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
Y29udGV4dE1lbnVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgY29weUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9j
dXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQoreworICAgIHJldHVy
biBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkKK3sKKyAg
ICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub25lQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3RBbGxv
d2VkQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vy
c29yJiB6b29tSW5DdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIHpvb21PdXRDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIGdyYWJDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxf
Y3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdDbGllbnRIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0RyYWdDbGllbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODk2NGM2OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvRHJhZ0NsaWVudEhhaWt1LmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdDbGllbnRIYWlrdS5oIgor
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0RyYWdEZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50SGFpa3U6OmFjdGlvbk1hc2tGb3JEcmFn
KERyYWdEYXRhKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBEcmFnRGVz
dGluYXRpb25BY3Rpb25Bbnk7Cit9CisKK3ZvaWQgRHJhZ0NsaWVudEhhaWt1Ojp3aWxsUGVyZm9y
bURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERyYWdDbGllbnRIYWlrdTo6ZHJh
Z0NvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Ry
YWdTb3VyY2VBY3Rpb24gRHJhZ0NsaWVudEhhaWt1OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBv
aW50KGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBEcmFnU291cmNlQWN0aW9uQW55OworfQorCit2b2lkIERyYWdDbGllbnRIYWlrdTo6d2lsbFBl
cmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50Jiwg
Q2xpcGJvYXJkKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERyYWdDbGll
bnRIYWlrdTo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50
JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworRHJhZ0ltYWdlUmVmIERyYWdDbGllbnRIYWlrdTo6Y3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnQ2xpZW50SGFpa3Uu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0NsaWVudEhhaWt1LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5Y2RjZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0NsaWVudEhhaWt1LmgKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJEcmFnQ2xpZW50LmgiCisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgRHJhZ0NsaWVudEhhaWt1IDogcHVibGljIERyYWdDbGllbnQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYWdEYXRhKik7CisgICAgICAgIHZpcnR1
YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKERyYWdE
YXRhKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOwor
ICAgICAgICB2aXJ0dWFsIERyYWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQ
b2ludChjb25zdCBJbnRQb2ludCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1E
cmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xpcGJv
YXJkKik7ICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiBk
cmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQqLCBG
cmFtZSosIGJvb2wgbGlua0RyYWcgPSBmYWxzZSk7CisgICAgICAgIHZpcnR1YWwgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoS1VSTCYsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZy
YW1lKik7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9EcmFnRGF0YUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43YTNkYWE1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9E
cmFnRGF0YUhhaWt1LmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgorCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJk
SGFpa3UuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNDb2xvcigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIERyYWdE
YXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
U3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0NvbG9yIERyYWdEYXRhOjphc0NvbG9y
KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBDb2xvcigpOwor
fQorCitXVEY6OlBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBEcmFnRGF0YTo6Y3JlYXRlQ2xpcGJvYXJk
KENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5ldyBD
bGlwYm9hcmRIYWlrdShwb2xpY3ksIHRydWUpOworfQorCitib29sIERyYWdEYXRhOjpjb250YWlu
c0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFpbnNDb2xvcigp
IHx8IGNvbnRhaW5zVVJMKCkgfHwgY29udGFpbnNQbGFpblRleHQoKTsKK30KKworYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNVUkwoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKFN0cmluZyogdGl0bGUp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRG9j
dW1lbnQqKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9E
cmFnSW1hZ2VIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlm
ZDU2YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0ltYWdl
SGFpa3UuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50U2l6ZSgwLCAwKTsKK30K
Kwordm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1h
Z2UsIEZsb2F0U2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBpbWFn
ZTsKK30KKworRHJhZ0ltYWdlUmVmIGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihEcmFnSW1h
Z2VSZWYgaW1hZ2UsIGZsb2F0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGltYWdlOworfQorCitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdl
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOyAgICAgCit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FZGl0
b3JDbGllbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0VkaXRvckNsaWVudEhh
aWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjhjNmUzCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FZGl0b3JDbGllbnRIYWlrdS5j
cHAKQEAgLTAsMCArMSw0NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+IAorICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW5kcmVhIEFuemFuaSA8YW5k
cmVhLmFuemFuaUBnbWFpbC5jb20+CisgKiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudEhhaWt1LmgiCisK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRD
b2Rlcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VkaXRvckNsaWVudEhhaWt1OjpFZGl0
b3JDbGllbnRIYWlrdSgpCisgICAgOiBtX2VkaXRpbmcoZmFsc2UpCisgICAgLCBtX2luVW5kb1Jl
ZG8oZmFsc2UpCit7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnNldFBhZ2UoIFBhZ2Uq
IHBhZ2UgKQoreworICAgIG1fcGFnZSA9IHBhZ2U7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFp
a3U6OnBhZ2VEZXN0cm95ZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wg
RWRpdG9yQ2xpZW50SGFpa3U6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVkaXRvckNsaWVudEhh
aWt1OjpzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlKEhUTUxFbGVtZW50KikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFZGl0b3JDbGllbnRI
YWlrdTo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6aXNTZWxl
Y3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6aXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1Ojp0b2dnbGVDb250aW51
b3VzU3BlbGxDaGVja2luZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBF
ZGl0b3JDbGllbnRIYWlrdTo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRI
YWlrdTo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitpbnQgRWRpdG9yQ2xpZW50SGFpa3U6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitib29sIEVkaXRvckNs
aWVudEhhaWt1Ojppc0VkaXRhYmxlKCkKK3sKKyAgICAvLyBGSVhNRTogc2hvdWxkIGJlIGNvbnRy
b2xsYWJsZQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6
c2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVkaXRvckNsaWVudEhhaWt1OjpzaG91
bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVkaXRvckNsaWVudEhhaWt1OjpzaG91bGRJbnNl
cnROb2RlKE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVkaXRvckNsaWVudEhhaWt1
OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0
aW9uKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgRWRpdG9yQ2xpZW50SGFpa3U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqIGZy
b21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVkaXRvckNs
aWVudEhhaWt1OjpzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24q
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpSYW5nZSop
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBF
ZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5n
ZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBFZGl0b3JDbGllbnRIYWlrdTo6ZGlkQmVnaW5FZGl0aW5nKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIG1fZWRpdGluZyA9IHRydWU7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFp
a3U6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6
ZGlkRW5kRWRpdGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2VkaXRpbmcg
PSBmYWxzZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6ZGlkV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9y
Q2xpZW50SGFpa3U6OmRpZFNldFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2FyZCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6cmVnaXN0ZXJD
b21tYW5kRm9yVW5kbyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+IGNtZCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1Ojpy
ZWdpc3RlckNvbW1hbmRGb3JSZWRvKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFu
ZD4pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlr
dTo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK2Jvb2wgRWRpdG9yQ2xpZW50SGFpa3U6OmNhblVuZG8oKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvckNsaWVudEhh
aWt1OjpjYW5SZWRvKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6dW5kbygpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBtX2luVW5kb1JlZG8gPSB0cnVlOworICAgIG1faW5VbmRvUmVk
byA9IGZhbHNlOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpyZWRvKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIG1faW5VbmRvUmVkbyA9IHRydWU7CisgICAgbV9pblVuZG9S
ZWRvID0gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmhhbmRsZUtleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkpCisgICAgICAgIHJldHVybjsK
KwkKKyAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtldmVudCA9IGV2ZW50LT5rZXlF
dmVudCgpOworICAgIGlmICgha2V2ZW50IHx8IGtldmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6S2V5VXApCisgICAgICAgIHJldHVybjsKKwkKKyAgICBOb2RlKiBzdGFydCA9
IGZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7CisgICAgaWYgKCFzdGFydCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKHN0YXJ0LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Cisg
ICAgICAgIHN3aXRjaChrZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CisgICAgICAg
IGNhc2UgVktfQkFDSzoKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERp
cmVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRH
cmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFZLX0RFTEVURToKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+Y3Ry
bEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRydWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfTEVGVDoKKyAgICAgICAgICAgIGZy
YW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtldmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpMRUZULAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V2ZW50LT5jdHJsS2V5KCkg
PyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlm
eShrZXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQgOiBTZWxl
Y3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrZXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENo
YXJhY3RlckdyYW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19VUDoKKyAgICAg
ICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtldmVudC0+c2hpZnRLZXkoKSA/IFNl
bGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVy
OjpCQUNLV0FSRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldmVu
dC0+Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFZLX0RPV046CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShrZXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpF
WFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gUGFyYWdy
YXBoR3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFZLX1BSSU9SOiAgLy8gUGFnZVVwCisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1h
bmQoIk1vdmVVcEJ5UGFnZUFuZE1vZGlmeUNhcmV0Iik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBWS19ORVhUOiAgLy8gUGFnZURvd24KKyAgICAgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+Y29tbWFuZCgiTW92ZURvd25CeVBhZ2VBbmRNb2RpZnlDYXJldCIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfUkVUVVJOOgorICAgICAgICAgICAgZnJhbWUtPmVk
aXRvcigpLT5jb21tYW5kKCJJbnNlcnRMaW5lQnJlYWsiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFZLX1RBQjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGlmICgha2V2ZW50LT5jdHJsS2V5KCkgJiYgIWtldmVudC0+YWx0S2V5
KCkgJiYgIWtldmVudC0+dGV4dCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGlmIChr
ZXZlbnQtPnRleHQoKS5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIFVDaGFy
IGNoID0ga2V2ZW50LT50ZXh0KClbMF07CisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGlu
c2VydCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0aGV5IGNhbiByZXN1bHQgaW4gdW5l
eHBlY3RlZCBiZWhhdmlvdXIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDwgJyAnKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChrZXZlbnQtPnRleHQoKSwgZXZlbnQp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChrZXZlbnQtPmN0cmxLZXkoKSkgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgVktfQToKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT5jb21tYW5kKCJTZWxlY3RBbGwiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBWS19COgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPmNvbW1hbmQoIlRvZ2dsZUJvbGQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBWS19DOgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNvbW1hbmQoIkNvcHkiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBWS19JOgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPmNvbW1hbmQoIlRvZ2dsZUl0YWxpYyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIFZLX1Y6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZCgiUGFzdGUiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBWS19YOgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNvbW1hbmQoIkN1dCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIFZLX1k6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiUmVkbyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIFZLX1o6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+
Y29tbWFuZCgiVW5kbyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIHN3aXRjaCAoa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgeworICAg
ICAgICBjYXNlIFZLX1VQOgorICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJN
b3ZlVXAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX0RPV046CisgICAg
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVEb3duIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBWS19QUklPUjogIC8vIFBhZ2VVcAorICAgICAgICAgICAg
ZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlVXBCeVBhZ2VBbmRNb2RpZnlDYXJldCIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfTkVYVDogIC8vIFBhZ2VEb3duCisg
ICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVEb3duQnlQYWdlQW5kTW9k
aWZ5Q2FyZXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX0hPTUU6Cisg
ICAgICAgICAgICBpZiAoa2V2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgICAgICAgICAgZnJhbWUt
PmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50Iik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19FTkQ6CisgICAgICAgICAgICBpZiAoa2V2ZW50
LT5jdHJsS2V5KCkpCisgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJN
b3ZlVG9FbmRPZkRvY3VtZW50Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGlmIChrZXZlbnQtPmN0cmxLZXkoKSkgeworICAgICAgICAgICAgICAg
IHN3aXRjaChrZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVktfQToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiU2VsZWN0QWxsIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19DOiBjYXNlIFZLX1g6CisgICAgICAgICAgICAg
ICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIkNvcHkiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmhhbmRsZUlucHV0TWV0aG9k
S2V5ZG93bihLZXlib2FyZEV2ZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEVkaXRvckNsaWVudEhhaWt1Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCop
Cit7CisgICAgbV9lZGl0aW5nID0gdHJ1ZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6
dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KikKK3sKKyAgICBtX2VkaXRpbmcgPSBmYWxz
ZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxk
KEVsZW1lbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRWRpdG9yQ2xp
ZW50SGFpa3U6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiwgS2V5Ym9hcmRF
dmVudCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1
Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnRleHREaWRDaGFuZ2VJblRl
eHRBcmVhKEVsZW1lbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRp
dG9yQ2xpZW50SGFpa3U6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1Ojps
ZWFybldvcmQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEVkaXRvckNsaWVudEhhaWt1OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIq
LCBpbnQsIGludCosIGludCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5n
IEVkaXRvckNsaWVudEhhaWt1OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVk
V29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1Ojpj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiwgaW50KiwgaW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEVk
aXRvckNsaWVudEhhaWt1Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRWRpdG9yQ2xpZW50SGFpa3U6OnNob3dTcGVsbGluZ1VJKGJvb2wpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6c3BlbGxpbmdVSUlzU2hv
d2luZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYs
IFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEVk
aXRvckNsaWVudEhhaWt1OjpzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEVkaXRvckNsaWVudEhhaWt1Ojppc0VkaXRp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2VkaXRpbmc7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FZGl0b3JDbGll
bnRIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FZGl0b3JDbGllbnRIYWlrdS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTk1OTcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0VkaXRvckNsaWVudEhhaWt1LmgKQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFj
a0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNv
bT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRWRpdG9yQ2xp
ZW50SGFpa3VfSAorI2RlZmluZSBFZGl0b3JDbGllbnRIYWlrdV9ICisKKyNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAg
ICBjbGFzcyBFZGl0b3JDbGllbnRIYWlrdSA6IHB1YmxpYyBFZGl0b3JDbGllbnQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgRWRpdG9yQ2xpZW50SGFpa3UoKTsKKyAgICAgICAgdm9pZCBzZXRQYWdl
KCBQYWdlKiBwYWdlICk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsK
KworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKTsKKyAgICAg
ICAgdmlydHVhbCBib29sIHNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoSFRNTEVsZW1lbnQqKTsK
KyAgICAgICAgdmlydHVhbCBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCk7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKTsKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCk7CisgICAgICAgIHZpcnR1YWwgaW50IHNw
ZWxsQ2hlY2tlckRvY3VtZW50VGFnKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzRWRpdGFi
bGUoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKik7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFJhbmdlKik7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2Vy
dEFjdGlvbik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKTsKKyAgICAgICAgdmlydHVhbCBib29s
IHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFu
Z2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBZmZp
bml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZyk7CisKKyAgICAgICAgdmlydHVhbCBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFJhbmdlKik7CisgICAgICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdlKik7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZygpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0
aW5nKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0U2VsZWN0aW9uVHlwZXNGb3JQYXN0ZWJv
YXJkKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oUGFz
c1JlZlB0cjxFZGl0Q29tbWFuZD4pOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21t
YW5kRm9yUmVkbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5V
bmRvKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5SZWRvKCkgY29uc3Q7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHVuZG8oKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZG8oKTsK
KworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9h
cmRFdmVudCopOworCisgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXh0RmllbGREaWRCZWdpbkVkaXRp
bmcoRWxlbWVudCopOworICAgICAgICB2aXJ0dWFsIHZvaWQgdGV4dEZpZWxkRGlkRW5kRWRpdGlu
ZyhFbGVtZW50Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0Rmll
bGQoRWxlbWVudCopOworICAgICAgICB2aXJ0dWFsIGJvb2wgZG9UZXh0RmllbGRDb21tYW5kRnJv
bUV2ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0
ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKTsKKworICAgICAgICB2aXJ0dWFs
IHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCog
bWlzc3BlbGxpbmdMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcg
Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBt
aXNzcGVsbGVkV29yZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmlu
Zyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGJhZEdyYW1tYXJMb2Nh
dGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFy
RGV0YWlsJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxs
aW5nVUkoYm9vbCBzaG93KTsKKyAgICAgICAgdmlydHVhbCBib29sIHNwZWxsaW5nVUlJc1Nob3dp
bmcoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmlu
ZyYsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldElu
cHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKKworICAgICAgICBib29sIGlzRWRpdGluZygp
IGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUGFnZSogbV9wYWdlOworICAgICAgICBi
b29sIG1fZWRpdGluZzsKKyAgICAgICAgYm9vbCBtX2luVW5kb1JlZG87IC8vIG91ciB1bmRvIHN0
YWNrIHdvcmtzIGRpZmZlcmVudGx5IC0gZG9uJ3QgcmUtZW50ZXIhCisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRWRpdG9yQ2xpZW50SGFpa3VfaAorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0V2ZW50TG9vcEhhaWt1LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvRXZlbnRMb29wSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQ3NTBlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L0V2ZW50TG9vcEhhaWt1LmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRMb29w
LmgiCisKKyNpbmNsdWRlIDxhcHAvQXBwbGljYXRpb24uaD4KKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgRXZlbnRMb29wOjpjeWNsZSgpCit7CisgICAgaWYgKCFiZV9hcHApCisgICAg
ICAgIG1fZW5kZWQgPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZUNob29zZXJIYWlrdS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVDaG9vc2VySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmIwZTQyYjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L0ZpbGVDaG9vc2VySGFpa3UuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCisK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkljb24uaCIKKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNs
aWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQorICAgIDogbV9jbGllbnQoY2xp
ZW50KQorICAgICwgbV9maWxlbmFtZXMoKQorICAgICwgbV9pY29uKGNob29zZUljb24oZmlsZW5h
bWUpKQoreworICAgIG1fZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZSk7Cit9CisKK1N0cmluZyBG
aWxlQ2hvb3Nlcjo6YmFzZW5hbWVGb3JXaWR0aChjb25zdCBGb250JiwgaW50IHdpZHRoKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvRmlsZVN5c3RlbUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZVN5c3Rl
bUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjRlOTlmCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlU3lzdGVtSGFpa3Uu
Y3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2
ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgor
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NTdHJp
bmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IHJldHVybiBzdHJpbmcudXRmOCgpOworfQorCitTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitDU3Ry
aW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFu
ZGxlJiBoYW5kbGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBoYW5kbGUgPSBpbnZh
bGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIHJldHVybiBDU3RyaW5nKCk7Cit9CisKK3ZvaWQg
Y2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFN0cmluZz4gbGlzdERpcmVj
dG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQoreworICAgIFZl
Y3RvcjxTdHJpbmc+IGVudHJpZXM7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
ZW50cmllczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jMzlkM2FmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcApAQCAtMCwwICsxLDc2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEb24gR2lic29uIDxkZ2lic29uNzdAZ21haWwu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8U3RyaW5nLmg+CisvLyNpbmNsdWRlIDxWaWV3Lmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpGcmFt
ZUxvYWRlckNsaWVudEhhaWt1KCkKKyAgICA6IG1fZnJhbWUoMCkKKyAgICAsIG1fZmlyc3REYXRh
KGZhbHNlKQoreworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZyYW1lTG9hZGVy
RGVzdHJveWVkKCkKK3sKKyAgICBtX2ZyYW1lID0gMDsKKyAgICBkZWxldGUgdGhpczsKK30KKwor
RnJhbWUqIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZyYW1lKCkKK3sgCisgICAgcmV0dXJuIG1f
ZnJhbWU7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6aGFzV2ViVmlldygpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpoYXNGcmFtZVZpZXcoKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0IAoreyAKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOyAKKyAgICByZXR1cm4gZmFsc2U7IAorfQorCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6Om1ha2VEb2N1bWVudFZpZXcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6bWFrZVJlcHJlc2VudGF0aW9uKERv
Y3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisvLyB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldERvY3VtZW50Vmlld0Zyb21DYWNoZWRQYWdlKFdlYkNv
cmU6OkNhY2hlZFBhZ2UqKQorLy97CisvLyAgICBub3RJbXBsZW1lbnRlZCgpOworLy99CisKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Zm9yY2VMYXlvdXQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Zm9yY2VMYXlvdXRG
b3JOb25IVE1MKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OnNldENvcGllc09uU2Nyb2xsKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCisvL3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGV0YWNoZWRGcm9tUGFy
ZW50MSgpCisvL3sKKy8vICBub3RJbXBsZW1lbnRlZCgpOworLy99CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGV0YWNoZWRGcm9tUGFyZW50MigpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkZXRhY2hlZEZyb21QYXJl
bnQzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmRldGFjaGVkRnJvbVBhcmVudDQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKKy8vdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpsb2FkZWRGcm9tQ2FjaGVkUGFn
ZSgpCisvL3sKKy8vICAgIG5vdEltcGxlbWVudGVkKCk7CisvL30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1Ojphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAgIAorfQorCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
RG9jdW1lbnRMb2FkZXIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRj
aERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIG1fcmVzcG9uc2UgPSByZXNwb25z
ZTsKKyAgICBtX2ZpcnN0RGF0YSA9IHRydWU7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNw
YXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRMb2Fk
UmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwg
aW50IGxlbmd0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRSZXNvdXJj
ZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRT
dHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hE
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hE
aWRDYW5jZWxDbGllbnRSZWRpcmVjdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVk
aXJlY3QoY29uc3QgS1VSTCYsIGRvdWJsZSwgZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRDaGFuZ2VM
b2NhdGlvbldpdGhpblBhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsQ2xvc2UoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hE
aWRSZWNlaXZlSWNvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZENv
bW1pdExvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291
cmNlRXJyb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmluaXNo
TG9hZCgpIAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K0ZyYW1lKiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaENyZWF0ZVBhZ2UoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hTaG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9y
TUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbiBwb2xpY3lGdW5jdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gY2FsbCBkaXJlY3RseSBoZXJlIChjb21tZW50IGNv
cGllZCBmcm9tIFF0IHZlcnNpb24pCisgICAgQVNTRVJUKGZyYW1lKCkgJiYgcG9saWN5RnVuY3Rp
b24pOworICAgIGlmICghZnJhbWUoKSB8fCAhcG9saWN5RnVuY3Rpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICAoZnJhbWUoKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5VXNlKTsK
K30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZv
ck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IEFTU0VSVChmcmFtZSgpICYmIHBvbGljeUZ1bmN0aW9uKTsKKyAgICBpZiAoIWZyYW1lKCkgfHwg
IXBvbGljeUZ1bmN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IEkgdGhpbmsg
UXQgdmVyc2lvbiBtYXJzaGFscyB0aGlzIHRvIGFub3RoZXIgdGhyZWFkIHNvIHdoZW4gd2UKKyAg
ICAvLyBoYXZlIG11bHRpLXRocmVhZGVkIGRvd25sb2FkLCB3ZSBtaWdodCBuZWVkIHRvIGRvIHRo
ZSBzYW1lCisgICAgKGZyYW1lKCktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVz
ZSk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBwb2xpY3lGdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiBmcmFt
ZU5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQoZnJhbWUoKSAmJiBw
b2xpY3lGdW5jdGlvbik7CisgICAgaWYgKCFmcmFtZSgpIHx8ICFwb2xpY3lGdW5jdGlvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBJIHRoaW5rIFF0IHZlcnNpb24gbWFyc2hhbHMg
dGhpcyB0byBhbm90aGVyIHRocmVhZCBzbyB3aGVuIHdlCisgICAgLy8gaGF2ZSBtdWx0aS10aHJl
YWRlZCBkb3dubG9hZCwgd2UgbWlnaHQgbmVlZCB0byBkbyB0aGUgc2FtZQorICAgIChmcmFtZSgp
LT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOworfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBBU1NFUlQoZnJhbWUoKSAmJiBwb2xpY3lGdW5jdGlvbik7CisgICAg
aWYgKCFmcmFtZSgpIHx8ICFwb2xpY3lGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIChm
cmFtZSgpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOworfQorCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBBU1NFUlQoZnJhbWUoKSAmJiBwb2xpY3lGdW5jdGlvbik7CisgICAgaWYgKCFmcmFtZSgpIHx8
ICFwb2xpY3lGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIChmcmFtZSgpLT5sb2FkZXIo
KS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmNhbmNlbFBvbGljeUNoZWNrKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1l
bnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3Jt
KEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24sIFBhc3NSZWZQdHI8Rm9ybVN0YXRl
PikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBzdXJlbHkgdG9vIHNpbXBsZQorICAgIEFTU0VS
VChmcmFtZSgpICYmIHBvbGljeUZ1bmN0aW9uKTsKKyAgICBpZiAoIWZyYW1lKCkgfHwgIXBvbGlj
eUZ1bmN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgKGZyYW1lKCktPmxvYWRlcigpLT4qcG9s
aWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJldmVy
dFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1bWVudExvYWRlciopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRNYWluRG9jdW1lbnRF
cnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSAKK3sKKyAg
ICBwcmludGYoIlxuXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOworICAgIHByaW50
ZigiRG9jdW1lbnQgZXJyb3I6ICVzXG4iLEJTdHJpbmcoZXJyb3IuZG9tYWluKCkpLlN0cmluZygp
KTsKKyAgICBwcmludGYoIlxuXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOwkgCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsgCit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
Y2xlYXJVbmFyY2hpdmluZ1N0YXRlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnBvc3RQcm9ncmVzc1N0
YXJ0ZWROb3RpZmljYXRpb24oKQoreworICAgIC8vIG5vIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBm
b3Igbm93Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cG9zdFByb2dyZXNzRXN0
aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCkKK3sKKyAgICAvLyBubyBwcm9ncmVzcyBub3RpZmlj
YXRpb24gZm9yIG5vdyAgICAKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0
UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCit7CisgICAgLy8gbm8gcHJvZ3Jlc3Mgbm90
aWZpY2F0aW9uIGZvciBub3cKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRN
YWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpIAoreworICAgIC8vIHRoaXMgaXMgb25seSBpbnRl
cmVzdGluZyBvbmNlIHdlIHByb3ZpZGUgYW4gZXh0ZXJuYWwgQVBJIGZvciB0aGUgRE9NCit9CisK
K3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6d2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZENo
YW5nZVRpdGxlKERvY3VtZW50TG9hZGVyICpsKQoreworICAgIHNldFRpdGxlKGwtPnRpdGxlKCks
IGwtPnVybCgpKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpjb21taXR0ZWRM
b2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
Cit7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVMb2FkZXIg
KmZsID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3Bv
bnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOworICAgIGZsLT5hZGREYXRhKGRhdGEsIGxl
bmd0aCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZmluaXNoZWRMb2FkaW5n
KERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZpbmFsU2V0dXBGb3JSZXBsYWNlKERvY3VtZW50TG9hZGVy
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGly
ZWN0TGlua3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6dXBkYXRlR2xvYmFsSGlzdG9yeUZvclN0YW5kYXJkTG9hZChjb25zdCBL
VVJMJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnVwZGF0ZUdsb2JhbEhpc3RvcnlGb3JSZWxvYWQoY29uc3QgS1VSTCYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpz
aG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0IAoreworICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgaW1wbGVtZW50YXRpb24uIE1vcmUgc29waGlz
dGljYXRlZAorICAgIC8vIGltcGxlbWVudGF0aW9uIHdvdWxkIGRlbGVnYXRlIHRoZSBkZWNpc2lv
biB0byBhIFBvbGljeURlbGVnYXRlLgorICAgIC8vIFNlZSBtYWMgaW1wbGVtZW50YXRpb24gZm9y
IGV4YW1wbGUuCisgICAgcmV0dXJuIGl0ZW0gIT0gMDsKK30KKworUmVzb3VyY2VFcnJvciBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsK
K30KKworUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpibG9ja2VkRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6Y2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitS
ZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmludGVycnVwdEZvclBvbGljeUNo
YW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitSZXNvdXJjZUVycm9yIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlc291cmNl
RXJyb3IoKTsKK30KKworUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpmaWxl
RG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitSZXNvdXJjZUVy
cm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNo
b3VsZEZhbGxCYWNrKGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiti
b29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OndpbGxVc2VBcmNoaXZlKFJlc291cmNlTG9hZGVy
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgS1VSTCYgb3JpZ2luYWxVUkwpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6aXNBcmNoaXZlTG9hZFBlbmRpbmcoUmVzb3VyY2VMb2Fk
ZXIqKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbmNlbFBlbmRpbmdBcmNoaXZlTG9h
ZChSZXNvdXJjZUxvYWRlciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpjbGVhckFyY2hpdmVkUmVzb3VyY2VzKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbkhh
bmRsZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmNhblNob3dNSU1FVHlwZShjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OnJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0
cmluZyYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1N0cmluZyBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpnZW5lcmF0ZWRNSU1FVHlwZUZv
clVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmZyYW1lTG9hZENvbXBsZXRlZCgpIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRl
bSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVu
dEhhaWt1OjpyZXN0b3JlVmlld1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6ZGlkRmluaXNoTG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxhY2VtZW50KCkg
Cit7CisgICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+bG9hZGVyKCkpCisgICAgICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5zZXR1cEZvclJlcGxhY2UoKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVu
dExvYWRlcj4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlRG9jdW1lbnRMb2FkZXIoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Vic3Rp
dHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQoreworICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4g
bG9hZGVyID0gRG9jdW1lbnRMb2FkZXI6OmNyZWF0ZShyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7
CisgICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiwgY29uc3QgS1VSTCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnVzZXJB
Z2VudChjb25zdCBLVVJMJikKK3sKKyAgICByZXR1cm4gIk1vemlsbGEvNS4wIChjb21wYXRpYmxl
OyBVOyBJbmZpTmV0IDAuMTsgSGFpa3UpIEFwcGxlV2ViS2l0LzQyMCsgKEtIVE1MLCBsaWtlIEdl
Y2tvKSI7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2F2ZVBsYXRmb3JtRGF0
YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJv
bUNhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5l
d1BhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKy8vIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6c2F2ZURvY3VtZW50Vmlld1RvQ2FjaGVkUGFnZShDYWNoZWRQYWdlKikK
Ky8veworLy8gICAgbm90SW1wbGVtZW50ZWQoKTsKKy8vfQorCitib29sIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmNhbkNhY2hlUGFnZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7CisgICAgCit9Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRvd25sb2FkKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
UGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlRnJhbWUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93
bmVyRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KQoreworCS8vIEZJWE1FOgorICAgIC8vIHRo
aXJkOiAgIHdlIHNob3VsZCBhcHBseSB0aGUgcmlnaHQgcHJvcGVydHkgdG8gdGhlIGZyYW1lVmll
dy4gKHNjcm9sbGJhcixtYXJnaW5zKQorICAgIC8vIGVycm9yOiAgIHdoZW4gY29tcGlsaW5nIHVu
ZGVyIGdjYzQsIGVycm9yOiBjYW5ub3QgYWxsb2NhdGUgYW4gb2JqZWN0IG9mIGFic3RyYWN0IHR5
cGUKKworICAgIC8vIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UqIGxvYWRlckNsaWVu
dCA9IG5ldyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1KCk7CisgICAgUmVmUHRyPEZy
YW1lPiBjaGlsZEZyYW1lID0gRnJhbWU6OmNyZWF0ZShtX2ZyYW1lLT5wYWdlKCksIG93bmVyRWxl
bWVudCwgdGhpcyk7CisgICAgc2V0RnJhbWUoY2hpbGRGcmFtZS5nZXQoKSk7CisKKyAgICBSZWZQ
dHI8RnJhbWVWaWV3PiBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShjaGlsZEZyYW1lLmdl
dCgpKTsKKworICAgIC8vcHJpbnRmKCIqKiogc3VwcHJlc3NTY3JvbGxCYXJzID0gJWQiLCFhbGxv
d3NTY3JvbGxpbmcpOworCisgICAgZnJhbWVWaWV3LT5zZXRBbGxvd3NTY3JvbGxpbmcoYWxsb3dz
U2Nyb2xsaW5nKTsKKyAgICBmcmFtZVZpZXctPmRlcmVmKCk7CisgICAgY2hpbGRGcmFtZS0+c2V0
VmlldyhmcmFtZVZpZXcuZ2V0KCkpOworICAgIGNoaWxkRnJhbWUtPmluaXQoKTsKKworICAgIGNo
aWxkRnJhbWUtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKKyAgICBtX2ZyYW1lLT50cmVlKCktPmFw
cGVuZENoaWxkKGNoaWxkRnJhbWUpOworCisgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCktPmxvYWRV
UkxJbnRvQ2hpbGRGcmFtZSh1cmwsIHJlZmVycmVyLCBjaGlsZEZyYW1lLmdldCgpKTsKKworICAg
IC8vIFRoZSBmcmFtZSdzIG9ubG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92ZWQgaXQgZnJvbSB0
aGUgZG9jdW1lbnQuCisgICAgaWYgKCFjaGlsZEZyYW1lLT50cmVlKCktPnBhcmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgCXJldHVybiBjaGlsZEZyYW1lLnJlbGVhc2UoKTsKK30KKwor
V2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6
ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiwgYm9vbCBsb2FkTWFudWFsbHkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVQ
bHVnaW4oY29uc3QgSW50U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wgbG9hZE1hbnVhbGx5KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRn
ZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47Cit9CisKK1dpZGdldCog
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRT
aXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1dpZGdldCogRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgSFRNTEFw
cGxldEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbU5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitPYmplY3RDb250ZW50VHlwZSBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gT2JqZWN0Q29udGVudFR5cGUoKTsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6Om92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp3
aW5kb3dPYmplY3RDbGVhcmVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVuICkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRvY3Vt
ZW50RWxlbWVudEF2YWlsYWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRnJhbWVM
b2FkZXJDbGllbnRIYWlrdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZm
NTAzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3UuaApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhbWVMb2FkZXJDbGllbnRIYWlrdV9I
CisjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3VfSAorCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKKworI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRIYWlrdSA6IHB1YmxpYyBG
cmFtZUxvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBGcmFtZUxvYWRlckNsaWVu
dEhhaWt1KCk7CisgICAgICAgIH5GcmFtZUxvYWRlckNsaWVudEhhaWt1KCkgeyB9CisgICAgICAg
IHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3llZCgpOworCisgICAgICAgIHZvaWQgc2V0
RnJhbWUoRnJhbWUgKmZyYW1lKSB7IG1fZnJhbWUgPSBmcmFtZTsgfQorICAgICAgICBGcmFtZSog
ZnJhbWUoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIGJvb2wgaGFzRnJhbWVWaWV3KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVh
bCBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFs
IHZvaWQgbWFrZURvY3VtZW50VmlldygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFrZVJlcHJl
c2VudGF0aW9uKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIC8vIHZpcnR1YWwgdm9pZCBzZXRE
b2N1bWVudFZpZXdGcm9tQ2FjaGVkUGFnZShDYWNoZWRQYWdlKik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBmb3JjZUxheW91dCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXRGb3JO
b25IVE1MKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldENvcGllc09uU2Nyb2xsKCk7CisK
KyAgICAgICAgLy92aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MSgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MigpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoZWRGcm9tUGFyZW50MygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9t
UGFyZW50NCgpOworCisgICAgICAgIC8vdmlydHVhbCB2b2lkIGxvYWRlZEZyb21DYWNoZWRQYWdl
KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFNlbmRSZXF1
ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOworCQl2aXJ0dWFsIGJvb2wg
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJl
Y2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVu
dGlmaWVyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVy
cm9yJik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21N
ZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50IGxlbmd0aCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJpbmcmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoY29uc3Qg
S1VSTCYsIGRvdWJsZSwgZG91YmxlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
Q2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aFdpbGxDbG9zZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlSWNv
bigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3Qg
U3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENvbW1pdExvYWQoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25z
dCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxM
b2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmluaXNoRG9jdW1lbnRMb2FkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZEZpbmlzaExvYWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RMYXlv
dXQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0KCk7CisKKyAgICAgICAgdmlydHVhbCBGcmFtZSogZGlzcGF0Y2hDcmVhdGVQYWdl
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFNob3coKTsKKworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0
aW9uLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZy
YW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lG
dW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3Qg
TmF2aWdhdGlvbkFjdGlvbiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0
cjxGb3JtU3RhdGU+KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbFBvbGljeUNoZWNrKCk7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3ko
Y29uc3QgUmVzb3VyY2VFcnJvciYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdp
bGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZShEb2N1
bWVudExvYWRlciopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmV2ZXJ0VG9Qcm92aXNpb25hbFN0
YXRlKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRG9jdW1l
bnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGNsZWFyVW5hcmNoaXZpbmdTdGF0ZShEb2N1bWVudExvYWRlciopOworCisg
ICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgaW4gRnJhbWVMb2FkZXJDbGllbnQsIG5vdCBzdXJl
IGlmIHdlIG5lZWQgdG8gaW1wbGVtZW50CisgICAgICAgIC8vdmlydHVhbCB2b2lkIHdpbGxDaGFu
Z2VFc3RpbWF0ZWRQcm9ncmVzcygpOworICAgICAgICAvL3ZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VF
c3RpbWF0ZWRQcm9ncmVzcygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzU3Rh
cnRlZE5vdGlmaWNhdGlvbigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzRXN0
aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJv
Z3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRN
YWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFy
dERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworCisgICAgICAgIHZpcnR1YWwgdm9p
ZCB3aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKik7CisKKyAgICAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZmluYWxTZXR1cEZvclJlcGxhY2UoRG9jdW1lbnRMb2FkZXIqKTsKKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeSgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeUZvclN0YW5kYXJkTG9hZChjb25zdCBLVVJM
Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yUmVsb2FkKGNv
bnN0IEtVUkwmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEdvVG9IaXN0b3J5SXRlbShI
aXN0b3J5SXRlbSopIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBjYW5j
ZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAgICAgdmlydHVhbCBSZXNv
dXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAgICAg
dmlydHVhbCBSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKTsKKyAgICAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGludGVycnVwdEZvclBvbGlj
eUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworCisgICAgICAgIHZpcnR1YWwg
UmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CisgICAgICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJy
b3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIFJlc291cmNlRXJy
b3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisK
KyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEZhbGxCYWNrKGNvbnN0IFJlc291cmNlRXJyb3Im
KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKworICAg
ICAgICB2aXJ0dWFsIGJvb2wgd2lsbFVzZUFyY2hpdmUoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBLVVJMJiBvcmlnaW5hbFVSTCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0FyY2hpdmVMb2FkUGVuZGluZyhSZXNvdXJjZUxvYWRlciopIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGVuZGluZ0FyY2hpdmVMb2FkKFJlc291cmNl
TG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckFyY2hpdmVkUmVzb3VyY2VzKCk7
CisKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29u
c3QgU3RyaW5nJikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZXByZXNlbnRhdGlvbkV4
aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBT
dHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJikgY29uc3Q7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZENvbXBsZXRlZCgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgc2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVzdG9yZVZpZXdTdGF0ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9h
ZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVu
dCgpOworCisgICAgICAgIC8vdmlydHVhbCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhJik7CisgICAgICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwmKTsKKworICAgICAg
ICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VSTCYpOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCBzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKENh
Y2hlZEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRG
b3JOZXdQYWdlKCk7CisKKyAgICAgICAgLy8gdmlydHVhbCB2b2lkIHNhdmVEb2N1bWVudFZpZXdU
b0NhY2hlZFBhZ2UoQ2FjaGVkUGFnZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQ
YWdlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZChSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKKworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RnJhbWU+
IGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogb3duZXJFbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXJnaW5X
aWR0aCwgaW50IG1hcmdpbkhlaWdodCk7CisgICAgICAgIHZpcnR1YWwgV2lkZ2V0KiBjcmVhdGVQ
bHVnaW4oY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHZpcnR1YWwgV2lkZ2V0KiBj
cmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgS1VS
TCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiwgYm9vbCBsb2FkTWFudWFsbHkpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpOwor
CisgICAgICAgIHZpcnR1YWwgV2lkZ2V0KiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IElu
dFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAgICAgIHZpcnR1YWwgV2lkZ2V0
KiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBIVE1MQXBwbGV0RWxlbWVu
dCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMpOworCisgICAgICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5cGUg
b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdDsKKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0OworCisgICAgICAgIHZp
cnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4gPSB0cnVl
KTsKKworCQl2aXJ0dWFsIHZvaWQgZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBGcmFtZSAqbV9mcmFtZTsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25z
ZSBtX3Jlc3BvbnNlOworICAgICAgICBib29sIG1fZmlyc3REYXRhOworICAgIH07Cit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFtZUxvYWRlckNsaWVudEhhaWt1X2gKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9JbnNwZWN0b3JDbGllbnRIYWlrdS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTY3ZjYwCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKQEAgLTAs
MCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxl
YXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JDbGllbnRIYWlrdS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBJ
bnNwZWN0b3JDbGllbnRIYWlrdTo6aW5zcGVjdG9yRGVzdHJveWVkKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitQYWdlKiBJbnNwZWN0b3JDbGllbnRIYWlrdTo6Y3JlYXRlUGFnZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIElu
c3BlY3RvckNsaWVudEhhaWt1Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEluc3BlY3RvckNs
aWVudEhhaWt1OjpoaWRkZW5QYW5lbHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpzaG93V2lu
ZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVu
dEhhaWt1OjpjbG9zZVdpbmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6YXR0YWNoV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpkZXRhY2hXaW5kb3coKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6
OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpoaWdobGlnaHQoTm9k
ZSogbm9kZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNs
aWVudEhhaWt1OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGll
bnRIYWlrdTo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBJbnNwZWN0b3JDb250
cm9sbGVyOjpTZXR0aW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorICAgIAordm9p
ZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorICAgIAordm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6cmVtb3ZlU2V0dGluZyhj
b25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfSAgICAKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0luc3BlY3RvckNsaWVudEhhaWt1LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0luc3BlY3Rv
ckNsaWVudEhhaWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlOTk2
ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvSW5zcGVjdG9yQ2xp
ZW50SGFpa3UuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckNs
aWVudEhhaWt1X2gKKyNkZWZpbmUgSW5zcGVjdG9yQ2xpZW50SGFpa3VfaAorCisjaW5jbHVkZSAi
SW5zcGVjdG9yQ2xpZW50LmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIE5v
ZGU7CisgICAgY2xhc3MgUGFnZTsKKyAgICBjbGFzcyBTdHJpbmc7CisKKyAgICBjbGFzcyBJbnNw
ZWN0b3JDbGllbnRIYWlrdSA6IHB1YmxpYyBJbnNwZWN0b3JDbGllbnQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOworCisgICAgICAgIHZp
cnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpOworCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGxvY2Fs
aXplZFN0cmluZ3NVUkwoKTsKKworICAgICAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMo
KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKKworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGhpZGVIaWdobGlnaHQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hh
bmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVs
YXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGlu
ZyYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICB9OworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSW5zcGVjdG9yQ2xpZW50SGFpa3VfaAorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0tleWJvYXJkQ29kZXMuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvS2V5Ym9hcmRDb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjZmMGQ0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0tleWJvYXJkQ29kZXMuaApAQCAtMCwwICsxLDU0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0
IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBLZXlib2FyZENvZGVzX2gKKyNk
ZWZpbmUgS2V5Ym9hcmRDb2Rlc19oCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIC8vIFZL
X0xCVVRUT04gKDAxKSBMZWZ0IG1vdXNlIGJ1dHRvbgorICAgIC8vIFZLX1JCVVRUT04gKDAyKSBS
aWdodCBtb3VzZSBidXR0b24KKyAgICAvLyBWS19DQU5DRUwgKDAzKSBDb250cm9sLWJyZWFrIHBy
b2Nlc3NpbmcKKyAgICAvLyBWS19NQlVUVE9OICgwNCkgTWlkZGxlIG1vdXNlIGJ1dHRvbiAodGhy
ZWUtYnV0dG9uIG1vdXNlKQorICAgIC8vIFZLX1hCVVRUT04xICgwNSkKKyAgICAvLyBWS19YQlVU
VE9OMiAoMDYpCisKKyAgICAvLyBWS19CQUNLICgwOCkgQkFDS1NQQUNFIGtleQorICAgIGNvbnN0
IGludCBWS19CQUNLID0gMHgwODsKKworICAgIC8vIFZLX1RBQiAoMDkpIFRBQiBrZXkKKyAgICBj
b25zdCBpbnQgVktfVEFCID0gMHgwOTsKKworICAgIC8vIFZLX0NMRUFSICgwQykgQ0xFQVIga2V5
CisgICAgY29uc3QgaW50IFZLX0NMRUFSID0gMHgwQzsKKworICAgIC8vIFZLX1JFVFVSTiAoMEQp
CisgICAgY29uc3QgaW50IFZLX1JFVFVSTiA9IDB4MEQ7CisKKyAgICAvLyBWS19TSElGVCAoMTAp
IFNISUZUIGtleQorICAgIGNvbnN0IGludCBWS19TSElGVCA9IDB4MTA7CisKKyAgICAvLyBWS19D
T05UUk9MICgxMSkgQ1RSTCBrZXkKKyAgICBjb25zdCBpbnQgVktfQ09OVFJPTCA9IDB4MTE7CisK
KyAgICAvLyBWS19NRU5VICgxMikgQUxUIGtleQorICAgIGNvbnN0IGludCBWS19NRU5VID0gMHgx
MjsKKworICAgIC8vIFZLX1BBVVNFICgxMykgUEFVU0Uga2V5CisgICAgY29uc3QgaW50IFZLX1BB
VVNFID0gMHgxMzsKKworICAgIC8vIFZLX0NBUElUQUwgKDE0KSBDQVBTIExPQ0sga2V5CisgICAg
Y29uc3QgaW50IFZLX0NBUElUQUwgPSAweDE0OworCisgICAgLy8gVktfS0FOQSAoMTUpIElucHV0
IE1ldGhvZCBFZGl0b3IgKElNRSkgS2FuYSBtb2RlCisgICAgY29uc3QgaW50IFZLX0tBTkEgPSAw
eDE1OworCisgICAgLy8gVktfSEFOR1VFTCAoMTUpIElNRSBIYW5ndWVsIG1vZGUgKG1haW50YWlu
ZWQgZm9yIGNvbXBhdGliaWxpdHk7IHVzZSBWS19IQU5HVUwpCisgICAgLy8gVktfSEFOR1VMICgx
NSkgSU1FIEhhbmd1bCBtb2RlCisgICAgY29uc3QgaW50IFZLX0hBTkdVTCA9IDB4MTU7CisKKyAg
ICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgY29uc3QgaW50IFZLX0pVTkpB
ID0gMHgxNzsKKworICAgIC8vIFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKKyAgICBjb25z
dCBpbnQgVktfRklOQUwgPSAweDE4OworCisgICAgLy8gVktfSEFOSkEgKDE5KSBJTUUgSGFuamEg
bW9kZQorICAgIGNvbnN0IGludCBWS19IQU5KQSA9IDB4MTk7CisKKyAgICAvLyBWS19LQU5KSSAo
MTkpIElNRSBLYW5qaSBtb2RlCisgICAgY29uc3QgaW50IFZLX0tBTkpJID0gMHgxOTsKKworICAg
IC8vIFZLX0VTQ0FQRSAoMUIpIEVTQyBrZXkKKyAgICBjb25zdCBpbnQgVktfRVNDQVBFID0gMHgx
QjsKKworICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAorICAgIGNvbnN0IGludCBW
S19DT05WRVJUID0gMHgxQzsKKworICAgIC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29u
dmVydAorICAgIGNvbnN0IGludCBWS19OT05DT05WRVJUID0gMHgxRDsKKworICAgIC8vIFZLX0FD
Q0VQVCAoMUUpIElNRSBhY2NlcHQKKyAgICBjb25zdCBpbnQgVktfQUNDRVBUID0gMHgxRTsKKwor
ICAgIC8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAorICAgIGNv
bnN0IGludCBWS19NT0RFQ0hBTkdFID0gMHgxRjsKKworICAgIC8vIFZLX1NQQUNFICgyMCkgU1BB
Q0VCQVIKKyAgICBjb25zdCBpbnQgVktfU1BBQ0UgPSAweDIwOworCisgICAgLy8gVktfUFJJT1Ig
KDIxKSBQQUdFIFVQIGtleQorICAgIGNvbnN0IGludCBWS19QUklPUiA9IDB4MjE7CisKKyAgICAv
LyBWS19ORVhUICgyMikgUEFHRSBET1dOIGtleQorICAgIGNvbnN0IGludCBWS19ORVhUID0gMHgy
MjsKKworICAgIC8vIFZLX0VORCAoMjMpIEVORCBrZXkKKyAgICBjb25zdCBpbnQgVktfRU5EID0g
MHgyMzsKKworICAgIC8vIFZLX0hPTUUgKDI0KSBIT01FIGtleQorICAgIGNvbnN0IGludCBWS19I
T01FID0gMHgyNDsKKworICAgIC8vIFZLX0xFRlQgKDI1KSBMRUZUIEFSUk9XIGtleQorICAgIGNv
bnN0IGludCBWS19MRUZUID0gMHgyNTsKKworICAgIC8vIFZLX1VQICgyNikgVVAgQVJST1cga2V5
CisgICAgY29uc3QgaW50IFZLX1VQID0gMHgyNjsKKworICAgIC8vIFZLX1JJR0hUICgyNykgUklH
SFQgQVJST1cga2V5CisgICAgY29uc3QgaW50IFZLX1JJR0hUID0gMHgyNzsKKworICAgIC8vIFZL
X0RPV04gKDI4KSBET1dOIEFSUk9XIGtleQorICAgIGNvbnN0IGludCBWS19ET1dOID0gMHgyODsK
KworICAgIC8vIFZLX1NFTEVDVCAoMjkpIFNFTEVDVCBrZXkKKyAgICBjb25zdCBpbnQgVktfU0VM
RUNUID0gMHgyOTsKKworICAgIC8vIFZLX1BSSU5UICgyQSkgUFJJTlQga2V5CisgICAgY29uc3Qg
aW50IFZLX1BSSU5UID0gMHgyQTsKKworICAgIC8vIFZLX0VYRUNVVEUgKDJCKSBFWEVDVVRFIGtl
eQorICAgIGNvbnN0IGludCBWS19FWEVDVVRFID0gMHgyQjsKKworICAgIC8vIFZLX1NOQVBTSE9U
ICgyQykgUFJJTlQgU0NSRUVOIGtleQorICAgIGNvbnN0IGludCBWS19TTkFQU0hPVCA9IDB4MkM7
CisKKyAgICAvLyBWS19JTlNFUlQgKDJEKSBJTlMga2V5CisgICAgY29uc3QgaW50IFZLX0lOU0VS
VCA9IDB4MkQ7CisKKyAgICAvLyBWS19ERUxFVEUgKDJFKSBERUwga2V5CisgICAgY29uc3QgaW50
IFZLX0RFTEVURSA9IDB4MkU7CisKKyAgICAvLyBWS19IRUxQICgyRikgSEVMUCBrZXkKKyAgICBj
b25zdCBpbnQgVktfSEVMUCA9IDB4MkY7CisKKyAgICAvLyAoMzApIDAga2V5CisgICAgY29uc3Qg
aW50IFZLXzAgPSAweDMwOworCisgICAgLy8gKDMxKSAxIGtleQorICAgIGNvbnN0IGludCBWS18x
ID0gMHgzMTsKKworICAgIC8vICgzMikgMiBrZXkKKyAgICBjb25zdCBpbnQgVktfMiA9IDB4MzI7
CisKKyAgICAvLyAoMzMpIDMga2V5CisgICAgY29uc3QgaW50IFZLXzMgPSAweDMzOworCisgICAg
Ly8gKDM0KSA0IGtleQorICAgIGNvbnN0IGludCBWS180ID0gMHgzNDsKKworICAgIC8vICgzNSkg
NSBrZXk7CisKKyAgICBjb25zdCBpbnQgVktfNSA9IDB4MzU7CisKKyAgICAvLyAoMzYpIDYga2V5
CisgICAgY29uc3QgaW50IFZLXzYgPSAweDM2OworCisgICAgLy8gKDM3KSA3IGtleQorICAgIGNv
bnN0IGludCBWS183ID0gMHgzNzsKKworICAgIC8vICgzOCkgOCBrZXkKKyAgICBjb25zdCBpbnQg
VktfOCA9IDB4Mzg7CisKKyAgICAvLyAoMzkpIDkga2V5CisgICAgY29uc3QgaW50IFZLXzkgPSAw
eDM5OworCisgICAgLy8gKDQxKSBBIGtleQorICAgIGNvbnN0IGludCBWS19BID0gMHg0MTsKKwor
ICAgIC8vICg0MikgQiBrZXkKKyAgICBjb25zdCBpbnQgVktfQiA9IDB4NDI7CisKKyAgICAvLyAo
NDMpIEMga2V5CisgICAgY29uc3QgaW50IFZLX0MgPSAweDQzOworCisgICAgLy8gKDQ0KSBEIGtl
eQorICAgIGNvbnN0IGludCBWS19EID0gMHg0NDsKKworICAgIC8vICg0NSkgRSBrZXkKKyAgICBj
b25zdCBpbnQgVktfRSA9IDB4NDU7CisKKyAgICAvLyAoNDYpIEYga2V5CisgICAgY29uc3QgaW50
IFZLX0YgPSAweDQ2OworCisgICAgLy8gKDQ3KSBHIGtleQorICAgIGNvbnN0IGludCBWS19HID0g
MHg0NzsKKworICAgIC8vICg0OCkgSCBrZXkKKyAgICBjb25zdCBpbnQgVktfSCA9IDB4NDg7CisK
KyAgICAvLyAoNDkpIEkga2V5CisgICAgY29uc3QgaW50IFZLX0kgPSAweDQ5OworCisgICAgLy8g
KDRBKSBKIGtleQorICAgIGNvbnN0IGludCBWS19KID0gMHg0QTsKKworICAgIC8vICg0QikgSyBr
ZXkKKyAgICBjb25zdCBpbnQgVktfSyA9IDB4NEI7CisKKyAgICAvLyAoNEMpIEwga2V5CisgICAg
Y29uc3QgaW50IFZLX0wgPSAweDRDOworCisgICAgLy8gKDREKSBNIGtleQorICAgIGNvbnN0IGlu
dCBWS19NID0gMHg0RDsKKworICAgIC8vICg0RSkgTiBrZXkKKyAgICBjb25zdCBpbnQgVktfTiA9
IDB4NEU7CisKKyAgICAvLyAoNEYpIE8ga2V5CisgICAgY29uc3QgaW50IFZLX08gPSAweDRGOwor
CisgICAgLy8gKDUwKSBQIGtleQorICAgIGNvbnN0IGludCBWS19QID0gMHg1MDsKKworICAgIC8v
ICg1MSkgUSBrZXkKKyAgICBjb25zdCBpbnQgVktfUSA9IDB4NTE7CisKKyAgICAvLyAoNTIpIFIg
a2V5CisgICAgY29uc3QgaW50IFZLX1IgPSAweDUyOworCisgICAgLy8gKDUzKSBTIGtleQorICAg
IGNvbnN0IGludCBWS19TID0gMHg1MzsKKworICAgIC8vICg1NCkgVCBrZXkKKyAgICBjb25zdCBp
bnQgVktfVCA9IDB4NTQ7CisKKyAgICAvLyAoNTUpIFUga2V5CisgICAgY29uc3QgaW50IFZLX1Ug
PSAweDU1OworCisgICAgLy8gKDU2KSBWIGtleQorICAgIGNvbnN0IGludCBWS19WID0gMHg1NjsK
KworICAgIC8vICg1NykgVyBrZXkKKyAgICBjb25zdCBpbnQgVktfVyA9IDB4NTc7CisKKyAgICAv
LyAoNTgpIFgga2V5CisgICAgY29uc3QgaW50IFZLX1ggPSAweDU4OworCisgICAgLy8gKDU5KSBZ
IGtleQorICAgIGNvbnN0IGludCBWS19ZID0gMHg1OTsKKworICAgIC8vICg1QSkgWiBrZXkKKyAg
ICBjb25zdCBpbnQgVktfWiA9IDB4NUE7CisKKyAgICAvLyBWS19MV0lOICg1QikgTGVmdCBXaW5k
b3dzIGtleSAoTWljcm9zb2Z0IE5hdHVyYWwga2V5Ym9hcmQpCisgICAgY29uc3QgaW50IFZLX0xX
SU4gPSAweDVCOworCisgICAgLy8gVktfUldJTiAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1
cmFsIGtleWJvYXJkKQorICAgIGNvbnN0IGludCBWS19SV0lOID0gMHg1QzsKKworICAgIC8vIFZL
X0FQUFMgKDVEKSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgIGNvbnN0
IGludCBWS19BUFBTID0gMHg1RDsKKworICAgIC8vIFZLX1NMRUVQICg1RikgQ29tcHV0ZXIgU2xl
ZXAga2V5CisgICAgY29uc3QgaW50IFZLX1NMRUVQID0gMHg1RjsKKworICAgIC8vIFZLX05VTVBB
RDAgKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQwID0g
MHg2MDsKKworICAgIC8vIFZLX05VTVBBRDEgKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorICAg
IGNvbnN0IGludCBWS19OVU1QQUQxID0gMHg2MTsKKworICAgIC8vIFZLX05VTVBBRDIgKDYyKSBO
dW1lcmljIGtleXBhZCAyIGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQyID0gMHg2MjsKKwor
ICAgIC8vIFZLX05VTVBBRDMgKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgIGNvbnN0IGlu
dCBWS19OVU1QQUQzID0gMHg2MzsKKworICAgIC8vIFZLX05VTVBBRDQgKDY0KSBOdW1lcmljIGtl
eXBhZCA0IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ0ID0gMHg2NDsKKworICAgIC8vIFZL
X05VTVBBRDUgKDY1KSBOdW1lcmljIGtleXBhZCA1IGtleQorICAgIGNvbnN0IGludCBWS19OVU1Q
QUQ1ID0gMHg2NTsKKworICAgIC8vIFZLX05VTVBBRDYgKDY2KSBOdW1lcmljIGtleXBhZCA2IGtl
eQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ2ID0gMHg2NjsKKworICAgIC8vIFZLX05VTVBBRDcg
KDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ3ID0gMHg2
NzsKKworICAgIC8vIFZLX05VTVBBRDggKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQorICAgIGNv
bnN0IGludCBWS19OVU1QQUQ4ID0gMHg2ODsKKworICAgIC8vIFZLX05VTVBBRDkgKDY5KSBOdW1l
cmljIGtleXBhZCA5IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ5ID0gMHg2OTsKKworICAg
IC8vIFZLX01VTFRJUExZICg2QSkgTXVsdGlwbHkga2V5CisgICAgY29uc3QgaW50IFZLX01VTFRJ
UExZID0gMHg2QTsKKworICAgIC8vIFZLX0FERCAoNkIpIEFkZCBrZXkKKyAgICBjb25zdCBpbnQg
VktfQUREID0gMHg2QjsKKworICAgIC8vIFZLX1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkK
KyAgICBjb25zdCBpbnQgVktfU0VQQVJBVE9SID0gMHg2QzsKKworICAgIC8vIFZLX1NVQlRSQUNU
ICg2RCkgU3VidHJhY3Qga2V5CisgICAgY29uc3QgaW50IFZLX1NVQlRSQUNUID0gMHg2RDsKKwor
ICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorICAgIGNvbnN0IGludCBWS19ERUNJ
TUFMID0gMHg2RTsKKworICAgIC8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKKyAgICBjb25z
dCBpbnQgVktfRElWSURFID0gMHg2RjsKKworICAgIC8vIFZLX0YxICg3MCkgRjEga2V5CisgICAg
Y29uc3QgaW50IFZLX0YxID0gMHg3MDsKKworICAgIC8vIFZLX0YyICg3MSkgRjIga2V5CisgICAg
Y29uc3QgaW50IFZLX0YyID0gMHg3MTsKKworICAgIC8vIFZLX0YzICg3MikgRjMga2V5CisgICAg
Y29uc3QgaW50IFZLX0YzID0gMHg3MjsKKworICAgIC8vIFZLX0Y0ICg3MykgRjQga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y0ID0gMHg3MzsKKworICAgIC8vIFZLX0Y1ICg3NCkgRjUga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y1ID0gMHg3NDsKKworICAgIC8vIFZLX0Y2ICg3NSkgRjYga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y2ID0gMHg3NTsKKworICAgIC8vIFZLX0Y3ICg3NikgRjcga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y3ID0gMHg3NjsKKworICAgIC8vIFZLX0Y4ICg3NykgRjgga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y4ID0gMHg3NzsKKworICAgIC8vIFZLX0Y5ICg3OCkgRjkga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y5ID0gMHg3ODsKKworICAgIC8vIFZLX0YxMCAoNzkpIEYxMCBrZXkKKyAg
ICBjb25zdCBpbnQgVktfRjEwID0gMHg3OTsKKworICAgIC8vIFZLX0YxMSAoN0EpIEYxMSBrZXkK
KyAgICBjb25zdCBpbnQgVktfRjExID0gMHg3QTsKKworICAgIC8vIFZLX0YxMiAoN0IpIEYxMiBr
ZXkKKyAgICBjb25zdCBpbnQgVktfRjEyID0gMHg3QjsKKworICAgIC8vIFZLX0YxMyAoN0MpIEYx
MyBrZXkKKyAgICBjb25zdCBpbnQgVktfRjEzID0gMHg3QzsKKworICAgIC8vIFZLX0YxNCAoN0Qp
IEYxNCBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE0ID0gMHg3RDsKKworICAgIC8vIFZLX0YxNSAo
N0UpIEYxNSBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE1ID0gMHg3RTsKKworICAgIC8vIFZLX0Yx
NiAoN0YpIEYxNiBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE2ID0gMHg3RjsKKworICAgIC8vIFZL
X0YxNyAoODBIKSBGMTcga2V5CisgICAgY29uc3QgaW50IFZLX0YxNyA9IDB4ODA7CisKKyAgICAv
LyBWS19GMTggKDgxSCkgRjE4IGtleQorICAgIGNvbnN0IGludCBWS19GMTggPSAweDgxOworCisg
ICAgLy8gVktfRjE5ICg4MkgpIEYxOSBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE5ID0gMHg4MjsK
KworICAgIC8vIFZLX0YyMCAoODNIKSBGMjAga2V5CisgICAgY29uc3QgaW50IFZLX0YyMCA9IDB4
ODM7CisKKyAgICAvLyBWS19GMjEgKDg0SCkgRjIxIGtleQorICAgIGNvbnN0IGludCBWS19GMjEg
PSAweDg0OworCisgICAgLy8gVktfRjIyICg4NUgpIEYyMiBrZXkKKyAgICBjb25zdCBpbnQgVktf
RjIyID0gMHg4NTsKKworICAgIC8vIFZLX0YyMyAoODZIKSBGMjMga2V5CisgICAgY29uc3QgaW50
IFZLX0YyMyA9IDB4ODY7CisKKyAgICAvLyBWS19GMjQgKDg3SCkgRjI0IGtleQorICAgIGNvbnN0
IGludCBWS19GMjQgPSAweDg3OworCisgICAgLy8gVktfTlVNTE9DSyAoOTApIE5VTSBMT0NLIGtl
eQorICAgIGNvbnN0IGludCBWS19OVU1MT0NLID0gMHg5MDsKKworICAgIC8vIFZLX1NDUk9MTCAo
OTEpIFNDUk9MTCBMT0NLIGtleQorICAgIGNvbnN0IGludCBWS19TQ1JPTEwgPSAweDkxOworCisg
ICAgLy8gVktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKKyAgICBjb25zdCBpbnQgVktfTFNI
SUZUID0gMHhBMDsKKworICAgIC8vIFZLX1JTSElGVCAoQTEpIFJpZ2h0IFNISUZUIGtleQorICAg
IGNvbnN0IGludCBWS19SU0hJRlQgPSAweEExOworCisgICAgLy8gVktfTENPTlRST0wgKEEyKSBM
ZWZ0IENPTlRST0wga2V5CisgICAgY29uc3QgaW50IFZLX0xDT05UUk9MID0gMHhBMjsKKworICAg
IC8vIFZLX1JDT05UUk9MIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICBjb25zdCBpbnQgVktf
UkNPTlRST0wgPSAweEEzOworCisgICAgLy8gVktfTE1FTlUgKEE0KSBMZWZ0IE1FTlUga2V5Cisg
ICAgY29uc3QgaW50IFZLX0xNRU5VID0gMHhBNDsKKworICAgIC8vIFZLX1JNRU5VIChBNSkgUmln
aHQgTUVOVSBrZXkKKyAgICBjb25zdCBpbnQgVktfUk1FTlUgPSAweEE1OworCisgICAgLy8gVktf
QlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sga2V5CisgICAg
Y29uc3QgaW50IFZLX0JST1dTRVJfQkFDSyA9IDB4QTY7CisKKyAgICAvLyBWS19CUk9XU0VSX0ZP
UldBUkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKKyAgICBjb25z
dCBpbnQgVktfQlJPV1NFUl9GT1JXQVJEID0gMHhBNzsKKworICAgIC8vIFZLX0JST1dTRVJfUkVG
UkVTSCAoQTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZyZXNoIGtleQorICAgIGNvbnN0
IGludCBWS19CUk9XU0VSX1JFRlJFU0ggPSAweEE4OworCisgICAgLy8gVktfQlJPV1NFUl9TVE9Q
IChBOSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5CisgICAgY29uc3QgaW50IFZL
X0JST1dTRVJfU1RPUCA9IDB4QTk7CisKKyAgICAvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdp
bmRvd3MgMjAwMC9YUDogQnJvd3NlciBTZWFyY2gga2V5CisgICAgY29uc3QgaW50IFZLX0JST1dT
RVJfU0VBUkNIID0gMHhBQTsKKworICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2lu
ZG93cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBrZXkKKyAgICBjb25zdCBpbnQgVktfQlJP
V1NFUl9GQVZPUklURVMgPSAweEFCOworCisgICAgLy8gVktfQlJPV1NFUl9IT01FIChBQykgV2lu
ZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtleQorICAgIGNvbnN0IGludCBW
S19CUk9XU0VSX0hPTUUgPSAweEFDOworCisgICAgLy8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5k
b3dzIDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQorICAgIGNvbnN0IGludCBWS19WT0xVTUVfTVVU
RSA9IDB4QUQ7CisKKyAgICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdpbmRvd3MgMjAwMC9YUDog
Vm9sdW1lIERvd24ga2V5CisgICAgY29uc3QgaW50IFZLX1ZPTFVNRV9ET1dOID0gMHhBRTsKKwor
ICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQor
ICAgIGNvbnN0IGludCBWS19WT0xVTUVfVVAgPSAweEFGOworCisgICAgLy8gVktfTUVESUFfTkVY
VF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKKyAgICBjb25zdCBp
bnQgVktfTUVESUFfTkVYVF9UUkFDSyA9IDB4QjA7CisKKyAgICAvLyBWS19NRURJQV9QUkVWX1RS
QUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQcmV2aW91cyBUcmFjayBrZXkKKyAgICBjb25zdCBp
bnQgVktfTUVESUFfUFJFVl9UUkFDSyA9IDB4QjE7CisKKyAgICAvLyBWS19NRURJQV9TVE9QIChC
MikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1lZGlhIGtleQorICAgIGNvbnN0IGludCBWS19NRURJ
QV9TVE9QID0gMHhCMjsKKworICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dz
IDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5CisgICAgY29uc3QgaW50IFZLX01FRElBX1BM
QVlfUEFVU0UgPSAweEIzOworCisgICAgLy8gVktfTEFVTkNIX01BSUwgKEI0KSBXaW5kb3dzIDIw
MDAvWFA6IFN0YXJ0IE1haWwga2V5CisgICAgY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9NQUlM
ID0gMHhCNDsKKworICAgIC8vIFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIw
MDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKKyAgICBjb25zdCBpbnQgVktfTUVESUFfTEFVTkNIX01F
RElBX1NFTEVDVCA9IDB4QjU7CisKKyAgICAvLyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3Mg
MjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMSBrZXkKKyAgICBjb25zdCBpbnQgVktfTUVESUFf
TEFVTkNIX0FQUDEgPSAweEI2OworCisgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dz
IDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5CisgICAgY29uc3QgaW50IFZLX01FRElB
X0xBVU5DSF9BUFAyID0gMHhCNzsKKworICAgIC8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAy
MDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKKyAgICBj
b25zdCBpbnQgVktfT0VNXzEgPSAweEJBOworCisgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5CisgICAgY29u
c3QgaW50IFZLX09FTV9QTFVTID0gMHhCQjsKKworICAgIC8vIFZLX09FTV9DT01NQSAoQkMpIFdp
bmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKKyAgICBj
b25zdCBpbnQgVktfT0VNX0NPTU1BID0gMHhCQzsKKworICAgIC8vIFZLX09FTV9NSU5VUyAoQkQp
IFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKKyAg
ICBjb25zdCBpbnQgVktfT0VNX01JTlVTID0gMHhCRDsKKworICAgIC8vIFZLX09FTV9QRVJJT0Qg
KEJFKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5
CisgICAgY29uc3QgaW50IFZLX09FTV9QRVJJT0QgPSAweEJFOworCisgICAgLy8gVktfT0VNXzIg
KEJGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtl
eWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRo
ZSAnLz8nIGtleQorICAgIGNvbnN0IGludCBWS19PRU1fMiA9IDB4QkY7CisKKyAgICAvLyBWS19P
RU1fMyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkg
Ynkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2Fy
ZCwgdGhlICdgficga2V5CisgICAgY29uc3QgaW50IFZLX09FTV8zID0gMHhDMDsKKworICAgIC8v
IFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4g
dmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtl
eWJvYXJkLCB0aGUgJ1t7JyBrZXkKKyAgICBjb25zdCBpbnQgVktfT0VNXzQgPSAweERCOworCisg
ICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0
IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRh
cmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQorICAgIGNvbnN0IGludCBWS19PRU1fNSA9IDB4REM7
CisKKyAgICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVy
czsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBz
dGFuZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5CisgICAgY29uc3QgaW50IFZLX09FTV82ID0g
MHhERDsKKworICAgIC8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFy
YWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhl
IFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtl
eQorICAgIGNvbnN0IGludCBWS19PRU1fNyA9IDB4REU7CisKKyAgICAvLyBWS19PRU1fOCAoREYp
IFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9h
cmQuCisgICAgY29uc3QgaW50IFZLX09FTV84ID0gMHhERjsKKworICAgIC8vIFZLX09FTV8xMDIg
KEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhl
IGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKKyAgICBjb25zdCBpbnQg
VktfT0VNXzEwMiA9IDB4RTI7CisKKyAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkgV2luZG93cyA5
NS85OC9NZSwgV2luZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBST0NFU1Mga2V5
CisgICAgY29uc3QgaW50IFZLX1BST0NFU1NLRVkgPSAweEU1OworCisgICAgLy8gVktfUEFDS0VU
IChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJzIGFz
IGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0aGUgbG93IHdv
cmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtleWJvYXJkIGlu
cHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJESU5Q
VVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKKyAgICBjb25zdCBpbnQgVktf
UEFDS0VUID0gMHhFNzsKKworICAgIC8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQorICAgIGNvbnN0
IGludCBWS19BVFROID0gMHhGNjsKKworICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5Cisg
ICAgY29uc3QgaW50IFZLX0NSU0VMID0gMHhGNzsKKworICAgIC8vIFZLX0VYU0VMIChGOCkgRXhT
ZWwga2V5CisgICAgY29uc3QgaW50IFZLX0VYU0VMID0gMHhGODsKKworICAgIC8vIFZLX0VSRU9G
IChGOSkgRXJhc2UgRU9GIGtleQorICAgIGNvbnN0IGludCBWS19FUkVPRiA9IDB4Rjk7CisKKyAg
ICAvLyBWS19QTEFZIChGQSkgUGxheSBrZXkKKyAgICBjb25zdCBpbnQgVktfUExBWSA9IDB4RkE7
CisKKyAgICAvLyBWS19aT09NIChGQikgWm9vbSBrZXkKKyAgICBjb25zdCBpbnQgVktfWk9PTSA9
IDB4RkI7CisKKyAgICAvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQor
ICAgIGNvbnN0IGludCBWS19OT05BTUUgPSAweEZDOworCisgICAgLy8gVktfUEExIChGRCkgUEEx
IGtleQorICAgIGNvbnN0IGludCBWS19QQTEgPSAweEZEOworCisgICAgLy8gVktfT0VNX0NMRUFS
IChGRSkgQ2xlYXIga2V5CisgICAgY29uc3QgaW50IFZLX09FTV9DTEVBUiA9IDB4RkU7CisKKyAg
ICBjb25zdCBpbnQgVktfVU5LTk9XTiA9IDA7Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBLZXlib2FyZENvZGVzX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTUlN
RVR5cGVSZWdpc3RyeUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hMGQwZjFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9NSU1F
VHlwZVJlZ2lzdHJ5SGFpa3UuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KworCituYW1lc3BhY2UgV2ViQ29yZSAKK3sKK3N0cnVjdCBFeHRlbnNpb25NYXAgeworICAgIGNv
bnN0IGNoYXIqIGV4dGVuc2lvbjsKKyAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKK307CitzdGF0
aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKKyAgICB7ICJibXAiLCAi
aW1hZ2UvYm1wIiB9LAorICAgIHsgImdpZiIsICJpbWFnZS9naWYiIH0sCisgICAgeyAiaHRtbCIs
ICJ0ZXh0L2h0bWwiIH0sCisgICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwgICAKKyAgICB7
ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCisgICAgeyAianBnIiwgImltYWdlL2pwZWciIH0sCisg
ICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAorICAgIHsgInBkZiIsICJh
cHBsaWNhdGlvbi9wZGYiIH0sCisgICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKKyAgICB7ICJy
c3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKKyAgICB7ICJzdmciLCAiaW1hZ2Uvc3ZnK3ht
bCIgfSwKKyAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCisgICAgeyAidHh0IiwgInRleHQv
cGxhaW4iIH0sCisgICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKKyAgICB7ICJ4bWwi
LCAidGV4dC94bWwiIH0sCisgICAgeyAieHNsIiwgInRleHQveHNsIiB9LAorICAgIHsgInhodG1s
IiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKKyAgICB7IDAsIDAgfQorfTsKKworLy8gRklY
TUU6IFVzZSB0aGUgSGFpa3UgTUlNRSByZWdpc3RyeQorU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQoreworICAgIFN0cmlu
ZyBzID0gZXh0Lmxvd2VyKCk7CisgICAgY29uc3QgRXh0ZW5zaW9uTWFwICplID0gZXh0ZW5zaW9u
TWFwOworICAgIHdoaWxlIChlLT5leHRlbnNpb24pIHsKKyAgICAgICAgaWYgKHMgPT0gZS0+ZXh0
ZW5zaW9uKQorICAgICAgICAgICAgcmV0dXJuIGUtPm1pbWVUeXBlOworICAgICAgICArK2U7Cisg
ICAgfQorICAgIC8vIHVua25vd24sIGxldCdzIGp1c3QgYXNzdW1lIHBsYWluIHRleHQKKyAgICBy
ZXR1cm4gInRleHQvcGxhaW4iOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDMzMTQ1NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvUGFzdGVib2FyZEhhaWt1LmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKworI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRl
IDxDbGlwYm9hcmQuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKK3sK
K30KKworUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKQoreworICAg
IHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gbmV3IFBhc3RlYm9hcmQoKTsKKyAgICBy
ZXR1cm4gcGFzdGVib2FyZDsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihS
YW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZy
YW1lKQoreworICAgIEJNZXNzYWdlICpkYXRhID0gKEJNZXNzYWdlICopIE5VTEw7CisKKyAgICBp
ZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgYmVfY2xpcGJvYXJkLT5DbGVhcigp
OworICAgICAgICBpZiAoKGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAg
ICAgIGRhdGEtPkFkZFN0cmluZygidGV4dC9wbGFpbiIsIEJTdHJpbmcoZnJhbWUtPnNlbGVjdGVk
VGV4dCgpKSk7CisgICAgICAgICAgICBiZV9jbGlwYm9hcmQtPkNvbW1pdCgpOworICAgICAgICB9
CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorfQorCitib29sIFBhc3Rl
Ym9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRleHQoRnJhbWUqIGZy
YW1lKQoreworICAgIEJTdHJpbmcgc3RyaW5nOworICAgIEJNZXNzYWdlICpkYXRhID0gKEJNZXNz
YWdlICopIE5VTEw7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAg
aWYgKChkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCkpKSB7CisgICAgICAgICAgICBkYXRhLT5G
aW5kU3RyaW5nKCJ0ZXh0L3BsYWluIiwgJnN0cmluZyk7CisgICAgICAgIH0KKyAgICAgICAgYmVf
Y2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9CisJcmV0dXJuIHN0cmluZzsKK30KKworUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1l
KiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93UGxhaW5UZXh0
LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiwgRnJhbWUqKQoreworICAgIEJNZXNzYWdlICpkYXRhID0gKEJNZXNzYWdl
ICopIE5VTEw7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgYmVf
Y2xpcGJvYXJkLT5DbGVhcigpOworICAgICAgICBpZiAoKGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRh
dGEoKSkpIHsKKyAgICAgICAgICAgIGRhdGEtPkFkZFN0cmluZygidGV4dC9wbGFpbiIsIHVybC5z
dHJpbmcoKSk7CisgICAgICAgICAgICBiZV9jbGlwYm9hcmQtPkNvbW1pdCgpOworICAgICAgICB9
CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorfQorCit2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlSW1hZ2UoTm9kZSosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQorewor
ICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBiZV9jbGlwYm9hcmQtPkNs
ZWFyKCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBi
b2FyZC0+VW5sb2NrKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50SGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmNjkyZQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50
SGFpa3UuY3BwCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmgiCisKKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRl
IDxJbnRlcmZhY2VEZWZzLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JIYWlrdUtleUNvZGUoY2hh
ciBzaW5nbGVCeXRlLCBpbnQzMiBrZXlDb2RlKQoreworCQlzd2l0Y2goc2luZ2xlQnl0ZSl7CisJ
CWNhc2UgQl9GVU5DVElPTl9LRVk6CisKKwkgICAgCXN3aXRjaCAoa2V5Q29kZSkgeworICAgICAg
ICAJY2FzZSBCX0YxX0tFWToKKyAgICAgICAgCSAgICByZXR1cm4gIkYxIjsKKyAgICAgICAgCWNh
c2UgQl9GMl9LRVk6CisgICAgICAgICAgICAJcmV0dXJuICJGMiI7CisgICAgICAgIAljYXNlIEJf
RjNfS0VZOgorICAgICAgICAgICAgCXJldHVybiAiRjMiOworCQkJY2FzZSBCX0Y0X0tFWToKKwkJ
CQlyZXR1cm4gIkY0IjsKKwkJCWNhc2UgQl9GNV9LRVk6CisJCQkJcmV0dXJuICJGNSI7CisJCQlj
YXNlIEJfRjZfS0VZOgorCQkJCXJldHVybiAiRjYiOworCQkJY2FzZSBCX0Y3X0tFWToKKwkJCQly
ZXR1cm4gIkY3IjsKKwkJCWNhc2UgQl9GOF9LRVk6CisJCQkJcmV0dXJuICJGOCI7CisJCQljYXNl
IEJfRjlfS0VZOgorCQkJCXJldHVybiAiRjkiOworCQkJY2FzZSBCX0YxMF9LRVk6CisJCQkJcmV0
dXJuICJGMTAiOworCQkJY2FzZSBCX0YxMV9LRVk6CisJCQkJcmV0dXJuICJGMTEiOworCQkJY2Fz
ZSBCX0YxMl9LRVk6CisJCQkJcmV0dXJuICJGMTIiOworCQkJY2FzZSBCX1BSSU5UX0tFWToKKwkJ
CQlyZXR1cm4gIlByaW50IjsKKwkJCWNhc2UgQl9QQVVTRV9LRVk6CisJCQkJcmV0dXJuICJQYXVz
ZSI7CisJCQljYXNlIEJfU0NST0xMX0tFWToKKwkJCQlyZXR1cm4gIiI7IC8vRklYCisJCQlkZWZh
dWx0OgorCQkJCXJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVwcGVyKChp
bnQpa2V5Q29kZSkpOworCSAgICAJfTsKKwkgICAgCWJyZWFrOworCisJICAgIGNhc2UgQl9CQUNL
U1BBQ0U6CisJICAgIAlyZXR1cm4gIlUrMDAwOSI7CisJICAgIGNhc2UgQl9MRUZUX0FSUk9XOgor
CSAgICAJcmV0dXJuICJMZWZ0IjsKKwkgICAgY2FzZSBCX1JJR0hUX0FSUk9XOgorCSAgICAJcmV0
dXJuICJSaWdodCI7CisJICAgIGNhc2UgQl9VUF9BUlJPVzoKKwkgICAgCXJldHVybiAiVXAiOwor
CSAgICBjYXNlIEJfRE9XTl9BUlJPVzoKKwkgICAgCXJldHVybiAiRG93biI7CisJICAgIGNhc2Ug
Ql9JTlNFUlQ6CisJICAgIAlyZXR1cm4gIkluc2VydCI7CisJICAgIGNhc2UgQl9FTlRFUjoKKwkg
ICAgCXJldHVybiAiRW50ZXIiOworCSAgICBjYXNlIEJfREVMRVRFOgorCSAgICAJcmV0dXJuICJV
KzAwN0YiOworCSAgICBjYXNlIEJfSE9NRToKKwkgICAgCXJldHVybiAiSG9tZSI7CisJICAgIGNh
c2UgQl9FTkQ6CisJICAgIAlyZXR1cm4gIkVuZCI7CisJICAgIGNhc2UgQl9QQUdFX1VQOgorCSAg
ICAJcmV0dXJuICJQYWdlVXAiOworCSAgICBjYXNlIEJfUEFHRV9ET1dOOgorCSAgICAJcmV0dXJu
ICJQYWdlRG93biI7CisJICAgIC8vY2FzZSBCX1NQQUNFOgorCSAgICAvLwlyZXR1cm4gIiI7CisJ
ICAgIGNhc2UgQl9UQUI6CisJICAgIAlyZXR1cm4gIlUrMDAwOSI7CisJICAgIC8vY2FzZSBCX0VT
Q0FQRToKKwkgICAgLy8JcmV0dXJuICIiOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIAly
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUrJTA0WCIsIHRvQVNDSUlVcHBlcigoaW50KWtleUNvZGUp
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChjaGFy
IHNpbmdsZUJ5dGUpCit7CisgICAgc3dpdGNoIChzaW5nbGVCeXRlKSB7CisgICAgY2FzZSBCX0JB
Q0tTUEFDRToKKyAgICAgICAgcmV0dXJuIFZLX0JBQ0s7IC8vICgwOCkgQkFDS1NQQUNFIGtleQor
ICAgIGNhc2UgQl9UQUI6CisgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5Ki8g
CisgICAgY2FzZSBCX1JFVFVSTjoKKyAgICAgICAgcmV0dXJuIFZLX1JFVFVSTjsgLy8oMEQpIFJl
dHVybiBrZXkKKyAgICBjYXNlIEJfRVNDQVBFOgorICAgICAgICByZXR1cm4gVktfRVNDQVBFOyAv
LyAoMUIpIEVTQyBrZXkKKyAgICBjYXNlIEJfU1BBQ0U6CisgICAgICAgIHJldHVybiBWS19TUEFD
RTsgLy8gKDIwKSBTUEFDRUJBUgorICAgIGNhc2UgQl9QQUdFX1VQOgorICAgICAgICByZXR1cm4g
VktfUFJJT1I7IC8vICgyMSkgUEFHRSBVUCBrZXkKKyAgICBjYXNlIEJfUEFHRV9ET1dOOgorICAg
ICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5CisgICAgY2FzZSBCX0VO
RDoKKyAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5CisgICAgY2FzZSBCX0hP
TUU6CisgICAgICAgIHJldHVybiBWS19IT01FOyAvLyAoMjQpIEhPTUUga2V5CisgICAgY2FzZSBC
X0xFRlRfQVJST1c6CisgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cg
a2V5CisgICAgY2FzZSBCX1VQX0FSUk9XOgorICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikg
VVAgQVJST1cga2V5CisgICAgY2FzZSBCX1JJR0hUX0FSUk9XOgorICAgICAgICByZXR1cm4gVktf
UklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cga2V5CisgICAgY2FzZSBCX0RPV05fQVJST1c6Cisg
ICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5CisgICAgY2FzZSBC
X0lOU0VSVDoKKyAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5CisgICAg
Y2FzZSBCX0RFTEVURToKKyAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5
CisgICAgY2FzZSAweDJlOgorICAgICAgICByZXR1cm4oIDAgKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4oIDAgKTsKKyAgICB9Cit9CisKK1BsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxh
dGZvcm1LZXlib2FyZEV2ZW50KEJNZXNzYWdlICptZXNzYWdlKQoreworCUJTdHJpbmcgYnl0ZXMg
PQltZXNzYWdlLT5GaW5kU3RyaW5nKCJieXRlcyIpOworCW1fdGV4dCA9IFN0cmluZzo6ZnJvbVVU
RjgoYnl0ZXMuU3RyaW5nKCksIGJ5dGVzLkxlbmd0aCgpKTsKKyAgICBtX3VubW9kaWZpZWRUZXh0
ID0gU3RyaW5nKGJ5dGVzLlN0cmluZygpLCBieXRlcy5MZW5ndGgoKSk7CisgICAgbV9rZXlJZGVu
dGlmaWVyID0ga2V5SWRlbnRpZmllckZvckhhaWt1S2V5Q29kZShieXRlcy5CeXRlQXQoMCksIG1l
c3NhZ2UtPkZpbmRJbnQzMigia2V5IikpOworCisgICAgaWYgKG1lc3NhZ2UtPndoYXQgPT0gQl9L
RVlfVVApCisgICAgICAgIG1fdHlwZSA9IEtleVVwOworICAgIGVsc2UgaWYgKG1lc3NhZ2UtPndo
YXQgPT0gQl9LRVlfRE9XTikKKyAgICAgICAgbV90eXBlID0gS2V5RG93bjsKKworICAgIG1fYXV0
b1JlcGVhdCA9IHRydWU7CisgICAgbV9jdHJsS2V5ID0gZmFsc2U7CisgICAgbV9hbHRLZXkgPSBm
YWxzZTsKKyAgICBtX21ldGFLZXkgPSBmYWxzZTsgICAgCisgICAgbV93aW5kb3dzVmlydHVhbEtl
eUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGJ5dGVzLkJ5dGVBdCgwKSk7IAorICAg
IG1faXNLZXlwYWQgPSBmYWxzZTsKKyAgICBtX3NoaWZ0S2V5ID0gZmFsc2U7Cit9CisKK3ZvaWQg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBl
LCBib29sKQoreworICAgIC8vIENhbiBvbmx5IGNoYW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBS
YXdLZXlEb3duIG9yIENoYXIsIGFzIHdlIGxhY2sgaW5mb3JtYXRpb24gZm9yIG90aGVyIGNvbnZl
cnNpb25zLgorICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5RG93bik7CisgICAgbV90eXBlID0gdHlw
ZTsKKyAgICBpZiAodHlwZSA9PSBSYXdLZXlEb3duKSB7CisgICAgICAgIG1fdGV4dCA9IFN0cmlu
ZygpOworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9rZXlJZGVudGlmaWVyID0gU3RyaW5nKCk7CisgICAgICAgIG1fd2luZG93c1Zp
cnR1YWxLZXlDb2RlID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQwMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAKQEAgLTAsMCAr
MSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZl
bmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorCisjaW5j
bHVkZSA8U3VwcG9ydERlZnMuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChjb25z
dCBCTWVzc2FnZSogbXNnLCBCUG9pbnQgc2NyZWVuUG9pbnQpCit7CisgICAgbV90aW1lc3RhbXAg
PSAgV1RGOjpjdXJyZW50VGltZSgpOyAvLyBGSVhNRSAoZnJvbSB0aGUgYm1lc3NhZ2U/KQorICAg
IG1fcG9zaXRpb24gPSBJbnRQb2ludChtc2ctPkZpbmRQb2ludCgiYmU6dmlld193aGVyZSIpKTsK
KyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoc2NyZWVuUG9pbnQpOyAvLyBJbnRQb2lu
dChtc2ctPkZpbmRQb2ludCgid2hlcmUiKSk7CisKKyAgICBtX3NoaWZ0S2V5ID0gZmFsc2U7IC8v
IEZJWE1FCisgICAgbV9jdHJsS2V5ID0gZmFsc2U7CisgICAgbV9hbHRLZXkgPSBmYWxzZTsKKyAg
ICBtX21ldGFLZXkgPSBmYWxzZTsKKworICAgIGludDMyIGJ1dHRvbnMgPSBtc2ctPkZpbmRJbnQz
MigiYnV0dG9ucyIpOworICAgIHN3aXRjaCAoYnV0dG9ucykgeworICAgIGNhc2UgMDoKKyAgICAg
ICAgbV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgkKKyAg
ICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6
CisgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOworICAgICAgICBicmVhazsK
KyAgICB9OworCisgICAgc3dpdGNoIChtc2ctPndoYXQpIHsKKyAgICBjYXNlIEJfTU9VU0VfRE9X
TjoKKyAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50UHJlc3NlZDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBCX01PVVNFX1VQOgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZl
bnRSZWxlYXNlZDsKKyAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOyAvLyBGSVhNRTogd2Vi
Y29yZSB3YW50cyB0byBrbm93IHRoZSBidXR0b24gcmVsZWFzZWQgYnV0IHdlIGRvbid0IGtub3cu
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQl9NT1VTRV9NT1ZFRDoKKyAgICAgICAgbV9ldmVu
dFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOworICAgICAgICBicmVhazsKKyAg
ICB9OworCisgICAgbV9jbGlja0NvdW50ID0gbXNnLT5GaW5kSW50MzIoImNsaWNrcyIpOworCit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0
Zm9ybVNjcm9sbEJhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZDAz
OTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Ny
b2xsQmFyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFBsYXRmb3JtU2Nyb2xsYmFyX2gKKyNkZWZpbmUgUGxhdGZvcm1TY3JvbGxiYXJf
aAorCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisKKyNpbmNs
dWRlIDxpbnRlcmZhY2UvU2Nyb2xsQmFyLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisg
ICAgY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBwdWJsaWMgU2Nyb2xsYmFyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisgICAgICAgIHZpcnR1YWwgflBs
YXRmb3JtU2Nyb2xsYmFyKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFi
bGVkKGJvb2wpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisKKyAgICAgICAgc3RhdGljIGludCBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihCX0hfU0NST0xM
X0JBUl9IRUlHSFQpOyB9CisgICAgICAgIHN0YXRpYyBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oQl9WX1NDUk9MTF9CQVJfV0lEVEgpOyB9CisK
KyAgICAgICAgdm9pZCB2YWx1ZUNoYW5nZWQoZmxvYXQpOworICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFBsYXRmb3JtU2Nyb2xsYmFyX2gKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0MmY2YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHAKQEAgLTAsMCArMSwxMjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29k
QGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgorCisjaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisKKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisKK2NsYXNzIEhhaWt1U2Nyb2xsQmFyIDogcHVi
bGljIEJTY3JvbGxCYXIKK3sKK3B1YmxpYzoKKyAgICBIYWlrdVNjcm9sbEJhcihQbGF0Zm9ybVNj
cm9sbGJhciogcGxhdGZvcm1TY3JvbGxiYXIsIEJWaWV3KiB0YXJnZXQsIG9yaWVudGF0aW9uIHBv
c3R1cmUpIAorICAgICAgICA6IEJTY3JvbGxCYXIoKHBvc3R1cmUgPT0gQl9WRVJUSUNBTCkgPyAK
KyAgICAgICAgICAgICAgICAgICAgICAgIEJSZWN0KDAsIDAsIEJfVl9TQ1JPTExfQkFSX1dJRFRI
LCAwKSA6CisgICAgICAgICAgICAgICAgICAgICAgICBCUmVjdCgwLCAwLCAwLCBCX0hfU0NST0xM
X0JBUl9IRUlHSFQpLAorICAgICAgICAgICAgICAgICAgICAgInNjcm9sbF9iYXIiLCB0YXJnZXQs
IDAsIDEsIHBvc3R1cmUpCisgICAgeworICAgICAgICBtX3BsYXRmb3JtU2Nyb2xsYmFyID0gcGxh
dGZvcm1TY3JvbGxiYXI7CisgICAgfQorCisgICAgdm9pZCBWYWx1ZUNoYW5nZWQoZmxvYXQgbmV3
VmFsdWUpCisgICAgeworICAgICAgICBtX3BsYXRmb3JtU2Nyb2xsYmFyLT52YWx1ZUNoYW5nZWQo
bmV3VmFsdWUpOworICAgIH0KK3ByaXZhdGU6CisgICAgUGxhdGZvcm1TY3JvbGxiYXIqIG1fcGxh
dGZvcm1TY3JvbGxiYXI7Cit9OworCitQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxi
YXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRy
b2xTaXplIHNpemUpCisgICAgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwgc2l6ZSkK
K3sKKyAgICBIYWlrdVNjcm9sbEJhciogc2Nyb2xsYmFyID0gbmV3IEhhaWt1U2Nyb2xsQmFyKHRo
aXMsIC8qdGFyZ2V0Ki9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/IEJfVkVS
VElDQUwgOiBCX0hPUklaT05UQUwpOworICAgIHNldEhhaWt1V2lkZ2V0KHNjcm9sbGJhcik7Cit9
CQkJCQorCitQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKK3sKKyAgICBz
ZXRIYWlrdVdpZGdldChOVUxMKTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dmFsdWVD
aGFuZ2VkKGZsb2F0IG5ld1ZhbHVlKQoreworICAgIHNldFZhbHVlKChpbnQpIG5ld1ZhbHVlKTsK
K30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigpCit7Cisg
ICAgSGFpa3VTY3JvbGxCYXIqIHNjcm9sbGJhciA9IHN0YXRpY19jYXN0PEhhaWt1U2Nyb2xsQmFy
Kj4oaGFpa3VXaWRnZXQoKSk7CisgICAgc2Nyb2xsYmFyLT5TZXRWYWx1ZShtX2N1cnJlbnRQb3Mp
OworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24oKQor
eworICAgIEhhaWt1U2Nyb2xsQmFyKiBzY3JvbGxiYXIgPSBzdGF0aWNfY2FzdDxIYWlrdVNjcm9s
bEJhcio+KGhhaWt1V2lkZ2V0KCkpOworICAgIGZsb2F0IHByb3BvcnRpb24gPSAoZmxvYXQpIG1f
dmlzaWJsZVNpemUgLyAgKGZsb2F0KSBtX3RvdGFsU2l6ZTsKKyAgICBpZiAoIShwcm9wb3J0aW9u
ID09IHNjcm9sbGJhci0+UHJvcG9ydGlvbigpIHx8IHByb3BvcnRpb24gPCAwLjApKQorICAgICAg
ICBzY3JvbGxiYXItPlNldFByb3BvcnRpb24ocHJvcG9ydGlvbik7Cit9CisKK2ludCBQbGF0Zm9y
bVNjcm9sbGJhcjo6d2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBXaWRnZXQ6OndpZHRoKCk7
Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gV2lkZ2V0OjpoZWlnaHQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRGcmFt
ZVJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9v
bCBlbmFibGVkKQoreworICAgIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRFbmFibGVkKGVuYWJsZWQp
OworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRo
aXM/Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVl
bEV2ZW50SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZl
bnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlNjJkYwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2
ZW50SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1XaGVlbEV2ZW50LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVk
ZSA8TWVzc2FnZS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1XaGVlbEV2
ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoQk1lc3NhZ2UgKm1lc3NhZ2UpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQ2ZTJhODQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1BvcHVwTWVudUhhaWt1LmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1l
bnRzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29v
ZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
b3B1cE1lbnUuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisKKyNpbmNsdWRlIDxNZW51Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIAorUG9wdXBNZW51OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCisgICAg
OiBtX3BvcHVwQ2xpZW50KGNsaWVudCkKK3sKKyAgICBtX21lbnUgPSBOVUxMOworfQorCitQb3B1
cE1lbnU6On5Qb3B1cE1lbnUoKQoreworICAgIGRlbGV0ZSBtX21lbnU7CisgICAgbV9tZW51ID0g
TlVMTDsKK30KKwordm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJh
bWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBQb3B1cE1lbnU6OmhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgUG9wdXBNZW51Ojp1cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworYm9vbCBQb3B1cE1lbnU6Oml0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVu
ZGVyVGhlbWVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFp
a3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZWMwZGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3Bw
CkBAIC0wLDAgKzEsMzUyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2Qg
PGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8Rm9udC5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBJIGFtIG5vdCBzdXJlIHdoeSBzbyBtYW55
IG1ldGhvZHMgYXJlIGlubGluZSBoZXJlLiBUaGlzIHdhcyBjb3BpZWQgZnJvbSB0aGUgCisvLyBT
eWxsYWJsZSBwb3J0LiBJdCBzaG91bGQgcHJvYmFibHkgYWxsIGJlIHNjcmFwcGVkLgorY2xhc3Mg
UmVuZGVyVGhlbWVIYWlrdSA6IHB1YmxpYyBSZW5kZXJUaGVtZQoreworcHVibGljOgorICAgIFJl
bmRlclRoZW1lSGFpa3UoKSA6IFJlbmRlclRoZW1lKCkgeyB9CisJflJlbmRlclRoZW1lSGFpa3Uo
KSB7IH0KKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBh
Y3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorICAgIHsK
KyAgICAJcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRl
clRoZW1lPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5k
ZXJUaGVtZUhhaWt1KCkpOworICAgIH0KKworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1UZXh0
U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAorICAgIHsKKyAgICAJcmV0dXJuIENvbG9yKHVp
X2NvbG9yKEJfTUVOVV9TRUxFQ1RFRF9CQUNLR1JPVU5EX0NPTE9SKSk7CisgICAgfQorCisgICAg
Ly8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KKyAgICBDb2xvciBwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CisgICAgeworICAgIAlyZXR1cm4gQ29s
b3IodWlfY29sb3IoQl9DT05UUk9MX0hJR0hMSUdIVF9DT0xPUikpOworICAgIH0KKworICAgIENv
bG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorICAg
IHsKKyAgICAJcmV0dXJuIENvbG9yKHVpX2NvbG9yKEJfQ09OVFJPTF9ISUdITElHSFRfQ09MT1Ip
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3QKKyAgICB7CisgICAgCXJldHVybiBDb2xvcih1aV9jb2xvcihC
X0NPTlRST0xfVEVYVF9DT0xPUikpOworICAgIH0KKworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZv
cm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CisgICAgeworICAgIAly
ZXR1cm4gQ29sb3IodWlfY29sb3IoQl9DT05UUk9MX1RFWFRfQ09MT1IpKTsKKyAgICB9CisKKyAg
ICAvLyBMaXN0IEJveCBzZWxlY3Rpb24gY29sb3IKKyAgIC8qIAorICAgIHZpcnR1YWwgQ29sb3Ig
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1
YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICAqLworCisgICAgdmlydHVhbCBib29sIHBhaW50Q2hl
Y2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikKKyAgICB7CisgICAgICAgIGlmIChpLmNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgCXJldHVybiBmYWxzZTsKKworICAgICAgICAvL2NvZGUgdGFr
ZW4gZnJvbSB0aGUgSGFpa3Ugc291cmNlIGNvZGUgKENoZWNrQm94LmNwcCkKKworICAgICAgICBy
Z2JfY29sb3Igbm9UaW50ID0gdWlfY29sb3IoQl9QQU5FTF9CQUNLR1JPVU5EX0NPTE9SKTsKKyAg
ICAgICAgcmdiX2NvbG9yIGxpZ2h0ZW4xID0gdGludF9jb2xvcihub1RpbnQsIEJfTElHSFRFTl8x
X1RJTlQpOworICAgICAgICByZ2JfY29sb3IgbGlnaHRlbk1heCA9IHRpbnRfY29sb3Iobm9UaW50
LCBCX0xJR0hURU5fTUFYX1RJTlQpOworICAgICAgICByZ2JfY29sb3IgZGFya2VuMSA9IHRpbnRf
Y29sb3Iobm9UaW50LCBCX0RBUktFTl8xX1RJTlQpOworICAgICAgICByZ2JfY29sb3IgZGFya2Vu
MiA9IHRpbnRfY29sb3Iobm9UaW50LCBCX0RBUktFTl8yX1RJTlQpOworICAgICAgICByZ2JfY29s
b3IgZGFya2VuMyA9IHRpbnRfY29sb3Iobm9UaW50LCBCX0RBUktFTl8zX1RJTlQpOworICAgICAg
ICByZ2JfY29sb3IgZGFya2VuNCA9IHRpbnRfY29sb3Iobm9UaW50LCBCX0RBUktFTl80X1RJTlQp
OworCisgICAgICAgIEJSZWN0IHJlY3QgPSByIDsKKyAgICAgICAgQlZpZXcqCXZpZXc9aS5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgICAgICBpZiAoaXNFbmFibGVkKCBvICkpIHsK
KyAgICAgICAgICAgIC8vIEZpbGxpbmcKKyAgICAgICAgICAgIHZpZXctPlNldEhpZ2hDb2xvcihs
aWdodGVuTWF4KTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxSZWN0KHJlY3QpOworCisgICAgICAg
ICAgICB2aWV3LT5CZWdpbkxpbmVBcnJheSg2KTsKKworICAgICAgICAgICAgdmlldy0+QWRkTGlu
ZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LmJvdHRvbSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIGRhcmtlbjEpOworICAgICAgICAgICAgdmll
dy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC50b3ApLCBkYXJrZW4xKTsKKyAgICAgICAg
ICAgICAgICByZWN0Lkluc2V0QnkoMSwgMSk7CisgICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQ
b2ludChyZWN0LmxlZnQsIHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJQ
b2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwgZGFya2VuNCk7CisgICAgICAgICAgICB2aWV3LT5B
ZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCksIGRhcmtlbjQpOworICAgICAgICAgICAg
dmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0ICsgMS4wZiwgcmVjdC5ib3R0b20pLAorICAg
ICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSwgbm9U
aW50KTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QucmlnaHQsIHJlY3Qu
Ym90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0
LnRvcCArIDEuMGYpLCBub1RpbnQpOworCisgICAgICAgICAgICB2aWV3LT5FbmRMaW5lQXJyYXko
KTsKKworICAgICAgICAgICAgLy8gQ2hlY2ttYXJrCisgICAgICAgICAgICBpZiAoIGlzQ2hlY2tl
ZCggbyApICkgeworICAgICAgICAgICAgICAgIHJlY3QuSW5zZXRCeSgyLCAyKTsKKworICAgICAg
ICAgICAgICAgIHZpZXctPlNldEhpZ2hDb2xvcih1aV9jb2xvcihCX0tFWUJPQVJEX05BVklHQVRJ
T05fQ09MT1IpKTsKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXRQZW5TaXplKDIpOworICAgICAg
ICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJfT1BfT1ZFUik7CisgICAgICAgICAgICAg
ICAgICAgIC8vIG5lZWRlZCBiZWNhdXNlIG9mIGFudGktYWxpYXNpbmcKKyAgICAgICAgICAgICAg
ICB2aWV3LT5TdHJva2VMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSkpOworICAg
ICAgICAgICAgICAgIHZpZXctPlN0cm9rZUxpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0
b20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3Qu
dG9wKSk7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0UGVuU2l6ZSgxKTsKKyAgICAgICAgICAg
ICAgICB2aWV3LT5TZXREcmF3aW5nTW9kZShCX09QX0NPUFkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRmlsbGluZworICAgICAgICAgICAgdmlldy0+
U2V0SGlnaENvbG9yKGxpZ2h0ZW4xKTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxSZWN0KHJlY3Qp
OworCisgICAgICAgICAgICAvLyBCb3gKKyAgICAgICAgICAgIHZpZXctPkJlZ2luTGluZUFycmF5
KDYpOworCisgICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3Qu
Ym90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3Ap
LCBub1RpbnQpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCBy
ZWN0LnRvcCksCisgICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRv
cCksIG5vVGludCk7CisgICAgICAgICAgICByZWN0Lkluc2V0QnkoMSwgMSk7CisgICAgICAgICAg
ICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QuYm90dG9tKSwKKyAgICAgICAg
ICAgICAgICAgICAgQlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApLCBkYXJrZW4yKTsKKyAgICAg
ICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApLAorICAgICAg
ICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC50b3ApLCBkYXJrZW4yKTsKKyAg
ICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCArIDEuMGYsIHJlY3QuYm90
dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90dG9t
KSwgZGFya2VuMSk7CisgICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LnJpZ2h0
LCByZWN0LmJvdHRvbSksCisgICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJpZ2h0LCBy
ZWN0LnRvcCArIDEuMGYpLCBkYXJrZW4xKTsKKworICAgICAgICAgICAgdmlldy0+RW5kTGluZUFy
cmF5KCk7CisKKyAgICAgICAgICAgIC8vIENoZWNrbWFyaworICAgICAgICAgICAgaWYgKGlzQ2hl
Y2tlZCggbyApKSB7CisgICAgICAgICAgICAgICAgcmVjdC5JbnNldEJ5KDIsIDIpOworCisgICAg
ICAgICAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKHRpbnRfY29sb3IodWlfY29sb3IoQl9LRVlC
T0FSRF9OQVZJR0FUSU9OX0NPTE9SKSwKKyAgICAgICAgICAgICAgICAgICAgQl9ESVNBQkxFRF9N
QVJLX1RJTlQpKTsKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXRQZW5TaXplKDIpOworICAgICAg
ICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJfT1BfT1ZFUik7CisgICAgICAgICAgICAg
ICAgICAgIC8vIG5lZWRlZCBiZWNhdXNlIG9mIGFudGktYWxpYXNpbmcKKyAgICAgICAgICAgICAg
ICB2aWV3LT5TdHJva2VMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSkpOworICAg
ICAgICAgICAgICAgIHZpZXctPlN0cm9rZUxpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0
b20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3Qu
dG9wKSk7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0UGVuU2l6ZSgxKTsKKyAgICAgICAgICAg
ICAgICB2aWV3LT5TZXREcmF3aW5nTW9kZShCX09QX0NPUFkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9v
bCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIGksIGNvbnN0IEludFJlY3QmIHIpCisgICAgeworICAgICAgICBpZiAoaS5jb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
Ly9jb2RlIHRha2VuIGZyb20gdGhlIEhhaWt1IHNvdXJjZSBjb2RlIChSYWRpb0J1dHRvbi5jcHAp
CisKKyAgICAgICAgLy8gbGF5b3V0IHRoZSByZWN0IGZvciB0aGUgZG90CisgICAgICAgIEJSZWN0
IHJlY3QgPSByIDsKKyAgICAgICAgQlZpZXcqCXZpZXc9aS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKKworICAgICAgICAvLyBjb2xvcnMKKyAgICAgICAgcmdiX2NvbG9yIGJnID0gdWlfY29s
b3IoQl9QQU5FTF9CQUNLR1JPVU5EX0NPTE9SKTsKKyAgICAgICAgcmdiX2NvbG9yIGxpZ2h0ZW5t
YXg7CisgICAgICAgIHJnYl9jb2xvciBsaWdodGVuMTsKKyAgICAgICAgcmdiX2NvbG9yIGRhcmtl
bjE7CisgICAgICAgIHJnYl9jb2xvciBkYXJrZW4yOworICAgICAgICByZ2JfY29sb3IgZGFya2Vu
MzsKKyAgICAgICAgcmdiX2NvbG9yIGRhcmtlbm1heDsKKworICAgICAgICByZ2JfY29sb3IgbmF2
aUNvbG9yID0gdWlfY29sb3IoQl9LRVlCT0FSRF9OQVZJR0FUSU9OX0NPTE9SKTsKKyAgICAgICAg
cmdiX2NvbG9yIGtub2I7CisgICAgICAgIHJnYl9jb2xvciBrbm9iRGFyazsKKyAgICAgICAgcmdi
X2NvbG9yIGtub2JMaWdodDsKKworICAgICAgICBpZiAoaXNFbmFibGVkKCBvICkpIHsKKyAgICAg
ICAgICAgIGxpZ2h0ZW5tYXgJPSB0aW50X2NvbG9yKGJnLCBCX0xJR0hURU5fTUFYX1RJTlQpOwor
ICAgICAgICAgICAgbGlnaHRlbjEJPSB0aW50X2NvbG9yKGJnLCBCX0xJR0hURU5fMV9USU5UKTsK
KyAgICAgICAgICAgIGRhcmtlbjEJCT0gdGludF9jb2xvcihiZywgQl9EQVJLRU5fMV9USU5UKTsK
KyAgICAgICAgICAgIGRhcmtlbjIJCT0gdGludF9jb2xvcihiZywgQl9EQVJLRU5fMl9USU5UKTsK
KyAgICAgICAgICAgIGRhcmtlbjMJCT0gdGludF9jb2xvcihiZywgQl9EQVJLRU5fM19USU5UKTsK
KyAgICAgICAgICAgIGRhcmtlbm1heAk9IHRpbnRfY29sb3IoYmcsIEJfREFSS0VOX01BWF9USU5U
KTsKKworICAgICAgICAgICAga25vYgkJPSBuYXZpQ29sb3I7CisgICAgICAgICAgICBrbm9iRGFy
awk9IHRpbnRfY29sb3IobmF2aUNvbG9yLCBCX0RBUktFTl8zX1RJTlQpOworICAgICAgICAgICAg
a25vYkxpZ2h0CT0gdGludF9jb2xvcihuYXZpQ29sb3IsIDAuMTUpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbGlnaHRlbm1heAk9IHRpbnRfY29sb3IoYmcsIEJfTElHSFRFTl8yX1RJ
TlQpOworICAgICAgICAgICAgbGlnaHRlbjEJPSBiZzsKKyAgICAgICAgICAgIGRhcmtlbjEJCT0g
Ymc7CisgICAgICAgICAgICBkYXJrZW4yCQk9IHRpbnRfY29sb3IoYmcsIEJfREFSS0VOXzFfVElO
VCk7CisgICAgICAgICAgICBkYXJrZW4zCQk9IHRpbnRfY29sb3IoYmcsIEJfREFSS0VOXzJfVElO
VCk7CisgICAgICAgICAgICBkYXJrZW5tYXgJPSB0aW50X2NvbG9yKGJnLCBCX0RJU0FCTEVEX0xB
QkVMX1RJTlQpOworCisgICAgICAgICAgICBrbm9iCQk9IHRpbnRfY29sb3IobmF2aUNvbG9yLCBC
X0xJR0hURU5fMl9USU5UKTsKKyAgICAgICAgICAgIGtub2JEYXJrCT0gdGludF9jb2xvcihuYXZp
Q29sb3IsIEJfTElHSFRFTl8xX1RJTlQpOworICAgICAgICAgICAga25vYkxpZ2h0CT0gdGludF9j
b2xvcihuYXZpQ29sb3IsIChCX0xJR0hURU5fMl9USU5UICsgQl9MSUdIVEVOX01BWF9USU5UKSAv
IDIuMCk7CisJCX0KKworICAgICAgICAvLyBkb3QKKyAgICAgICAgaWYoIGlzQ2hlY2tlZCggbyAp
ICkgeworICAgICAgICAgICAgLy8gZnVsbAorICAgICAgICAgICAgdmlldy0+U2V0SGlnaENvbG9y
KGtub2JEYXJrKTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxFbGxpcHNlKHJlY3QpOworCisgICAg
ICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3Ioa25vYik7CisgICAgICAgICAgICB2aWV3LT5GaWxs
RWxsaXBzZShCUmVjdChyZWN0LmxlZnQgKyAyLCByZWN0LnRvcCArIDIsIHJlY3QucmlnaHQgLSAz
LCByZWN0LmJvdHRvbSAtIDMpKTsKKworICAgICAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKGtu
b2JMaWdodCk7CisgICAgICAgICAgICB2aWV3LT5GaWxsRWxsaXBzZShCUmVjdChyZWN0LmxlZnQg
KyAzLCByZWN0LnRvcCArIDMsIHJlY3QucmlnaHQgLSA1LCByZWN0LmJvdHRvbSAtIDUpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGVtcHR5CisgICAgICAgICAgICB2aWV3LT5T
ZXRIaWdoQ29sb3IobGlnaHRlbm1heCk7CisgICAgICAgICAgICB2aWV3LT5GaWxsRWxsaXBzZShy
ZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJlY3QuSW5zZXRCeSgtMS4wLCAtMS4wKTsKKwor
ICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IoZGFya2VuMSk7CisgICAgICAgIHZpZXctPlN0cm9r
ZUFyYyhyZWN0LCA0NS4wZiwgMTgwLjBmKTsKKyAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKGxp
Z2h0ZW5tYXgpOworICAgICAgICB2aWV3LT5TdHJva2VBcmMocmVjdCwgNDUuMGYsIC0xODAuMGYp
OworICAgICAgICAKKyAgICAgICAgcmVjdC5JbnNldEJ5KDEsIDEpOworCisgICAgICAgIC8vIGlu
bmVyIGNpcmNsZQorICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IoZGFya2VuMyk7CisgICAgICAg
IHZpZXctPlN0cm9rZUFyYyhyZWN0LCA0NS4wZiwgMTgwLjBmKTsKKyAgICAgICAgdmlldy0+U2V0
SGlnaENvbG9yKGJnKTsKKyAgICAgICAgdmlldy0+U3Ryb2tlQXJjKHJlY3QsIDQ1LjBmLCAtMTgw
LjBmKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdm9pZCBhZGp1c3RNZW51
TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqIGUpIGNvbnN0CisgICAgeworICAgIAkvKiBMZWF2ZSBzb21lIHNwYWNlIGZvciB0
aGUgYXJyb3cgKi8KKyAgICAJc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoMjIsIEZpeGVk
KSk7CisgICAgCWNvbnN0IGludCBtaW5IZWlnaHQgPSAyMDsKKyAgICAgICAgc3R5bGUtPnNldE1p
bkhlaWdodChMZW5ndGgobWluSGVpZ2h0LCBGaXhlZCkpOworICAgIH0KKworICAgIGJvb2wgcGFp
bnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCisgICAgeworICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgCitw
cml2YXRlOgorICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSopIGNvbnN0
OworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0Owor
fTsKKworUmVuZGVyVGhlbWUqIHRoZW1lKCkKK3sKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWVIYWlr
dSBydDsKKyAgICByZXR1cm4gJnJ0OworfQorCit2b2lkIFJlbmRlclRoZW1lSGFpa3U6OnN5c3Rl
bUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0
Cit7CisgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKCB0cnVlICk7CisgICAg
Zm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWls
eSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoIChpbnQpIGJlX3BsYWlu
X2ZvbnQtPlNpemUoKSApOworfQorCit2b2lkIFJlbmRlclRoZW1lSGFpa3U6OnNldENoZWNrYm94
U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgaW50IHNpemU9MTA7CisgICAg
Ly8gVGhpcyB3YXMgY29waWVkIGZyb20gdGhlIFF0IHBvcnQ6CisKKyAgICAvLyBJZiB0aGUgd2lk
dGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRv
IGRvLgorICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTog
QSBoYXJkLWNvZGVkIHNpemUgb2YgJ3NpemUnIGlzIHVzZWQuIFRoaXMgaXMgd3JvbmcgYnV0IG5l
Y2Vzc2FyeSBmb3Igbm93LiAKKworICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUsIEZpeGVkKSk7CisK
KyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChzaXplLCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lSGFpa3U6OnNl
dFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyB0
aGUgc2FtZSBhcyBjaGVja2JveGVzLgorICAgIHNldENoZWNrYm94U2l6ZShzdHlsZSk7Cit9CisK
K1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSog
cGFnZSkKK3sKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lSGFpa3U6
OmNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlclRoZW1lKiBmYWxsYmFjayA9IFJlbmRlclRo
ZW1lSGFpa3U6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9TY3JlZW5IYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhh
aWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ3Mjg3Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JlZW5IYWlrdS5jcHAKQEAg
LTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29k
IDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyZWVuLmgiCisKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEdyYXBoaWNz
RGVmcy5oPgorI2luY2x1ZGUgPGludGVyZmFjZS9TY3JlZW4uaD4KKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIFRoaXMgbWlnaHQgYmUgdXNlZnVsLCBidXQgaXQgbm90IHVzZWQgZm9yIG5v
dworLyoKK3N0YXRpYyBCVmlldyogaGFpa3VXaWRnZXRGb3JQYWdlKGNvbnN0IFBhZ2UqIHBhZ2Up
Cit7CisgICAgRnJhbWUqIGZyYW1lID0gKHBhZ2UgPyBwYWdlLT5tYWluRnJhbWUoKSA6IDApOwor
ICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gKGZyYW1lID8gZnJhbWUtPnZpZXcoKSA6IDApOwor
CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGZy
YW1lVmlldy0+aGFpa3VXaWRnZXQoKTsKK30qLworCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRn
ZXQqKQoreworICAgIEJTY3JlZW4gc2NyZWVuOworICAgIC8vIEZJWE1FOiBXZSBhc3N1bWUgdGhp
cyBzY3JlZW4gaXMgdmFsaWQKKyAgICByZXR1cm4gRmxvYXRSZWN0KHNjcmVlbi5GcmFtZSgpKTsK
K30KKworRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCit7Cisg
ICAgLy8gRklYTUU6IFdlIGNvdWxkIHVzZSB0aGUgZ2V0X2Rlc2tiYXJfZnJhbWUoKSBmdW5jdGlv
bgorICAgIC8vIGZyb20gSW50ZXJmYWNlRGVmcy5oIHRvIG1ha2UgdGhpcyBzbWFsbGVyCisgICAg
cmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0KTsKK30KKworaW50IHNjcmVlbkRlcHRoKFdpZGdldCop
Cit7CisgICAgQlNjcmVlbiBzY3JlZW47CisgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGlzIHNj
cmVlbiBpcyB2YWxpZAorICAgIGNvbG9yX3NwYWNlIGNzID0gc2NyZWVuLkNvbG9yU3BhY2UoKTsK
KworICAgIHNpemVfdCBwaXhlbENodW5rLCByb3dBbGlnbm1lbnQsIHBpeGVsc1BlckNodW5rOwor
ICAgIGlmIChnZXRfcGl4ZWxfc2l6ZV9mb3IoY3MsICZwaXhlbENodW5rLCAmcm93QWxpZ25tZW50
LCAmcGl4ZWxzUGVyQ2h1bmspID09IEJfT0spIHsKKyAgICAgICAgLy8gRklYTUU6IE5vdCBzdXJl
IGlmIHRoaXMgaXMgcmlnaHQKKyAgICAgICAgcmV0dXJuIHBpeGVsQ2h1bmsgKiA4OworICAgIH0K
KworICAgIHJldHVybiA4OworfQorCitpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiA4OworfQorCitib29sIHNj
cmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKQoreworICAgIEJTY3JlZW4gc2NyZWVuOworICAgIC8v
IEZJWE1FOiBXZSBhc3N1bWUgdGhpcyBzY3JlZW4gaXMgdmFsaWQKKyAgICByZXR1cm4gc2NyZWVu
LkNvbG9yU3BhY2UoKSA9PSBCX01PTk9DSFJPTUVfMV9CSVQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3
Q2FudmFzSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFz
SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkY2QyNmYKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNI
YWlrdS5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3Jv
bGxWaWV3Q2FudmFzSGFpa3UuaCIKKworI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1
ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRD
b2Rlcy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiVHlwaW5nQ29tbWFuZC5oIgorCisjaW5jbHVkZSAiU2hhcmVkVGltZXJIYWlrdS5oIgorCisj
aW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRlIDxTY3JvbGxCYXIuaD4KKyNpbmNs
dWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8TG9vcGVyLmg+CisjaW5jbHVkZSA8QXV0b2xvY2su
aD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbFZpZXdDYW52YXNIYWlrdTo6U2Ny
b2xsVmlld0NhbnZhc0hhaWt1KFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIEJWaWV3KiBwYXJlbnQs
IHVpbnQzMiBmbGFncykKKyAgICA6IEJWaWV3KEJSZWN0KDAsMCwwLDApLCAic2Nyb2xsX3ZpZXdf
Y2FudmFzIiwgQl9GT0xMT1dfQUxMX1NJREVTLCBCX1dJTExfRFJBVyB8IEJfRlJBTUVfRVZFTlRT
IHwgZmxhZ3MpCisgICAgLCBtX3Njcm9sbFZpZXcoc2Nyb2xsVmlldykKK3sKKyAgICBTZXRWaWV3
Q29sb3IoMjU1LCAyNTUsIDI1NSk7Cit9CisKKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6
OkRyYXcoQlJlY3QgdXBkYXRlUmVjdCkKK3sKKyAgICBGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUo
KSB8fCAhZnYtPmZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisK
KyAgICB3aGlsZSAoZnYtPm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgZnYtPmxheW91dCgpOwor
ICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dCBjdHgodGhpcyk7CisgICAgZnYtPmZyYW1lKCkt
PnBhaW50Q2FyZXQoJmN0eCwgMCwgMCwgdXBkYXRlUmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmll
d0NhbnZhc0hhaWt1OjpNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2UgKm1zZykKK3sKKyAgICAvLyBG
SVhNRTogQ2FwdHVyZSBtb3VzZSB3aGVlbCBtZXNzYWdlcworICAgIEJWaWV3OjpNZXNzYWdlUmVj
ZWl2ZWQobXNnKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNlTW92ZWQo
QlBvaW50IHdoZXJlLCB1aW50MzIgY29kZSwgY29uc3QgQk1lc3NhZ2UqIGFfbWVzc2FnZSkKK3sK
KyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVW
aWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQlBvaW50IHNjcmVlblBvc2l0aW9uID0gQ29udmVydFRvU2NyZWVu
KHdoZXJlKTsKKworICAgIGZ2LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChQ
bGF0Zm9ybU1vdXNlRXZlbnQoYV9tZXNzYWdlLCBzY3JlZW5Qb3NpdGlvbikpOworCisgICAgQlZp
ZXc6Ok1vdXNlTW92ZWQod2hlcmUsIGNvZGUsIGFfbWVzc2FnZSk7Cit9CisKK3ZvaWQgU2Nyb2xs
Vmlld0NhbnZhc0hhaWt1OjpNb3VzZURvd24oQlBvaW50IHdoZXJlKQoreworICAgIEJNZXNzYWdl
KiBtZXNzYWdlPUxvb3BlcigpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGlmKCFtZXNzYWdlKSBy
ZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICBCUG9pbnQgc2NyZWVuUG9zaXRpb24gPSBDb252ZXJ0
VG9TY3JlZW4od2hlcmUpOworCisgICBmdi0+ZnJhbWUoKS0+bG9hZGVyKCktPnJlc2V0TXVsdGlw
bGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKTsKKworICAgaW50MzIgYnV0dG9ucyA9IG1lc3Nh
Z2UtPkZpbmRJbnQzMigiYnV0dG9ucyIpOworCisgICBpZiggYnV0dG9ucyA9PSAyICkKKyAgICAg
ICBmdi0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50KFBsYXRm
b3JtTW91c2VFdmVudChtZXNzYWdlLHNjcmVlblBvc2l0aW9uKSk7CisgICBlbHNlCisgICAgICAg
ZnYtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoUGxhdGZv
cm1Nb3VzZUV2ZW50KG1lc3NhZ2Usc2NyZWVuUG9zaXRpb24pKTsKKworICAgQlZpZXc6Ok1vdXNl
RG93bih3aGVyZSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNb3VzZVVwKEJQ
b2ludCB3aGVyZSkKK3sKKyAgICBCTWVzc2FnZSogbWVzc2FnZT1Mb29wZXIoKS0+Q3VycmVudE1l
c3NhZ2UoKTsKKyAgICBpZighbWVzc2FnZSkgcmV0dXJuOworCisgICAgV2ViQ29yZTo6RnJhbWVW
aWV3KiBmdiA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldyk7
CisgICAgaWYgKCFmdiB8fCAhZnYtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJQ
b2ludCBzY3JlZW5Qb3NpdGlvbiA9IENvbnZlcnRUb1NjcmVlbih3aGVyZSk7CisKKyAgICBmdi0+
ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KFBsYXRmb3Jt
TW91c2VFdmVudChtZXNzYWdlLCBzY3JlZW5Qb3NpdGlvbikpOworCisgICAgQlZpZXc6Ok1vdXNl
VXAod2hlcmUpOworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RG9TY3JvbGwoYm9v
bCBpc0hvcml6b250YWwsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgcHJpbnRmKCJTY3JvbGxW
aWV3Q2FudmFzSGFpa3U6OkRvU2Nyb2xsXG4iKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFz
SGFpa3U6OktleURvd24oY29uc3QgY2hhciogYnl0ZXMsIGludDMyIG51bUJ5dGVzKQoreworICAg
IEJNZXNzYWdlKiBtZXNzYWdlPUxvb3BlcigpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGlmKCFt
ZXNzYWdlKSByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFm
di0+ZnJhbWUoKSkKKyAgICAJcmV0dXJuOworCisgICAgaWYoIWZ2LT5mcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KG1lc3NhZ2UpKSkKKyAgICAJ
cHJpbnRmKCItLT5LZXlEb3duOiBub3QgYXJyaXZlZFxuIik7ICAgIAorCisgICAgaWYoKGludCli
eXRlc1swXSAhPSAoaW50KUJfVEFCKSAvL290aGVycz8KKyAgICAgICAgQlZpZXc6OktleURvd24o
Ynl0ZXMsIG51bUJ5dGVzKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OktleVVw
KGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQzMiBudW1CeXRlcykKK3sKKyAgICBCTWVzc2FnZSogbWVz
c2FnZT1Mb29wZXIoKS0+Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBpZighbWVzc2FnZSkgcmV0dXJu
OworCisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiBmdiA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZy
YW1lVmlldyo+KG1fc2Nyb2xsVmlldyk7CisgICAgaWYgKCFmdiB8fCAhZnYtPmZyYW1lKCkpCisg
ICAgCXJldHVybjsKKworICAgIGlmKGZ2LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZl
bnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KG1lc3NhZ2UpKSkKKyAgICAJcHJpbnRmKCItLT5LZXlV
cDogbm90IGFycml2ZWRcbiIpOyAKKworICAgIGlmKGJ5dGVzWzBdICE9IChpbnQpQl9UQUIpIC8v
b3RoZXJzPworICAgICAgICBCVmlldzo6S2V5VXAoYnl0ZXMsIG51bUJ5dGVzKTsKK30KKwordm9p
ZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OldpbmRvd0FjdGl2YXRlZChib29sIHN0YXRlKQorewor
ICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZVZp
ZXcqPihtX3Njcm9sbFZpZXcpOworICAgIGlmICghZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmdi0+ZnJhbWUoKS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+
c2V0QWN0aXZlKHN0YXRlKTsKK30KKworCit2b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RnJh
bWVSZXNpemVkKGZsb2F0IHcsZmxvYXQgaCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsVmlldykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2Nyb2xsVmlldy0+Y29udGVudHNXaWR0aCgpICE9
IChpbnQpKHcgKyAxKSB8fCBtX3Njcm9sbFZpZXctPmNvbnRlbnRzSGVpZ2h0KCkgIT0gKGludCko
aCArIDEpKSB7CisgICAgCVdlYkNvcmU6OkZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAgIAlpZiAoZnYpeworICAgICAgICAg
ICAgLy9mdi0+ZnJhbWUoKS0+Zm9yY2VMYXlvdXQoKTsKKyAgICAgICAgICAgIC8vZnYtPmFkanVz
dFZpZXdTaXplKCk7CisgICAgICAgICAgICBmdi0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICAJfQor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zMWRmNjg5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Cisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbFZpZXdDYW52
YXNIYWlrdV9oCisjZGVmaW5lIFNjcm9sbFZpZXdDYW52YXNIYWlrdV9oCisKKyNpbmNsdWRlIDxW
aWV3Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFNjcm9sbFZpZXc7CisK
KyAgICBjbGFzcyBTY3JvbGxWaWV3Q2FudmFzSGFpa3UgOiBwdWJsaWMgQlZpZXcKKyAgICB7Cisg
ICAgcHVibGljOgorICAgICAgICBTY3JvbGxWaWV3Q2FudmFzSGFpa3UoU2Nyb2xsVmlldyosIEJW
aWV3KiBwYXJlbnQsIHVpbnQzMiBmbGFncyk7CisKKyAgICAgICAgdm9pZCBTZXRTY3JvbGxCYXJN
YXhWKGZsb2F0IHZWKQorICAgICAgICB7CisgICAgICAgICAgICBtX3Njcm9sbEJhck1heFYgPSB2
VjsKKyAgICAgICAgfQorICAgICAgICB2b2lkIFNldFNjcm9sbEJhck1heEgoZmxvYXQgdkgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsQmFyTWF4SCA9IHZIOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBEcmF3KEJSZWN0IHVwZGF0ZVJlY3QpOworICAgICAgICB2b2lkIE1lc3Nh
Z2VSZWNlaXZlZChCTWVzc2FnZSAqbXNnKTsKKyAgICAgICAgdm9pZCBNb3VzZU1vdmVkKEJQb2lu
dCB3aGVyZSwgdWludDMyIGNvZGUsIGNvbnN0IEJNZXNzYWdlKiBhX21lc3NhZ2UpOworICAgICAg
ICB2b2lkIE1vdXNlRG93bihCUG9pbnQgd2hlcmUpOworICAgICAgICB2b2lkIE1vdXNlVXAoQlBv
aW50IHdoZXJlKTsKKyAgICAgICAgdm9pZCBLZXlEb3duKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQz
MiBudW1CeXRlcyk7CisgICAgICAgIHZvaWQgS2V5VXAoY29uc3QgY2hhciogYnl0ZXMsIGludDMy
IG51bUJ5dGVzKTsKKyAgICAgICAgdm9pZCBXaW5kb3dBY3RpdmF0ZWQoYm9vbCBzdGF0ZSk7CisK
KyAgICAgICAgdm9pZCBTZXRTY3JvbGxWaWV3KFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsVmlldyA9IHNjcm9sbFZpZXc7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIEZyYW1lUmVzaXplZChmbG9hdCB3LCBmbG9hdCBoKTsKKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBEb1Njcm9sbChib29sIGlzSG9yaXpvbnRhbCwg
ZmxvYXQgbXVsdGlwbGllcik7CisKKyAgICAgICAgU2Nyb2xsVmlldyogbV9zY3JvbGxWaWV3Owor
ICAgICAgICBmbG9hdCBtX3Njcm9sbEJhck1heEg7CisgICAgICAgIGZsb2F0IG1fc2Nyb2xsQmFy
TWF4VjsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xs
Vmlld0NhbnZhc0hhaWt1X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9T
Y3JvbGxWaWV3SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3SGFp
a3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGUwMjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAK
QEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFu
aSAgIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqIAorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xs
Vmlldy5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXdDYW52YXNIYWlrdS5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV0tTY3JvbGxWaWV3LmgiCisK
KyNpbmNsdWRlIDxSZWN0Lmg+CisjaW5jbHVkZSA8Vmlldy5oPgorI2luY2x1ZGUgPFdpbmRvdy5o
PgorI2luY2x1ZGUgPHN1cHBvcnQvTG9ja2VyLmg+CisjaW5jbHVkZSA8c3VwcG9ydC9BdXRvbG9j
ay5oPgorI2luY2x1ZGUgPFNjcm9sbFZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlIDogcHVibGljIFdLU2Nyb2xsVmll
dworeworcHVibGljOgorICAgIFNjcm9sbFZpZXdQcml2YXRlKFdlYkNvcmU6OlNjcm9sbFZpZXcq
IHNjcm9sbFZpZXcpCisgICAgICAgIDogV0tTY3JvbGxWaWV3KCJXZWJDb3JlIFNjcm9sbFZpZXdQ
cml2YXRlIiwgbmV3IFNjcm9sbFZpZXdDYW52YXNIYWlrdShOVUxMLCBOVUxMLCAwKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgQl9GT0xMT1dfTk9ORSwgQl9XSUxMX0RSQVcgfCBCX0ZSQU1FX0VW
RU5UUyApIC8vQl9GVUxMX1VQREFURV9PTl9SRVNJWkUKKyAgICAgICAgLCBtX3Njcm9sbFZpZXco
c2Nyb2xsVmlldykKKyAgICAgICAgLCBtX2NvbnRlbnRTaXplKDAsIDApCisgICAgeworICAgICAg
ICBTZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7CisgICAgfQorCisgICAgdm9pZCBBdHRhY2hl
ZFRvV2luZG93KCkKKyAgICB7CisgICAgICAgIFJlc2l6ZUJ5KC0gKEJfVl9TQ1JPTExfQkFSX1dJ
RFRIIC0gMSksIC0gKEJfSF9TQ1JPTExfQkFSX0hFSUdIVCAtIDEpKTsKKwkgICAJV0tTY3JvbGxW
aWV3OjpBdHRhY2hlZFRvV2luZG93KCk7CisgICAgfQorCisJdm9pZCBLZXlEb3duKGNvbnN0IGNo
YXIqIGJ5dGVzLCBpbnQzMiBudW1CeXRlcykKKwl7CisgICAgICAgIC8vIEZJWE1FOiB3aGVuIFNj
cm9sbFZpZXcuaCB0YWtlcyB0aGUgZm9jdXMgc2hvdWxkIGZvY3VzIHRoZSB0YXJnZXQoKS4uCisJ
CisgICAgICAgIGlmKFRhcmdldCgpKQorICAgICAgICAgICAgVGFyZ2V0KCktPktleURvd24oYnl0
ZXMsIG51bUJ5dGVzKTsKKwl9CisKKyAgCXZvaWQgS2V5VXAoY29uc3QgY2hhciogYnl0ZXMsIGlu
dDMyIG51bUJ5dGVzKQorCXsKKyAgICAgICAgLy9zZWUgY29tbWVudCBhYm92ZS4KKworICAgICAg
ICBpZihUYXJnZXQoKSkKKyAgICAgICAgICAgIFRhcmdldCgpLT5LZXlVcChieXRlcywgbnVtQnl0
ZXMpOworCX0KKworICAJQlJlY3QgVmlzaWJsZUZyYW1lKCkKKyAgICB7CisgICAgICAgIGlmIChU
YXJnZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBUYXJnZXQoKS0+Qm91bmRzKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBCb3VuZHMoKTsKKyAgICB9CisKKyAgICB2b2lkIFNl
dENvbnRlbnRTaXplKEJTaXplIHNpemUpCisgICAgeworICAgICAgICBtX2NvbnRlbnRTaXplID0g
c2l6ZTsKKyAJfQorCisgICAgQlNpemUgQ29udGVudFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY29udGVudFNpemU7CisgICAgfQorCisgICAgZmxvYXQgQ29udGVudFdpZHRoKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2NvbnRlbnRTaXplLndpZHRoOworICAgIH0KKworICAgIGZs
b2F0IENvbnRlbnRIZWlnaHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29udGVudFNpemUu
aGVpZ2h0OworICAgIH0KKworICAgIEJQb2ludCBTY3JvbGxPZmZzZXQoKQorICAgIHsKKyAgICAg
ICAgaWYgKFRhcmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIFRhcmdldCgpLT5MZWZ0VG9wKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBCUG9pbnQoMCwgMCk7CisgICAgfQor
CisgICAgdm9pZCBTY3JvbGxCeShmbG9hdCBkaCwgZmxvYXQgZHYpCisgICAgeworICAgICAgICBp
ZiAoVGFyZ2V0KCkpCisgICAgICAgICAgICBUYXJnZXQoKS0+U2Nyb2xsQnkoZGgsIGR2KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6U2Nyb2xsVmlldyogbV9zY3JvbGxWaWV3Owor
ICAgIEJTaXplIG1fY29udGVudFNpemU7Cit9OworCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3Jt
SW5pdCgpCit7CisgICAgbV9kYXRhID0gbmV3IFNjcm9sbFZpZXdQcml2YXRlKHRoaXMpOworfQor
Cit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgZGVsZXRlIG1fZGF0
YTsKK30KKworSW50UmVjdCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVZpc2libGVDb250ZW50UmVjdChi
b29sKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPlZpc2libGVGcmFtZSgpOworfQorCit2
b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFyTW9kZXMoKQoreworICAgIGlmICht
X2RhdGEtPlNjcm9sbEJhck1vZGUoQl9IT1JJWk9OVEFMKSAhPSBob3Jpem9udGFsU2Nyb2xsYmFy
TW9kZSgpKQorICAgICAgICBtX2RhdGEtPlNldFNjcm9sbEJhck1vZGUoQl9IT1JJWk9OVEFMLCBo
b3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpKTsKKworICAgIGlmIChtX2RhdGEtPlNjcm9sbEJhck1v
ZGUoQl9WRVJUSUNBTCkgIT0gdmVydGljYWxTY3JvbGxiYXJNb2RlKCkpCisgICAgICAgIG1fZGF0
YS0+U2V0U2Nyb2xsQmFyTW9kZShCX1ZFUlRJQ0FMLCB2ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKSk7
Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJN
b2RlJiBob3Jpem9udGFsLCBTY3JvbGxiYXJNb2RlJiB2ZXJ0aWNhbCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogc3RpbGwgcHJvYmxtZXMgd2l0aCBkaWZmZXJlbnQgc2Nyb2xsYmFyIG1vZGVzLgor
ICAgICNpZiAwCisKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dp
dGNoIChob3Jpem9udGFsKSB7CisgICAgY2FzZSBTY3JvbGxiYXJBdXRvOgorICAgICAgICBtX2Rh
dGEtPlNldFNjcm9sbEJhck1vZGUoQl9IT1JJWk9OVEFMLCBTY3JvbGxiYXJBdXRvKTsJCisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsYmFyQWx3YXlzT246CisgICAgICAgIG1fZGF0YS0+
U2V0U2Nyb2xsQmFyTW9kZShCX0hPUklaT05UQUwsIFNjcm9sbGJhckFsd2F5c09uKTsgCisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsYmFyQWx3YXlzT2ZmOgorICAgICAgICBtX2RhdGEt
PlNldFNjcm9sbEJhck1vZGUoQl9IT1JJWk9OVEFMLCBTY3JvbGxiYXJBbHdheXNPZmYpOyAKKyAg
ICAgICAgYnJlYWs7CQorICAgIH0KKworICAgIHN3aXRjaCAodmVydGljYWwpIHsKKyAgICBjYXNl
IFNjcm9sbGJhckF1dG86CisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX1ZFUlRJ
Q0FMLCBTY3JvbGxiYXJBdXRvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxiYXJB
bHdheXNPbjoKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwsIFNj
cm9sbGJhckFsd2F5c09uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxiYXJBbHdh
eXNPZmY6CisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX1ZFUlRJQ0FMLCBTY3Jv
bGxiYXJBbHdheXNPZmYpOworICAgICAgICBicmVhazsJCisgICAgfQorCisgICAgI2VuZGlmCit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1BZGRDaGlsZChXaWRnZXQqIGNoaWxkKQorewor
ICAgIEJWaWV3KiB0YXJnZXQgPSBtX2RhdGEtPlRhcmdldCgpOworICAgIGlmICh0YXJnZXQpCisg
ICAgICAgIGNoaWxkLT5zZXRQYXJlbnRXaWRnZXQodGFyZ2V0KTsKK30KKwordm9pZCBTY3JvbGxW
aWV3OjpwbGF0Zm9ybVJlbW92ZUNoaWxkKFdpZGdldCogY2hpbGQpCit7IAorICAgIEJWaWV3KiB0
YXJnZXQgPSBtX2RhdGEtPlRhcmdldCgpOworCisgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQtPkxv
Y2tMb29wZXIoKSkgeworICAgICAgICBjaGlsZC0+aGFpa3VXaWRnZXQoKS0+UmVtb3ZlU2VsZigp
OworICAgICAgICB0YXJnZXQtPlVubG9ja0xvb3BlcigpOworICAgIH0KK30KKwordm9pZCBTY3Jv
bGxWaWV3OjpwbGF0Zm9ybVNldENvbnRlbnRzU2l6ZSgpCit7CisgICAgLy9zY3JvbGxiYXIgZml4
OgorICAgIC8vIG1fZGF0YS0+U2Nyb2xsQmFyKEJfSE9SSVpPTlRBTCktPlNldFJhbmdlKDAsIHcg
LSB3aWR0aCgpIC0xICsgQl9WX1NDUk9MTF9CQVJfV0lEVEgpOworICAgIC8vIG1fZGF0YS0+U2Ny
b2xsQmFyKEJfSE9SSVpPTlRBTCktPlNldFByb3BvcnRpb24oICB3aWR0aCgpICAvIChmbG9hdCko
dy0xKSk7CisKKyAgICAvLyBtX2RhdGEtPlNjcm9sbEJhcihCX1ZFUlRJQ0FMKS0+U2V0UmFuZ2Uo
MCwgaCAtIGhlaWdodCgpIC0xICsgQl9IX1NDUk9MTF9CQVJfSEVJR0hUKTsKKyAgICAvLyBtX2Rh
dGEtPlNjcm9sbEJhcihCX1ZFUlRJQ0FMKS0+U2V0UHJvcG9ydGlvbiggIGhlaWdodCgpICAvIChm
bG9hdCkoaC0xKSk7Cit9CisKK0ludFNpemUgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1Np
emUoKSBjb25zdAoreworLy8gICAgaW50IHdpZHRoID0gMDsKKy8vICAgIGludCBoZWlnaHQgPSAw
OworLy8gICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsKKy8vICAgICAgICBCU2l6ZSBmcmFtZSA9
IHBsYXRmb3JtV2lkZ2V0KCktPlByZWZlcnJlZFNpemUoKTsKKy8vICAgICAgICB3aWR0aCA9IGZy
YW1lLkludGVnZXJXaWR0aCgpOworLy8gICAgICAgIGhlaWdodCA9IGZyYW1lLkludGVnZXJIZWln
aHQoKTsKKy8vICAgICAgICB3aWR0aCA9IDUwMDsKKy8vICAgICAgICBoZWlnaHQgPSA1MDA7Cisv
LyAgICAgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOworLy8gICAgfQorLy8g
ICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIG1fY29udGVudHNT
aXplOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKK3sKKyAgICBpZiAodXBkYXRlUmVjdC53aWR0
aCgpID09IDAgfHwgdXBkYXRlUmVjdC5oZWlnaHQoKSA9PSAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBCUmVjdCB1cGRhdGUodXBkYXRlUmVjdCk7CisKKyAgICBCVmlldyogdGFyZ2V0ID0gbV9k
YXRhLT5UYXJnZXQoKTsKKworICAgIGlmICghdXBkYXRlLklzVmFsaWQoKSB8fCB0YXJnZXQgPT0g
TlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlID0gdXBkYXRlICYgbV9kYXRhLT5W
aXNpYmxlRnJhbWUoKTsKKworICAgIHRhcmdldC0+SW52YWxpZGF0ZSh1cGRhdGUpOworCisgICAg
aWYgKG5vdykKKyAgICAgICAJdGFyZ2V0LT5TeW5jKCk7CisgICAgZWxzZQorICAgICAgIAl0YXJn
ZXQtPkZsdXNoKCk7Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2NyZWVuVG9D
b250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gRklYTUUKKyAg
ICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50
c1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgLy8gRklYTUUKKyAg
ICByZXR1cm4gcmVjdDsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENhbkJsaXRP
blNjcm9sbChib29sIGZsYWcpCit7CisgICAgaWYoIW1fZGF0YSB8fCAhbV9kYXRhLT5UYXJnZXQo
KSkKKyAgICAgICAgcmV0dXJuOworCQorICAgIGlmIChtX2RhdGEtPlZpZXdDb2xvcigpID09IEJf
VFJBTlNQQVJFTlRfQ09MT1IgJiYgIWZsYWcpIHsKKyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29s
b3IoMjU1LCAyNTUsIDI1NSk7CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPlNldFZpZXdDb2xv
cigyNTUsIDI1NSwgMjU1KTsKKyAgICAgICAgbV9kYXRhLT5UYXJnZXQoKS0+SW52YWxpZGF0ZSgp
OworICAgIH0gZWxzZSBpZiAobV9kYXRhLT5WaWV3Q29sb3IoKSAhPSBCX1RSQU5TUEFSRU5UX0NP
TE9SICYmIGZsYWcpIHsKKyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoQl9UUkFOU1BBUkVO
VF9DT0xPUik7CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPlNldFZpZXdDb2xvcihCX1RSQU5T
UEFSRU5UX0NPTE9SKTsKKyAgICAgICAgbV9kYXRhLT5UYXJnZXQoKS0+SW52YWxpZGF0ZSgpOwor
ICAgIH0KKy8vICAgIGlmKGZsYWcpCisvLyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoMjU1
LCAyNTUsIDI1NSk7CisvLyAgICBlbHNlCisvLyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3Io
Ql9UUkFOU1BBUkVOVF9DT0xPUik7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1DYW5C
bGl0T25TY3JvbGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPlZpZXdDb2xvcigpID09
IEJfVFJBTlNQQVJFTlRfQ09MT1I7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jc09m
ZnNjcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICFwbGF0Zm9ybVdpZGdldCgpIHx8ICFwbGF0
Zm9ybVdpZGdldCgpLT5Jc0hpZGRlbigpOworfQorCitib29sIFNjcm9sbFZpZXc6OnBsYXRmb3Jt
U2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0
UGFyZW50V2lkZ2V0KEJWaWV3KiBwYXJlbnQpCit7ICAKKyAgICBpZiAoaXNGcmFtZVZpZXcoKSkg
eworICAgICAgICBTY3JvbGxWaWV3Q2FudmFzSGFpa3UqIGNhbnZhcyA9IHN0YXRpY19jYXN0PFNj
cm9sbFZpZXdDYW52YXNIYWlrdSo+KG1fZGF0YS0+VGFyZ2V0KCkpOworICAgICAgICBpZiAoY2Fu
dmFzKQorICAgICAgICAJY2FudmFzLT5TZXRTY3JvbGxWaWV3KHRoaXMpOworICAgIH0KKworICAg
IFdpZGdldDo6c2V0UGFyZW50V2lkZ2V0KHBhcmVudCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6
c2V0QWxsb3dzU2Nyb2xsaW5nKGJvb2wgYWxsb3dzKQoreworICAgLy9kaXNhYmxlIHNjcm9sbGJh
cnMgb3IgaGlkZSBzY3JvbGxiYXJzPworICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Nl
YXJjaFBvcHVwTWVudUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2VhcmNoUG9w
dXBNZW51SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjQy
NjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVw
TWVudUhhaWt1LmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1NlYXJjaFBvcHVwTWVudTo6U2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCogY2xpZW50
KQorICAgIDogUG9wdXBNZW51KGNsaWVudCkKK3sKK30KKwordm9pZCBTZWFyY2hQb3B1cE1lbnU6
OnNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBzZWFyY2hJdGVtcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFNlYXJjaFBvcHVwTWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgU2VhcmNoUG9wdXBNZW51OjplbmFibGVkKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzkyYzIyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmNwcApAQCAtMCwwICsx
LDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEu
YW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcmVkVGltZXJIYWlrdS5oIgorCisjaW5j
bHVkZSAiQ3VycmVudFRpbWUuaCIKKworI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxN
ZXNzYWdlUnVubmVyLmg+CisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRlIDxz
dXBwb3J0L0F1dG9sb2NrLmg+CisjaW5jbHVkZSA8TG9vcGVyLmg+CisKKyNkZWZpbmUgRklSRV9N
RVNTQUdFICdmaXJlJworCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2hhcmVkVGltZXJIYWlr
dTo6U2hhcmVkVGltZXJIYWlrdSgpCisgICAgOiBCTWVzc2FnZUZpbHRlcihGSVJFX01FU1NBR0Up
CisgICAgLCBtX2ZpcmVUaW1lKDApCisgICAgLCBtX3Nob3VsZFJ1bih0cnVlKSwgbV90aW1lckZ1
bmN0aW9uKE5VTEwpCit7Cit9CisKK2ZpbHRlcl9yZXN1bHQgU2hhcmVkVGltZXJIYWlrdTo6Rmls
dGVyKEJNZXNzYWdlKiBtZXNzYWdlLCBCSGFuZGxlcioqIF90YXJnZXQpCit7CisgICAgaWYgKG1f
dGltZXJGdW5jdGlvbiAmJiBtX3Nob3VsZFJ1bikKKyAgICAgICAgbV90aW1lckZ1bmN0aW9uKCk7
CisKKyAgICByZXR1cm4gQl9TS0lQX01FU1NBR0U7CQorfQorCitTaGFyZWRUaW1lckhhaWt1Ojp+
U2hhcmVkVGltZXJIYWlrdSgpCit7Cit9CisKK3ZvaWQgU2hhcmVkVGltZXJIYWlrdTo6c2V0Rmly
ZVRpbWUoZG91YmxlIGZpcmVUaW1lKQoreworICAgIG1fZmlyZVRpbWUgPSBmaXJlVGltZTsKKyAg
ICBpZiAobV9maXJlVGltZSA+IDAgJiYgbV9zaG91bGRSdW4pIHsKKyAgICAgICAgYmlndGltZV90
IHNsZWVweVRpbWUgPSAoYmlndGltZV90KSgobV9maXJlVGltZSAtIFdURjo6Y3VycmVudFRpbWUo
KSkgKiAxMDAwMDAwKTsKKyAgICAgICAgCisgICAgICAgIGlmKHNsZWVweVRpbWU8MCkKKyAgICAg
ICAgICAgIHNsZWVweVRpbWUgPSAwOworCisgICAgICAgIEJNZXNzYWdlUnVubmVyOjpTdGFydFNl
bmRpbmcoTG9vcGVyKCksIG5ldyBCTWVzc2FnZShGSVJFX01FU1NBR0UpLCBzbGVlcHlUaW1lLCAx
KTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhcmVkVGltZXJIYWlrdTo6c2V0RmlyZUZ1bmN0aW9uKHZv
aWQgKCpmKSgpKQoreworICAgIG1fdGltZXJGdW5jdGlvbiA9IGY7Cit9CisKK3ZvaWQgU2hhcmVk
VGltZXJIYWlrdTo6c2V0U2hvdWxkUnVuKGJvb2wgc2hvdWxkUnVuKQoreworICAgIG1fc2hvdWxk
UnVuID0gc2hvdWxkUnVuOworfQorCisvLyBTdGF0aWMgaW5zdGFuY2UKK1NoYXJlZFRpbWVySGFp
a3UqIGdldFNoYXJlZFRpbWVySGFpa3UoKQoreworICAgIC8vIFBsZWFzZSBub3RlIHRoaXMgaXMg
c3RpbGwgYW4gZXhwZXJpbWVudGFsIHNvbHV0aW9uLgorCisgICAgQkxvb3BlciAqbG9vcGVyID0g
Qkxvb3Blcjo6TG9vcGVyRm9yVGhyZWFkKGZpbmRfdGhyZWFkKE5VTEwpKTsKKyAgICAvLyBBU1NF
UlQobG9vcGVyKTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBjdXJyZW50
IGxvb3BlciBoYXMgYSB2YWxpZCBpZiBub3QgYWRkIGEgbmV3IG9uZS4KKyAgICAvLyB3ZSBzaG91
bGQgYWxzbyBiZSBzdXJlIHRoZSBsb29wZXIgaXMgYSBCV2luZG93Li4KKworICAgIHN0YXRpYyBT
aGFyZWRUaW1lckhhaWt1KiBzaGFyZWRUaW1lcj1OVUxMOworCisgICAgaWYgKHNoYXJlZFRpbWVy
ID09IE5VTEwpIHsKKyAgICAgICAgQkF1dG9sb2NrIGxvY2sobG9vcGVyKTsKKyAgICAgICAgc2hh
cmVkVGltZXIgPSBuZXcgU2hhcmVkVGltZXJIYWlrdSgpOworICAgICAgICBsb29wZXItPkFkZENv
bW1vbkZpbHRlcihzaGFyZWRUaW1lcik7ICAgIAkKKyAgICB9CisKKyAgICByZXR1cm4gc2hhcmVk
VGltZXI7Cit9CisKKy8vIFdlYkNvcmUgZnVuY3Rpb25zCit2b2lkIHNldFNoYXJlZFRpbWVyRmly
ZWRGdW5jdGlvbih2b2lkICgqZikoKSkKK3sKKyAgICBTaGFyZWRUaW1lckhhaWt1KiB0aW1lcj1n
ZXRTaGFyZWRUaW1lckhhaWt1KCk7CisgICAgQkF1dG9sb2NrIGxvY2sodGltZXItPkxvb3Blcigp
KTsKKyAgICB0aW1lci0+c2V0RmlyZUZ1bmN0aW9uKGYpOworfQorCit2b2lkIHNldFNoYXJlZFRp
bWVyRmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKQoreworICAgIFNoYXJlZFRpbWVySGFpa3UqIHRp
bWVyPWdldFNoYXJlZFRpbWVySGFpa3UoKTsKKyAgICBCQXV0b2xvY2sgbG9jayh0aW1lci0+TG9v
cGVyKCkpOworICAgIHRpbWVyLT5zZXRTaG91bGRSdW4odHJ1ZSk7CisgICAJdGltZXItPnNldEZp
cmVUaW1lKGZpcmVUaW1lKTsKK30KKwordm9pZCBzdG9wU2hhcmVkVGltZXIoKQoreworICAgIFNo
YXJlZFRpbWVySGFpa3UqIHRpbWVyPWdldFNoYXJlZFRpbWVySGFpa3UoKTsKKyAgICBCQXV0b2xv
Y2sgbG9jayh0aW1lci0+TG9vcGVyKCkpOworICAgIHRpbWVyLT5zZXRTaG91bGRSdW4oZmFsc2Up
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9T
aGFyZWRUaW1lckhhaWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1
NGI5NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGlt
ZXJIYWlrdS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNoYXJlZFRpbWVySGFpa3VfaAorI2RlZmluZSBTaGFy
ZWRUaW1lckhhaWt1X2gKKworI2luY2x1ZGUgPE9TLmg+CisjaW5jbHVkZSA8TWVzc2FnZUZpbHRl
ci5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBTaGFyZWRUaW1lckhhaWt1
IDogcHVibGljIEJNZXNzYWdlRmlsdGVyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
U2hhcmVkVGltZXJIYWlrdSgpOworICAgICAgICAgICAgflNoYXJlZFRpbWVySGFpa3UoKTsKKwor
ICAgICAgICAgICAgdm9pZCBzZXRGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpOworICAgICAgICAg
ICAgdm9pZCBzZXRGaXJlRnVuY3Rpb24odm9pZCAoKmYpKCkpOworICAgICAgICAgICAgdm9pZCBz
ZXRTaG91bGRSdW4oYm9vbCBzaG91bGRSdW4pOworCisgICAgICAgICAgICAvL3ZvaWQJTWVzc2Fn
ZVJlY2VpdmVkKEJNZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAgICAgICAgIHZpcnR1YWwJZmlsdGVy
X3Jlc3VsdCBGaWx0ZXIoQk1lc3NhZ2UqIG1lc3NhZ2UsIEJIYW5kbGVyKiogX3RhcmdldCk7CisK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIC8vdm9pZCB3YWl0KCk7CisgICAgICAgICAg
ICAvL3N0YXRpYyBpbnQzMiB0aHJlYWRGdW5jdGlvbih2b2lkICpkYXRhKTsKKworICAgICAgICAg
ICAgLy90aHJlYWRfaWQgbV90aHJlYWQ7CisgICAgICAgICAgICAvL3NlbV9pZCBtX3dhaXRTZW07
CisgICAgICAgICAgICBkb3VibGUgbV9maXJlVGltZTsKKyAgICAgICAgICAgIHZvaWQgKCptX3Rp
bWVyRnVuY3Rpb24pKCk7CisgICAgICAgICAgICBib29sIG1fc2hvdWxkUnVuOworICAgIH07CisK
KyAgICBTaGFyZWRUaW1lckhhaWt1KiBnZXRTaGFyZWRUaW1lckhhaWt1KCk7Cit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaGFyZWRUaW1lckhhaWt1X2gKKwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU291bmRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uOWJlZTkzZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU291
bmRIYWlrdS5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdW5kLmgi
CisKKyNpbmNsdWRlIDxCZWVwLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIHN5
c3RlbUJlZXAoKQoreworICAgIGJlZXAoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1N5c3RlbVRpbWVIYWlrdS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1N5c3RlbVRpbWVIYWlrdS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwZDAxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvU3lzdGVtVGltZUhhaWt1LmNwcApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2RvdWJsZSBjdXJyZW50VGltZSgpCit7CisgICAgc3Ry
dWN0IHRpbWV2YWwgdHY7CisgICAgc3RydWN0IHRpbWV6b25lIHR6OworCisgICAgZ2V0dGltZW9m
ZGF5KCZ0diwgJnR6KTsKKyAgICByZXR1cm4gKGRvdWJsZSl0di50dl9zZWMgKyAoZG91YmxlKSh0
di50dl91c2VjIC8gMTAwMDAwMC4wKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhMDlhOAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtMCwwICsxLDIw
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3Mg
PHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11
ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBT
aW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJJbnRQ
b2ludC5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgi
CisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVk
ZSAiU2NyZWVuLmgiCisjaW5jbHVkZSAiSGlzdG9yeS5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgi
CisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9y
ZS5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMu
aCIKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisj
aW5jbHVkZSAiSWNvbkxvYWRlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworLy8gTG9jYWxpemVkU3RyaW5ncworU3RyaW5nIFdlYkNvcmU6OnN1Ym1pdEJ1dHRvbkRlZmF1
bHRMYWJlbCgpIHsgcmV0dXJuICJTdWJtaXQiOyB9CitTdHJpbmcgV2ViQ29yZTo6aW5wdXRFbGVt
ZW50QWx0VGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6cmVzZXRC
dXR0b25EZWZhdWx0TGFiZWwoKSB7IHJldHVybiAiUmVzZXQiOyB9CitTdHJpbmcgV2ViQ29yZTo6
ZGVmYXVsdExhbmd1YWdlKCkgeyByZXR1cm4gImVuIjsgfQorU3RyaW5nIFdlYkNvcmU6OnNlYXJj
aGFibGVJbmRleEludHJvZHVjdGlvbigpIHsgcmV0dXJuICJTZWFyY2hhYmxlIEluZGV4IjsgfQor
U3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwoKSB7IHJldHVybiAiQ2hv
b3NlIEZpbGUiOyB9CitTdHJpbmcgV2ViQ29yZTo6ZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFi
ZWwoKSB7IHJldHVybiAiTm8gZmlsZSBzZWxlY3RlZCI7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93KCkgeyByZXR1cm4gU3RyaW5nKCAiT3Bl
biBpbiBuZXcgdGFiIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRMaW5rVG9EaXNrKCkgeyByZXR1cm4gU3RyaW5nKCAiRG93bmxvYWQgbGluayB0byBkaXNr
IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBi
b2FyZCgpIHsgcmV0dXJuIFN0cmluZyggIkNvcHkgbGluayB0byBjbGlwYm9hcmQiICk7IH0KK1N0
cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdygpIHsg
cmV0dXJuIFN0cmluZyggIk9wZW4gaW1hZ2UgaW4gbmV3IHdpbmRvdyIgKTsgfQorU3RyaW5nIFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKSB7IHJldHVybiBT
dHJpbmcoICJEb3dubG9hZCBpbWFnZSB0byBkaXNrIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQoKSB7IHJldHVybiBTdHJpbmcoICJD
b3B5IGltYWdlIHRvIGNsaXBib2FyZCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51
SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93KCkgeyByZXR1cm4gU3RyaW5nKCAiT3BlbiBmcmFt
ZSBpbiBuZXcgd2luZG93IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFn
Q29weSgpIHsgcmV0dXJuIFN0cmluZyggIkNvcHkiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdHb0JhY2soKSB7IHJldHVybiBTdHJpbmcoICJHbyBiYWNrIiApOyB9CitT
dHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCkgeyByZXR1cm4gU3Ry
aW5nKCAiR28gZm9yd2FyZCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z1N0b3AoKSB7IHJldHVybiBTdHJpbmcoICJTdG9wIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkgeyByZXR1cm4gU3RyaW5nKCAiUmVsb2FkIiApOyB9CitT
dHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ3V0KCkgeyByZXR1cm4gU3RyaW5nKCAi
Q3V0IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKSB7IHJl
dHVybiBTdHJpbmcoICJQYXN0ZSIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ05vR3Vlc3Nlc0ZvdW5kKCkgeyByZXR1cm4gU3RyaW5nKCAiTm8gZ3Vlc3NlcyBmb3VuZCIg
KTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkg
eyByZXR1cm4gU3RyaW5nKCAiSWdub3JlIHNwZWxsaW5nIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6
Y29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZygpIHsgcmV0dXJuIFN0cmluZyggIkxlYXJu
IHNwZWxsaW5nIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU2VhcmNo
V2ViKCkgeyByZXR1cm4gU3RyaW5nKCAiU2VhcmNoIHdlYiIgKTsgfQorU3RyaW5nIFdlYkNvcmU6
OmNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSgpIHsgcmV0dXJuIFN0cmluZygg
Ikxvb2t1cCBpbiBkaWN0aW9uYXJ5IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJ
dGVtVGFnT3BlbkxpbmsoKSB7IHJldHVybiBTdHJpbmcoICJPcGVuIGxpbmsiICk7IH0KK1N0cmlu
ZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkgeyByZXR1cm4gU3Ry
aW5nKCAiSWdub3JlIGdyYW1tYXIiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdTcGVsbGluZ01lbnUoKSB7IHJldHVybiBTdHJpbmcoICJTcGVsbGluZyBtZW51IiApOyB9
CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwoYm9v
bCBzaG93KSB7IHJldHVybiBTdHJpbmcoICJTaG93IHNwZWxsaW5nIHBhbmVsIiApOyB9CitTdHJp
bmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZygpIHsgcmV0dXJuIFN0
cmluZyggIkNoZWNrIHNwZWxsaW5nIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJ
dGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKCkgeyByZXR1cm4gU3RyaW5nKCAiQ2hlY2sg
c3BlbGxpbmcgd2hpbGUgdHlwaW5nIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJ
dGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkgeyByZXR1cm4gU3RyaW5nKCAiQ2hlY2sg
Zm9yIGdyYW1tYXIgd2l0aCBzcGVsbGluZyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRN
ZW51SXRlbVRhZ0ZvbnRNZW51KCkgeyByZXR1cm4gU3RyaW5nKCAiRm9udCBtZW51IiApOyB9CitT
dHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQm9sZCgpIHsgcmV0dXJuIFN0cmluZygg
IkJvbGQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKSB7
IHJldHVybiBTdHJpbmcoICJJdGFsaWMiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdVbmRlcmxpbmUoKSB7IHJldHVybiBTdHJpbmcoICJVbmRlcmxpbmUiICk7IH0KK1N0
cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lKCkgeyByZXR1cm4gU3RyaW5n
KCAiT3V0bGluZSIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1dyaXRp
bmdEaXJlY3Rpb25NZW51KCkgeyByZXR1cm4gU3RyaW5nKCAiV3JpdGluZyBkaXJlY3Rpb24gbWVu
dSIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rp
b24oKSB7IHJldHVybiBTdHJpbmcoICJEZWZhdWx0IGRpcmVjdGlvbiIgKTsgfQorU3RyaW5nIFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0KCkgeyByZXR1cm4gU3RyaW5nKCAi
TGVmdCB0byByaWdodCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1Jp
Z2h0VG9MZWZ0KCkgeyByZXR1cm4gU3RyaW5nKCAiUmlnaHQgdG8gbGVmdCIgKTsgfQorU3RyaW5n
IFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkgeyByZXR1cm4gU3Ry
aW5nKCAiSW5zcGVjdCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OnNlYXJjaE1lbnVOb1JlY2VudFNl
YXJjaGVzVGV4dCgpIHsgcmV0dXJuIFN0cmluZyggIk5vIHJlY2VudCB0ZXh0IHNlYXJjaGVzIiAp
OyB9CitTdHJpbmcgV2ViQ29yZTo6c2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpIHsgcmV0
dXJuIFN0cmluZyggIlJlY2VudCB0ZXh0IHNlYXJjaGVzIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6
c2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCAiQ2xl
YXIgcmVjZW50IHRleHQgc2VhcmNoZXMiICk7IH0KK1N0cmluZyBXZWJDb3JlOjp1bmtub3duRmls
ZVNpemVUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCJVbmtub3duIik7IH0KK1N0cmluZyBXZWJDb3Jl
OjpBWFdlYkFyZWFUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpB
WExpbmtUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWExpc3RN
YXJrZXJUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWEltYWdl
TWFwVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhIZWFkaW5n
VGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6aW1hZ2VUaXRsZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKSB7IHJldHVybiBTdHJp
bmcoIkltYWdlIik7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGly
ZWN0aW9uTWVudSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhCdXR0
b25BY3Rpb25WZXJiKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWFRl
eHRGaWVsZEFjdGlvblZlcmIoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6
OkFYUmFkaW9CdXR0b25BY3Rpb25WZXJiKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBX
ZWJDb3JlOjpBWENoZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKSB7IHJldHVybiBTdHJpbmcoKTsg
fQorU3RyaW5nIFdlYkNvcmU6OkFYVW5jaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkgeyByZXR1
cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWExpbmtBY3Rpb25WZXJiKCkgeyByZXR1
cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWERlZmluaXRpb25MaXN0VGVybVRleHQo
KSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OkFYRGVmaW5pdGlvbkxpc3RE
ZWZpbml0aW9uVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CisKK1ZlY3RvcjxjaGFyPiBsb2Fk
UmVzb3VyY2VJbnRvQXJyYXkoY29uc3QgY2hhciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gVmVjdG9yPGNoYXI+KCk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ym9vbCBoaXN0b3J5Q29udGFpbnMoU3RyaW5nIGNvbnN0JikKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtleVNpemVzKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCitTdHJpbmcgc2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29u
c3QgU3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVybCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK2Zsb2F0IHVzZXJJZGxlVGltZSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMC4wOworfQorCit2b2lkIGNhbGxPbk1haW5UaHJlYWQodm9p
ZCAoKikoKSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3Ry
aW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitTdHJp
bmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBT
Y3JvbGxiYXJUaGVtZSB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQorCit2b2lkIGdldFN1
cHBvcnRlZEtleVNpemVzKFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEluc3BlY3RvckNvbnRy
b2xsZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1
ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNTQ4MjcwMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
VHJhbnNsYXRvckRlY29kZXIuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRyYW5zbGF0b3JEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxUcmFuc2xhdGlvblV0aWxzLmg+Cisj
aW5jbHVkZSA8RGF0YUlPLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKworVHJhbnNsYXRv
ckRlY29kZXI6OlRyYW5zbGF0b3JEZWNvZGVyKCkKK3sKKyAgICBtX2ltYWdlID0gTlVMTDsKKyAg
ICBzZXRTaXplKC0xLC0xKTsKK30KKworYm9vbCBUcmFuc2xhdG9yRGVjb2Rlcjo6aXNTaXplQXZh
aWxhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIShzaXplKCkgPT0gSW50U2l6ZSgtMSwgLTEp
KTsKK30KKworUkdCQTMyQnVmZmVyKiBUcmFuc2xhdG9yRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworLy8gQWxsIHNwZWNpZmlj
IGRlY29kZXIgcGx1Z2lucyBtdXN0IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJl
IGdpdmVuLgordm9pZCBUcmFuc2xhdG9yRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSAKK3sgCisgICAgaWYoYWxsRGF0YVJlY2VpdmVkKSB7
IC8vcHJvZ3Jlc3NpdmUgbG9hZGluZz8KKyAgICAgICAgQk1lbW9yeUlPCWlvKGRhdGEtPmRhdGEo
KSxkYXRhLT5zaXplKCkpOworICAgICAgICBtX2ltYWdlID0gQlRyYW5zbGF0aW9uVXRpbHM6Okdl
dEJpdG1hcCgmaW8pOworICAgICAgICBpZiAobV9pbWFnZSkgeworICAgICAgICAgICAgLy9zZXQg
dGhlIGltYWdlIHNpemUgZGVjb2RlZC4KKyAgICAgICAgICAgIHNldFNpemUobV9pbWFnZS0+Qm91
bmRzKCkuV2lkdGgoKSArIDEsIG1faW1hZ2UtPkJvdW5kcygpLkhlaWdodCgpICsgMSk7CisgICAg
ICAgIH0JCisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yMGZmZDhkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUcmFuc2xhdG9yRGVjb2Rlcl9o
CisjZGVmaW5lIFRyYW5zbGF0b3JEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5o
IgorI2luY2x1ZGUgPEJpdG1hcC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFz
cyBUcmFuc2xhdG9yRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVHJhbnNsYXRvckRlY29kZXIoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNT
aXplQXZhaWxhYmxlKCkgY29uc3Q7CisKKyAgICAgICAgLy8gQWxsIHNwZWNpZmljIGRlY29kZXIg
cGx1Z2lucyBtdXN0IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKSA7CisKKyAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworCisgICAgICAgIEJCaXRtYXAqIGdldEJpdG1hcCgp
IHsgcmV0dXJuIG1faW1hZ2U7IH0KKworICAgIHByaXZhdGU6CisJCUJCaXRtYXAqIG1faW1hZ2U7
CisgICAgfTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRyYW5zbGF0b3JE
ZWNvZGVyX2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZp
ZXcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZpZXcuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjZiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5jcHAKQEAgLTAsMCArMSw0NzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1LCBBeGVsIETDtnJmbGVyLCBheGVsZEBwaW5jLXNv
ZnR3YXJlLmRlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0tTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlIDxMYXlvdXRVdGlscy5oPgorI2lu
Y2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxXaW5kb3cuaD4KKworCitXS1Njcm9sbFZpZXc6
OldLU2Nyb2xsVmlldyhjb25zdCBjaGFyICpuYW1lLCBCVmlldyAqdGFyZ2V0LCB1aW50MzIgcmVz
aXppbmdNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyIGZsYWdzKQorICAg
IDogQlZpZXcoQ2FsY0ZyYW1lKHRhcmdldCwgdHJ1ZSwgdHJ1ZSksIG5hbWUsIHJlc2l6aW5nTW9k
ZSwgTW9kaWZ5RmxhZ3MoZmxhZ3MpKSwKKyAgICBmVGFyZ2V0KHRhcmdldCksCisgICAgZkhvcml6
b250YWxTY3JvbGxCYXIoTlVMTCksCisgICAgZlZlcnRpY2FsU2Nyb2xsQmFyKE5VTEwpLAorICAg
IGZIaWdobGlnaHRlZChmYWxzZSksCisgICAgZlZlcnRpY2FsU2Nyb2xsQmFyTW9kZShTY3JvbGxi
YXJBbHdheXNPbiksCisgICAgZkhvcml6b250YWxTY3JvbGxCYXJNb2RlKFNjcm9sbGJhckFsd2F5
c09uKQkKK3sKKwlib29sIGhvcml6b250YWwgPSB0cnVlOworCWJvb2wgdmVydGljYWwgPSB0cnVl
OworCQorCUJSZWN0IHRhcmdldEZyYW1lOworCWlmIChmVGFyZ2V0KSB7CisJCS8vIGxheW91dCB0
YXJnZXQgYW5kIGFkZCBpdAorCQkvL2ZUYXJnZXQtPlRhcmdldGVkQnlTY3JvbGxWaWV3KHRoaXMp
OworCQlmVGFyZ2V0LT5Nb3ZlVG8oQl9PUklHSU4pOworICAgICAgICAKKwkJQWRkQ2hpbGQoZlRh
cmdldCk7CisJCXRhcmdldEZyYW1lID0gZlRhcmdldC0+RnJhbWUoKTsKKwl9IGVsc2UgeworCQkv
LyBubyB0YXJnZXQgc3BlY2lmaWVkCisJCXRhcmdldEZyYW1lID0gQm91bmRzKCk7CisJCWlmICho
b3Jpem9udGFsKQorCQkJdGFyZ2V0RnJhbWUuYm90dG9tIC09IEJfSF9TQ1JPTExfQkFSX0hFSUdI
VCArIDE7CisJCWlmICh2ZXJ0aWNhbCkKKwkJCXRhcmdldEZyYW1lLnJpZ2h0IC09IEJfVl9TQ1JP
TExfQkFSX1dJRFRIICsgMTsKKwl9CisgICAgCisJaWYgKGhvcml6b250YWwpIHsKKwkJQlJlY3Qg
cmVjdCA9IHRhcmdldEZyYW1lOworCQlyZWN0LnRvcCA9IHJlY3QuYm90dG9tICsgMTsKKwkJcmVj
dC5ib3R0b20gPSByZWN0LnRvcCArIEJfSF9TQ1JPTExfQkFSX0hFSUdIVDsKKwkJZkhvcml6b250
YWxTY3JvbGxCYXIgPSBuZXcgQlNjcm9sbEJhcihyZWN0LCAiX0hTQl8iLCBmVGFyZ2V0LCAwLCAx
MDAwLCBCX0hPUklaT05UQUwpOworCQlBZGRDaGlsZChmSG9yaXpvbnRhbFNjcm9sbEJhcik7CisJ
fQorICAgIAorCWlmICh2ZXJ0aWNhbCkgeworCQlCUmVjdCByZWN0ID0gdGFyZ2V0RnJhbWU7CisJ
CXJlY3QubGVmdCA9IHJlY3QucmlnaHQgKyAxOworCQlyZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsg
Ql9WX1NDUk9MTF9CQVJfV0lEVEg7CisJCWZWZXJ0aWNhbFNjcm9sbEJhciA9IG5ldyBCU2Nyb2xs
QmFyKHJlY3QsICJfVlNCXyIsIGZUYXJnZXQsIDAsIDEwMDAsIEJfVkVSVElDQUwpOworCQlBZGRD
aGlsZChmVmVydGljYWxTY3JvbGxCYXIpOworCX0KKyAgICAKKwlmUHJldmlvdXNXaWR0aCA9IHVp
bnQxNihCb3VuZHMoKS5XaWR0aCgpKTsKKwlmUHJldmlvdXNIZWlnaHQgPSB1aW50MTYoQm91bmRz
KCkuSGVpZ2h0KCkpOworfQorCisKK1dLU2Nyb2xsVmlldzo6V0tTY3JvbGxWaWV3KEJNZXNzYWdl
ICphcmNoaXZlKQorOiBCVmlldyhhcmNoaXZlKSwKK2ZIaWdobGlnaHRlZChmYWxzZSkKK3sKKwkv
LyBJbiBhIHNoYWxsb3cgYXJjaGl2ZSwgd2UgbWF5IG5vdCBoYXZlIGEgdGFyZ2V0IGFueW1vcmUu
IFdlIG11c3QKKwkvLyBiZSBwcmVwYXJlZCBmb3IgdGhpcyBjYXNlCisgICAgCisJLy8gZG9uJ3Qg
Y29uZnVzZSBvdXIgc2Nyb2xsIGJhcnMgd2l0aCBvdXIgKGV2ZW50dWFsKSB0YXJnZXQKKwlpbnQz
MiBmaXJzdEJhciA9IDA7CisJaWYgKCFhcmNoaXZlLT5GaW5kQm9vbCgiX25vX3RhcmdldF8iKSkg
eworCQlmVGFyZ2V0ID0gQ2hpbGRBdCgwKTsKKwkJZmlyc3RCYXIrKzsKKwl9IGVsc2UKKwkJZlRh
cmdldCA9IE5VTEw7CisgICAgCisJLy8gc2VhcmNoIGZvciBvdXIgc2Nyb2xsIGJhcnMKKyAgICAK
KwlmSG9yaXpvbnRhbFNjcm9sbEJhciA9IE5VTEw7CisJZlZlcnRpY2FsU2Nyb2xsQmFyID0gTlVM
TDsKKyAgICAKKwlCVmlldyAqdmlldzsKKwl3aGlsZSAoKHZpZXcgPSBDaGlsZEF0KGZpcnN0QmFy
KyspKSAhPSBOVUxMKSB7CisJCUJTY3JvbGxCYXIgKmJhciA9IGR5bmFtaWNfY2FzdDxCU2Nyb2xs
QmFyICo+KHZpZXcpOworCQlpZiAoYmFyID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJCisJCWlm
IChiYXItPk9yaWVudGF0aW9uKCkgPT0gQl9IT1JJWk9OVEFMKQorCQkJZkhvcml6b250YWxTY3Jv
bGxCYXIgPSBiYXI7CisJCWVsc2UgaWYgKGJhci0+T3JpZW50YXRpb24oKSA9PSBCX1ZFUlRJQ0FM
KQorCQkJZlZlcnRpY2FsU2Nyb2xsQmFyID0gYmFyOworCX0KKyAgICAKKwlmUHJldmlvdXNXaWR0
aCA9IHVpbnQxNihCb3VuZHMoKS5XaWR0aCgpKTsKKwlmUHJldmlvdXNIZWlnaHQgPSB1aW50MTYo
Qm91bmRzKCkuSGVpZ2h0KCkpOworfQorCisKK1dLU2Nyb2xsVmlldzo6fldLU2Nyb2xsVmlldygp
Cit7Cit9CisKKworQkFyY2hpdmFibGUgKgorV0tTY3JvbGxWaWV3OjpJbnN0YW50aWF0ZShCTWVz
c2FnZSAqYXJjaGl2ZSkKK3sKKwlpZiAodmFsaWRhdGVfaW5zdGFudGlhdGlvbihhcmNoaXZlLCAi
V0tTY3JvbGxWaWV3IikpCisJCXJldHVybiBuZXcgV0tTY3JvbGxWaWV3KGFyY2hpdmUpOworICAg
IAorCXJldHVybiBOVUxMOworfQorCisKK3N0YXR1c190CitXS1Njcm9sbFZpZXc6OkFyY2hpdmUo
Qk1lc3NhZ2UgKmFyY2hpdmUsIGJvb2wgZGVlcCkgY29uc3QKK3sKKwlzdGF0dXNfdCBzdGF0dXMg
PSBCVmlldzo6QXJjaGl2ZShhcmNoaXZlLCBkZWVwKTsKKwlpZiAoc3RhdHVzICE9IEJfT0spCisJ
CXJldHVybiBzdGF0dXM7CisgICAgCisJLy8gSWYgdGhpcyBpcyBhIGRlZXAgYXJjaGl2ZSwgdGhl
IEJWaWV3IGNsYXNzIHdpbGwgdGFrZSBjYXJlCisJLy8gb2Ygb3VyIGNoaWxkcmVuLgorICAgIAor
CWlmIChzdGF0dXMgPT0gQl9PSyAmJiBmVGFyZ2V0ID09IE5VTEwpCisJCXN0YXR1cyA9IGFyY2hp
dmUtPkFkZEJvb2woIl9ub190YXJnZXRfIiwgdHJ1ZSk7CisgICAgCisJLy8gVGhlIGhpZ2hsaWdo
dGVkIHN0YXRlIGlzIG5vdCBhcmNoaXZlZCwgYnV0IHNpbmNlIGl0IGlzCisJLy8gdXN1YWxseSAo
b3Igc2hvdWxkIGJlKSB1c2VkIHRvIGluZGljYXRlIGZvY3VzLCB0aGlzCisJLy8gaXMgcHJvYmFi
bHkgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorICAgIAorCXJldHVybiBzdGF0dXM7Cit9CisKKwor
dm9pZAorV0tTY3JvbGxWaWV3OjpBdHRhY2hlZFRvV2luZG93KCkKK3sKKwlCVmlldzo6QXR0YWNo
ZWRUb1dpbmRvdygpOworICAgIAorCWlmICgoZkhvcml6b250YWxTY3JvbGxCYXIgPT0gTlVMTCAm
JiBmVmVydGljYWxTY3JvbGxCYXIgPT0gTlVMTCkKKwkJfHwgKGZIb3Jpem9udGFsU2Nyb2xsQmFy
ICE9IE5VTEwgJiYgZlZlcnRpY2FsU2Nyb2xsQmFyICE9IE5VTEwpCisJCXx8IFdpbmRvdygpLT5M
b29rKCkgIT0gQl9ET0NVTUVOVF9XSU5ET1dfTE9PSykKKwkJcmV0dXJuOworICAgIAorCS8vIElm
IHdlIGhhdmUgb25seSBvbmUgYmFyLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGFyZSBpbiB0aGUK
KwkvLyBib3R0b20gcmlnaHQgZWRnZSBvZiBhIHdpbmRvdyB3aXRoIHRoZSBCX0RPQ1VNRU5UX0xP
T0sgdG8KKwkvLyBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIGJhciB0byBhY2tub3dsZWRnZSB0aGUg
cmVzaXplIGtub2IuCisgICAgCisJQlJlY3QgYm91bmRzID0gQ29udmVydFRvU2NyZWVuKEJvdW5k
cygpKTsKKwlCUmVjdCB3aW5kb3dCb3VuZHMgPSBXaW5kb3coKS0+RnJhbWUoKTsKKyAgICAKKyAg
ICAKKwlpZiAoZkhvcml6b250YWxTY3JvbGxCYXIpCisJCWZIb3Jpem9udGFsU2Nyb2xsQmFyLT5S
ZXNpemVCeSgtQl9WX1NDUk9MTF9CQVJfV0lEVEgsIDApOworCWVsc2UgaWYgKGZWZXJ0aWNhbFNj
cm9sbEJhcikKKwkJZlZlcnRpY2FsU2Nyb2xsQmFyLT5SZXNpemVCeSgwLCAtQl9IX1NDUk9MTF9C
QVJfSEVJR0hUKTsKK30KKworCit2b2lkCitXS1Njcm9sbFZpZXc6OkRldGFjaGVkRnJvbVdpbmRv
dygpCit7CisJQlZpZXc6OkRldGFjaGVkRnJvbVdpbmRvdygpOworfQorCisKK3ZvaWQKK1dLU2Ny
b2xsVmlldzo6QWxsQXR0YWNoZWQoKQoreworCUJWaWV3OjpBbGxBdHRhY2hlZCgpOworfQorCisK
K3ZvaWQKK1dLU2Nyb2xsVmlldzo6QWxsRGV0YWNoZWQoKQoreworCUJWaWV3OjpBbGxEZXRhY2hl
ZCgpOworfQorCisKKworQlNjcm9sbEJhciAqCitXS1Njcm9sbFZpZXc6OlNjcm9sbEJhcihvcmll
bnRhdGlvbiBwb3N0dXJlKSBjb25zdAoreworCWlmIChwb3N0dXJlID09IEJfSE9SSVpPTlRBTCkK
KwkJcmV0dXJuIGZIb3Jpem9udGFsU2Nyb2xsQmFyOworICAgIAorCXJldHVybiBmVmVydGljYWxT
Y3JvbGxCYXI7Cit9CisKK1Njcm9sbGJhck1vZGUJCQorV0tTY3JvbGxWaWV3OjpTY3JvbGxCYXJN
b2RlKG9yaWVudGF0aW9uIHBvc3R1cmUpCit7CisgICAgLy8JcmV0dXJuIFNjcm9sbGJhckF1dG87
CisJCisJaWYgKHBvc3R1cmUgPT0gQl9IT1JJWk9OVEFMKXsKKwkJcHJpbnRmKCIrKysrIEggZ2V0
ICVkXG4iLGZIb3Jpem9udGFsU2Nyb2xsQmFyTW9kZSk7CisJCXJldHVybiBmSG9yaXpvbnRhbFNj
cm9sbEJhck1vZGU7CisJfQorICAgIAorCXByaW50ZigiKysrKyBWIGdldCAlZFxuIixmVmVydGlj
YWxTY3JvbGxCYXJNb2RlKTsJCisJcmV0dXJuIGZWZXJ0aWNhbFNjcm9sbEJhck1vZGU7CQorfQor
Cit2b2lkCitXS1Njcm9sbFZpZXc6OlNldFNjcm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9zdHVy
ZSwgU2Nyb2xsYmFyTW9kZSBtb2RlKQoreworCWlmIChwb3N0dXJlID09IEJfSE9SSVpPTlRBTCAm
JiBtb2RlICE9IGZIb3Jpem9udGFsU2Nyb2xsQmFyTW9kZSkgeworICAgICAgICAKKwkJcHJpbnRm
KCIrKysrIEggY3VycmVudCAlbGQgd2FudCAlbGRcbiIsZkhvcml6b250YWxTY3JvbGxCYXJNb2Rl
LG1vZGUpOworICAgICAgICAKKwkJaWYobW9kZSA9PSBTY3JvbGxiYXJBbHdheXNPbiB8fCBtb2Rl
ID09IFNjcm9sbGJhckF1dG8gKSB7CisJCQlwcmludGYoIisrKysrIEggU2hvdyglZClcbiIsKGlu
dCl0aGlzKTsKKwkJCWlmKGZIb3Jpem9udGFsU2Nyb2xsQmFyLT5Jc0hpZGRlbigpKXsKKwkJCQlm
SG9yaXpvbnRhbFNjcm9sbEJhci0+U2hvdygpOworCQkJCWlmIChUYXJnZXQoKSkKKwkJCQkJVGFy
Z2V0KCktPlJlc2l6ZUJ5KDAsIC1CX0hfU0NST0xMX0JBUl9IRUlHSFQpOworCQkJfQorCQl9CisJ
CWlmKG1vZGUgPT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKXsKKwkJCXByaW50ZigiKysrKysgSCBIaWRl
KCVkKVxuIiwoaW50KXRoaXMpOwkJCisJCQlpZighZkhvcml6b250YWxTY3JvbGxCYXItPklzSGlk
ZGVuKCkpeworCQkJCWZIb3Jpem9udGFsU2Nyb2xsQmFyLT5IaWRlKCk7CisJCQkJaWYgKFRhcmdl
dCgpKQorCQkJCQlUYXJnZXQoKS0+UmVzaXplQnkoMCwgQl9IX1NDUk9MTF9CQVJfSEVJR0hUKTsK
KwkJCX0KKwkJfQkKKwkJCisJCS8vc2V0IHRoZSBuZXcgbW9kZS4KKwkJZkhvcml6b250YWxTY3Jv
bGxCYXJNb2RlID0gbW9kZTsJCisJfSAKKwkKKwkKKyAgICAKKwlpZiAocG9zdHVyZSA9PSBCX1ZF
UlRJQ0FMICYmIG1vZGUgIT0gZlZlcnRpY2FsU2Nyb2xsQmFyTW9kZSApIHsKKyAgICAgICAgCisJ
CXByaW50ZigiKysrKyBWIGN1cnJlbnQgJWxkIHdhbnQgJWxkXG4iLGZWZXJ0aWNhbFNjcm9sbEJh
ck1vZGUsbW9kZSk7CisgICAgICAgIAorCQlpZiAobW9kZSA9PSBTY3JvbGxiYXJBbHdheXNPbiB8
fCBtb2RlID09IFNjcm9sbGJhckF1dG8pIHsKKwkJCXByaW50ZigiKysrKysgViBTaG93KCVkKVxu
IiwoaW50KXRoaXMpOworCQkJaWYoZlZlcnRpY2FsU2Nyb2xsQmFyLT5Jc0hpZGRlbigpKXsKKwkJ
CQlmVmVydGljYWxTY3JvbGxCYXItPlNob3coKTsKKwkJCQlpZiAoVGFyZ2V0KCkpCQkJCisJCQkJ
CVRhcmdldCgpLT5SZXNpemVCeSgtQl9WX1NDUk9MTF9CQVJfV0lEVEgsIDApOworCQkJfQorCQl9
CisJCWlmIChtb2RlID09IFNjcm9sbGJhckFsd2F5c09mZikgewkJCisJCQlwcmludGYoIisrKysr
IFYgSGlkZSglZClcbiIsKGludCl0aGlzKTsKKwkJCWlmKCFmVmVydGljYWxTY3JvbGxCYXItPklz
SGlkZGVuKCkpIHsKKwkJCQlmVmVydGljYWxTY3JvbGxCYXItPkhpZGUoKTsKKwkJCQlpZiAoVGFy
Z2V0KCkpCQkJCisJCQkJCVRhcmdldCgpLT5SZXNpemVCeShCX1ZfU0NST0xMX0JBUl9XSURUSCwg
MCk7CisJCQl9CisJCX0JCisJCQorCQkvL3NldCB0aGUgbmV3IG1vZGU6CisJCWZWZXJ0aWNhbFNj
cm9sbEJhck1vZGUgPSBtb2RlOwkJCQorCX0gCisgICAgCit9CisKKwordm9pZAorV0tTY3JvbGxW
aWV3OjpTZXRUYXJnZXQoQlZpZXcgKnRhcmdldCkKK3sKKwlpZiAoZlRhcmdldCA9PSB0YXJnZXQp
CisJCXJldHVybjsKKyAgICAKKwlpZiAoZlRhcmdldCAhPSBOVUxMKSB7CisJCWZUYXJnZXQtPlRh
cmdldGVkQnlTY3JvbGxWaWV3KE5VTEwpOworCQlSZW1vdmVDaGlsZChmVGFyZ2V0KTsKKyAgICAg
ICAgCisJCS8vIHdlIGFyZSBub3Qgc3VwcG9zZWQgdG8gZGVsZXRlIHRoZSB2aWV3CisJfQorICAg
IAorCWZUYXJnZXQgPSB0YXJnZXQ7CisJaWYgKGZIb3Jpem9udGFsU2Nyb2xsQmFyICE9IE5VTEwp
CisJCWZIb3Jpem9udGFsU2Nyb2xsQmFyLT5TZXRUYXJnZXQodGFyZ2V0KTsKKwlpZiAoZlZlcnRp
Y2FsU2Nyb2xsQmFyICE9IE5VTEwpCisJCWZWZXJ0aWNhbFNjcm9sbEJhci0+U2V0VGFyZ2V0KHRh
cmdldCk7CisgICAgCisJaWYgKHRhcmdldCAhPSBOVUxMKSB7CisJCS8vdGFyZ2V0LT5UYXJnZXRl
ZEJ5U2Nyb2xsVmlldyh0aGlzKTsKKyAgICAgICAgCisJCUFkZENoaWxkKHRhcmdldCwgQ2hpbGRB
dCgwKSk7CisgICAgICAgIC8vIFRoaXMgd2F5LCB3ZSBhcmUgbWFraW5nIHN1cmUgdGhhdCB0aGUg
dGFyZ2V0IHdpbGwKKyAgICAgICAgLy8gYmUgYWRkZWQgdG9wIG1vc3QgaW4gdGhlIGxpc3QgKHdo
aWNoIGlzIGltcG9ydGFudAorICAgICAgICAvLyBmb3IgdW5hcmNoaXZpbmcpCisJfQorfQorCisK
K0JWaWV3ICoKK1dLU2Nyb2xsVmlldzo6VGFyZ2V0KCkgY29uc3QKK3sKKwlyZXR1cm4gZlRhcmdl
dDsKK30KKworCit2b2lkCitXS1Njcm9sbFZpZXc6Ok1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSAq
bWVzc2FnZSkKK3sKKwlzd2l0Y2ggKG1lc3NhZ2UtPndoYXQpIHsKKwkJZGVmYXVsdDoKKwkJCUJW
aWV3OjpNZXNzYWdlUmVjZWl2ZWQobWVzc2FnZSk7CisJfQorfQorCisKK3ZvaWQKK1dLU2Nyb2xs
Vmlldzo6TW91c2VEb3duKEJQb2ludCBwb2ludCkKK3sKKwlCVmlldzo6TW91c2VEb3duKHBvaW50
KTsKK30KKworCit2b2lkCitXS1Njcm9sbFZpZXc6Ok1vdXNlVXAoQlBvaW50IHBvaW50KQorewor
CUJWaWV3OjpNb3VzZVVwKHBvaW50KTsKK30KKworCit2b2lkCitXS1Njcm9sbFZpZXc6Ok1vdXNl
TW92ZWQoQlBvaW50IHBvaW50LCB1aW50MzIgY29kZSwgY29uc3QgQk1lc3NhZ2UgKmRyYWdNZXNz
YWdlKQoreworCUJWaWV3OjpNb3VzZU1vdmVkKHBvaW50LCBjb2RlLCBkcmFnTWVzc2FnZSk7Cit9
CisKKwordm9pZAorV0tTY3JvbGxWaWV3OjpGcmFtZU1vdmVkKEJQb2ludCBwb3NpdGlvbikKK3sK
KwlCVmlldzo6RnJhbWVNb3ZlZChwb3NpdGlvbik7Cit9CisKKwordm9pZCAKK1dLU2Nyb2xsVmll
dzo6UmVzaXplVG9QcmVmZXJyZWQoKQoreworCUJWaWV3OjpSZXNpemVUb1ByZWZlcnJlZCgpOwor
fQorCisKK3ZvaWQgCitXS1Njcm9sbFZpZXc6OkdldFByZWZlcnJlZFNpemUoZmxvYXQgKl93aWR0
aCwgZmxvYXQgKl9oZWlnaHQpCit7CisJQlJlY3QgZnJhbWUgPSBDYWxjRnJhbWUoZlRhcmdldCwg
Zkhvcml6b250YWxTY3JvbGxCYXIsIGZWZXJ0aWNhbFNjcm9sbEJhcik7CisgICAgCisJaWYgKGZU
YXJnZXQgIT0gTlVMTCkgeworCQlmbG9hdCB3aWR0aCwgaGVpZ2h0OworCQlmVGFyZ2V0LT5HZXRQ
cmVmZXJyZWRTaXplKCZ3aWR0aCwgJmhlaWdodCk7CisgICAgICAgIAorCQlmcmFtZS5yaWdodCAr
PSB3aWR0aCAtIGZUYXJnZXQtPkZyYW1lKCkuV2lkdGgoKTsKKwkJZnJhbWUuYm90dG9tICs9IGhl
aWdodCAtIGZUYXJnZXQtPkZyYW1lKCkuSGVpZ2h0KCk7CisJfQorICAgIAorCWlmIChfd2lkdGgp
CisJCSpfd2lkdGggPSBmcmFtZS5XaWR0aCgpOworCWlmIChfaGVpZ2h0KQorCQkqX2hlaWdodCA9
IGZyYW1lLkhlaWdodCgpOworfQorCisKKworCisvKiogVGhpcyBzdGF0aWMgbWV0aG9kIGlzIHVz
ZWQgdG8gY2FsY3VsYXRlIHRoZSBmcmFtZSB0aGF0IHRoZQorICoJU2Nyb2xsVmlldyB3aWxsIGNv
dmVyIGRlcGVuZGluZyBvbiB0aGUgZnJhbWUgb2YgaXRzIHRhcmdldAorICoJCisgKglJdCBpcyB1
c2VkIGluIHRoZSBjb25zdHJ1Y3RvciBhbmQgYXQgb3RoZXIgcGxhY2VzLgorICovCisKK0JSZWN0
CitXS1Njcm9sbFZpZXc6OkNhbGNGcmFtZShCVmlldyAqdGFyZ2V0LCBib29sIGhvcml6b250YWws
IGJvb2wgdmVydGljYWwpCit7CisJQlJlY3QgZnJhbWUgPSB0YXJnZXQgIT0gTlVMTCA/IHRhcmdl
dC0+RnJhbWUoKSA6IEJSZWN0KDAsIDAsIDgwLCA4MCk7CisgICAgCisJaWYgKHZlcnRpY2FsKQor
CQlmcmFtZS5yaWdodCArPSBCX1ZfU0NST0xMX0JBUl9XSURUSDsKKwlpZiAoaG9yaXpvbnRhbCkK
KwkJZnJhbWUuYm90dG9tICs9IEJfSF9TQ1JPTExfQkFSX0hFSUdIVDsKKyAgICAKKwkKKyAgICAK
KwlpZiAodmVydGljYWwpCisgICAgICAgIGZyYW1lLnJpZ2h0Kys7CisJaWYgKGhvcml6b250YWwp
CisgICAgICAgIGZyYW1lLmJvdHRvbSsrOworCQorCXJldHVybiBmcmFtZTsKK30KKworCisKKwor
LyoqIFRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlICJmbGFncyIgYXJndW1lbnQgYXMgcGFzc2VkIG9u
IHRvCisgKgl0aGUgQlZpZXcgY29uc3RydWN0b3IuCisgKi8KKworaW50MzIKK1dLU2Nyb2xsVmll
dzo6TW9kaWZ5RmxhZ3MoaW50MzIgZmxhZ3MpCit7CisJcmV0dXJuIGZsYWdzICYgfihCX1dJTExf
RFJBVyB8IEJfRlJBTUVfRVZFTlRTIHwgQl9GVUxMX1VQREFURV9PTl9SRVNJWkUpOworfQorCisK
K3ZvaWQKK1dLU2Nyb2xsVmlldzo6V2luZG93QWN0aXZhdGVkKGJvb2wgYWN0aXZlKQoreworCWlm
IChmSGlnaGxpZ2h0ZWQpCisJCUludmFsaWRhdGUoKTsKKyAgICAKKwlCVmlldzo6V2luZG93QWN0
aXZhdGVkKGFjdGl2ZSk7Cit9CisKKwordm9pZCAKK1dLU2Nyb2xsVmlldzo6TWFrZUZvY3VzKGJv
b2wgc3RhdGUpCit7CisJQlZpZXc6Ok1ha2VGb2N1cyhzdGF0ZSk7Cit9CisKKworQkhhbmRsZXIg
KgorV0tTY3JvbGxWaWV3OjpSZXNvbHZlU3BlY2lmaWVyKEJNZXNzYWdlICptc2csIGludDMyIGlu
ZGV4LCBCTWVzc2FnZSAqc3BlY2lmaWVyLCBpbnQzMiBmb3JtLCBjb25zdCBjaGFyICpwcm9wZXJ0
eSkKK3sKKwlyZXR1cm4gQlZpZXc6OlJlc29sdmVTcGVjaWZpZXIobXNnLCBpbmRleCwgc3BlY2lm
aWVyLCBmb3JtLCBwcm9wZXJ0eSk7Cit9CisKKworc3RhdHVzX3QgCitXS1Njcm9sbFZpZXc6Okdl
dFN1cHBvcnRlZFN1aXRlcyhCTWVzc2FnZSAqZGF0YSkKK3sKKwlyZXR1cm4gQlZpZXc6OkdldFN1
cHBvcnRlZFN1aXRlcyhkYXRhKTsKK30KKworCitCU2l6ZQorV0tTY3JvbGxWaWV3OjpNaW5TaXpl
KCkKK3sKKyAgICAvLyBUT0RPOiBUaGlzIGlzIG5vdCB5ZXQgY29ycmVjdC4KKwlCU2l6ZSBzaXpl
ID0gKGZUYXJnZXQgPyBmVGFyZ2V0LT5NaW5TaXplKCkgOiBCU2l6ZSgtMSwgLTEpKTsKKyAgICAK
KwlpZiAoZlZlcnRpY2FsU2Nyb2xsQmFyKQorCQlzaXplLndpZHRoICs9IEJfVl9TQ1JPTExfQkFS
X1dJRFRIOworCWlmIChmSG9yaXpvbnRhbFNjcm9sbEJhcikKKwkJc2l6ZS5oZWlnaHQgKz0gQl9I
X1NDUk9MTF9CQVJfSEVJR0hUOworICAgIAorCXJldHVybiBCTGF5b3V0VXRpbHM6OkNvbXBvc2VT
aXplKEV4cGxpY2l0TWluU2l6ZSgpLCBzaXplKTsKK30KKworCitCU2l6ZQorV0tTY3JvbGxWaWV3
OjpQcmVmZXJyZWRTaXplKCkKK3sKKyAgICAvLyBUT0RPOiBUaGlzIGlzIG5vdCB5ZXQgY29ycmVj
dC4KKwlCU2l6ZSBzaXplID0gKGZUYXJnZXQgPyBmVGFyZ2V0LT5QcmVmZXJyZWRTaXplKCkgOiBC
U2l6ZSgtMSwgLTEpKTsKKyAgICAKKwlpZiAoZlZlcnRpY2FsU2Nyb2xsQmFyKQorCQlzaXplLndp
ZHRoICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOworCWlmIChmSG9yaXpvbnRhbFNjcm9sbEJhcikK
KwkJc2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9MTF9CQVJfSEVJR0hUOworICAgIAorCXJldHVybiBC
TGF5b3V0VXRpbHM6OkNvbXBvc2VTaXplKEV4cGxpY2l0TWluU2l6ZSgpLCBzaXplKTsKK30KKwor
CitzdGF0dXNfdAorV0tTY3JvbGxWaWV3OjpQZXJmb3JtKHBlcmZvcm1fY29kZSBkLCB2b2lkICph
cmcpCit7CisJcmV0dXJuIEJWaWV3OjpQZXJmb3JtKGQsIGFyZyk7Cit9CisKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1dLU2Nyb2xsVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjkxZmYwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Ny
b2xsVmlldy5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiogQ29weXJpZ2h0IDIwMDQsIE9wZW5C
ZU9TLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgT3BlbkJlT1MgTGljZW5zZS4KKyAqLworI2lmbmRlZiBfV0tfU0NST0xMX1ZJRVdf
SAorI2RlZmluZSBfV0tfU0NST0xMX1ZJRVdfSAorCisvKioJVGhlIFdLU2Nyb2xsVmlldyBpcyBh
IGNvbnZlbmllbmNlIGNsYXNzIHRvIGFkZCBhIHNjcm9sbGluZworICoJbWVjaGFuaXNtIHRvIHRo
ZSB0YXJnZXQgdmlldy4KKyAqLworCisjaW5jbHVkZSA8U2Nyb2xsQmFyLmg+CisjaW5jbHVkZSAi
U2Nyb2xsVHlwZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFdLU2Ny
b2xsVmlldyA6IHB1YmxpYyBCVmlldyB7CitwdWJsaWM6CisgICAgV0tTY3JvbGxWaWV3KGNvbnN0
IGNoYXIgKm5hbWUsIEJWaWV3ICp0YXJnZXQsCisgICAgICAgICAgICAgICAgIHVpbnQzMiByZXNp
emluZ01vZGUgPSBCX0ZPTExPV19MRUZUIHwgQl9GT0xMT1dfVE9QLAorICAgICAgICAgICAgICAg
ICB1aW50MzIgZmxhZ3MgPSAwKTsKKyAgICBXS1Njcm9sbFZpZXcoQk1lc3NhZ2UgKmFyY2hpdmUp
OworICAgIHZpcnR1YWwgfldLU2Nyb2xsVmlldygpOworICAgIAorICAgIHN0YXRpYyBCQXJjaGl2
YWJsZQkqSW5zdGFudGlhdGUoQk1lc3NhZ2UgKmFyY2hpdmUpOworICAgIHZpcnR1YWwgc3RhdHVz
X3QJQXJjaGl2ZShCTWVzc2FnZSAqYXJjaGl2ZSwgYm9vbCBkZWVwID0gdHJ1ZSkgY29uc3Q7Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkCQlBdHRhY2hlZFRvV2luZG93KCk7CisgICAgCisgICAgQlNj
cm9sbEJhcgkJCSpTY3JvbGxCYXIob3JpZW50YXRpb24gcG9zdHVyZSkgY29uc3Q7CisgICAgU2Ny
b2xsYmFyTW9kZQkJU2Nyb2xsQmFyTW9kZShvcmllbnRhdGlvbiBwb3N0dXJlKTsKKyAgICB2b2lk
CQkJCVNldFNjcm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9zdHVyZSwgU2Nyb2xsYmFyTW9kZSBt
b2RlKTsKKyAgICAKKyAgICB2b2lkCQkJCVNldFRhcmdldChCVmlldyAqdGFyZ2V0KTsKKyAgICBC
VmlldwkJCQkqVGFyZ2V0KCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCB2b2lkCQlNZXNzYWdl
UmVjZWl2ZWQoQk1lc3NhZ2UgKm1lc3NhZ2UpOworICAgIHZpcnR1YWwgdm9pZAkJTW91c2VEb3du
KEJQb2ludCBwb2ludCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkCQlXaW5kb3dBY3RpdmF0ZWQo
Ym9vbCBhY3RpdmUpOworICAgIHZpcnR1YWwJdm9pZAkJTW91c2VVcChCUG9pbnQgcG9pbnQpOwor
ICAgIHZpcnR1YWwJdm9pZAkJTW91c2VNb3ZlZChCUG9pbnQgcG9pbnQsIHVpbnQzMiBjb2RlLCBj
b25zdCBCTWVzc2FnZSAqbXNnKTsKKyAgICAKKyAgICB2aXJ0dWFsCXZvaWQJCURldGFjaGVkRnJv
bVdpbmRvdygpOworICAgIHZpcnR1YWwJdm9pZAkJQWxsQXR0YWNoZWQoKTsKKyAgICB2aXJ0dWFs
CXZvaWQJCUFsbERldGFjaGVkKCk7CisgICAgCisgICAgdmlydHVhbAl2b2lkCQlGcmFtZU1vdmVk
KEJQb2ludCBwb3NpdGlvbik7CisgICAgCisgICAgdmlydHVhbCBCSGFuZGxlcgkqUmVzb2x2ZVNw
ZWNpZmllcihCTWVzc2FnZSAqbWVzc2FnZSwgaW50MzIgaW5kZXgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCTWVzc2FnZSAqc3BlY2lmaWVyLCBpbnQzMiBmb3Jt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
cHJvcGVydHkpOworICAgIAorICAgIHZpcnR1YWwgdm9pZAkJUmVzaXplVG9QcmVmZXJyZWQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQJCUdldFByZWZlcnJlZFNpemUoZmxvYXQgKl93aWR0aCwgZmxvYXQg
Kl9oZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZAkJTWFrZUZvY3VzKGJvb2wgc3RhdGUgPSB0cnVl
KTsKKyAgICB2aXJ0dWFsIHN0YXR1c190CUdldFN1cHBvcnRlZFN1aXRlcyhCTWVzc2FnZSAqZGF0
YSk7CisgICAgCisgICAgdmlydHVhbAlCU2l6ZQkJTWluU2l6ZSgpOworICAgIHZpcnR1YWwJQlNp
emUJCVByZWZlcnJlZFNpemUoKTsKKyAgICAKKyAgICAvLyBwcml2YXRlIG9yIHJlc2VydmVkIG1l
dGhvZHMgYXJlIGZvbGxvd2luZworICAgIAorICAgIHZpcnR1YWwgc3RhdHVzX3QJUGVyZm9ybShw
ZXJmb3JtX2NvZGUgZCwgdm9pZCAqYXJnKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIEJWaWV3OworICAgIAorICAgIHN0YXRpYyBCUmVjdAkJQ2FsY0ZyYW1lKEJWaWV3ICp0YXJn
ZXQsIGJvb2wgaCwgYm9vbCB2KTsKKyAgICBzdGF0aWMgaW50MzIJCU1vZGlmeUZsYWdzKGludDMy
IGZsYWdzKTsKKyAgICAKKyAgICBCVmlldwkJCQkqZlRhcmdldDsKKyAgICBCU2Nyb2xsQmFyCQkJ
KmZIb3Jpem9udGFsU2Nyb2xsQmFyOworICAgIEJTY3JvbGxCYXIJCQkqZlZlcnRpY2FsU2Nyb2xs
QmFyOworICAgIHVpbnQxNgkJCQlmUHJldmlvdXNXaWR0aDsKKyAgICB1aW50MTYJCQkJZlByZXZp
b3VzSGVpZ2h0OworICAgIGJvb2wJCQkJZkhpZ2hsaWdodGVkOworICAgIAorICAgIFNjcm9sbGJh
ck1vZGUJCWZWZXJ0aWNhbFNjcm9sbEJhck1vZGU7CisgICAgU2Nyb2xsYmFyTW9kZQkJZkhvcml6
b250YWxTY3JvbGxCYXJNb2RlOwkJCit9OworCisjZW5kaWYgIC8qIF9XS19TQ1JPTExfVklFV19I
ICovCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XaWRnZXRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2N2Q3NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPENvbnRyb2wuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+CisK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgV2lkZ2V0UHJpdmF0ZQoreworICAgIFdp
ZGdldFByaXZhdGUoKQorICAgICAgICA6IG1fcGFyZW50KDApCisgICAgICAgICwgbV93aWRnZXQo
MCkKKyAgICAgICAgLCBtX3Zpc2libGUodHJ1ZSkKKyAgICB7IH0KKyAgICB+V2lkZ2V0UHJpdmF0
ZSgpIHsgZGVsZXRlIG1fd2lkZ2V0OyB9CisKKyAgICBCVmlldyogbV9wYXJlbnQ7CisgICAgQlZp
ZXcqIG1fd2lkZ2V0OworICAgIFdpZGdldENsaWVudCogbV9jbGllbnQ7CisgICAgYm9vbCBtX3Zp
c2libGU7Cit9OworCitXaWRnZXQ6OldpZGdldChCVmlldyopCisgICAgOiBkYXRhKG5ldyBXaWRn
ZXRQcml2YXRlKCkpCit7CisvLyAgICBwcmludGYoIldpZGdldDo6V2lkZ2V0XG4iKTsKK30KKwor
V2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKKyAgICBkZWxldGUgZGF0YTsKKyAgICBkYXRhID0gMDsKK30K
KworSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFkYXRhLT5t
X3dpZGdldCkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBJbnRSZWN0IHJlY3Q7Cisg
ICAgaWYoZGF0YS0+bV93aWRnZXQtPkxvY2tMb29wZXIoKSl7CisgICAgICAgIHJlY3QgPSBkYXRh
LT5tX3dpZGdldC0+RnJhbWUoKTsKKyAgICAgICAgZGF0YS0+bV93aWRnZXQtPlVubG9ja0xvb3Bl
cigpOworICAgIH0KKworICAgIHJldHVybiByZWN0OworfQorCit2b2lkIFdpZGdldDo6c2V0Rm9j
dXMoKQoreworLy8gICAgcHJpbnRmKCJXaWRnZXQ6OnNldEZvY3VzXG4iKTsKKyAgICBpZiAoZGF0
YS0+bV93aWRnZXQpCisgICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5NYWtlRm9jdXMoKTsKK30KKwor
dm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBpZiAo
ZGF0YS0+bV93aWRnZXQpCisgICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5TZXRWaWV3Q3Vyc29yKGN1
cnNvci5pbXBsKCkpOworfQorCit2b2lkIFdpZGdldDo6c2hvdygpCit7CisvLyAgICBwcmludGYo
IldpZGdldDo6c2hvd1xuIik7CisgICAgaWYgKCFkYXRhLT5tX3Zpc2libGUgJiYgZGF0YS0+bV93
aWRnZXQpCisgICAgCSAgIAlkYXRhLT5tX3dpZGdldC0+U2hvdygpOworICAgIGRhdGEtPm1fdmlz
aWJsZSA9IHRydWU7Cit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkKK3sKKy8vICAgIHByaW50Zigi
V2lkZ2V0OjpoaWRlXG4iKTsKKyAgICBpZiAoZGF0YS0+bV92aXNpYmxlICYmIGRhdGEtPm1fd2lk
Z2V0KQorICAgICAgICAJZGF0YS0+bV93aWRnZXQtPkhpZGUoKTsKKyAgICBkYXRhLT5tX3Zpc2li
bGUgPSBmYWxzZTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEhhaWt1V2lkZ2V0KEJWaWV3KiBjaGls
ZCkKK3sKKy8vICAgIHByaW50ZigiV2lkZ2V0OjpzZXRIYWlrdVdpZGdldFxuIik7CisgICAgZGVs
ZXRlIGRhdGEtPm1fd2lkZ2V0OworICAgIGRhdGEtPm1fd2lkZ2V0ID0gY2hpbGQ7Cit9CisKK0JW
aWV3KiBXaWRnZXQ6OmhhaWt1V2lkZ2V0KCkKK3sKKyAgICByZXR1cm4gZGF0YS0+bV93aWRnZXQ7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQYXJlbnRXaWRnZXQoQlZpZXcqIHBhcmVudCkKK3sKKy8v
ICAgIHByaW50ZigiV2lkZ2V0OjpzZXRQYXJlbnRXaWRnZXRcbiIpOworICAgIGRhdGEtPm1fcGFy
ZW50ID0gcGFyZW50OworICAgIGlmIChkYXRhLT5tX3dpZGdldCAhPSBOVUxMICYmIGRhdGEtPm1f
d2lkZ2V0LT5QYXJlbnQoKSA9PSBOVUxMKQorICAgICAgICBwYXJlbnQtPkFkZENoaWxkKGRhdGEt
Pm1fd2lkZ2V0KTsKK30KKworQlZpZXcqIFdpZGdldDo6cGFyZW50V2lkZ2V0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZGF0YS0+bV9wYXJlbnQ7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIWRhdGEtPm1fd2lkZ2V0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoZnJhbWVSZWN0KCkgIT0gcmVjdCl7CisgICAgICAgIGRh
dGEtPm1fd2lkZ2V0LT5Nb3ZlVG8ocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZGF0YS0+
bV93aWRnZXQtPlJlc2l6ZVRvKHJlY3Qud2lkdGgoKSAtIDEsIHJlY3QuaGVpZ2h0KCkgLSAxKTsK
Kwl9Cit9CisKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIEludFJlY3Qg
Y29uc3QmIHIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworLy8gYm9vbCBXaWRnZXQ6
OmlzRW5hYmxlZCgpIGNvbnN0CisvLyB7CisvLyAgICAgaWYgKCFkYXRhLT5tX3dpZGdldCkKKy8v
ICAgICAgICAgcmV0dXJuIGZhbHNlOworLy8gICAgICAgICAKKy8vICAgICBCQ29udHJvbCogY29u
dHJvbCA9IGR5bmFtaWNfY2FzdDxCQ29udHJvbCo+KGRhdGEtPm1fd2lkZ2V0KTsKKy8vICAgICBp
ZiAoY29udHJvbCAhPSBOVUxMKQorLy8gICAgICAgICByZXR1cm4gY29udHJvbC0+SXNFbmFibGVk
KCk7CisvLyAKKy8vICAgICByZXR1cm4gdHJ1ZTsKKy8vIH0KKwordm9pZCBXaWRnZXQ6OnNldElz
U2VsZWN0ZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisvLyB2b2lkIFdp
ZGdldDo6c2V0RW5hYmxlZChib29sIGVuKQorLy8geworLy8gICBpZiAoIWRhdGEtPm1fd2lkZ2V0
KQorLy8gICAgICAgICByZXR1cm47CisvLworLy8gICAgIEJDb250cm9sKiBjb250cm9sID0gZHlu
YW1pY19jYXN0PEJDb250cm9sKj4oZGF0YS0+bV93aWRnZXQpOworLy8gICAgIGlmIChjb250cm9s
ICE9IE5VTEwpCisvLyAgICAgICAgIGNvbnRyb2wtPlNldEVuYWJsZWQoZW4pOworLy8gfQorCit2
b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBk
YXRhLT5tX3dpZGdldC0+SW52YWxpZGF0ZShyZWN0KTsKKyAgICBkYXRhLT5tX3dpZGdldC0+Rmx1
c2goKTsKK30KKworLy8gdm9pZCBXaWRnZXQ6OnJlbW92ZUZyb21QYXJlbnQoKQorLy8geworLy8g
ICAgIGlmIChkYXRhLT5tX3dpZGdldCkgeworLy8gLy8gICAgICAgIHByaW50ZigiUmVtb3ZlICVz
XG4iLCBkYXRhLT5tX3dpZGdldC0+TmFtZSgpKTsKKy8vICAgICAgICAgIGRhdGEtPm1fd2lkZ2V0
LT5SZW1vdmVTZWxmKCk7CisvLyAgICAgfQorLy8gfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1h
Z2VEZWNvZGVySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlr
dS9JbWFnZURlY29kZXJIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNjEyYjdiZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwCkBAIC0wLDAgKzEsMTI5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCisKKyNpbmNsdWRlIDxCaXRtYXAuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKCkKKyAgICA6IG1faGFzQWxwaGEoZmFsc2UpCisg
ICAgLCBtX3N0YXR1cyhGcmFtZUVtcHR5KQorICAgICwgbV9kdXJhdGlvbigwKQorICAgICwgbV9k
aXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQoreworfSAKKwordm9pZCBSR0JBMzJC
dWZmZXI6OmNsZWFyKCkKK3sKKyAgICBtX2J5dGVzLmNsZWFyKCk7CisgICAgbV9zdGF0dXMgPSBG
cmFtZUVtcHR5OworICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7
IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpCisgICAgLy8gY2FsbHMgdGhpcyB0byBmcmVlIHRoZSBi
aXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlCisgICAgLy8gaW5pdEZyYW1lQnVm
ZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVlZCB0byByZWFkCisgICAgLy8g
b3RoZXIgbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCit9CisKK3ZvaWQgUkdCQTMy
QnVmZmVyOjp6ZXJvRmlsbCgpCit7CisgICAgbV9ieXRlcy5maWxsKDApOworICAgIG1faGFzQWxw
aGEgPSB0cnVlOworfQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEoY29uc3Qg
UkdCQTMyQnVmZmVyJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fYnl0ZXMgPSBvdGhlci5tX2J5dGVzOworICAgIHNldEhhc0FscGhh
KG90aGVyLm1faGFzQWxwaGEpOworfQorCitib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQg
bmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCit7CisgICAgLy8gTk9URTogVGhpcyBoYXMgbm8gd2F5
IHRvIGNoZWNrIGZvciBhbGxvY2F0aW9uIGZhaWx1cmUgaWYgdGhlCisgICAgLy8gcmVxdWVzdGVk
IHNpemUgd2FzIHRvbyBiaWcuLi4KKyAgICBtX2J5dGVzLnJlc2l6ZShuZXdXaWR0aCAqIG5ld0hl
aWdodCk7CisgICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKworICAg
IC8vIFplcm8gdGhlIGltYWdlLgorICAgIHplcm9GaWxsKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29u
c3QKK3sKKyAgICBjb25zdCB2b2lkKiBieXRlcyA9IChjb25zdCB2b2lkKiltX2J5dGVzLmRhdGEo
KTsKKworICAgIEJCaXRtYXAqIGJtcCA9IG5ldyBCQml0bWFwKEJSZWN0KDAsIDAsIHdpZHRoKCks
IGhlaWdodCgpKSwgQl9SR0IzMik7CisgICAgYm1wLT5TZXRCaXRzKGJ5dGVzLCBtX3NpemUud2lk
dGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSwgMCwgQl9SR0IzMik7CisKKyAgICByZXR1cm4gYm1wOwor
fQorCitib29sIFJHQkEzMkJ1ZmZlcjo6aGFzQWxwaGEoKSBjb25zdAoreworICAgIHJldHVybiBt
X2hhc0FscGhhOworfQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0SGFzQWxwaGEoYm9vbCBhbHBo
YSkKK3sKKyAgICBtX2hhc0FscGhhID0gYWxwaGE7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpz
ZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQoreworICAgIG1fc3RhdHVzID0gc3RhdHVzOwor
fQorCitSR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1
ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4g
KnRoaXM7CisKKyAgICBtX2J5dGVzID0gb3RoZXIubV9ieXRlczsKKyAgICBtX3NpemUgPSBvdGhl
ci5tX3NpemU7CisgICAgc2V0SGFzQWxwaGEob3RoZXIuaGFzQWxwaGEoKSk7CisgICAgc2V0UmVj
dChvdGhlci5yZWN0KCkpOworICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CisgICAgc2V0
RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CisgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIu
ZGlzcG9zYWxNZXRob2QoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbnQgUkdCQTMyQnVm
ZmVyOjp3aWR0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9zaXplLndpZHRoKCk7Cit9CisKK2lu
dCBSR0JBMzJCdWZmZXI6OmhlaWdodCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9zaXplLmhlaWdo
dCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9oYWlrdS9TdHJpbmdIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvaGFpa3UvU3RyaW5nSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjllMGZkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFp
a3UvU3RyaW5nSGFpa3UuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKworI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIFN0cmluZyBjb252ZXJzaW9ucworU3RyaW5nOjpTdHJpbmcoY29uc3QgQlN0cmlu
ZyYgc3RyKQoreworICAgIG1faW1wbCA9IFN0cmluZzo6ZnJvbVVURjgoc3RyLlN0cmluZygpLCBz
dHIuTGVuZ3RoKCkpLmltcGwoKTsKK30KKworU3RyaW5nOjpvcGVyYXRvciBCU3RyaW5nKCkgY29u
c3QKK3sKKyAgICBCU3RyaW5nIHN0cmluZzsKKyAgICBzdHJpbmcuU2V0VG8odXRmOCgpLmRhdGEo
KSk7CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRv
ckludGVybmFsSUNVSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2hhaWt1L1RleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzliMjAzNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVSGFpa3UuY3BwCkBAIC0wLDAg
KzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0
b3JJbnRlcm5hbElDVS5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciog
Y3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKK3sKKyAgICByZXR1cm4gImVuX3VzIjsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="16488"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32049</attachid>
            <date>2009-06-30 04:22:15 -0700</date>
            <delta_ts>2009-07-16 23:44:38 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for JavaScriptCore.</desc>
            <filename>0001-Added-Haiku-specific-files-for-JavaScriptCore.patch</filename>
            <type>text/plain</type>
            <size>3247</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBjMzhjYmEyOTAwM2Q3ZWRkOTA1OWZmNGY5OTFiYTgwMTM5ZjQzNzUyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTM6MjA6MjUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgSmF2YVNjcmlwdENvcmUuCiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKCi0tLQogSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsrKysrKwogSmF2YVNjcmlwdENv
cmUvd3RmL2hhaWt1L01haW5UaHJlYWRIYWlrdS5jcHAgfCAgIDQ3ICsrKysrKysrKysrKysrKysr
KysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25z
KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvd3RmL2hhaWt1L01haW5UaHJl
YWRIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggYzMyYWJiMC4uM2MzNmVhNCAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDA5LTA2LTMwICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGVkIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBKYXZhU2NyaXB0Q29yZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NjIwCisKKyAgICAg
ICAgKiB3dGYvaGFpa3UvTWFpblRocmVhZEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6
OmluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0pOgorICAgICAgICAoV1RGOjpzY2hlZHVsZURp
c3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKToKKwogMjAwOS0wNi0yNiAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTm8gcmV2aWV3LCBvbmx5IHJvbGxpbmcgb3V0
IHI0NTI1OS4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9oYWlrdS9NYWluVGhyZWFk
SGFpa3UuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL2hhaWt1L01haW5UaHJlYWRIYWlrdS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkN2IzNQotLS0gL2Rldi9udWxs
CisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9oYWlrdS9NYWluVGhyZWFkSGFpa3UuY3BwCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZpZXIKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTWFpblRocmVhZC5oIgorCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIGluaXRp
YWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKLS0gCjEuNi4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32051</attachid>
            <date>2009-06-30 04:50:27 -0700</date>
            <delta_ts>2009-06-30 10:05:14 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-platform-grap.patch</filename>
            <type>text/plain</type>
            <size>37972</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAyNjQxODM3ZmQwMDNlMzMzY2M5MDhiOTIwY2I5YzA2MzRmNzE4YTNiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTM6NDg6NTkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy4K
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjYyMAoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTEgKysr
KysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCAgICAg
IHwgICA2MyArKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJEYXRhLmggIHwgICA0NiArKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VC
dWZmZXJIYWlrdS5jcHAgICB8ICAgODIgKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAgICAgIHwgIDE3MyArKysrKysrKysrKysrKysKIC4uLi9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcCAgIHwgIDIyMCArKysr
KysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2lu
dEhhaWt1LmNwcCAgfCAgIDQ4ICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ludFJlY3RIYWlrdS5jcHAgICB8ICAgNDkgKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcCAgIHwgICA0OCArKysrKwogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwICAgICAgfCAgMTU5ICsrKysrKysrKysrKysr
CiAuLi4vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAgICAgICAgICB8ICAx
MDcgKysrKysrKysrKwogMTEgZmlsZXMgY2hhbmdlZCwgMTA4NiBpbnNlcnRpb25zKCspLCAwIGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSWNvbkhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1h
Z2VTb3VyY2VIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFp
a3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODAxOGExNi4uNTM2ODNjOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NCBA
QAorMjAwOS0wNi0zMCAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBIYWlr
dS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NjIwCisKKyAgICAgICAg
V0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Okljb246Okljb24pOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6fkljb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1
ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0
SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW5pdFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3Jt
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Z2V0Qml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJj
ZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6fkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJh
bWVTaXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlv
bkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkludFBvaW50OjpJbnRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6
b3BlcmF0b3IgQlBvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRS
ZWN0SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OkludFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6b3BlcmF0b3IgQlJlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW50U2l6ZTo6SW50U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXpl
OjpvcGVyYXRvciBCU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0
aEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6On5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjb250YWlucyk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjphZGRMaW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZl
VG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjphZGRBcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9z
ZVN1YnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6OmFkZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkRWxsaXBz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKToKKwogMjAw
OS0wNi0yNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVGln
ZXIgYnVpbGQgZml4CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ljb25IYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNmRiZQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNw
cApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVu
Z29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkljb24uaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ljb246Okljb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0lj
b246On5JY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorICAgIAorUGFzc1JlZlB0
cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8SWNvbj4oMCk7
Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxJY29uPigwKTsKK30KKwordm9pZCBJY29uOjpwYWludChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjZhNDlhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICog
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRh
X2gKKyNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhX2gKKworI2luY2x1ZGUgIk93blB0ci5oIgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEludFNpemU7CisKKyAgICBjbGFzcyBJ
bWFnZUJ1ZmZlckRhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW1hZ2VCdWZmZXJEYXRhKGNv
bnN0IEludFNpemUmKTsKKyAgICB9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgIC8vIEltYWdlQnVmZmVyRGF0YV9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjU0NTJiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwu
Y29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmKQorewor
fQorCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIGJvb2wgZ3JheVNj
YWxlLCBib29sJiBzdWNjZXNzKQorICAgIDogbV9kYXRhKEludFNpemUoKSkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHN1Y2Nlc3MgPSBmYWxzZTsKK30KKworSW1hZ2VCdWZmZXI6On5J
bWFnZUJ1ZmZlcigpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0
cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0ltYWdlKiBJbWFn
ZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOWQ0NGRlMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2UuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxB
cHBsaWNhdGlvbi5oPgorI2luY2x1ZGUgPEJpdG1hcC5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKwor
I2luY2x1ZGUgPG1hdGguaD4KKworCisvLyBUaGlzIGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBm
cm9tIFdlYktpdAorVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdCBjaGFy
Kik7CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9v
bCBjbGVhck1ldGFkYXRhKQoreworICAgIGlmIChjbGVhck1ldGFkYXRhKQorICAgICAgICBtX2hh
dmVNZXRhZGF0YSA9IGZhbHNlOworCisgICAgaWYgKG1fZnJhbWUpIHsKKyAgICAgICAgLy8gRklY
TUU6IE5vdCBzdXJlIHdoeSBiZV9hcHAgaXMgY2hlY2tlZCAodGhpcyB3YXMgY29waWVkIGZyb20g
U3lsbGFibGUpCisgICAgICAgIGlmIChiZV9hcHApCisgICAgICAgICAgICBkZWxldGUgbV9mcmFt
ZTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIG1fZHVyYXRpb24gPSAwLjBmOworICAg
ICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKy8vIEltYWdlIENsYXNzCisvLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV1RGOjpQYXNzUmVmUHRyPEltYWdlPiBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBWZWN0
b3I8Y2hhcj4gYXJyID0gbG9hZFJlc291cmNlSW50b0FycmF5KG5hbWUpOworICAgIFdURjo6UGFz
c1JlZlB0cjxCaXRtYXBJbWFnZT4gaW1nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGFyci5kYXRh
KCksIGFyci5zaXplKCkpOworCisgICAgaW1nLT5zZXREYXRhKGJ1ZmZlciwgdHJ1ZSk7CisgICAg
cmV0dXJuIGltZzsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgpCit7
Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQoreworfQor
CisvLyBEcmF3aW5nIFJvdXRpbmVzCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgQkJp
dG1hcCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1h
Z2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKKyAgICAg
ICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdCwgc29saWRDb2xvcigpLCBvcCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRTaXplIHNlbGZTaXplID0gc2l6ZSgpOworCisg
ICAgY3R4dC0+c2F2ZSgpOworCisgICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24u
CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBzdXBwb3J0IGFsbCB0aGUgY29tcG9zaXRlIG1vZGVz
IDoKKyAgICAvLwljdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgQlZpZXcq
IHZpZXcgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIEJSZWN0IHNyY1JlY3Qoc3Jj
KTsKKyAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUgc2l0ZSBhdAorICAgIC8vIGh0dHA6Ly93d3cu
bWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29tcGxleHNwaXJhbC9kZW1vLmh0bWwKKyAgICB2
aWV3LT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsgICAgCisgICAgdmlldy0+RHJhd0JpdG1h
cChpbWFnZSwgc3JjUmVjdCAmIGltYWdlLT5Cb3VuZHMoKSwgZHN0KTsKKworICAgIGN0eHQtPnJl
c3RvcmUoKTsKKworICAgIHN0YXJ0QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgSW1hZ2U6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3sKKwkvLyBGSVhNRTogZmluaXNoIHRo
aXMgdG8gc3VwcG9ydCBhbHNvIHBoYXNlZCBwb3NpdGlvbiAoc3JjUG9pbnQpCisKKyAgICBCQml0
bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFn
ZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAg
ICAgIHJldHVybjsKKworICAgIGZsb2F0IGN1cnJlbnRXID0gMDsKKyAgICBmbG9hdCBjdXJyZW50
SCA9IDA7CisKKyAgICBjdHh0LT5zYXZlKCk7CisKKyAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+U2V0RHJhd2luZ01vZGUoQl9PUF9BTFBIQSk7CisKKyAgICBjdHh0LT5jbGlwKEludFJlY3Qo
ZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0
KCkpKTsKKworICAgIHdoaWxlIChjdXJyZW50VyA8IGRzdFJlY3Qud2lkdGgoKSkgeworICAgICAg
ICB3aGlsZSAoY3VycmVudEggPCBkc3RSZWN0LmhlaWdodCgpKSB7CisgICAgICAgICAgICBjdHh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+RHJhd0JpdG1hcChpbWFnZSwgQlBvaW50KGRzdFJlY3QueCgp
ICsgY3VycmVudFcsIGRzdFJlY3QueSgpICsgY3VycmVudEgpKTsKKyAgICAgICAgICAgIGN1cnJl
bnRIICs9IHRpbGVSZWN0LmhlaWdodCgpOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRXICs9
IHRpbGVSZWN0LndpZHRoKCk7CisgICAgICAgIGN1cnJlbnRIID0gMDsKKyAgICB9CisgICAgY3R4
dC0+cmVzdG9yZSgpOworCisgICAgc3RhcnRBbmltYXRpb24oKTsKK30KKwordm9pZCBCaXRtYXBJ
bWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKK3sKKyAgICAvLyBGSVhNRTogSXQncyBlYXN5IHRv
IGltcGxlbWVudCB0aGlzIG9wdGltaXphdGlvbi4KKyAgICAvLyBKdXN0IG5lZWQgdG8gY2hlY2sg
dGhlIFJHQkEzMiBidWZmZXIgdG8gc2VlIGlmIGl0IGlzIDF4MS4gICAgCisgICAgbV9pc1NvbGlk
Q29sb3IgPSBmYWxzZTsKK30KKworQkJpdG1hcCogQml0bWFwSW1hZ2U6OmdldEJpdG1hcCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Qml0bWFwSW1hZ2UqPih0aGlzKS0+ZnJhbWVB
dEluZGV4KDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNTMzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCkBAIC0w
LDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11
ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxs
ZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5p
ICAgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICogCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgor
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgi
CisjaW5jbHVkZSAiVHJhbnNsYXRvckRlY29kZXIuaCIKKyNpbmNsdWRlICJQTkdJbWFnZURlY29k
ZXIuaCIKKy8vICNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiQk1QSW1h
Z2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSUNPSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiWEJN
SW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVk
ZSA8Qml0bWFwLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhpcyBz
aG91bGQgdXNlIHRoZSBIYWlrdSB0cmFuc2xhdG9yIEFQSQorSW1hZ2VEZWNvZGVyKiBjcmVhdGVE
ZWNvZGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICAvLyBXZSBuZWVkIGF0IGxl
YXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGlu
ZyB3aXRoLgorICAgIGludCBsZW5ndGggPSBkYXRhLnNpemUoKTsKKyAgICBpZiAobGVuZ3RoIDwg
NCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1Q29udGVu
dHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopIGRhdGEuZGF0YSgpOworICAgIGNvbnN0IGNoYXIq
IGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisKKyAgICAvLyBHSUZzIGJlZ2luIHdpdGggR0lGOCg3
IG9yIDkpLgorICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpID09IDApCisgICAg
ICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBUZXN0IGZvciBQTkcu
CisgICAgaWYgKHVDb250ZW50c1swXSA9PSAweDg5ICYmCisgICAgICAgIHVDb250ZW50c1sxXSA9
PSAweDUwICYmCisgICAgICAgIHVDb250ZW50c1syXSA9PSAweDRFICYmCisgICAgICAgIHVDb250
ZW50c1szXSA9PSAweDQ3KQorICAgICAgICByZXR1cm4gbmV3IFBOR0ltYWdlRGVjb2RlcigpOwor
CisgICAgLy8gSlBFRworICAgIC8vIGlmICh1Q29udGVudHNbMF0gPT0gMHhGRiAmJgorICAgIC8v
ICAgICB1Q29udGVudHNbMV0gPT0gMHhEOCAmJgorICAgIC8vICAgICB1Q29udGVudHNbMl0gPT0g
MHhGRikKKyAgICAvLyAgICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAv
LyBCTVAKKyAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkJNIiwgMikgPT0gMCkKKyAgICAgICAg
cmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIoKTsKKworICAgIC8vIElDT3MgYWx3YXlzIGJlZ2lu
IHdpdGggYSAyLWJ5dGUgMCBmb2xsb3dlZCBieSBhIDItYnl0ZSAxLgorICAgIC8vIENVUnMgYmVn
aW4gd2l0aCAyLWJ5dGUgMCBmb2xsb3dlZCBieSAyLWJ5dGUgMi4KKyAgICAvLyBpZiAoIW1lbWNt
cChjb250ZW50cywgIlwwMDBcMDAwXDAwMVwwMDAiLCA0KSB8fAorICAgIC8vICAgICAhbWVtY21w
KGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAyXDAwMCIsIDQpKQorICAgIC8vICAgICByZXR1cm4gbmV3
IElDT0ltYWdlRGVjb2RlcigpOworCisgICAgLy8gWEJNcyByZXF1aXJlIDggYnl0ZXMgb2YgaW5m
by4KKyAgICBpZiAobGVuZ3RoID49IDggJiYgc3RybmNtcChjb250ZW50cywgIiNkZWZpbmUgIiwg
OCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIG5ldyBYQk1JbWFnZURlY29kZXIoKTsKKworICAgIHBy
aW50ZigiSW52YWxpZCBpbWFnZSFcbiIgKTsKKyAgICAvLyBHaXZlIHVwLiBXZSBkb24ndCBrbm93
IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KKyAgICByZXR1cm4gMDsKK30KKworSW1hZ2VTb3VyY2U6
OkltYWdlU291cmNlKCkKKyAgICA6IG1fZGVjb2RlcigwKQoreworfQorCitJbWFnZVNvdXJjZTo6
fkltYWdlU291cmNlKCkKK3sKKyAgICBjbGVhcih0cnVlKTsKK30KKwordm9pZCBJbWFnZVNvdXJj
ZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpCit7CisgICAgZGVsZXRlIG1fZGVjb2RlcjsKKyAgICBtX2RlY29kZXIgPSAwOworfQorCiti
b29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVj
b2RlcjsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIC8vIE1ha2UgdGhlIGRlY29kZXIgYnkgc25p
ZmZpbmcgdGhlIGJ5dGVzLgorICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0aGUgZGF0
YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRlY29kZXIg
cGx1Z2luLgorICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRl
dGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQorICAgIC8v
IG1hZGUuCisgICAgaWYoIW1fZGVjb2RlcikKKyAgICAJbV9kZWNvZGVyID0gY3JlYXRlRGVjb2Rl
cihkYXRhLT5idWZmZXIoKSk7CisKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJu
OworICAgIG1fZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCiti
b29sIEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlmICghbV9kZWNvZGVy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5pc1NpemVB
dmFpbGFibGUoKTsKK30KKworSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1
cm4gbV9kZWNvZGVyLT5zaXplKCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6
ZUF0SW5kZXgoc2l6ZV90KSBjb25zdAoreworICAgIHJldHVybiBzaXplKCk7Cit9CisKK2ludCBJ
bWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAg
ICAgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+cmVw
ZXRpdGlvbkNvdW50KCk7Cit9CisKK1N0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNp
b24oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZyYW1lQ291bnQoKSA6IDA7Cit9CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQor
eworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJHQkEzMkJ1
ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAg
IGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVt
cHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBidWZmZXItPmFzTmV3TmF0aXZl
SW1hZ2UoKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChz
aXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0
SW5kZXgoaW5kZXgpOworICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGU7Cit9CisKK2Zsb2F0IEltYWdlU291cmNlOjpmcmFt
ZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXIt
PmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIGJ1ZmZlci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7Cit9CisKK2Jvb2wgSW1h
Z2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAo
IW1fZGVjb2RlciB8fCAhbV9kZWNvZGVyLT5zdXBwb3J0c0FscGhhKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkg
PT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gYnVmZmVyLT5oYXNBbHBoYSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRI
YWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTVhNGIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3Uu
Y3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2
ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorCisj
aW5jbHVkZSA8UG9pbnQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFBvaW50OjpJ
bnRQb2ludChjb25zdCBCUG9pbnQmIHApCisgICAgOiBtX3goc3RhdGljX2Nhc3Q8aW50PihwLngp
KQorICAgICwgbV95KHN0YXRpY19jYXN0PGludD4ocC55KSkKK3sKK30KKworSW50UG9pbnQ6Om9w
ZXJhdG9yIEJQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJQb2ludChtX3gsIG1feSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjU3NGFkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgQlJlY3QmIHIpCisgICAgOiBtX2xvY2F0
aW9uKHIuTGVmdFRvcCgpKQorICAgICwgbV9zaXplKHIuSW50ZWdlcldpZHRoKCkgKyAxLCByLklu
dGVnZXJIZWlnaHQoKSArIDEpCit7Cit9CisKK0ludFJlY3Q6Om9wZXJhdG9yIEJSZWN0KCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogc3VidHJhY3QgMSBmcm9tIGhlaWdodCBhbmQgd2lkdGg/Cisg
ICAgcmV0dXJuIEJSZWN0KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCksaGVpZ2h0KCkp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMmFmOTFhNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaW5jbHVkZSA8U2l6ZS5oPgorCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSW50U2l6ZTo6SW50U2l6ZShjb25zdCBCU2l6ZSYgcykKKyAgICA6IG1f
d2lkdGgocy5JbnRlZ2VyV2lkdGgoKSkKKyAgICAsIG1faGVpZ2h0KHMuSW50ZWdlckhlaWdodCgp
KQoreworfQorCitJbnRTaXplOjpvcGVyYXRvciBCU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEJTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYyNzhmYwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcApAQCAtMCwwICsx
LDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZl
bmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPFJlZ2lvbi5oPgorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGF0aDo6UGF0aCgpCisgICAgOiBtX3BhdGgobmV3IEJSZWdp
b24oKSkKK3sKK30KKworUGF0aDo6flBhdGgoKQoreworICAgIGRlbGV0ZSBtX3BhdGg7Cit9CisK
K1BhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCisgICAgOiBtX3BhdGgobmV3IEJSZWdpb24o
Km90aGVyLnBsYXRmb3JtUGF0aCgpKSkKK3sKK30KKworUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNv
bnN0IFBhdGgmIG90aGVyKQoreworICAgIGlmICgmb3RoZXIgIT0gdGhpcykKKyAgICAgICAgbV9w
YXRoID0gb3RoZXIucGxhdGZvcm1QYXRoKCk7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2Jv
b2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+Q29udGFpbnMocG9pbnQpOworfQorCit2b2lk
IFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGF0aC0+RnJhbWUoKTsKK30KKwordm9pZCBQYXRoOjptb3ZlVG8oY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgLy8gRklYTUU6IFVzZSBPZmZzZXRCeT8KKyAgICBu
b3RJbXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQ
b2ludCYgcCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjphZGRR
dWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3AyLCBjb25zdCBGbG9h
dFBvaW50JiBwKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBhdGg6OmFk
ZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQg
cmFkaXVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBhdGg6OmNsb3Nl
U3VicGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCit9CisKK3ZvaWQgUGF0aDo6YWRk
QXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBi
b29sIGFudGljbG9ja3dpc2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCit9CisKK3ZvaWQg
UGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit7CisgICAgbV9wYXRoLT5JbmNsdWRl
KHIpOworfQorCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBhdGg6OmNsZWFyKCkKK3sKKyAgICBt
X3BhdGgtPk1ha2VFbXB0eSgpOworfQorCitib29sIFBhdGg6OmlzRW1wdHkoKSBjb25zdAorewor
ICAgIHJldHVybiAhbV9wYXRoLT5GcmFtZSgpLklzVmFsaWQoKTsKK30KKworU3RyaW5nIFBhdGg6
OmRlYnVnU3RyaW5nKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxp
ZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30K
Kwordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkKK30KKworRmxvYXRSZWN0IFBhdGg6OnN0
cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2I1YWZkNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgi
CisKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisK
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5o
PgorI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KKworCituYW1lc3BhY2UgV2ViQ29yZQorewor
Cit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreyAgICAKKyAgICBCRm9udCAq
Zm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKKyAgICBpZiAoZm9udCkgeworICAgICAgICBm
b250X2hlaWdodCBoZWlnaHQ7CisgICAgICAgIGZvbnQtPkdldEhlaWdodCgmaGVpZ2h0KTsKKyAg
ICAgICAgbV9hc2NlbnQgPSBoZWlnaHQuYXNjZW50OworICAgICAgICBtX2Rlc2NlbnQgPSBoZWln
aHQuZGVzY2VudDsKKyAgICAgICAgbV9saW5lU3BhY2luZyA9IGhlaWdodC5sZWFkaW5nOworICAg
ICAgICBtX3hIZWlnaHQgPSBmb250LT5TaXplKCk7IC8vIE5vdCBzdXJlIGFib3V0IHRoaXMKKyAg
ICAgICAgbV91bml0c1BlckVtID0gMTsgLy8gRklYTUUKKyAgICAgICAgbV9saW5lR2FwID0gaGVp
Z2h0LmxlYWRpbmc7CisgICAgfQorfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNo
YXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMC5mOworICAgIG1fbWF4Q2hh
cldpZHRoID0gMC5mOworICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisKK3ZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERh
dGE7CisgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnREYXRhKXsK
KyAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmKmZvbnREZXNjcmlw
dGlvbi5jb21wdXRlZFNpemUoKSk7CisgICAgICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBk
YXRhID0gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1pbHkoKSk7
CisgICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSBuZXcgU2ltcGxlRm9udERhdGEoKnBkYXRh
KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK2Jvb2wgU2lt
cGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2Ugd2lsbCBuZWVkIHRvIGltcGxl
bWVudCB0aGlzIHRvIGxvYWQgbm9uLUFTQ0lJIGVuY29kaW5nIHNpdGVzCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sKKyAgICBp
ZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKQorICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0g
bV9wbGF0Zm9ybURhdGEuZm9udCgpLT5Jc0ZpeGVkKCk7CisgICAgZWxzZQorICAgICAgICBtX3Ry
ZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMC4wOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0g
CjEuNi4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32053</attachid>
            <date>2009-06-30 04:58:44 -0700</date>
            <delta_ts>2009-07-02 14:50:35 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/platform/image-decoders/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-platform-imag.patch</filename>
            <type>text/plain</type>
            <size>5594</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAxZTJlYTIwMzI4N2ViZTczMzZlYjAxZmVkOTAyMWU2NzBkZWQ0MzUyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTM6NTc6NDUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy4KIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjYyMAoKLS0t
CiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MjMgKysrKwogLi4uL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcCAg
ICAgfCAgMTI5ICsrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDE1MiBpbnNl
cnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwCgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MDE4YTE2
Li44NTc0NjI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDA5LTA2LTMwICBNYXhpbWUgU2ltb24gIDxzaW1v
bi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjY2MjAKKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVE
IE9SIENIQU5HRUQKKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0lt
YWdlRGVjb2RlckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6OlJHQkEzMkJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6emVyb0ZpbGwpOgorICAgICAgICAo
V2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpSR0JBMzJCdWZmZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVy
Ojphc05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGFz
QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBoYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyk6CisgICAgICAgIChXZWJD
b3JlOjpSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJC
dWZmZXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KToK
KwogMjAwOS0wNi0yNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgVGlnZXIgYnVpbGQgZml4CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjYxMmI3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcApAQCAtMCww
ICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSA8Qml0bWFwLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSR0JBMzJCdWZmZXI6OlJHQkEzMkJ1ZmZlcigpCisgICAgOiBtX2hh
c0FscGhhKGZhbHNlKQorICAgICwgbV9zdGF0dXMoRnJhbWVFbXB0eSkKKyAgICAsIG1fZHVyYXRp
b24oMCkKKyAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlzcG9zZU5vdFNwZWNpZmllZCkKK3sKK30g
CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCit7CisgICAgbV9ieXRlcy5jbGVhcigpOwor
ICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKKyAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3Ro
ZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKQorICAgIC8vIGNhbGxzIHRo
aXMgdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQorICAg
IC8vIGluaXRGcmFtZUJ1ZmZlcigpIGFuZCBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQg
dG8gcmVhZAorICAgIC8vIG90aGVyIG1ldGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgor
fQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6emVyb0ZpbGwoKQoreworICAgIG1fYnl0ZXMuZmlsbCgw
KTsKKyAgICBtX2hhc0FscGhhID0gdHJ1ZTsKK30KKwordm9pZCBSR0JBMzJCdWZmZXI6OmNvcHlC
aXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRoaXMgPT0g
Jm90aGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2J5dGVzID0gb3RoZXIubV9ieXRlczsK
KyAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKK30KKworYm9vbCBSR0JBMzJCdWZm
ZXI6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQoreworICAgIC8vIE5PVEU6
IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZQor
ICAgIC8vIHJlcXVlc3RlZCBzaXplIHdhcyB0b28gYmlnLi4uCisgICAgbV9ieXRlcy5yZXNpemUo
bmV3V2lkdGggKiBuZXdIZWlnaHQpOworICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5l
d0hlaWdodCk7CisKKyAgICAvLyBaZXJvIHRoZSBpbWFnZS4KKyAgICB6ZXJvRmlsbCgpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK05hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdO
YXRpdmVJbWFnZSgpIGNvbnN0Cit7CisgICAgY29uc3Qgdm9pZCogYnl0ZXMgPSAoY29uc3Qgdm9p
ZCopbV9ieXRlcy5kYXRhKCk7CisKKyAgICBCQml0bWFwKiBibXAgPSBuZXcgQkJpdG1hcChCUmVj
dCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSksIEJfUkdCMzIpOworICAgIGJtcC0+U2V0Qml0cyhi
eXRlcywgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCksIDAsIEJfUkdCMzIpOworCisg
ICAgcmV0dXJuIGJtcDsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9oYXNBbHBoYTsKK30KKwordm9pZCBSR0JBMzJCdWZmZXI6OnNldEhh
c0FscGhhKGJvb2wgYWxwaGEpCit7CisgICAgbV9oYXNBbHBoYSA9IGFscGhhOworfQorCit2b2lk
IFJHQkEzMkJ1ZmZlcjo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cykKK3sKKyAgICBtX3N0
YXR1cyA9IHN0YXR1czsKK30KKworUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9y
PShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikK
KyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9ieXRlcyA9IG90aGVyLm1fYnl0ZXM7Cisg
ICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIHNldEhhc0FscGhhKG90aGVyLmhhc0FscGhh
KCkpOworICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKKyAgICBzZXRTdGF0dXMob3RoZXIuc3Rh
dHVzKCkpOworICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOworICAgIHNldERpc3Bv
c2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOworICAgIHJldHVybiAqdGhpczsKK30K
KworaW50IFJHQkEzMkJ1ZmZlcjo6d2lkdGgoKSBjb25zdCB7CisgICAgcmV0dXJuIG1fc2l6ZS53
aWR0aCgpOworfQorCitpbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBjb25zdCB7CisgICAgcmV0
dXJuIG1fc2l6ZS5oZWlnaHQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAox
LjYuMy4zCgo=
</data>
<flag name="review"
          id="16579"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32054</attachid>
            <date>2009-06-30 05:02:17 -0700</date>
            <delta_ts>2009-07-02 14:40:13 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/platform/text/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-platform-text.patch</filename>
            <type>text/plain</type>
            <size>4808</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBlMzZkYmQwNjczMzczZDJhYWUzYjE0YTE2YWVkNjM1NTY5NzQxYTk4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTQ6MDE6MzMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0LgogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NjIwCgotLS0KIFdlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArKysrKysK
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9oYWlrdS9TdHJpbmdIYWlrdS5jcHAgICAgICAgIHwgICA1
MSArKysrKysrKysrKysrKysrKysrKwogLi4uL2hhaWt1L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1VIYWlrdS5jcHAgICAgfCAgIDMzICsrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg
OTkgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2hhaWt1L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJ
Q1VIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDgwMThhMTYuLmYzNzgzMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMDYtMzAg
IE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSGFpa3Utc3BlY2lmaWMgZmls
ZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NjIwCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBD
QVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2hhaWt1L1N0
cmluZ0hhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OlN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6Om9wZXJhdG9yIEJTdHJpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvaGFpa3UvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQpOgor
CiAyMDA5LTA2LTI2ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBUaWdlciBidWlsZCBmaXgKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oYWlr
dS9TdHJpbmdIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFp
a3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMGZkM2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFpa3UuY3Bw
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNTdHJpbmcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNp
bmNsdWRlIDxTdHJpbmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFN0cmluZyBj
b252ZXJzaW9ucworU3RyaW5nOjpTdHJpbmcoY29uc3QgQlN0cmluZyYgc3RyKQoreworICAgIG1f
aW1wbCA9IFN0cmluZzo6ZnJvbVVURjgoc3RyLlN0cmluZygpLCBzdHIuTGVuZ3RoKCkpLmltcGwo
KTsKK30KKworU3RyaW5nOjpvcGVyYXRvciBCU3RyaW5nKCkgY29uc3QKK3sKKyAgICBCU3RyaW5n
IHN0cmluZzsKKyAgICBzdHJpbmcuU2V0VG8odXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4g
c3RyaW5nOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVSGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2hhaWt1L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1VIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliMjAz
NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJl
YWtJdGVyYXRvckludGVybmFsSUNVSGFpa3UuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xv
Y2FsZUlEKCkKK3sKKyAgICByZXR1cm4gImVuX3VzIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="16580"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32058</attachid>
            <date>2009-06-30 06:00:49 -0700</date>
            <delta_ts>2009-07-02 14:40:35 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/platform/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-platform.patch</filename>
            <type>text/plain</type>
            <size>179616</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAyYTMwYTc5MDU3MzFkM2MzMDNmY2EwMzRhZWU4ZGI4MDgwOTJhMWJkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTQ6NTQ6MjEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9wbGF0Zm9ybS8uCiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKCi0tLQogV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzk0ICsrKysrKysrKysr
KysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcCAgICAgICAgICB8
ICAyMDIgKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuaCAg
ICAgICAgICAgIHwgICA3MSArKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVI
YWlrdS5jcHAgICAgICAgIHwgIDE0NSArKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29u
dGV4dE1lbnVJdGVtSGFpa3UuY3BwICAgIHwgIDE2NCArKysrKysKIFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvQ29va2llSmFySGFpa3UuY3BwICAgICAgICAgIHwgICA2MSArKysKIFdlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3UuY3BwICAgICAgICAgICAgIHwgIDIzNyArKysrKysrKysK
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0RhdGFIYWlrdS5jcHAgICAgICAgICAgIHwgIDEw
OSArKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcCAgICAgICAg
ICB8ICAgNzQgKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0V2ZW50TG9vcEhhaWt1LmNwcCAg
ICAgICAgICB8ICAgNDEgKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZUNob29zZXJIYWlr
dS5jcHAgICAgICAgIHwgICA0NiArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlU3lzdGVt
SGFpa3UuY3BwICAgICAgICAgfCAgIDgyICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9LZXli
b2FyZENvZGVzLmggICAgICAgICAgICAgfCAgNTQ0ICsrKysrKysrKysrKysrKysrKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L01JTUVUeXBlUmVnaXN0cnlIYWlrdS5jcHAgICB8ICAgNzUgKysr
CiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAgICAgICAgICB8ICAx
MjYgKysrKysKIC4uLi9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5j
cHAgIHwgIDIwMiArKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNl
RXZlbnRIYWlrdS5jcHAgfCAgIDg5ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZv
cm1TY3JvbGxCYXIuaCAgICAgICAgIHwgICA2MyArKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
UGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHAgIHwgIDEyNSArKysrKwogV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAgfCAgIDQ0ICsrCiBXZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcCAgICAgICAgICB8ICAgNjkgKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3BwICAgICAgICB8ICAzNTMgKysr
KysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JlZW5IYWlrdS5jcHAgICAgICAg
ICAgICAgfCAgMTAyICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZh
c0hhaWt1LmNwcCAgIHwgIDIwMSArKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9s
bFZpZXdDYW52YXNIYWlrdS5oICAgICB8ICAgNzcgKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1Njcm9sbFZpZXdIYWlrdS5jcHAgICAgICAgICB8ICAzMTUgKysrKysrKysrKysKIFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwICAgIHwgICA1MiArKwogV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmNwcCAgICAgICAgfCAgMTMxICsr
KysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuaCAgICAgICAgICB8
ICAgNjMgKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NvdW5kSGFpa3UuY3BwICAgICAgICAg
ICAgICB8ICAgNDIgKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU3lzdGVtVGltZUhhaWt1LmNw
cCAgICAgICAgIHwgICA0NyArKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwICAgICAgfCAgMTk4ICsrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJh
bnNsYXRvckRlY29kZXIuY3BwICAgICAgIHwgICA2OCArKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvVHJhbnNsYXRvckRlY29kZXIuaCAgICAgICAgIHwgICA1NSArKwogV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9XS1Njcm9sbFZpZXcuY3BwICAgICAgICAgICAgfCAgNDc2ICsrKysrKysrKysrKysr
KysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oICAgICAgICAgICAgICB8
ICAgODQgKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcCAgICAgICAg
ICAgICB8ICAxMTggKysrKysKIDM3IGZpbGVzIGNoYW5nZWQsIDUzNDUgaW5zZXJ0aW9ucygrKSwg
MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0NsaXBib2FyZEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvQ2xpcGJvYXJkSGFpa3UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SXRlbUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VIYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0V2ZW50TG9vcEhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZUNob29z
ZXJIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Zp
bGVTeXN0ZW1IYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0tleWJvYXJkQ29kZXMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvUGFzdGVib2FyZEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZl
bnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bs
YXRmb3JtU2Nyb2xsQmFyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhlbWVIYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0Nh
bnZhc0hhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
U2Nyb2xsVmlld0NhbnZhc0hhaWt1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU291bmRIYWlrdS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1N5c3RlbVRpbWVIYWlrdS5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Ry
YW5zbGF0b3JEZWNvZGVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODAxOGExNi4uODZmZTdhMiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzOTcgQEAKKzIwMDktMDYtMzAgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
ZWQgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKKworICAgICAgICBX
QVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICAqIHBsYXRm
b3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRIYWlrdTo6Q2xpcGJvYXJkSGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkSGFpa3U6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6
Y2xlYXJBbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpnZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpzZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1Ojp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRIYWlrdTo6ZmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmRy
YWdMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZHJhZ0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpzZXREcmFnSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmRyYWdJbWFnZUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OnNldERyYWdJbWFnZUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmNyZWF0ZURyYWdJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1Ojp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRIYWlrdTo6d3JpdGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRIYWlrdTo6aGFzRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFp
a3UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6fkNsaXBib2Fy
ZEhhaWt1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudVJlY2VpdmVyOjpDb250ZXh0TWVu
dVJlY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51UmVjZWl2ZXI6OkhhbmRs
ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVSZWNlaXZlcjo6UmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51
OjppdGVtQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6Omluc2VydEl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OnNldFBsYXRmb3JtRGVzY3JpcHRpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SXRlbUhhaWt1LmNwcDogQWRkZWQu
CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbSk6CisgICAgICAgIChD
b250ZXh0TWVudUl0ZW06On5Db250ZXh0TWVudUl0ZW0pOgorICAgICAgICAoQ29udGV4dE1lbnVJ
dGVtOjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbik6CisgICAgICAgIChDb250ZXh0TWVudUl0
ZW06OnR5cGUpOgorICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjpzZXRUeXBlKToKKyAgICAgICAg
KENvbnRleHRNZW51SXRlbTo6YWN0aW9uKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6c2V0
QWN0aW9uKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6dGl0bGUpOgorICAgICAgICAoQ29u
dGV4dE1lbnVJdGVtOjpzZXRUaXRsZSk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OnBsYXRm
b3JtU3ViTWVudSk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUpOgorICAg
ICAgICAoQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKToKKyAgICAgICAgKENvbnRleHRNZW51
SXRlbTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2hh
aWt1L0N1cnNvckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6OkN1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6On5DdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3Vyc29yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRlckN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjptb3ZlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
b3NzQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6aUJlYW1DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6d2FpdEN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpoZWxwQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmVhc3RSZXNpemVD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhSZXNpemVDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6bm9ydGhFYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRo
V2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aFJlc2l6ZUN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpzb3V0aEVhc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6c291dGhXZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Ondlc3RSZXNp
emVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhTb3V0aFJlc2l6ZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjplYXN0V2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9y
dGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtblJl
c2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpyb3dSZXNpemVDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6dmVydGljYWxUZXh0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNlbGxD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6bm9Ecm9wQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvZ3Jlc3NDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6YWxp
YXNDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9uZUN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpub3RBbGxvd2VkQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Onpvb21JbkN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjp6b29tT3V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Omdy
YWJDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Z3JhYmJpbmdDdXJzb3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Rh
dGE6OmNvbnRhaW5zQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5z
RmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRmlsZW5hbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6YXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6
OmFzQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNyZWF0ZUNsaXBib2FyZCk6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0Zy
YWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VIYWlrdS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ0ltYWdlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpkZWxldGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2NhbGVEcmFnSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2hh
aWt1L0V2ZW50TG9vcEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudExv
b3A6OmN5Y2xlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9GaWxlQ2hvb3NlckhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL2hhaWt1L0ZpbGVTeXN0ZW1IYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Omhv
bWVEaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5UZW1wb3JhcnlGaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNsb3NlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRv
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjp1bmxvYWRNb2R1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6bGlzdERpcmVjdG9yeSk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvS2V5Ym9hcmRDb2Rl
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9NSU1FVHlwZVJlZ2lzdHJ5SGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAgICAgICogcGxh
dGZvcm0vaGFpa3UvUGFzdGVib2FyZEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OmdlbmVyYWxQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRl
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpwbGFpblRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3
cml0ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNsZWFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6a2V5SWRlbnRpZmllckZvckhhaWt1S2V5Q29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjp3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENh
cHNMb2NrU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVu
dEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6
OlBsYXRmb3JtTW91c2VFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1T
Y3JvbGxCYXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNjcm9sbGJhcjo6
aXNXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxiYXI6
OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1BsYXRm
b3JtU2Nyb2xsQmFySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEhhaWt1U2Nyb2xsQmFyOjpI
YWlrdVNjcm9sbEJhcik6CisgICAgICAgIChIYWlrdVNjcm9sbEJhcjo6VmFsdWVDaGFuZ2VkKToK
KyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0Zm9ybVNjcm9sbGJhcik6CisgICAgICAg
IChQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKToKKyAgICAgICAgKFBsYXRm
b3JtU2Nyb2xsYmFyOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6
OnVwZGF0ZVRodW1iUG9zaXRpb24pOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0
ZVRodW1iUHJvcG9ydGlvbik6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6d2lkdGgpOgor
ICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OmhlaWdodCk6CisgICAgICAgIChQbGF0Zm9ybVNj
cm9sbGJhcjo6c2V0UmVjdCk6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0RW5hYmxl
ZCk6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6cGFpbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBvcHVwTWVudTo6UG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVu
dTo6flBvcHVwTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnNob3cpOgorICAg
ICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVw
TWVudTo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51Ojpp
dGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3Uv
UmVuZGVyVGhlbWVIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVIYWlrdTo6UmVuZGVyVGhlbWVIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUhhaWt1Ojp+UmVuZGVyVGhlbWVIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUhhaWt1OjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFp
a3U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpwbGF0Zm9y
bVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUhhaWt1OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OnBsYXRm
b3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lSGFpa3U6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6cGFpbnRDaGVja2JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpwYWludFJhZGlvKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjp0aGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpzeXN0
ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OnNldENoZWNrYm94
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpzZXRSYWRpb1NpemUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vaGFpa3UvU2NyZWVuSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OnNjcmVlblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuQXZhaWxhYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpzY3Jl
ZW5EZXB0aFBlckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJv
bWUpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpTY3JvbGxW
aWV3Q2FudmFzSGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1
OjpEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TWVzc2Fn
ZVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TW91
c2VNb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNl
RG93bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNlVXAp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpEb1Njcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OktleURvd24pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpLZXlVcCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OldpbmRvd0FjdGl2YXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkZyYW1lUmVzaXplZCk6CisgICAgICAgICog
cGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpTZXRTY3JvbGxCYXJNYXhWKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6U2V0U2Nyb2xsQmFyTWF4SCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OlNldFNjcm9sbFZpZXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNjcm9sbFZpZXdQ
cml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRl
OjpBdHRhY2hlZFRvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9s
bFZpZXdQcml2YXRlOjpLZXlEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNj
cm9sbFZpZXdQcml2YXRlOjpLZXlVcCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpT
Y3JvbGxWaWV3UHJpdmF0ZTo6VmlzaWJsZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpTZXRDb250ZW50U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6Q29udGVudFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OkNvbnRlbnRXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6Q29udGVu
dEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0
ZTo6U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZp
ZXdQcml2YXRlOjpTY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0
Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1EZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtVmlzaWJsZUNvbnRlbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFy
TW9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGxiYXJN
b2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtUmVtb3ZlQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDb250ZW50c1NpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1NpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlcGFpbnRDb250ZW50UmVjdGFuZ2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2NyZWVuVG9Db250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzVG9TY3Jl
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25T
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1DYW5CbGl0T25T
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1Jc09mZnNjcmVl
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzZXRBbGxvd3NTY3JvbGxpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU6OlNlYXJjaFBvcHVwTWVudSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU6OnNhdmVSZWNlbnRTZWFyY2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU6OmxvYWRSZWNlbnRTZWFyY2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU6OmVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2hh
aWt1L1NoYXJlZFRpbWVySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZFRpbWVySGFpa3U6OlNoYXJlZFRpbWVySGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
VGltZXJIYWlrdTo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6
On5TaGFyZWRUaW1lckhhaWt1KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6
OnNldEZpcmVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6OnNldEZp
cmVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRUaW1lckhhaWt1OjpzZXRTaG91
bGRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhcmVkVGltZXJIYWlrdSk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpzdG9wU2hhcmVk
VGltZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU291bmRIYWlrdS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6c3lzdGVtQmVlcCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU3lz
dGVtVGltZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50VGltZSk6
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwpOgorICAgICAgICAo
V2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNldEJ1
dHRvbkRlZmF1bHRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6c2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6
ZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4
dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2spOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnR29CYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ0dvRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDdXQpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnUGFzdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnTm9HdWVzc2VzRm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFn
SWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTGVh
cm5TcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hX
ZWIpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9u
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSk6CisgICAgICAgIChX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdCb2xkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRl
eHRNZW51SXRlbVRhZ0l0YWxpYyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdVbmRlcmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3V0bGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9u
TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OnNlYXJjaE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpzZWFyY2hNZW51UmVjZW50U2VhcmNoZXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnNl
YXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjp1bmtu
b3duRmlsZVNpemVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYV2ViQXJlYVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhMaW5rVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBWExpc3RNYXJr
ZXJUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSW1hZ2VNYXBUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFYSGVhZGluZ1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VUaXRsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWEJ1dHRvbkFjdGlvblZlcmIpOgorICAgICAgICAoV2ViQ29yZTo6
QVhUZXh0RmllbGRBY3Rpb25WZXJiKToKKyAgICAgICAgKFdlYkNvcmU6OkFYUmFkaW9CdXR0b25B
Y3Rpb25WZXJiKToKKyAgICAgICAgKFdlYkNvcmU6OkFYQ2hlY2tlZENoZWNrQm94QWN0aW9uVmVy
Yik6CisgICAgICAgIChXZWJDb3JlOjpBWFVuY2hlY2tlZENoZWNrQm94QWN0aW9uVmVyYik6Cisg
ICAgICAgIChXZWJDb3JlOjpBWExpbmtBY3Rpb25WZXJiKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
RGVmaW5pdGlvbkxpc3RUZXJtVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBWERlZmluaXRpb25M
aXN0RGVmaW5pdGlvblRleHQpOgorICAgICAgICAobG9hZFJlc291cmNlSW50b0FycmF5KToKKyAg
ICAgICAgKFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpzdXBw
b3J0ZWRLZXlTaXplcyk6CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dXNlcklkbGVUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGxPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6
ZmlsZVN5c3RlbVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2
ZVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN1cHBvcnRlZEtleVNpemVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9oYWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNsYXRvckRlY29kZXI6OlRyYW5zbGF0b3JEZWNvZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRyYW5zbGF0b3JEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNsYXRvckRlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmFuc2xhdG9yRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc2xhdG9yRGVjb2Rlcjo6Z2V0Qml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlr
dS9XS1Njcm9sbFZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6V0tTY3Jv
bGxWaWV3KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6fldLU2Nyb2xsVmlldyk6CisgICAgICAg
IChXS1Njcm9sbFZpZXc6Okluc3RhbnRpYXRlKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6QXJj
aGl2ZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OkF0dGFjaGVkVG9XaW5kb3cpOgorICAgICAg
ICAoV0tTY3JvbGxWaWV3OjpEZXRhY2hlZEZyb21XaW5kb3cpOgorICAgICAgICAoV0tTY3JvbGxW
aWV3OjpBbGxBdHRhY2hlZCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OkFsbERldGFjaGVkKToK
KyAgICAgICAgKFdLU2Nyb2xsVmlldzo6U2Nyb2xsQmFyKToKKyAgICAgICAgKFdLU2Nyb2xsVmll
dzo6U2Nyb2xsQmFyTW9kZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlNldFNjcm9sbEJhck1v
ZGUpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpTZXRUYXJnZXQpOgorICAgICAgICAoV0tTY3Jv
bGxWaWV3OjpUYXJnZXQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpNZXNzYWdlUmVjZWl2ZWQp
OgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpNb3VzZURvd24pOgorICAgICAgICAoV0tTY3JvbGxW
aWV3OjpNb3VzZVVwKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TW91c2VNb3ZlZCk6CisgICAg
ICAgIChXS1Njcm9sbFZpZXc6OkZyYW1lTW92ZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpS
ZXNpemVUb1ByZWZlcnJlZCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OkdldFByZWZlcnJlZFNp
emUpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpDYWxjRnJhbWUpOgorICAgICAgICAoV0tTY3Jv
bGxWaWV3OjpNb2RpZnlGbGFncyk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OldpbmRvd0FjdGl2
YXRlZCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6Ok1ha2VGb2N1cyk6CisgICAgICAgIChXS1Nj
cm9sbFZpZXc6OlJlc29sdmVTcGVjaWZpZXIpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpHZXRT
dXBwb3J0ZWRTdWl0ZXMpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpNaW5TaXplKToKKyAgICAg
ICAgKFdLU2Nyb2xsVmlldzo6UHJlZmVycmVkU2l6ZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6
OlBlcmZvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9XaWRnZXRIYWlrdS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
Ojp+V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6ZnJhbWVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldpZGdldDo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6aGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OldpZGdldDo6c2V0SXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OmludmFsaWRhdGVSZWN0KToKKwogMjAwOS0wNi0yNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgVGlnZXIgYnVpbGQgZml4CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ2xpcGJvYXJkSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmJjMTI0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBi
b2FyZEhhaWt1LmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRIYWlrdS5oIgorCisjaW5jbHVkZSAiSGFz
aFRhYmxlLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJGaWxlTGlzdC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPGFwcC9DbGlwYm9hcmQuaD4K
KyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitDbGlwYm9hcmRIYWlrdTo6Q2xpcGJvYXJkSGFpa3UoQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5IHBvbGljeSwgYm9vbCBmb3JEcmFnZ2luZykgCisgICAgOiBDbGlwYm9hcmQocG9s
aWN5LCBmb3JEcmFnZ2luZykKK3sKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6Y2xlYXJEYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBCTWVzc2FnZSAqZGF0YSA9IChCTWVzc2FnZSAq
KSBOVUxMOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGlmICgo
ZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkgeworICAgICAgICAgICAgZGF0YS0+UmVtb3Zl
TmFtZShCU3RyaW5nKHR5cGUpLlN0cmluZygpKTsKKyAgICAgICAgICAgIGJlX2NsaXBib2FyZC0+
Q29tbWl0KCk7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OmNsZWFyQWxsRGF0YSgpIAoreworICAgIGlm
IChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBiZV9jbGlwYm9hcmQtPkNsZWFyKCk7
CisgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+
VW5sb2NrKCk7CisgICAgfQorfQorCitTdHJpbmcgQ2xpcGJvYXJkSGFpa3U6OmdldERhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdCAKK3sKKyAgICBCU3RyaW5nIHJl
c3VsdDsKKyAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgQk1lc3NhZ2UgKmRhdGEgPSAoQk1lc3Nh
Z2UgKikgTlVMTDsKKworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBp
ZiAoKGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAgICAgIGlmIChkYXRh
LT5GaW5kU3RyaW5nKEJTdHJpbmcodHlwZSkuU3RyaW5nKCksICZyZXN1bHQpID09IEJfT0spCisg
ICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xp
cGJvYXJkLT5VbmxvY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29s
IENsaXBib2FyZEhhaWt1OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKSAKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIEJNZXNzYWdlICpiZGF0
YSA9IChCTWVzc2FnZSAqKSBOVUxMOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7
CisgICAgICAgIGlmICgoYmRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAg
ICAgIGJkYXRhLT5SZW1vdmVOYW1lKEJTdHJpbmcodHlwZSkuU3RyaW5nKCkpOworICAgICAgICAg
ICAgaWYgKGJkYXRhLT5BZGRTdHJpbmcoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSwgQlN0cmluZyhk
YXRhKSkgPT0gQl9PSykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+
VW5sb2NrKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gZXh0ZW5zaW9u
cyBiZXlvbmQgSUUncyBBUEkKK0hhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRIYWlrdTo6dHlwZXMo
KSBjb25zdCAKK3sKKyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIEJNZXNzYWdlICpk
YXRhID0gKEJNZXNzYWdlICopIE5VTEw7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkp
IHsKKyAgICAgICAgaWYgKChkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCkpKSB7CisgICAgICAg
ICAgICBjaGFyICpuYW1lOworICAgICAgICAgICAgdWludDMyIHR5cGU7CisgICAgICAgICAgICBp
bnQzMiBjb3VudDsKKworICAgICAgICAgICAgZm9yIChpbnQzMiBpID0gMDsKKyAgICAgICAgICAg
ICAgICAgZGF0YS0+R2V0SW5mbyhCX0FOWV9UWVBFLCBpLCAmbmFtZSwgJnR5cGUsICZjb3VudCkg
PT0gQl9PSzsKKyAgICAgICAgICAgICAgICAgaSsrKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
LmFkZChuYW1lKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJv
YXJkLT5VbmxvY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQYXNzUmVm
UHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRIYWlrdTo6ZmlsZXMoKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFBvaW50IENsaXBib2FyZEhhaWt1
OjpkcmFnTG9jYXRpb24oKSBjb25zdCAKK3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gSW50UG9pbnQoMCwwKTsKK30KKworQ2FjaGVkSW1hZ2UqIENsaXBib2FyZEhhaWt1Ojpk
cmFnSW1hZ2UoKSBjb25zdCAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAw
OyAKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwg
Y29uc3QgSW50UG9pbnQmKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitOb2RlKiBD
bGlwYm9hcmRIYWlrdTo6ZHJhZ0ltYWdlRWxlbWVudCgpIAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7IAorfQorCit2b2lkIENsaXBib2FyZEhhaWt1OjpzZXREcmFnSW1h
Z2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworRHJhZ0ltYWdlUmVmIENsaXBib2FyZEhhaWt1OjpjcmVhdGVEcmFnSW1hZ2UoSW50
UG9pbnQmIGRyYWdMb2MpIGNvbnN0Cit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFn
ZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikgCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6d3JpdGVVUkwoY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikgCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6d3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKikg
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBDbGlwYm9hcmRIYWlrdTo6aGFz
RGF0YSgpIAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQk1lc3NhZ2UgKmRhdGEg
PSAoQk1lc3NhZ2UgKikgTlVMTDsKKworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgewor
ICAgICAgICBpZiAoKGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9ICFkYXRhLT5Jc0VtcHR5KCk7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJv
YXJkLT5VbmxvY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xp
cGJvYXJkSGFpa3UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWU3ZTIyCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oCkBAIC0wLDAgKzEs
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdv
b2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENsaXBib2FyZEhhaWt1X2gKKyNkZWZpbmUg
Q2xpcGJvYXJkSGFpa3VfaAorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiQ2xp
cGJvYXJkQWNjZXNzUG9saWN5LmgiCisKKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5oPgorI2lu
Y2x1ZGUgPGFwcC9DbGlwYm9hcmQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xh
c3MgQ2FjaGVkSW1hZ2U7CisKKyAgICAvLyBTdGF0ZSBhdmFpbGFibGUgZHVyaW5nIElFJ3MgZXZl
bnRzIGZvciBkcmFnIGFuZCBkcm9wIGFuZCBjb3B5L3Bhc3RlCisgICAgY2xhc3MgQ2xpcGJvYXJk
SGFpa3UgOiBwdWJsaWMgQ2xpcGJvYXJkIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENsaXBib2Fy
ZEhhaWt1KENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIGJvb2wgZm9yRHJhZ2dpbmcpOwor
ICAgICAgICB+Q2xpcGJvYXJkSGFpa3UoKSB7IH0KKworICAgICAgICB2b2lkIGNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUpOworICAgICAgICB2b2lkIGNsZWFyQWxsRGF0YSgpOworICAgICAg
ICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0
OworICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpOworCisgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCisgICAgICAg
IEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CisKKyAgICAgICAgSW50UG9pbnQgZHJhZ0xvY2F0
aW9uKCkgY29uc3Q7CisgICAgICAgIENhY2hlZEltYWdlKiBkcmFnSW1hZ2UoKSBjb25zdDsKKyAg
ICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwor
ICAgICAgICBOb2RlKiBkcmFnSW1hZ2VFbGVtZW50KCk7CisgICAgICAgIHZvaWQgc2V0RHJhZ0lt
YWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKKworICAgICAgICB2aXJ0dWFsIERy
YWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2MpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKik7CisKKyAgICAgICAgdmly
dHVhbCBib29sIGhhc0RhdGEoKTsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQ2xpcGJvYXJkSGFpa3VfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250
ZXh0TWVudUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTBh
ZTYwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVu
dUhhaWt1LmNwcApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBa
YWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2
ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisKKyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0u
aCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCisjaW5jbHVkZSA8TG9vcGVyLmg+CisjaW5jbHVkZSA8
TWVudS5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEZJWE1FOiBUaGlzIGNsYXNzIGlzbid0IHVzZWQgeWV0CitjbGFzcyBDb250ZXh0TWVudVJl
Y2VpdmVyIDogcHVibGljIEJMb29wZXIKK3sKK3B1YmxpYzoKKyAgICBDb250ZXh0TWVudVJlY2Vp
dmVyKENvbnRleHRNZW51KiBtZW51KQorICAgICAgICA6IEJMb29wZXIoImNvbnRleHRfbWVudV9y
ZWNlaXZlciIpCisgICAgICAgICwgbV9tZW51KG1lbnUpCisgICAgeworICAgICAgICBtX3Jlc3Vs
dCA9IC0xOworICAgIH0KKworICAgIHZvaWQgSGFuZGxlTWVzc2FnZShCTWVzc2FnZSogbXNnKQor
ICAgIHsKKyAgICAgICAgbV9yZXN1bHQgPSBtc2ctPndoYXQ7CisgICAgICAgIGlmIChtX3Jlc3Vs
dCAhPSAtMSkgeworICAgICAgICAgICAgQk1lbnVJdGVtKiBpdGVtID0gbV9tZW51LT5wbGF0Zm9y
bURlc2NyaXB0aW9uKCktPkZpbmRJdGVtKG1fcmVzdWx0KTsKKyAgICAgICAgICAgIGlmICghaXRl
bSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3I6IENvbnRleHQgbWVudSBpdGVtIHdp
dGggY29kZSAlaSBub3QgZm91bmQhXG4iLCBtX3Jlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGNtSXRlbShp
dGVtKTsKKyAgICAgICAgICAgIG1fbWVudS0+Y29udHJvbGxlcigpLT5jb250ZXh0TWVudUl0ZW1T
ZWxlY3RlZCgmY21JdGVtKTsKKyAgICAgICAgICAgIGNtSXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNj
cmlwdGlvbigpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IFJlc3VsdCgpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgfQorcHJpdmF0ZToKKyAgICBDb250ZXh0TWVu
dSogbV9tZW51OworICAgIGludCBtX3Jlc3VsdDsKK307CisKK0NvbnRleHRNZW51OjpDb250ZXh0
TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCisgICAgOiBtX2hpdFRlc3RSZXN1bHQo
cmVzdWx0KSwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKE5VTEwpCit7CisgICAgLyogR2V0IHBvc2l0
aW9uICovCisgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSAmJiByZXN1bHQuaW5uZXJOb2RlKCkt
PmRvY3VtZW50KCkpIHsKKyAgICAgICAgQlZpZXcqIHZpZXcgPSByZXN1bHQuaW5uZXJOb2RlKCkt
PmRvY3VtZW50KCktPmZyYW1lKCktPnZpZXcoKS0+cGxhdGZvcm1XaWRnZXQoKTsKKyAgICAgICAg
aW50IGNoaWxkID0gMDsKKyAgICAgICAgd2hpbGUgKHZpZXctPkNoaWxkQXQoY2hpbGQpKSB7Cisg
ICAgICAgICAgICBpZiAodmlldy0+Q2hpbGRBdChjaGlsZCktPk5hbWUoKSA9PSAic2Nyb2xsX3Zp
ZXdfY2FudmFzIikgeworICAgICAgICAgICAgICAgIG1fcG9pbnQgPSB2aWV3LT5DaGlsZEF0KGNo
aWxkKS0+Q29udmVydFRvU2NyZWVuKEJQb2ludChyZXN1bHQucG9pbnQoKS54KCksIHJlc3VsdC5w
b2ludCgpLnkoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2hpbGQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGYoIkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSgpICVpICVpXG4iLCByZXN1bHQucG9pbnQoKS54KCksIHJlc3VsdC5w
b2ludCgpLnkoKSk7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJNZW51KCJjb250
ZXh0X21lbnUiKTsKK30KKworQ29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCit7CisgICAgcHJp
bnRmKCJDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KClcbiIpOworICAgIGRlbGV0ZSBtX3BsYXRm
b3JtRGVzY3JpcHRpb247Cit9CisKK3ZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4
dE1lbnVJdGVtJiBpdGVtKQoreworICAgIHByaW50ZigiQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW1c
biIpOworCisgICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOworCisgICAgQk1lbnVJdGVt
KiBiSXRlbSA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKKyAgICBpZiAoYkl0
ZW0pCisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+QWRkSXRlbShiSXRlbSk7Cit9CisK
K3Vuc2lnbmVkIENvbnRleHRNZW51OjppdGVtQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3BsYXRmb3JtRGVzY3JpcHRpb24tPkNvdW50SXRlbXMoKTsKK30KKwordm9pZCBDb250ZXh0TWVu
dTo6aW5zZXJ0SXRlbSh1bnNpZ25lZCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJiBpdGVtKQor
eworICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKKworICAgIEJNZW51SXRlbSogYkl0
ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CisgICAgaWYgKGJJdGVtKQor
ICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkFkZEl0ZW0oYkl0ZW0sIHBvc2l0aW9uKTsK
K30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247Cit9CisK
K3ZvaWQgQ29udGV4dE1lbnU6OnNldFBsYXRmb3JtRGVzY3JpcHRpb24oUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gbWVudSkKK3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8Qk1lbnUqPihtZW51KSA9PSBt
X3BsYXRmb3JtRGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZSBtX3Bs
YXRmb3JtRGVzY3JpcHRpb247CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gc3RhdGljX2Nh
c3Q8Qk1lbnUqPihtZW51KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SXRlbUhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVJdGVtSGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNWFiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SXRlbUhhaWt1LmNwcApAQCAtMCwwICsxLDE2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51
SXRlbS5oIgorCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCisjaW5jbHVkZSA8TWVudS5oPgorI2luY2x1ZGUgPE1lbnVJdGVtLmg+CisjaW5j
bHVkZSA8TWVzc2FnZS5oPgorI2luY2x1ZGUgPFN0cmluZy5oPgorCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitDb250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShQbGF0Zm9ybU1l
bnVJdGVtRGVzY3JpcHRpb24gaXRlbSkKK3sKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBp
dGVtOworfQorCitDb250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudSog
c3ViTWVudSkKK3sKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgQk1lbnVJdGVtKHN1
Yk1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ldyBCTWVzc2FnZShDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbikp
OworfQorCitDb250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1U
eXBlIHR5cGUsIENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdGl0bGUsIENvbnRleHRNZW51KiBzdWJNZW51KQor
eworICAgIGlmICh0eXBlID09IEFjdGlvblR5cGUpCisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbiA9IG5ldyBCTWVudUl0ZW0oQlN0cmluZyh0aXRsZSkuU3RyaW5nKCksIG5ldyBCTWVzc2Fn
ZShhY3Rpb24pKTsKKyAgICBlbHNlIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCisgICAgICAg
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBCU2VwYXJhdG9ySXRlbSgpOworICAgIGVsc2Ug
eworICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgQk1lbnVJdGVtKHN1Yk1lbnUt
PnBsYXRmb3JtRGVzY3JpcHRpb24oKSwgbmV3IEJNZXNzYWdlKGFjdGlvbikpOworICAgICAgICBt
X3BsYXRmb3JtRGVzY3JpcHRpb24tPlNldExhYmVsKEJTdHJpbmcodGl0bGUpLlN0cmluZygpKTsK
KyAgICB9Cit9CisKK0NvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSgpCit7CisgICAg
ZGVsZXRlIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKK30KKworUGxhdGZvcm1NZW51SXRlbURlc2Ny
aXB0aW9uIENvbnRleHRNZW51SXRlbTo6cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKQorewor
ICAgIEJNZW51SXRlbSogaXRlbSA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24gPSBOVUxMOworICAgIHJldHVybiBpdGVtOworfQorCitDb250ZXh0TWVu
dUl0ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKGR5bmFt
aWNfY2FzdDxCU2VwYXJhdG9ySXRlbSo+KG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCisgICAgICAg
IHJldHVybiBTZXBhcmF0b3JUeXBlOworICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24tPlN1
Ym1lbnUoKSkKKyAgICAgICAgcmV0dXJuIFN1Ym1lbnVUeXBlOworICAgIHJldHVybiBBY3Rpb25U
eXBlOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VHlwZShDb250ZXh0TWVudUl0ZW1U
eXBlIHR5cGUpCit7CisgICAgQ29udGV4dE1lbnVBY3Rpb24gdGhlQWN0aW9uID0gYWN0aW9uKCk7
CisgICAgU3RyaW5nIHRoZVRpdGxlID0gdGl0bGUoKTsKKyAgICBCTWVudSogc3ViTWVudSA9IHBs
YXRmb3JtU3ViTWVudSgpOworICAgIGRlbGV0ZSBtX3BsYXRmb3JtRGVzY3JpcHRpb247CisKKyAg
ICBpZiAodHlwZSA9PSBBY3Rpb25UeXBlKQorICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24g
PSBuZXcgQk1lbnVJdGVtKEJTdHJpbmcodGhlVGl0bGUpLlN0cmluZygpLCBuZXcgQk1lc3NhZ2Uo
dGhlQWN0aW9uKSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSBTZXBhcmF0b3JUeXBlKQorICAgICAg
ICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgQlNlcGFyYXRvckl0ZW0oKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgaWYgKHN1Yk1lbnUpIHsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbiA9IG5ldyBCTWVudUl0ZW0oc3ViTWVudSwgbmV3IEJNZXNzYWdlKHRoZUFjdGlvbikpOwor
ICAgICAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5TZXRMYWJlbChCU3RyaW5nKHRoZVRp
dGxlKS5TdHJpbmcoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uID0gbmV3IEJNZW51SXRlbShCU3RyaW5nKHRoZVRpdGxlKS5TdHJpbmcoKSwgbmV3
IEJNZXNzYWdlKHRoZUFjdGlvbikpOworICAgIH0KK30KKworQ29udGV4dE1lbnVBY3Rpb24gQ29u
dGV4dE1lbnVJdGVtOjphY3Rpb24oKSBjb25zdAoreworICAgIGlmICghbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uKQorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb247CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkNvbnRleHRNZW51QWN0aW9uPihtX3BsYXRmb3Jt
RGVzY3JpcHRpb24tPk1lc3NhZ2UoKS0+d2hhdCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVt
OjpzZXRBY3Rpb24oQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIGlmIChtX3BsYXRm
b3JtRGVzY3JpcHRpb24pCisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+TWVzc2FnZSgp
LT53aGF0ID0gYWN0aW9uOworfQorCitTdHJpbmcgQ29udGV4dE1lbnVJdGVtOjp0aXRsZSgpIGNv
bnN0IAoreworICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiAi
IjsKKyAgICByZXR1cm4gQlN0cmluZyhtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkxhYmVsKCkpOwor
fQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkK
K3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIGEgYmV0dGVyIHdheSB0byBjb252ZXJ0
IFdlYktpdCBTdHJpbmdzIGludG8gYyBzdHJpbmdzCisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9u
LT5TZXRMYWJlbChCU3RyaW5nKHRpdGxlKS5TdHJpbmcoKSk7Cit9CisKK1BsYXRmb3JtTWVudURl
c2NyaXB0aW9uIENvbnRleHRNZW51SXRlbTo6cGxhdGZvcm1TdWJNZW51KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5TdWJtZW51KCk7Cit9CisKK3ZvaWQgQ29u
dGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51KENvbnRleHRNZW51KiBtZW51KQoreworICAgIC8vIEZJ
WE1FOiBXZSBhc3N1bWUgbV9wbGF0Zm9ybURlc2NyaXB0aW9uIGlzIHZhbGlkCisgICAgY29uc3Qg
Y2hhciogdGl0bGUgPSBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkxhYmVsKCk7CisgICAgZGVsZXRl
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcg
Qk1lbnVJdGVtKG1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKSwgbmV3IEJNZXNzYWdlKGFjdGlv
bigpKSk7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5TZXRMYWJlbCh0aXRsZSk7Cit9CisK
K3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgY2hlY2tlZCkKK3sKKyAgICBp
ZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uKQorICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24t
PlNldE1hcmtlZChjaGVja2VkKTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEVuYWJs
ZWQoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikKKyAgICAg
ICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5TZXRFbmFibGVkKGVuYWJsZSk7Cit9CisKK2Jvb2wg
Q29udGV4dE1lbnVJdGVtOjplbmFibGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1E
ZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbi0+SXNFbmFibGVkKCk7Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29r
aWVKYXJIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1MTlk
NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFp
a3UuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2Vvcmdl
IFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIK
KworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgYmUgc2F2ZWQgdG8gYW5k
IHJlc3RvcmVkIGZyb20gZGlzayB0b28/CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
Y29va2llSmFyOworCit2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJM
JiAvKnBvbGljeVVSTCovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNvb2tpZUphci5z
ZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOworfQorCiti
b29sIGNvb2tpZXNFbmFibGVkKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFi
bHkgYmUgYSBzZXR0aW5nCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0N1cnNvckhhaWt1LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmNkMDhmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNv
bT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
CisjaW5jbHVkZSA8YXBwL0FwcERlZnMuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1
cnNvcjo6Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIHApCisgICAgOiBtX2ltcGwocCkKK3sKK30KKwor
Q3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKKyAgICA6IG1faW1wbChvdGhlci5t
X2ltcGwpCit7Cit9CisKK0N1cnNvcjo6fkN1cnNvcigpCit7Cit9CisKK0N1cnNvcjo6Q3Vyc29y
KEltYWdlKiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K0N1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKK3sKKyAgICBt
X2ltcGwgPSBvdGhlci5tX2ltcGw7CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdGF0aWMgQ3Vy
c29yIGdsb2JhbF9jdXJzb3IoKFBsYXRmb3JtQ3Vyc29yKUJfQ1VSU09SX1NZU1RFTV9ERUZBVUxU
KTsKK3N0YXRpYyBDdXJzb3IgaWJlYW1fY3Vyc29yKChQbGF0Zm9ybUN1cnNvcilCX0NVUlNPUl9J
X0JFQU0pOworCitjb25zdCBDdXJzb3ImIHBvaW50ZXJDdXJzb3IoKQoreworICAgIHJldHVybiBn
bG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG1vdmVDdXJzb3IoKQoreworICAgIHJl
dHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNyb3NzQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29y
KCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBpQmVh
bUN1cnNvcigpCit7CisgICAgcmV0dXJuIGliZWFtX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29y
JiB3YWl0Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3Qg
Q3Vyc29yJiBoZWxwQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiBlYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0
dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0UmVzaXplQ3Vy
c29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBu
b3J0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIHNvdXRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFs
X2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKQorewor
ICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJl
c2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgd2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgbm9ydGhTb3V0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJu
IGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3Io
KQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRo
RWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjb2x1bW5SZXNp
emVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIHJvd1Jlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisK
K2NvbnN0IEN1cnNvciYgdmVydGljYWxUZXh0Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFs
X2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjZWxsQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4g
Z2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjb250ZXh0TWVudUN1cnNvcigpCit7
CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9Ecm9wQ3Vy
c29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBj
b3B5Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vy
c29yJiBwcm9ncmVzc0N1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisK
K2NvbnN0IEN1cnNvciYgYWxpYXNDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIG5vbmVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxf
Y3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vdEFsbG93ZWRDdXJzb3IoKQoreworICAgIHJl
dHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHpvb21JbkN1cnNvcigpCit7
CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgem9vbU91dEN1
cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
Z3JhYkN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgZ3JhYmJpbmdDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvRHJhZ0RhdGFIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdEYXRh
SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MmIzMTEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3Bw
CkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRyYWdEYXRhLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRIYWlrdS5oIgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
RHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3Io
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIERyYWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFt
ZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBEcmFnRGF0
YTo6YXNQbGFpblRleHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitDb2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gQ29sb3IoKTsKK30KKworV1RGOjpQYXNz
UmVmUHRyPENsaXBib2FyZD4gRHJhZ0RhdGE6OmNyZWF0ZUNsaXBib2FyZChDbGlwYm9hcmRBY2Nl
c3NQb2xpY3kgcG9saWN5KSBjb25zdAoreworICAgIHJldHVybiBuZXcgQ2xpcGJvYXJkSGFpa3Uo
cG9saWN5LCB0cnVlKTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29u
dGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5zQ29sb3IoKSB8fCBjb250YWluc1VS
TCgpIHx8IGNvbnRhaW5zUGxhaW5UZXh0KCk7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5z
VVJMKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworU3RyaW5nIERyYWdEYXRhOjphc1VSTChTdHJpbmcqIHRpdGxlKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KERvY3VtZW50KikgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Ry
YWdJbWFnZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFpa3Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YTc5ZjQKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcApAQCAt
MCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxs
ZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRyYWdJbWFnZS5oIgorCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJJ
bWFnZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50U2l6ZSgwLCAwKTsKK30KKwordm9pZCBkZWxl
dGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6
ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBpbWFnZTsKK30KKworRHJh
Z0ltYWdlUmVmIGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihEcmFnSW1hZ2VSZWYgaW1hZ2Us
IGZsb2F0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGltYWdlOworfQor
CitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOyAgICAgCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0V2ZW50TG9vcEhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUwZTZmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHAKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkV2ZW50TG9vcC5oIgorCisjaW5jbHVkZSA8YXBwL0FwcGxpY2F0aW9uLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIEV2ZW50TG9vcDo6Y3ljbGUoKQoreworICAgIGlmICghYmVf
YXBwKQorICAgICAgICBtX2VuZGVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVDaG9vc2VySGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlQ2hvb3NlckhhaWt1LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGU0MmI2Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlQ2hvb3NlckhhaWt1LmNwcApAQCAtMCwwICsxLDQ2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVh
dmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlQ2hv
b3Nlci5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJJY29uLmgi
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmls
ZUNob29zZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKKyAgICA6IG1f
Y2xpZW50KGNsaWVudCkKKyAgICAsIG1fZmlsZW5hbWVzKCkKKyAgICAsIG1faWNvbihjaG9vc2VJ
Y29uKGZpbGVuYW1lKSkKK3sKKyAgICBtX2ZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpOworfQor
CitTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYsIGludCB3
aWR0aCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L0ZpbGVTeXN0ZW1IYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0ZpbGVTeXN0ZW1IYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NzQwMGNkMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZVN5
c3RlbUhhaWt1LmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0NTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQoreworICAgIHJldHVybiBzdHJpbmcudXRmOCgpOworfQorCitTdHJpbmcgaG9tZURpcmVj
dG9yeVBhdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByZWZpeCwgUGxh
dGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBo
YW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIHJldHVybiBDU3RyaW5nKCk7
Cit9CisKK3ZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFN0cmlu
Zz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVy
KQoreworICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZW50cmllczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0tleWJvYXJkQ29kZXMuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvS2V5Ym9hcmRDb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjZmMGQ0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0tleWJvYXJkQ29kZXMuaApAQCAtMCwwICsxLDU0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0
IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBLZXlib2FyZENvZGVzX2gKKyNk
ZWZpbmUgS2V5Ym9hcmRDb2Rlc19oCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIC8vIFZL
X0xCVVRUT04gKDAxKSBMZWZ0IG1vdXNlIGJ1dHRvbgorICAgIC8vIFZLX1JCVVRUT04gKDAyKSBS
aWdodCBtb3VzZSBidXR0b24KKyAgICAvLyBWS19DQU5DRUwgKDAzKSBDb250cm9sLWJyZWFrIHBy
b2Nlc3NpbmcKKyAgICAvLyBWS19NQlVUVE9OICgwNCkgTWlkZGxlIG1vdXNlIGJ1dHRvbiAodGhy
ZWUtYnV0dG9uIG1vdXNlKQorICAgIC8vIFZLX1hCVVRUT04xICgwNSkKKyAgICAvLyBWS19YQlVU
VE9OMiAoMDYpCisKKyAgICAvLyBWS19CQUNLICgwOCkgQkFDS1NQQUNFIGtleQorICAgIGNvbnN0
IGludCBWS19CQUNLID0gMHgwODsKKworICAgIC8vIFZLX1RBQiAoMDkpIFRBQiBrZXkKKyAgICBj
b25zdCBpbnQgVktfVEFCID0gMHgwOTsKKworICAgIC8vIFZLX0NMRUFSICgwQykgQ0xFQVIga2V5
CisgICAgY29uc3QgaW50IFZLX0NMRUFSID0gMHgwQzsKKworICAgIC8vIFZLX1JFVFVSTiAoMEQp
CisgICAgY29uc3QgaW50IFZLX1JFVFVSTiA9IDB4MEQ7CisKKyAgICAvLyBWS19TSElGVCAoMTAp
IFNISUZUIGtleQorICAgIGNvbnN0IGludCBWS19TSElGVCA9IDB4MTA7CisKKyAgICAvLyBWS19D
T05UUk9MICgxMSkgQ1RSTCBrZXkKKyAgICBjb25zdCBpbnQgVktfQ09OVFJPTCA9IDB4MTE7CisK
KyAgICAvLyBWS19NRU5VICgxMikgQUxUIGtleQorICAgIGNvbnN0IGludCBWS19NRU5VID0gMHgx
MjsKKworICAgIC8vIFZLX1BBVVNFICgxMykgUEFVU0Uga2V5CisgICAgY29uc3QgaW50IFZLX1BB
VVNFID0gMHgxMzsKKworICAgIC8vIFZLX0NBUElUQUwgKDE0KSBDQVBTIExPQ0sga2V5CisgICAg
Y29uc3QgaW50IFZLX0NBUElUQUwgPSAweDE0OworCisgICAgLy8gVktfS0FOQSAoMTUpIElucHV0
IE1ldGhvZCBFZGl0b3IgKElNRSkgS2FuYSBtb2RlCisgICAgY29uc3QgaW50IFZLX0tBTkEgPSAw
eDE1OworCisgICAgLy8gVktfSEFOR1VFTCAoMTUpIElNRSBIYW5ndWVsIG1vZGUgKG1haW50YWlu
ZWQgZm9yIGNvbXBhdGliaWxpdHk7IHVzZSBWS19IQU5HVUwpCisgICAgLy8gVktfSEFOR1VMICgx
NSkgSU1FIEhhbmd1bCBtb2RlCisgICAgY29uc3QgaW50IFZLX0hBTkdVTCA9IDB4MTU7CisKKyAg
ICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgY29uc3QgaW50IFZLX0pVTkpB
ID0gMHgxNzsKKworICAgIC8vIFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKKyAgICBjb25z
dCBpbnQgVktfRklOQUwgPSAweDE4OworCisgICAgLy8gVktfSEFOSkEgKDE5KSBJTUUgSGFuamEg
bW9kZQorICAgIGNvbnN0IGludCBWS19IQU5KQSA9IDB4MTk7CisKKyAgICAvLyBWS19LQU5KSSAo
MTkpIElNRSBLYW5qaSBtb2RlCisgICAgY29uc3QgaW50IFZLX0tBTkpJID0gMHgxOTsKKworICAg
IC8vIFZLX0VTQ0FQRSAoMUIpIEVTQyBrZXkKKyAgICBjb25zdCBpbnQgVktfRVNDQVBFID0gMHgx
QjsKKworICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAorICAgIGNvbnN0IGludCBW
S19DT05WRVJUID0gMHgxQzsKKworICAgIC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29u
dmVydAorICAgIGNvbnN0IGludCBWS19OT05DT05WRVJUID0gMHgxRDsKKworICAgIC8vIFZLX0FD
Q0VQVCAoMUUpIElNRSBhY2NlcHQKKyAgICBjb25zdCBpbnQgVktfQUNDRVBUID0gMHgxRTsKKwor
ICAgIC8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAorICAgIGNv
bnN0IGludCBWS19NT0RFQ0hBTkdFID0gMHgxRjsKKworICAgIC8vIFZLX1NQQUNFICgyMCkgU1BB
Q0VCQVIKKyAgICBjb25zdCBpbnQgVktfU1BBQ0UgPSAweDIwOworCisgICAgLy8gVktfUFJJT1Ig
KDIxKSBQQUdFIFVQIGtleQorICAgIGNvbnN0IGludCBWS19QUklPUiA9IDB4MjE7CisKKyAgICAv
LyBWS19ORVhUICgyMikgUEFHRSBET1dOIGtleQorICAgIGNvbnN0IGludCBWS19ORVhUID0gMHgy
MjsKKworICAgIC8vIFZLX0VORCAoMjMpIEVORCBrZXkKKyAgICBjb25zdCBpbnQgVktfRU5EID0g
MHgyMzsKKworICAgIC8vIFZLX0hPTUUgKDI0KSBIT01FIGtleQorICAgIGNvbnN0IGludCBWS19I
T01FID0gMHgyNDsKKworICAgIC8vIFZLX0xFRlQgKDI1KSBMRUZUIEFSUk9XIGtleQorICAgIGNv
bnN0IGludCBWS19MRUZUID0gMHgyNTsKKworICAgIC8vIFZLX1VQICgyNikgVVAgQVJST1cga2V5
CisgICAgY29uc3QgaW50IFZLX1VQID0gMHgyNjsKKworICAgIC8vIFZLX1JJR0hUICgyNykgUklH
SFQgQVJST1cga2V5CisgICAgY29uc3QgaW50IFZLX1JJR0hUID0gMHgyNzsKKworICAgIC8vIFZL
X0RPV04gKDI4KSBET1dOIEFSUk9XIGtleQorICAgIGNvbnN0IGludCBWS19ET1dOID0gMHgyODsK
KworICAgIC8vIFZLX1NFTEVDVCAoMjkpIFNFTEVDVCBrZXkKKyAgICBjb25zdCBpbnQgVktfU0VM
RUNUID0gMHgyOTsKKworICAgIC8vIFZLX1BSSU5UICgyQSkgUFJJTlQga2V5CisgICAgY29uc3Qg
aW50IFZLX1BSSU5UID0gMHgyQTsKKworICAgIC8vIFZLX0VYRUNVVEUgKDJCKSBFWEVDVVRFIGtl
eQorICAgIGNvbnN0IGludCBWS19FWEVDVVRFID0gMHgyQjsKKworICAgIC8vIFZLX1NOQVBTSE9U
ICgyQykgUFJJTlQgU0NSRUVOIGtleQorICAgIGNvbnN0IGludCBWS19TTkFQU0hPVCA9IDB4MkM7
CisKKyAgICAvLyBWS19JTlNFUlQgKDJEKSBJTlMga2V5CisgICAgY29uc3QgaW50IFZLX0lOU0VS
VCA9IDB4MkQ7CisKKyAgICAvLyBWS19ERUxFVEUgKDJFKSBERUwga2V5CisgICAgY29uc3QgaW50
IFZLX0RFTEVURSA9IDB4MkU7CisKKyAgICAvLyBWS19IRUxQICgyRikgSEVMUCBrZXkKKyAgICBj
b25zdCBpbnQgVktfSEVMUCA9IDB4MkY7CisKKyAgICAvLyAoMzApIDAga2V5CisgICAgY29uc3Qg
aW50IFZLXzAgPSAweDMwOworCisgICAgLy8gKDMxKSAxIGtleQorICAgIGNvbnN0IGludCBWS18x
ID0gMHgzMTsKKworICAgIC8vICgzMikgMiBrZXkKKyAgICBjb25zdCBpbnQgVktfMiA9IDB4MzI7
CisKKyAgICAvLyAoMzMpIDMga2V5CisgICAgY29uc3QgaW50IFZLXzMgPSAweDMzOworCisgICAg
Ly8gKDM0KSA0IGtleQorICAgIGNvbnN0IGludCBWS180ID0gMHgzNDsKKworICAgIC8vICgzNSkg
NSBrZXk7CisKKyAgICBjb25zdCBpbnQgVktfNSA9IDB4MzU7CisKKyAgICAvLyAoMzYpIDYga2V5
CisgICAgY29uc3QgaW50IFZLXzYgPSAweDM2OworCisgICAgLy8gKDM3KSA3IGtleQorICAgIGNv
bnN0IGludCBWS183ID0gMHgzNzsKKworICAgIC8vICgzOCkgOCBrZXkKKyAgICBjb25zdCBpbnQg
VktfOCA9IDB4Mzg7CisKKyAgICAvLyAoMzkpIDkga2V5CisgICAgY29uc3QgaW50IFZLXzkgPSAw
eDM5OworCisgICAgLy8gKDQxKSBBIGtleQorICAgIGNvbnN0IGludCBWS19BID0gMHg0MTsKKwor
ICAgIC8vICg0MikgQiBrZXkKKyAgICBjb25zdCBpbnQgVktfQiA9IDB4NDI7CisKKyAgICAvLyAo
NDMpIEMga2V5CisgICAgY29uc3QgaW50IFZLX0MgPSAweDQzOworCisgICAgLy8gKDQ0KSBEIGtl
eQorICAgIGNvbnN0IGludCBWS19EID0gMHg0NDsKKworICAgIC8vICg0NSkgRSBrZXkKKyAgICBj
b25zdCBpbnQgVktfRSA9IDB4NDU7CisKKyAgICAvLyAoNDYpIEYga2V5CisgICAgY29uc3QgaW50
IFZLX0YgPSAweDQ2OworCisgICAgLy8gKDQ3KSBHIGtleQorICAgIGNvbnN0IGludCBWS19HID0g
MHg0NzsKKworICAgIC8vICg0OCkgSCBrZXkKKyAgICBjb25zdCBpbnQgVktfSCA9IDB4NDg7CisK
KyAgICAvLyAoNDkpIEkga2V5CisgICAgY29uc3QgaW50IFZLX0kgPSAweDQ5OworCisgICAgLy8g
KDRBKSBKIGtleQorICAgIGNvbnN0IGludCBWS19KID0gMHg0QTsKKworICAgIC8vICg0QikgSyBr
ZXkKKyAgICBjb25zdCBpbnQgVktfSyA9IDB4NEI7CisKKyAgICAvLyAoNEMpIEwga2V5CisgICAg
Y29uc3QgaW50IFZLX0wgPSAweDRDOworCisgICAgLy8gKDREKSBNIGtleQorICAgIGNvbnN0IGlu
dCBWS19NID0gMHg0RDsKKworICAgIC8vICg0RSkgTiBrZXkKKyAgICBjb25zdCBpbnQgVktfTiA9
IDB4NEU7CisKKyAgICAvLyAoNEYpIE8ga2V5CisgICAgY29uc3QgaW50IFZLX08gPSAweDRGOwor
CisgICAgLy8gKDUwKSBQIGtleQorICAgIGNvbnN0IGludCBWS19QID0gMHg1MDsKKworICAgIC8v
ICg1MSkgUSBrZXkKKyAgICBjb25zdCBpbnQgVktfUSA9IDB4NTE7CisKKyAgICAvLyAoNTIpIFIg
a2V5CisgICAgY29uc3QgaW50IFZLX1IgPSAweDUyOworCisgICAgLy8gKDUzKSBTIGtleQorICAg
IGNvbnN0IGludCBWS19TID0gMHg1MzsKKworICAgIC8vICg1NCkgVCBrZXkKKyAgICBjb25zdCBp
bnQgVktfVCA9IDB4NTQ7CisKKyAgICAvLyAoNTUpIFUga2V5CisgICAgY29uc3QgaW50IFZLX1Ug
PSAweDU1OworCisgICAgLy8gKDU2KSBWIGtleQorICAgIGNvbnN0IGludCBWS19WID0gMHg1NjsK
KworICAgIC8vICg1NykgVyBrZXkKKyAgICBjb25zdCBpbnQgVktfVyA9IDB4NTc7CisKKyAgICAv
LyAoNTgpIFgga2V5CisgICAgY29uc3QgaW50IFZLX1ggPSAweDU4OworCisgICAgLy8gKDU5KSBZ
IGtleQorICAgIGNvbnN0IGludCBWS19ZID0gMHg1OTsKKworICAgIC8vICg1QSkgWiBrZXkKKyAg
ICBjb25zdCBpbnQgVktfWiA9IDB4NUE7CisKKyAgICAvLyBWS19MV0lOICg1QikgTGVmdCBXaW5k
b3dzIGtleSAoTWljcm9zb2Z0IE5hdHVyYWwga2V5Ym9hcmQpCisgICAgY29uc3QgaW50IFZLX0xX
SU4gPSAweDVCOworCisgICAgLy8gVktfUldJTiAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1
cmFsIGtleWJvYXJkKQorICAgIGNvbnN0IGludCBWS19SV0lOID0gMHg1QzsKKworICAgIC8vIFZL
X0FQUFMgKDVEKSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgIGNvbnN0
IGludCBWS19BUFBTID0gMHg1RDsKKworICAgIC8vIFZLX1NMRUVQICg1RikgQ29tcHV0ZXIgU2xl
ZXAga2V5CisgICAgY29uc3QgaW50IFZLX1NMRUVQID0gMHg1RjsKKworICAgIC8vIFZLX05VTVBB
RDAgKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQwID0g
MHg2MDsKKworICAgIC8vIFZLX05VTVBBRDEgKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorICAg
IGNvbnN0IGludCBWS19OVU1QQUQxID0gMHg2MTsKKworICAgIC8vIFZLX05VTVBBRDIgKDYyKSBO
dW1lcmljIGtleXBhZCAyIGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQyID0gMHg2MjsKKwor
ICAgIC8vIFZLX05VTVBBRDMgKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgIGNvbnN0IGlu
dCBWS19OVU1QQUQzID0gMHg2MzsKKworICAgIC8vIFZLX05VTVBBRDQgKDY0KSBOdW1lcmljIGtl
eXBhZCA0IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ0ID0gMHg2NDsKKworICAgIC8vIFZL
X05VTVBBRDUgKDY1KSBOdW1lcmljIGtleXBhZCA1IGtleQorICAgIGNvbnN0IGludCBWS19OVU1Q
QUQ1ID0gMHg2NTsKKworICAgIC8vIFZLX05VTVBBRDYgKDY2KSBOdW1lcmljIGtleXBhZCA2IGtl
eQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ2ID0gMHg2NjsKKworICAgIC8vIFZLX05VTVBBRDcg
KDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ3ID0gMHg2
NzsKKworICAgIC8vIFZLX05VTVBBRDggKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQorICAgIGNv
bnN0IGludCBWS19OVU1QQUQ4ID0gMHg2ODsKKworICAgIC8vIFZLX05VTVBBRDkgKDY5KSBOdW1l
cmljIGtleXBhZCA5IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ5ID0gMHg2OTsKKworICAg
IC8vIFZLX01VTFRJUExZICg2QSkgTXVsdGlwbHkga2V5CisgICAgY29uc3QgaW50IFZLX01VTFRJ
UExZID0gMHg2QTsKKworICAgIC8vIFZLX0FERCAoNkIpIEFkZCBrZXkKKyAgICBjb25zdCBpbnQg
VktfQUREID0gMHg2QjsKKworICAgIC8vIFZLX1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkK
KyAgICBjb25zdCBpbnQgVktfU0VQQVJBVE9SID0gMHg2QzsKKworICAgIC8vIFZLX1NVQlRSQUNU
ICg2RCkgU3VidHJhY3Qga2V5CisgICAgY29uc3QgaW50IFZLX1NVQlRSQUNUID0gMHg2RDsKKwor
ICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorICAgIGNvbnN0IGludCBWS19ERUNJ
TUFMID0gMHg2RTsKKworICAgIC8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKKyAgICBjb25z
dCBpbnQgVktfRElWSURFID0gMHg2RjsKKworICAgIC8vIFZLX0YxICg3MCkgRjEga2V5CisgICAg
Y29uc3QgaW50IFZLX0YxID0gMHg3MDsKKworICAgIC8vIFZLX0YyICg3MSkgRjIga2V5CisgICAg
Y29uc3QgaW50IFZLX0YyID0gMHg3MTsKKworICAgIC8vIFZLX0YzICg3MikgRjMga2V5CisgICAg
Y29uc3QgaW50IFZLX0YzID0gMHg3MjsKKworICAgIC8vIFZLX0Y0ICg3MykgRjQga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y0ID0gMHg3MzsKKworICAgIC8vIFZLX0Y1ICg3NCkgRjUga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y1ID0gMHg3NDsKKworICAgIC8vIFZLX0Y2ICg3NSkgRjYga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y2ID0gMHg3NTsKKworICAgIC8vIFZLX0Y3ICg3NikgRjcga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y3ID0gMHg3NjsKKworICAgIC8vIFZLX0Y4ICg3NykgRjgga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y4ID0gMHg3NzsKKworICAgIC8vIFZLX0Y5ICg3OCkgRjkga2V5CisgICAg
Y29uc3QgaW50IFZLX0Y5ID0gMHg3ODsKKworICAgIC8vIFZLX0YxMCAoNzkpIEYxMCBrZXkKKyAg
ICBjb25zdCBpbnQgVktfRjEwID0gMHg3OTsKKworICAgIC8vIFZLX0YxMSAoN0EpIEYxMSBrZXkK
KyAgICBjb25zdCBpbnQgVktfRjExID0gMHg3QTsKKworICAgIC8vIFZLX0YxMiAoN0IpIEYxMiBr
ZXkKKyAgICBjb25zdCBpbnQgVktfRjEyID0gMHg3QjsKKworICAgIC8vIFZLX0YxMyAoN0MpIEYx
MyBrZXkKKyAgICBjb25zdCBpbnQgVktfRjEzID0gMHg3QzsKKworICAgIC8vIFZLX0YxNCAoN0Qp
IEYxNCBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE0ID0gMHg3RDsKKworICAgIC8vIFZLX0YxNSAo
N0UpIEYxNSBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE1ID0gMHg3RTsKKworICAgIC8vIFZLX0Yx
NiAoN0YpIEYxNiBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE2ID0gMHg3RjsKKworICAgIC8vIFZL
X0YxNyAoODBIKSBGMTcga2V5CisgICAgY29uc3QgaW50IFZLX0YxNyA9IDB4ODA7CisKKyAgICAv
LyBWS19GMTggKDgxSCkgRjE4IGtleQorICAgIGNvbnN0IGludCBWS19GMTggPSAweDgxOworCisg
ICAgLy8gVktfRjE5ICg4MkgpIEYxOSBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE5ID0gMHg4MjsK
KworICAgIC8vIFZLX0YyMCAoODNIKSBGMjAga2V5CisgICAgY29uc3QgaW50IFZLX0YyMCA9IDB4
ODM7CisKKyAgICAvLyBWS19GMjEgKDg0SCkgRjIxIGtleQorICAgIGNvbnN0IGludCBWS19GMjEg
PSAweDg0OworCisgICAgLy8gVktfRjIyICg4NUgpIEYyMiBrZXkKKyAgICBjb25zdCBpbnQgVktf
RjIyID0gMHg4NTsKKworICAgIC8vIFZLX0YyMyAoODZIKSBGMjMga2V5CisgICAgY29uc3QgaW50
IFZLX0YyMyA9IDB4ODY7CisKKyAgICAvLyBWS19GMjQgKDg3SCkgRjI0IGtleQorICAgIGNvbnN0
IGludCBWS19GMjQgPSAweDg3OworCisgICAgLy8gVktfTlVNTE9DSyAoOTApIE5VTSBMT0NLIGtl
eQorICAgIGNvbnN0IGludCBWS19OVU1MT0NLID0gMHg5MDsKKworICAgIC8vIFZLX1NDUk9MTCAo
OTEpIFNDUk9MTCBMT0NLIGtleQorICAgIGNvbnN0IGludCBWS19TQ1JPTEwgPSAweDkxOworCisg
ICAgLy8gVktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKKyAgICBjb25zdCBpbnQgVktfTFNI
SUZUID0gMHhBMDsKKworICAgIC8vIFZLX1JTSElGVCAoQTEpIFJpZ2h0IFNISUZUIGtleQorICAg
IGNvbnN0IGludCBWS19SU0hJRlQgPSAweEExOworCisgICAgLy8gVktfTENPTlRST0wgKEEyKSBM
ZWZ0IENPTlRST0wga2V5CisgICAgY29uc3QgaW50IFZLX0xDT05UUk9MID0gMHhBMjsKKworICAg
IC8vIFZLX1JDT05UUk9MIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICBjb25zdCBpbnQgVktf
UkNPTlRST0wgPSAweEEzOworCisgICAgLy8gVktfTE1FTlUgKEE0KSBMZWZ0IE1FTlUga2V5Cisg
ICAgY29uc3QgaW50IFZLX0xNRU5VID0gMHhBNDsKKworICAgIC8vIFZLX1JNRU5VIChBNSkgUmln
aHQgTUVOVSBrZXkKKyAgICBjb25zdCBpbnQgVktfUk1FTlUgPSAweEE1OworCisgICAgLy8gVktf
QlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sga2V5CisgICAg
Y29uc3QgaW50IFZLX0JST1dTRVJfQkFDSyA9IDB4QTY7CisKKyAgICAvLyBWS19CUk9XU0VSX0ZP
UldBUkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKKyAgICBjb25z
dCBpbnQgVktfQlJPV1NFUl9GT1JXQVJEID0gMHhBNzsKKworICAgIC8vIFZLX0JST1dTRVJfUkVG
UkVTSCAoQTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZyZXNoIGtleQorICAgIGNvbnN0
IGludCBWS19CUk9XU0VSX1JFRlJFU0ggPSAweEE4OworCisgICAgLy8gVktfQlJPV1NFUl9TVE9Q
IChBOSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5CisgICAgY29uc3QgaW50IFZL
X0JST1dTRVJfU1RPUCA9IDB4QTk7CisKKyAgICAvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdp
bmRvd3MgMjAwMC9YUDogQnJvd3NlciBTZWFyY2gga2V5CisgICAgY29uc3QgaW50IFZLX0JST1dT
RVJfU0VBUkNIID0gMHhBQTsKKworICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2lu
ZG93cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBrZXkKKyAgICBjb25zdCBpbnQgVktfQlJP
V1NFUl9GQVZPUklURVMgPSAweEFCOworCisgICAgLy8gVktfQlJPV1NFUl9IT01FIChBQykgV2lu
ZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtleQorICAgIGNvbnN0IGludCBW
S19CUk9XU0VSX0hPTUUgPSAweEFDOworCisgICAgLy8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5k
b3dzIDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQorICAgIGNvbnN0IGludCBWS19WT0xVTUVfTVVU
RSA9IDB4QUQ7CisKKyAgICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdpbmRvd3MgMjAwMC9YUDog
Vm9sdW1lIERvd24ga2V5CisgICAgY29uc3QgaW50IFZLX1ZPTFVNRV9ET1dOID0gMHhBRTsKKwor
ICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQor
ICAgIGNvbnN0IGludCBWS19WT0xVTUVfVVAgPSAweEFGOworCisgICAgLy8gVktfTUVESUFfTkVY
VF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKKyAgICBjb25zdCBp
bnQgVktfTUVESUFfTkVYVF9UUkFDSyA9IDB4QjA7CisKKyAgICAvLyBWS19NRURJQV9QUkVWX1RS
QUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQcmV2aW91cyBUcmFjayBrZXkKKyAgICBjb25zdCBp
bnQgVktfTUVESUFfUFJFVl9UUkFDSyA9IDB4QjE7CisKKyAgICAvLyBWS19NRURJQV9TVE9QIChC
MikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1lZGlhIGtleQorICAgIGNvbnN0IGludCBWS19NRURJ
QV9TVE9QID0gMHhCMjsKKworICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dz
IDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5CisgICAgY29uc3QgaW50IFZLX01FRElBX1BM
QVlfUEFVU0UgPSAweEIzOworCisgICAgLy8gVktfTEFVTkNIX01BSUwgKEI0KSBXaW5kb3dzIDIw
MDAvWFA6IFN0YXJ0IE1haWwga2V5CisgICAgY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9NQUlM
ID0gMHhCNDsKKworICAgIC8vIFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIw
MDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKKyAgICBjb25zdCBpbnQgVktfTUVESUFfTEFVTkNIX01F
RElBX1NFTEVDVCA9IDB4QjU7CisKKyAgICAvLyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3Mg
MjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMSBrZXkKKyAgICBjb25zdCBpbnQgVktfTUVESUFf
TEFVTkNIX0FQUDEgPSAweEI2OworCisgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dz
IDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5CisgICAgY29uc3QgaW50IFZLX01FRElB
X0xBVU5DSF9BUFAyID0gMHhCNzsKKworICAgIC8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAy
MDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKKyAgICBj
b25zdCBpbnQgVktfT0VNXzEgPSAweEJBOworCisgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5CisgICAgY29u
c3QgaW50IFZLX09FTV9QTFVTID0gMHhCQjsKKworICAgIC8vIFZLX09FTV9DT01NQSAoQkMpIFdp
bmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKKyAgICBj
b25zdCBpbnQgVktfT0VNX0NPTU1BID0gMHhCQzsKKworICAgIC8vIFZLX09FTV9NSU5VUyAoQkQp
IFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKKyAg
ICBjb25zdCBpbnQgVktfT0VNX01JTlVTID0gMHhCRDsKKworICAgIC8vIFZLX09FTV9QRVJJT0Qg
KEJFKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5
CisgICAgY29uc3QgaW50IFZLX09FTV9QRVJJT0QgPSAweEJFOworCisgICAgLy8gVktfT0VNXzIg
KEJGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtl
eWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRo
ZSAnLz8nIGtleQorICAgIGNvbnN0IGludCBWS19PRU1fMiA9IDB4QkY7CisKKyAgICAvLyBWS19P
RU1fMyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkg
Ynkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2Fy
ZCwgdGhlICdgficga2V5CisgICAgY29uc3QgaW50IFZLX09FTV8zID0gMHhDMDsKKworICAgIC8v
IFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4g
dmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtl
eWJvYXJkLCB0aGUgJ1t7JyBrZXkKKyAgICBjb25zdCBpbnQgVktfT0VNXzQgPSAweERCOworCisg
ICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0
IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRh
cmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQorICAgIGNvbnN0IGludCBWS19PRU1fNSA9IDB4REM7
CisKKyAgICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVy
czsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBz
dGFuZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5CisgICAgY29uc3QgaW50IFZLX09FTV82ID0g
MHhERDsKKworICAgIC8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFy
YWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhl
IFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtl
eQorICAgIGNvbnN0IGludCBWS19PRU1fNyA9IDB4REU7CisKKyAgICAvLyBWS19PRU1fOCAoREYp
IFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9h
cmQuCisgICAgY29uc3QgaW50IFZLX09FTV84ID0gMHhERjsKKworICAgIC8vIFZLX09FTV8xMDIg
KEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhl
IGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKKyAgICBjb25zdCBpbnQg
VktfT0VNXzEwMiA9IDB4RTI7CisKKyAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkgV2luZG93cyA5
NS85OC9NZSwgV2luZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBST0NFU1Mga2V5
CisgICAgY29uc3QgaW50IFZLX1BST0NFU1NLRVkgPSAweEU1OworCisgICAgLy8gVktfUEFDS0VU
IChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJzIGFz
IGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0aGUgbG93IHdv
cmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtleWJvYXJkIGlu
cHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJESU5Q
VVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKKyAgICBjb25zdCBpbnQgVktf
UEFDS0VUID0gMHhFNzsKKworICAgIC8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQorICAgIGNvbnN0
IGludCBWS19BVFROID0gMHhGNjsKKworICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5Cisg
ICAgY29uc3QgaW50IFZLX0NSU0VMID0gMHhGNzsKKworICAgIC8vIFZLX0VYU0VMIChGOCkgRXhT
ZWwga2V5CisgICAgY29uc3QgaW50IFZLX0VYU0VMID0gMHhGODsKKworICAgIC8vIFZLX0VSRU9G
IChGOSkgRXJhc2UgRU9GIGtleQorICAgIGNvbnN0IGludCBWS19FUkVPRiA9IDB4Rjk7CisKKyAg
ICAvLyBWS19QTEFZIChGQSkgUGxheSBrZXkKKyAgICBjb25zdCBpbnQgVktfUExBWSA9IDB4RkE7
CisKKyAgICAvLyBWS19aT09NIChGQikgWm9vbSBrZXkKKyAgICBjb25zdCBpbnQgVktfWk9PTSA9
IDB4RkI7CisKKyAgICAvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQor
ICAgIGNvbnN0IGludCBWS19OT05BTUUgPSAweEZDOworCisgICAgLy8gVktfUEExIChGRCkgUEEx
IGtleQorICAgIGNvbnN0IGludCBWS19QQTEgPSAweEZEOworCisgICAgLy8gVktfT0VNX0NMRUFS
IChGRSkgQ2xlYXIga2V5CisgICAgY29uc3QgaW50IFZLX09FTV9DTEVBUiA9IDB4RkU7CisKKyAg
ICBjb25zdCBpbnQgVktfVU5LTk9XTiA9IDA7Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBLZXlib2FyZENvZGVzX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTUlN
RVR5cGVSZWdpc3RyeUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hMGQwZjFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9NSU1F
VHlwZVJlZ2lzdHJ5SGFpa3UuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KworCituYW1lc3BhY2UgV2ViQ29yZSAKK3sKK3N0cnVjdCBFeHRlbnNpb25NYXAgeworICAgIGNv
bnN0IGNoYXIqIGV4dGVuc2lvbjsKKyAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKK307CitzdGF0
aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKKyAgICB7ICJibXAiLCAi
aW1hZ2UvYm1wIiB9LAorICAgIHsgImdpZiIsICJpbWFnZS9naWYiIH0sCisgICAgeyAiaHRtbCIs
ICJ0ZXh0L2h0bWwiIH0sCisgICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwgICAKKyAgICB7
ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCisgICAgeyAianBnIiwgImltYWdlL2pwZWciIH0sCisg
ICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAorICAgIHsgInBkZiIsICJh
cHBsaWNhdGlvbi9wZGYiIH0sCisgICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKKyAgICB7ICJy
c3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKKyAgICB7ICJzdmciLCAiaW1hZ2Uvc3ZnK3ht
bCIgfSwKKyAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCisgICAgeyAidHh0IiwgInRleHQv
cGxhaW4iIH0sCisgICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKKyAgICB7ICJ4bWwi
LCAidGV4dC94bWwiIH0sCisgICAgeyAieHNsIiwgInRleHQveHNsIiB9LAorICAgIHsgInhodG1s
IiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKKyAgICB7IDAsIDAgfQorfTsKKworLy8gRklY
TUU6IFVzZSB0aGUgSGFpa3UgTUlNRSByZWdpc3RyeQorU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQoreworICAgIFN0cmlu
ZyBzID0gZXh0Lmxvd2VyKCk7CisgICAgY29uc3QgRXh0ZW5zaW9uTWFwICplID0gZXh0ZW5zaW9u
TWFwOworICAgIHdoaWxlIChlLT5leHRlbnNpb24pIHsKKyAgICAgICAgaWYgKHMgPT0gZS0+ZXh0
ZW5zaW9uKQorICAgICAgICAgICAgcmV0dXJuIGUtPm1pbWVUeXBlOworICAgICAgICArK2U7Cisg
ICAgfQorICAgIC8vIHVua25vd24sIGxldCdzIGp1c3QgYXNzdW1lIHBsYWluIHRleHQKKyAgICBy
ZXR1cm4gInRleHQvcGxhaW4iOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZmJmMjZmMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvUGFzdGVib2FyZEhhaWt1LmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKworI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5oPgorI2luY2x1
ZGUgPENsaXBib2FyZC5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxTdHJpbmcu
aD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoKQor
eworfQorCitQYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCit7Cisg
ICAgc3RhdGljIFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2FyZCgpOworICAg
IHJldHVybiBwYXN0ZWJvYXJkOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9u
KFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSog
ZnJhbWUpCit7CisgICAgQk1lc3NhZ2UgKmRhdGEgPSAoQk1lc3NhZ2UgKikgTlVMTDsKKworICAg
IGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBiZV9jbGlwYm9hcmQtPkNsZWFy
KCk7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkgeworICAgICAg
ICAgICAgZGF0YS0+QWRkU3RyaW5nKCJ0ZXh0L3BsYWluIiwgQlN0cmluZyhmcmFtZS0+c2VsZWN0
ZWRUZXh0KCkpKTsKKyAgICAgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAg
IH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK2Jvb2wgUGFz
dGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4dChGcmFtZSog
ZnJhbWUpCit7CisgICAgQlN0cmluZyBzdHJpbmc7CisgICAgQk1lc3NhZ2UgKmRhdGEgPSAoQk1l
c3NhZ2UgKikgTlVMTDsKKworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAg
ICBpZiAoKGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAgICAgIGRhdGEt
PkZpbmRTdHJpbmcoInRleHQvcGxhaW4iLCAmc3RyaW5nKTsKKyAgICAgICAgfQorICAgICAgICBi
ZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KKwlyZXR1cm4gc3RyaW5nOworfQorCitQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJh
bWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dQbGFpblRl
eHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmLCBGcmFtZSopCit7CisgICAgQk1lc3NhZ2UgKmRhdGEgPSAoQk1lc3Nh
Z2UgKikgTlVMTDsKKworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBi
ZV9jbGlwYm9hcmQtPkNsZWFyKCk7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBib2FyZC0+
RGF0YSgpKSkgeworICAgICAgICAgICAgZGF0YS0+QWRkU3RyaW5nKCJ0ZXh0L3BsYWluIiwgdXJs
LnN0cmluZygpKTsKKyAgICAgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAg
IH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFz
dGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCit7
CisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGJlX2NsaXBib2FyZC0+
Q2xlYXIoKTsKKyAgICAgICAgYmVfY2xpcGJvYXJkLT5Db21taXQoKTsKKyAgICAgICAgYmVfY2xp
cGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRI
YWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhh
aWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWUxZWFiCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZl
bnRIYWlrdS5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKworI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKwor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5j
bHVkZSA8SW50ZXJmYWNlRGVmcy5oPgorI2luY2x1ZGUgPFN0cmluZy5oPgorCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9ySGFpa3VLZXlDb2Rl
KGNoYXIgc2luZ2xlQnl0ZSwgaW50MzIga2V5Q29kZSkKK3sKKwkJc3dpdGNoKHNpbmdsZUJ5dGUp
eworCQljYXNlIEJfRlVOQ1RJT05fS0VZOgorCisJICAgIAlzd2l0Y2ggKGtleUNvZGUpIHsKKyAg
ICAgICAgCWNhc2UgQl9GMV9LRVk6CisgICAgICAgIAkgICAgcmV0dXJuICJGMSI7CisgICAgICAg
IAljYXNlIEJfRjJfS0VZOgorICAgICAgICAgICAgCXJldHVybiAiRjIiOworICAgICAgICAJY2Fz
ZSBCX0YzX0tFWToKKyAgICAgICAgICAgIAlyZXR1cm4gIkYzIjsKKwkJCWNhc2UgQl9GNF9LRVk6
CisJCQkJcmV0dXJuICJGNCI7CisJCQljYXNlIEJfRjVfS0VZOgorCQkJCXJldHVybiAiRjUiOwor
CQkJY2FzZSBCX0Y2X0tFWToKKwkJCQlyZXR1cm4gIkY2IjsKKwkJCWNhc2UgQl9GN19LRVk6CisJ
CQkJcmV0dXJuICJGNyI7CisJCQljYXNlIEJfRjhfS0VZOgorCQkJCXJldHVybiAiRjgiOworCQkJ
Y2FzZSBCX0Y5X0tFWToKKwkJCQlyZXR1cm4gIkY5IjsKKwkJCWNhc2UgQl9GMTBfS0VZOgorCQkJ
CXJldHVybiAiRjEwIjsKKwkJCWNhc2UgQl9GMTFfS0VZOgorCQkJCXJldHVybiAiRjExIjsKKwkJ
CWNhc2UgQl9GMTJfS0VZOgorCQkJCXJldHVybiAiRjEyIjsKKwkJCWNhc2UgQl9QUklOVF9LRVk6
CisJCQkJcmV0dXJuICJQcmludCI7CisJCQljYXNlIEJfUEFVU0VfS0VZOgorCQkJCXJldHVybiAi
UGF1c2UiOworCQkJY2FzZSBCX1NDUk9MTF9LRVk6CisJCQkJcmV0dXJuICIiOyAvL0ZJWAorCQkJ
ZGVmYXVsdDoKKwkJCQlyZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUrJTA0WCIsIHRvQVNDSUlVcHBl
cigoaW50KWtleUNvZGUpKTsKKwkgICAgCX07CisJICAgIAlicmVhazsKKworCSAgICBjYXNlIEJf
QkFDS1NQQUNFOgorCSAgICAJcmV0dXJuICJVKzAwMDkiOworCSAgICBjYXNlIEJfTEVGVF9BUlJP
VzoKKwkgICAgCXJldHVybiAiTGVmdCI7CisJICAgIGNhc2UgQl9SSUdIVF9BUlJPVzoKKwkgICAg
CXJldHVybiAiUmlnaHQiOworCSAgICBjYXNlIEJfVVBfQVJST1c6CisJICAgIAlyZXR1cm4gIlVw
IjsKKwkgICAgY2FzZSBCX0RPV05fQVJST1c6CisJICAgIAlyZXR1cm4gIkRvd24iOworCSAgICBj
YXNlIEJfSU5TRVJUOgorCSAgICAJcmV0dXJuICJJbnNlcnQiOworCSAgICBjYXNlIEJfRU5URVI6
CisJICAgIAlyZXR1cm4gIkVudGVyIjsKKwkgICAgY2FzZSBCX0RFTEVURToKKwkgICAgCXJldHVy
biAiVSswMDdGIjsKKwkgICAgY2FzZSBCX0hPTUU6CisJICAgIAlyZXR1cm4gIkhvbWUiOworCSAg
ICBjYXNlIEJfRU5EOgorCSAgICAJcmV0dXJuICJFbmQiOworCSAgICBjYXNlIEJfUEFHRV9VUDoK
KwkgICAgCXJldHVybiAiUGFnZVVwIjsKKwkgICAgY2FzZSBCX1BBR0VfRE9XTjoKKwkgICAgCXJl
dHVybiAiUGFnZURvd24iOworCSAgICAvL2Nhc2UgQl9TUEFDRToKKwkgICAgLy8JcmV0dXJuICIi
OworCSAgICBjYXNlIEJfVEFCOgorCSAgICAJcmV0dXJuICJVKzAwMDkiOworCSAgICAvL2Nhc2Ug
Ql9FU0NBUEU6CisJICAgIC8vCXJldHVybiAiIjsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAJcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCB0b0FTQ0lJVXBwZXIoKGludClrZXlD
b2RlKSk7CisgICAgfQorfQorCitzdGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQo
Y2hhciBzaW5nbGVCeXRlKQoreworICAgIHN3aXRjaCAoc2luZ2xlQnl0ZSkgeworICAgIGNhc2Ug
Ql9CQUNLU1BBQ0U6CisgICAgICAgIHJldHVybiBWS19CQUNLOyAvLyAoMDgpIEJBQ0tTUEFDRSBr
ZXkKKyAgICBjYXNlIEJfVEFCOgorICAgICAgIHJldHVybiBWS19UQUI7IC8vICgwOSkgVEFCIGtl
eSovIAorICAgIGNhc2UgQl9SRVRVUk46CisgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBE
KSBSZXR1cm4ga2V5CisgICAgY2FzZSBCX0VTQ0FQRToKKyAgICAgICAgcmV0dXJuIFZLX0VTQ0FQ
RTsgLy8gKDFCKSBFU0Mga2V5CisgICAgY2FzZSBCX1NQQUNFOgorICAgICAgICByZXR1cm4gVktf
U1BBQ0U7IC8vICgyMCkgU1BBQ0VCQVIKKyAgICBjYXNlIEJfUEFHRV9VUDoKKyAgICAgICAgcmV0
dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5CisgICAgY2FzZSBCX1BBR0VfRE9XTjoK
KyAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQorICAgIGNhc2Ug
Ql9FTkQ6CisgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQorICAgIGNhc2Ug
Ql9IT01FOgorICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQorICAgIGNh
c2UgQl9MRUZUX0FSUk9XOgorICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBMRUZUIEFS
Uk9XIGtleQorICAgIGNhc2UgQl9VUF9BUlJPVzoKKyAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAo
MjYpIFVQIEFSUk9XIGtleQorICAgIGNhc2UgQl9SSUdIVF9BUlJPVzoKKyAgICAgICAgcmV0dXJu
IFZLX1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtleQorICAgIGNhc2UgQl9ET1dOX0FSUk9X
OgorICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8gKDI4KSBET1dOIEFSUk9XIGtleQorICAgIGNh
c2UgQl9JTlNFUlQ6CisgICAgICAgIHJldHVybiBWS19JTlNFUlQ7IC8vICgyRCkgSU5TIGtleQor
ICAgIGNhc2UgQl9ERUxFVEU6CisgICAgICAgIHJldHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVM
IGtleQorICAgIGNhc2UgMHgyZToKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorfQorCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6
OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChCTWVzc2FnZSAqbWVzc2FnZSkKK3sKKwlCU3RyaW5nIGJ5
dGVzID0JbWVzc2FnZS0+RmluZFN0cmluZygiYnl0ZXMiKTsKKwltX3RleHQgPSBTdHJpbmc6OmZy
b21VVEY4KGJ5dGVzLlN0cmluZygpLCBieXRlcy5MZW5ndGgoKSk7CisgICAgbV91bm1vZGlmaWVk
VGV4dCA9IFN0cmluZyhieXRlcy5TdHJpbmcoKSwgYnl0ZXMuTGVuZ3RoKCkpOworICAgIG1fa2V5
SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JIYWlrdUtleUNvZGUoYnl0ZXMuQnl0ZUF0KDAp
LCBtZXNzYWdlLT5GaW5kSW50MzIoImtleSIpKTsKKworICAgIGlmIChtZXNzYWdlLT53aGF0ID09
IEJfS0VZX1VQKQorICAgICAgICBtX3R5cGUgPSBLZXlVcDsKKyAgICBlbHNlIGlmIChtZXNzYWdl
LT53aGF0ID09IEJfS0VZX0RPV04pCisgICAgICAgIG1fdHlwZSA9IEtleURvd247CisKKyAgICBt
X2F1dG9SZXBlYXQgPSB0cnVlOworICAgIG1fY3RybEtleSA9IGZhbHNlOworICAgIG1fYWx0S2V5
ID0gZmFsc2U7CisgICAgbV9tZXRhS2V5ID0gZmFsc2U7ICAgIAorICAgIG1fd2luZG93c1ZpcnR1
YWxLZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChieXRlcy5CeXRlQXQoMCkpOyAK
KyAgICBtX2lzS2V5cGFkID0gZmFsc2U7CisgICAgbV9zaGlmdEtleSA9IGZhbHNlOworfQorCit2
b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFR5cGUg
dHlwZSwgYm9vbCkKK3sKKyAgICAvLyBDYW4gb25seSBjaGFuZ2UgdHlwZSBmcm9tIEtleURvd24g
dG8gUmF3S2V5RG93biBvciBDaGFyLCBhcyB3ZSBsYWNrIGluZm9ybWF0aW9uIGZvciBvdGhlciBj
b252ZXJzaW9ucy4KKyAgICBBU1NFUlQobV90eXBlID09IEtleURvd24pOworICAgIG1fdHlwZSA9
IHR5cGU7CisgICAgaWYgKHR5cGUgPT0gUmF3S2V5RG93bikgeworICAgICAgICBtX3RleHQgPSBT
dHJpbmcoKTsKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmluZygpOworICAgICAgICBtX3dpbmRv
d3NWaXJ0dWFsS2V5Q29kZSA9IDA7CisgICAgfQorfQorCitib29sIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjNjc2YwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxs
ZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKwor
I2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
CisjaW5jbHVkZSA8U3VwcG9ydERlZnMuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVu
dChjb25zdCBCTWVzc2FnZSogbXNnLCBCUG9pbnQgc2NyZWVuUG9pbnQpCit7CisgICAgbV90aW1l
c3RhbXAgPSAgV1RGOjpjdXJyZW50VGltZSgpOyAvLyBGSVhNRSAoZnJvbSB0aGUgYm1lc3NhZ2U/
KQorICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludChtc2ctPkZpbmRQb2ludCgiYmU6dmlld193aGVy
ZSIpKTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoc2NyZWVuUG9pbnQpOyAvLyBJ
bnRQb2ludChtc2ctPkZpbmRQb2ludCgid2hlcmUiKSk7CisKKyAgICBtX3NoaWZ0S2V5ID0gZmFs
c2U7IC8vIEZJWE1FCisgICAgbV9jdHJsS2V5ID0gZmFsc2U7CisgICAgbV9hbHRLZXkgPSBmYWxz
ZTsKKyAgICBtX21ldGFLZXkgPSBmYWxzZTsKKworICAgIGludDMyIGJ1dHRvbnMgPSBtc2ctPkZp
bmRJbnQzMigiYnV0dG9ucyIpOworICAgIHN3aXRjaCAoYnV0dG9ucykgeworICAgIGNhc2UgMDoK
KyAgICAgICAgbV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAx
OgkKKyAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDI6CisgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOworICAgICAgICBi
cmVhazsKKyAgICB9OworCisgICAgc3dpdGNoIChtc2ctPndoYXQpIHsKKyAgICBjYXNlIEJfTU9V
U0VfRE9XTjoKKyAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50UHJlc3NlZDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBCX01PVVNFX1VQOgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1v
dXNlRXZlbnRSZWxlYXNlZDsKKyAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOyAvLyBGSVhN
RTogd2ViY29yZSB3YW50cyB0byBrbm93IHRoZSBidXR0b24gcmVsZWFzZWQgYnV0IHdlIGRvbid0
IGtub3cuCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQl9NT1VTRV9NT1ZFRDoKKyAgICAgICAg
bV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOworICAgICAgICBicmVh
azsKKyAgICB9OworCisgICAgbV9jbGlja0NvdW50ID0gbXNnLT5GaW5kSW50MzIoImNsaWNrcyIp
OworCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9QbGF0Zm9ybVNjcm9sbEJhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjE0ZDAzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRm
b3JtU2Nyb2xsQmFyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFBsYXRmb3JtU2Nyb2xsYmFyX2gKKyNkZWZpbmUgUGxhdGZvcm1TY3Jv
bGxiYXJfaAorCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisK
KyNpbmNsdWRlIDxpbnRlcmZhY2UvU2Nyb2xsQmFyLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisgICAgY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBwdWJsaWMgU2Nyb2xsYmFyIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCosIFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisgICAgICAgIHZpcnR1
YWwgflBsYXRmb3JtU2Nyb2xsYmFyKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzV2lkZ2V0
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHZpcnR1YWwgaW50IHdpZHRoKCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRFbmFibGVkKGJvb2wpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisKKyAgICAgICAgc3RhdGljIGludCBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihCX0hf
U0NST0xMX0JBUl9IRUlHSFQpOyB9CisgICAgICAgIHN0YXRpYyBpbnQgdmVydGljYWxTY3JvbGxi
YXJXaWR0aCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oQl9WX1NDUk9MTF9CQVJfV0lEVEgp
OyB9CisKKyAgICAgICAgdm9pZCB2YWx1ZUNoYW5nZWQoZmxvYXQpOworICAgIHByb3RlY3RlZDoK
KyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOworICAgIH07CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBsYXRmb3JtU2Nyb2xsYmFyX2gKKwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjMTk3ZgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHAKQEAgLTAsMCAr
MSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2
ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgorCisjaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxWaWV3
Lmg+CisKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKworY2xhc3MgSGFpa3VTY3JvbGxC
YXIgOiBwdWJsaWMgQlNjcm9sbEJhcgoreworcHVibGljOgorICAgIEhhaWt1U2Nyb2xsQmFyKFBs
YXRmb3JtU2Nyb2xsYmFyKiBwbGF0Zm9ybVNjcm9sbGJhciwgQlZpZXcqIHRhcmdldCwgb3JpZW50
YXRpb24gcG9zdHVyZSkgCisgICAgICAgIDogQlNjcm9sbEJhcigocG9zdHVyZSA9PSBCX1ZFUlRJ
Q0FMKSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgQlJlY3QoMCwgMCwgQl9WX1NDUk9MTF9C
QVJfV0lEVEgsIDApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEJSZWN0KDAsIDAsIDAsIEJf
SF9TQ1JPTExfQkFSX0hFSUdIVCksCisgICAgICAgICAgICAgICAgICAgICAic2Nyb2xsX2JhciIs
IHRhcmdldCwgMCwgMSwgcG9zdHVyZSkKKyAgICB7CisgICAgICAgIG1fcGxhdGZvcm1TY3JvbGxi
YXIgPSBwbGF0Zm9ybVNjcm9sbGJhcjsKKyAgICB9CisKKyAgICB2b2lkIFZhbHVlQ2hhbmdlZChm
bG9hdCBuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIG1fcGxhdGZvcm1TY3JvbGxiYXItPnZhbHVl
Q2hhbmdlZChuZXdWYWx1ZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBQbGF0Zm9ybVNjcm9sbGJh
ciogbV9wbGF0Zm9ybVNjcm9sbGJhcjsKK307CisKK1BsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0Zm9y
bVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xs
YmFyQ29udHJvbFNpemUgc2l6ZSkKKyAgICA6IFNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9u
LCBzaXplKQoreworICAgIEhhaWt1U2Nyb2xsQmFyKiBzY3JvbGxiYXIgPSBuZXcgSGFpa3VTY3Jv
bGxCYXIodGhpcywgLyp0YXJnZXQqL05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIp
ID8gQl9WRVJUSUNBTCA6IEJfSE9SSVpPTlRBTCk7CisgICAgc2V0UGxhdGZvcm1XaWRnZXQoc2Ny
b2xsYmFyKTsKK30JCQkJCisKK1BsYXRmb3JtU2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIo
KQoreworICAgIHNldFBsYXRmb3JtV2lkZ2V0KE5VTEwpOworfQorCit2b2lkIFBsYXRmb3JtU2Ny
b2xsYmFyOjp2YWx1ZUNoYW5nZWQoZmxvYXQgbmV3VmFsdWUpCit7CisgICAgc2V0VmFsdWUoKGlu
dCkgbmV3VmFsdWUpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBv
c2l0aW9uKCkKK3sKKyAgICBIYWlrdVNjcm9sbEJhciogc2Nyb2xsYmFyID0gc3RhdGljX2Nhc3Q8
SGFpa3VTY3JvbGxCYXIqPihwbGF0Zm9ybVdpZGdldCgpKTsKKyAgICBzY3JvbGxiYXItPlNldFZh
bHVlKG1fY3VycmVudFBvcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRo
dW1iUHJvcG9ydGlvbigpCit7CisgICAgSGFpa3VTY3JvbGxCYXIqIHNjcm9sbGJhciA9IHN0YXRp
Y19jYXN0PEhhaWt1U2Nyb2xsQmFyKj4ocGxhdGZvcm1XaWRnZXQoKSk7CisgICAgZmxvYXQgcHJv
cG9ydGlvbiA9IChmbG9hdCkgbV92aXNpYmxlU2l6ZSAvICAoZmxvYXQpIG1fdG90YWxTaXplOwor
ICAgIGlmICghKHByb3BvcnRpb24gPT0gc2Nyb2xsYmFyLT5Qcm9wb3J0aW9uKCkgfHwgcHJvcG9y
dGlvbiA8IDAuMCkpCisgICAgICAgIHNjcm9sbGJhci0+U2V0UHJvcG9ydGlvbihwcm9wb3J0aW9u
KTsKK30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdpZGdldDo6d2lkdGgoKTsKK30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjpoZWlnaHQo
KSBjb25zdAoreworICAgIHJldHVybiBXaWRnZXQ6OmhlaWdodCgpOworfQorCit2b2lkIFBsYXRm
b3JtU2Nyb2xsYmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUGxhdGZv
cm1TY3JvbGxiYXI6OnNldEZyYW1lUmVjdChyZWN0KTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9s
bGJhcjo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgUGxhdGZvcm1TY3JvbGxiYXI6
OnNldEVuYWJsZWQoZW5hYmxlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgLy8g
RklYTUU6IERvIHdlIG5lZWQgdGhpcz8KK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40ZmU2MmRjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisKKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChCTWVzc2FnZSAqbWVz
c2FnZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Qb3B1cE1lbnVIYWlrdS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhODBlNwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuY3BwCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlv
biBmb3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBvcHVwTWVudS5oIgorCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8TWVudS5oPgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1BvcHVwTWVudTo6UG9wdXBNZW51KFBvcHVwTWVu
dUNsaWVudCogY2xpZW50KQorICAgIDogbV9wb3B1cENsaWVudChjbGllbnQpCit7CisgICAgbV9t
ZW51ID0gTlVMTDsKK30KKworUG9wdXBNZW51Ojp+UG9wdXBNZW51KCkKK3sKKyAgICBkZWxldGUg
bV9tZW51OworICAgIG1fbWVudSA9IE5VTEw7Cit9CisKK3ZvaWQgUG9wdXBNZW51OjpzaG93KGNv
bnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51OjpoaWRlKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBvcHVwTWVudTo6dXBkYXRlRnJvbUVsZW1lbnQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgUG9wdXBNZW51OjppdGVtV3JpdGlu
Z0RpcmVjdGlvbklzTmF0dXJhbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zMDAwYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9SZW5kZXJUaGVtZUhhaWt1LmNwcApAQCAtMCwwICsxLDM1MyBAQAorLyoKKyAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8Rm9udC5oPgor
I2luY2x1ZGUgPFZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBJ
IGFtIG5vdCBzdXJlIHdoeSBzbyBtYW55IG1ldGhvZHMgYXJlIGlubGluZSBoZXJlLiBUaGlzIHdh
cyBjb3BpZWQgZnJvbSB0aGUgCisvLyBTeWxsYWJsZSBwb3J0LiBJdCBzaG91bGQgcHJvYmFibHkg
YWxsIGJlIHNjcmFwcGVkLgorY2xhc3MgUmVuZGVyVGhlbWVIYWlrdSA6IHB1YmxpYyBSZW5kZXJU
aGVtZQoreworcHVibGljOgorICAgIFJlbmRlclRoZW1lSGFpa3UoKSA6IFJlbmRlclRoZW1lKCkg
eyB9CisJflJlbmRlclRoZW1lSGFpa3UoKSB7IH0KKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBp
ZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVu
IGhvdmVyZWQuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAorICAgIHsKKyAgICAJcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZUhhaWt1KCkpOworICAgIH0KKworICAgIHZp
cnR1YWwgQ29sb3IgcGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAorICAg
IHsKKyAgICAJcmV0dXJuIENvbG9yKHVpX2NvbG9yKEJfTUVOVV9TRUxFQ1RFRF9CQUNLR1JPVU5E
X0NPTE9SKSk7CisgICAgfQorCisgICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4K
KyAgICBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
CisgICAgeworICAgIAlyZXR1cm4gQ29sb3IodWlfY29sb3IoQl9DT05UUk9MX0hJR0hMSUdIVF9D
T0xPUikpOworICAgIH0KKworICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdAorICAgIHsKKyAgICAJcmV0dXJuIENvbG9yKHVpX2NvbG9yKEJf
Q09OVFJPTF9ISUdITElHSFRfQ09MT1IpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKKyAgICB7CisgICAg
CXJldHVybiBDb2xvcih1aV9jb2xvcihCX0NPTlRST0xfVEVYVF9DT0xPUikpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0CisgICAgeworICAgIAlyZXR1cm4gQ29sb3IodWlfY29sb3IoQl9DT05UUk9MX1RF
WFRfQ09MT1IpKTsKKyAgICB9CisKKyAgICAvLyBMaXN0IEJveCBzZWxlY3Rpb24gY29sb3IKKyAg
IC8qIAorICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBpbmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICAqLworCisg
ICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB7CisgICAgICAg
IGlmIChpLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgCXJldHVybiBmYWxz
ZTsKKworICAgICAgICAvL2NvZGUgdGFrZW4gZnJvbSB0aGUgSGFpa3Ugc291cmNlIGNvZGUgKENo
ZWNrQm94LmNwcCkKKworICAgICAgICByZ2JfY29sb3Igbm9UaW50ID0gdWlfY29sb3IoQl9QQU5F
TF9CQUNLR1JPVU5EX0NPTE9SKTsKKyAgICAgICAgcmdiX2NvbG9yIGxpZ2h0ZW4xID0gdGludF9j
b2xvcihub1RpbnQsIEJfTElHSFRFTl8xX1RJTlQpOworICAgICAgICByZ2JfY29sb3IgbGlnaHRl
bk1heCA9IHRpbnRfY29sb3Iobm9UaW50LCBCX0xJR0hURU5fTUFYX1RJTlQpOworICAgICAgICBy
Z2JfY29sb3IgZGFya2VuMSA9IHRpbnRfY29sb3Iobm9UaW50LCBCX0RBUktFTl8xX1RJTlQpOwor
ICAgICAgICByZ2JfY29sb3IgZGFya2VuMiA9IHRpbnRfY29sb3Iobm9UaW50LCBCX0RBUktFTl8y
X1RJTlQpOworICAgICAgICByZ2JfY29sb3IgZGFya2VuMyA9IHRpbnRfY29sb3Iobm9UaW50LCBC
X0RBUktFTl8zX1RJTlQpOworICAgICAgICByZ2JfY29sb3IgZGFya2VuNCA9IHRpbnRfY29sb3Io
bm9UaW50LCBCX0RBUktFTl80X1RJTlQpOworCisgICAgICAgIEJSZWN0IHJlY3QgPSByIDsKKyAg
ICAgICAgQlZpZXcqCXZpZXc9aS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgICAg
ICBpZiAoaXNFbmFibGVkKCBvICkpIHsKKyAgICAgICAgICAgIC8vIEZpbGxpbmcKKyAgICAgICAg
ICAgIHZpZXctPlNldEhpZ2hDb2xvcihsaWdodGVuTWF4KTsKKyAgICAgICAgICAgIHZpZXctPkZp
bGxSZWN0KHJlY3QpOworCisgICAgICAgICAgICB2aWV3LT5CZWdpbkxpbmVBcnJheSg2KTsKKwor
ICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LmJvdHRvbSks
CisgICAgICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIGRh
cmtlbjEpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0
LnRvcCksCisgICAgICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC50
b3ApLCBkYXJrZW4xKTsKKyAgICAgICAgICAgICAgICByZWN0Lkluc2V0QnkoMSwgMSk7CisgICAg
ICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QuYm90dG9tKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwgZGFya2Vu
NCk7CisgICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9w
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCks
IGRhcmtlbjQpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0ICsg
MS4wZiwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3Qu
cmlnaHQsIHJlY3QuYm90dG9tKSwgbm9UaW50KTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUo
QlBvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCArIDEuMGYpLCBub1RpbnQpOworCisgICAgICAg
ICAgICB2aWV3LT5FbmRMaW5lQXJyYXkoKTsKKworICAgICAgICAgICAgLy8gQ2hlY2ttYXJrCisg
ICAgICAgICAgICBpZiAoIGlzQ2hlY2tlZCggbyApICkgeworICAgICAgICAgICAgICAgIHJlY3Qu
SW5zZXRCeSgyLCAyKTsKKworICAgICAgICAgICAgICAgIHZpZXctPlNldEhpZ2hDb2xvcih1aV9j
b2xvcihCX0tFWUJPQVJEX05BVklHQVRJT05fQ09MT1IpKTsKKyAgICAgICAgICAgICAgICB2aWV3
LT5TZXRQZW5TaXplKDIpOworICAgICAgICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJf
T1BfT1ZFUik7CisgICAgICAgICAgICAgICAgICAgIC8vIG5lZWRlZCBiZWNhdXNlIG9mIGFudGkt
YWxpYXNpbmcKKyAgICAgICAgICAgICAgICB2aWV3LT5TdHJva2VMaW5lKEJQb2ludChyZWN0Lmxl
ZnQsIHJlY3QudG9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJp
Z2h0LCByZWN0LmJvdHRvbSkpOworICAgICAgICAgICAgICAgIHZpZXctPlN0cm9rZUxpbmUoQlBv
aW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
QlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9wKSk7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0
UGVuU2l6ZSgxKTsKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXREcmF3aW5nTW9kZShCX09QX0NP
UFkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRmls
bGluZworICAgICAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKGxpZ2h0ZW4xKTsKKyAgICAgICAg
ICAgIHZpZXctPkZpbGxSZWN0KHJlY3QpOworCisgICAgICAgICAgICAvLyBCb3gKKyAgICAgICAg
ICAgIHZpZXctPkJlZ2luTGluZUFycmF5KDYpOworCisgICAgICAgICAgICB2aWV3LT5BZGRMaW5l
KEJQb2ludChyZWN0LmxlZnQsIHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgQlBv
aW50KHJlY3QubGVmdCwgcmVjdC50b3ApLCBub1RpbnQpOworICAgICAgICAgICAgdmlldy0+QWRk
TGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksCisgICAgICAgICAgICAgICAgICAgIEJQ
b2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCksIG5vVGludCk7CisgICAgICAgICAgICByZWN0Lklu
c2V0QnkoMSwgMSk7CisgICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQs
IHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QubGVmdCwgcmVj
dC50b3ApLCBkYXJrZW4yKTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3Qu
bGVmdCwgcmVjdC50b3ApLAorICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwg
cmVjdC50b3ApLCBkYXJrZW4yKTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJl
Y3QubGVmdCArIDEuMGYsIHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgQlBvaW50
KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSwgZGFya2VuMSk7CisgICAgICAgICAgICB2aWV3LT5B
ZGRMaW5lKEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSksCisgICAgICAgICAgICAgICAg
ICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCArIDEuMGYpLCBkYXJrZW4xKTsKKworICAg
ICAgICAgICAgdmlldy0+RW5kTGluZUFycmF5KCk7CisKKyAgICAgICAgICAgIC8vIENoZWNrbWFy
aworICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCggbyApKSB7CisgICAgICAgICAgICAgICAgcmVj
dC5JbnNldEJ5KDIsIDIpOworCisgICAgICAgICAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKHRp
bnRfY29sb3IodWlfY29sb3IoQl9LRVlCT0FSRF9OQVZJR0FUSU9OX0NPTE9SKSwKKyAgICAgICAg
ICAgICAgICAgICAgQl9ESVNBQkxFRF9NQVJLX1RJTlQpKTsKKyAgICAgICAgICAgICAgICB2aWV3
LT5TZXRQZW5TaXplKDIpOworICAgICAgICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJf
T1BfT1ZFUik7CisgICAgICAgICAgICAgICAgICAgIC8vIG5lZWRlZCBiZWNhdXNlIG9mIGFudGkt
YWxpYXNpbmcKKyAgICAgICAgICAgICAgICB2aWV3LT5TdHJva2VMaW5lKEJQb2ludChyZWN0Lmxl
ZnQsIHJlY3QudG9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJp
Z2h0LCByZWN0LmJvdHRvbSkpOworICAgICAgICAgICAgICAgIHZpZXctPlN0cm9rZUxpbmUoQlBv
aW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
QlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9wKSk7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0
UGVuU2l6ZSgxKTsKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXREcmF3aW5nTW9kZShCX09QX0NP
UFkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBj
b25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCisgICAgewor
ICAgICAgICBpZiAoaS5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy9jb2RlIHRha2VuIGZyb20gdGhlIEhhaWt1IHNvdXJj
ZSBjb2RlIChSYWRpb0J1dHRvbi5jcHApCisKKyAgICAgICAgLy8gbGF5b3V0IHRoZSByZWN0IGZv
ciB0aGUgZG90CisgICAgICAgIEJSZWN0IHJlY3QgPSByIDsKKyAgICAgICAgQlZpZXcqCXZpZXc9
aS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgICAgICAvLyBjb2xvcnMKKyAgICAg
ICAgcmdiX2NvbG9yIGJnID0gdWlfY29sb3IoQl9QQU5FTF9CQUNLR1JPVU5EX0NPTE9SKTsKKyAg
ICAgICAgcmdiX2NvbG9yIGxpZ2h0ZW5tYXg7CisgICAgICAgIHJnYl9jb2xvciBsaWdodGVuMTsK
KyAgICAgICAgcmdiX2NvbG9yIGRhcmtlbjE7CisgICAgICAgIHJnYl9jb2xvciBkYXJrZW4yOwor
ICAgICAgICByZ2JfY29sb3IgZGFya2VuMzsKKyAgICAgICAgcmdiX2NvbG9yIGRhcmtlbm1heDsK
KworICAgICAgICByZ2JfY29sb3IgbmF2aUNvbG9yID0gdWlfY29sb3IoQl9LRVlCT0FSRF9OQVZJ
R0FUSU9OX0NPTE9SKTsKKyAgICAgICAgcmdiX2NvbG9yIGtub2I7CisgICAgICAgIHJnYl9jb2xv
ciBrbm9iRGFyazsKKyAgICAgICAgcmdiX2NvbG9yIGtub2JMaWdodDsKKworICAgICAgICBpZiAo
aXNFbmFibGVkKCBvICkpIHsKKyAgICAgICAgICAgIGxpZ2h0ZW5tYXgJPSB0aW50X2NvbG9yKGJn
LCBCX0xJR0hURU5fTUFYX1RJTlQpOworICAgICAgICAgICAgbGlnaHRlbjEJPSB0aW50X2NvbG9y
KGJnLCBCX0xJR0hURU5fMV9USU5UKTsKKyAgICAgICAgICAgIGRhcmtlbjEJCT0gdGludF9jb2xv
cihiZywgQl9EQVJLRU5fMV9USU5UKTsKKyAgICAgICAgICAgIGRhcmtlbjIJCT0gdGludF9jb2xv
cihiZywgQl9EQVJLRU5fMl9USU5UKTsKKyAgICAgICAgICAgIGRhcmtlbjMJCT0gdGludF9jb2xv
cihiZywgQl9EQVJLRU5fM19USU5UKTsKKyAgICAgICAgICAgIGRhcmtlbm1heAk9IHRpbnRfY29s
b3IoYmcsIEJfREFSS0VOX01BWF9USU5UKTsKKworICAgICAgICAgICAga25vYgkJPSBuYXZpQ29s
b3I7CisgICAgICAgICAgICBrbm9iRGFyawk9IHRpbnRfY29sb3IobmF2aUNvbG9yLCBCX0RBUktF
Tl8zX1RJTlQpOworICAgICAgICAgICAga25vYkxpZ2h0CT0gdGludF9jb2xvcihuYXZpQ29sb3Is
IDAuMTUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGlnaHRlbm1heAk9IHRpbnRf
Y29sb3IoYmcsIEJfTElHSFRFTl8yX1RJTlQpOworICAgICAgICAgICAgbGlnaHRlbjEJPSBiZzsK
KyAgICAgICAgICAgIGRhcmtlbjEJCT0gYmc7CisgICAgICAgICAgICBkYXJrZW4yCQk9IHRpbnRf
Y29sb3IoYmcsIEJfREFSS0VOXzFfVElOVCk7CisgICAgICAgICAgICBkYXJrZW4zCQk9IHRpbnRf
Y29sb3IoYmcsIEJfREFSS0VOXzJfVElOVCk7CisgICAgICAgICAgICBkYXJrZW5tYXgJPSB0aW50
X2NvbG9yKGJnLCBCX0RJU0FCTEVEX0xBQkVMX1RJTlQpOworCisgICAgICAgICAgICBrbm9iCQk9
IHRpbnRfY29sb3IobmF2aUNvbG9yLCBCX0xJR0hURU5fMl9USU5UKTsKKyAgICAgICAgICAgIGtu
b2JEYXJrCT0gdGludF9jb2xvcihuYXZpQ29sb3IsIEJfTElHSFRFTl8xX1RJTlQpOworICAgICAg
ICAgICAga25vYkxpZ2h0CT0gdGludF9jb2xvcihuYXZpQ29sb3IsIChCX0xJR0hURU5fMl9USU5U
ICsgQl9MSUdIVEVOX01BWF9USU5UKSAvIDIuMCk7CisJCX0KKworICAgICAgICAvLyBkb3QKKyAg
ICAgICAgaWYoIGlzQ2hlY2tlZCggbyApICkgeworICAgICAgICAgICAgLy8gZnVsbAorICAgICAg
ICAgICAgdmlldy0+U2V0SGlnaENvbG9yKGtub2JEYXJrKTsKKyAgICAgICAgICAgIHZpZXctPkZp
bGxFbGxpcHNlKHJlY3QpOworCisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3Ioa25vYik7
CisgICAgICAgICAgICB2aWV3LT5GaWxsRWxsaXBzZShCUmVjdChyZWN0LmxlZnQgKyAyLCByZWN0
LnRvcCArIDIsIHJlY3QucmlnaHQgLSAzLCByZWN0LmJvdHRvbSAtIDMpKTsKKworICAgICAgICAg
ICAgdmlldy0+U2V0SGlnaENvbG9yKGtub2JMaWdodCk7CisgICAgICAgICAgICB2aWV3LT5GaWxs
RWxsaXBzZShCUmVjdChyZWN0LmxlZnQgKyAzLCByZWN0LnRvcCArIDMsIHJlY3QucmlnaHQgLSA1
LCByZWN0LmJvdHRvbSAtIDUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGVt
cHR5CisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IobGlnaHRlbm1heCk7CisgICAgICAg
ICAgICB2aWV3LT5GaWxsRWxsaXBzZShyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJlY3Qu
SW5zZXRCeSgtMS4wLCAtMS4wKTsKKworICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IoZGFya2Vu
MSk7CisgICAgICAgIHZpZXctPlN0cm9rZUFyYyhyZWN0LCA0NS4wZiwgMTgwLjBmKTsKKyAgICAg
ICAgdmlldy0+U2V0SGlnaENvbG9yKGxpZ2h0ZW5tYXgpOworICAgICAgICB2aWV3LT5TdHJva2VB
cmMocmVjdCwgNDUuMGYsIC0xODAuMGYpOworICAgICAgICAKKyAgICAgICAgcmVjdC5JbnNldEJ5
KDEsIDEpOworCisgICAgICAgIC8vIGlubmVyIGNpcmNsZQorICAgICAgICB2aWV3LT5TZXRIaWdo
Q29sb3IoZGFya2VuMyk7CisgICAgICAgIHZpZXctPlN0cm9rZUFyYyhyZWN0LCA0NS4wZiwgMTgw
LjBmKTsKKyAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKGJnKTsKKyAgICAgICAgdmlldy0+U3Ry
b2tlQXJjKHJlY3QsIDQ1LjBmLCAtMTgwLjBmKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OworCisgICAgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CisgICAgeworICAgIAkv
KiBMZWF2ZSBzb21lIHNwYWNlIGZvciB0aGUgYXJyb3cgKi8KKyAgICAJc3R5bGUtPnNldFBhZGRp
bmdSaWdodChMZW5ndGgoMjIsIEZpeGVkKSk7CisgICAgCWNvbnN0IGludCBtaW5IZWlnaHQgPSAy
MDsKKyAgICAgICAgc3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgobWluSGVpZ2h0LCBGaXhlZCkp
OworICAgIH0KKworICAgIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCisg
ICAgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2Ny
aXB0aW9uJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgYWRkSW50cmluc2ljTWFy
Z2lucyhSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGJvb2wg
c3VwcG9ydHNGb2N1cygpIGNvbnN0OworfTsKKworUmVuZGVyVGhlbWUqIHRoZW1lKCkKK3sKKyAg
ICBzdGF0aWMgUmVuZGVyVGhlbWVIYWlrdSBydDsKKyAgICByZXR1cm4gJnJ0OworfQorCit2b2lk
IFJlbmRlclRoZW1lSGFpa3U6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJz
b2x1dGVTaXplKCB0cnVlICk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHko
Rm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoIChpbnQpIGJlX3BsYWluX2ZvbnQtPlNpemUoKSApOworfQorCit2b2lkIFJlbmRl
clRoZW1lSGFpa3U6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7
CisgICAgaW50IHNpemU9MTA7CisgICAgLy8gVGhpcyB3YXMgY29waWVkIGZyb20gdGhlIFF0IHBv
cnQ6CisKKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGSVhNRTogQSBoYXJkLWNvZGVkIHNpemUgb2YgJ3NpemUnIGlzIHVz
ZWQuIFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93LiAKKworICAgIGlmIChzdHls
ZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHNpemUsIEZpeGVkKSk7CisKKyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLCBGaXhlZCkpOworfQorCit2
b2lkIFJlbmRlclRoZW1lSGFpa3U6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Cit7CisgICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyBjaGVja2JveGVzLgorICAgIHNldENo
ZWNrYm94U2l6ZShzdHlsZSk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRo
ZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAocGFnZSkKKyAgICAgICAg
cmV0dXJuIFJlbmRlclRoZW1lSGFpa3U6OmNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlclRo
ZW1lKiBmYWxsYmFjayA9IFJlbmRlclRoZW1lSGFpa3U6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKTsK
KyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JlZW5IYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40YzQxOTkzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9TY3JlZW5IYWlrdS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2NyZWVuLmgiCisKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorCisjaW5jbHVkZSA8R3JhcGhpY3NEZWZzLmg+CisjaW5jbHVkZSA8aW50ZXJmYWNlL1Nj
cmVlbi5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBtaWdodCBiZSB1c2Vm
dWwsIGJ1dCBpdCBub3QgdXNlZCBmb3Igbm93CisvKgorc3RhdGljIEJWaWV3KiBoYWlrdVdpZGdl
dEZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSAocGFnZSA/
IHBhZ2UtPm1haW5GcmFtZSgpIDogMCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSAoZnJh
bWUgPyBmcmFtZS0+dmlldygpIDogMCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gZnJhbWVWaWV3LT5oYWlrdVdpZGdldCgpOworfSovCisK
K0Zsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCopCit7CisgICAgQlNjcmVlbiBzY3JlZW47Cisg
ICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGlzIHNjcmVlbiBpcyB2YWxpZAorICAgIHJldHVybiBG
bG9hdFJlY3Qoc2NyZWVuLkZyYW1lKCkpOworfQorCitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxl
UmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQgdXNlIHRoZSBn
ZXRfZGVza2Jhcl9mcmFtZSgpIGZ1bmN0aW9uCisgICAgLy8gZnJvbSBJbnRlcmZhY2VEZWZzLmgg
dG8gbWFrZSB0aGlzIHNtYWxsZXIKKyAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOworfQor
CitpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KikKK3sKKyAgICBCU2NyZWVuIHNjcmVlbjsKKyAgICAv
LyBGSVhNRTogV2UgYXNzdW1lIHRoaXMgc2NyZWVuIGlzIHZhbGlkCisgICAgY29sb3Jfc3BhY2Ug
Y3MgPSBzY3JlZW4uQ29sb3JTcGFjZSgpOworCisgICAgc2l6ZV90IHBpeGVsQ2h1bmssIHJvd0Fs
aWdubWVudCwgcGl4ZWxzUGVyQ2h1bms7CisgICAgaWYgKGdldF9waXhlbF9zaXplX2Zvcihjcywg
JnBpeGVsQ2h1bmssICZyb3dBbGlnbm1lbnQsICZwaXhlbHNQZXJDaHVuaykgPT0gQl9PSykgewor
ICAgICAgICAvLyBGSVhNRTogTm90IHN1cmUgaWYgdGhpcyBpcyByaWdodAorICAgICAgICByZXR1
cm4gcGl4ZWxDaHVuayAqIDg7CisgICAgfQorCisgICAgcmV0dXJuIDg7Cit9CisKK2ludCBzY3Jl
ZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIDg7Cit9CisKK2Jvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopCit7Cisg
ICAgQlNjcmVlbiBzY3JlZW47CisgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGlzIHNjcmVlbiBp
cyB2YWxpZAorICAgIHJldHVybiBzY3JlZW4uQ29sb3JTcGFjZSgpID09IEJfTU9OT0NIUk9NRV8x
X0JJVDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZGRjZDI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcApAQCAtMCwwICsxLDIwMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlA
Z21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXdDYW52YXNIYWlrdS5oIgorCisjaW5jbHVk
ZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisKKyNpbmNsdWRl
ICJTaGFyZWRUaW1lckhhaWt1LmgiCisKKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5oPgorI2lu
Y2x1ZGUgPFNjcm9sbEJhci5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxMb29w
ZXIuaD4KKyNpbmNsdWRlIDxBdXRvbG9jay5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpTY3JvbGxWaWV3Q2FudmFzSGFpa3UoU2Nyb2xsVmlldyog
c2Nyb2xsVmlldywgQlZpZXcqIHBhcmVudCwgdWludDMyIGZsYWdzKQorICAgIDogQlZpZXcoQlJl
Y3QoMCwwLDAsMCksICJzY3JvbGxfdmlld19jYW52YXMiLCBCX0ZPTExPV19BTExfU0lERVMsIEJf
V0lMTF9EUkFXIHwgQl9GUkFNRV9FVkVOVFMgfCBmbGFncykKKyAgICAsIG1fc2Nyb2xsVmlldyhz
Y3JvbGxWaWV3KQoreworICAgIFNldFZpZXdDb2xvcigyNTUsIDI1NSwgMjU1KTsKK30KKworCit2
b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RHJhdyhCUmVjdCB1cGRhdGVSZWN0KQoreworICAg
IEZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOwor
ICAgIGlmICghZnYgfHwgIWZ2LT5mcmFtZSgpIHx8ICFmdi0+ZnJhbWUoKS0+Y29udGVudFJlbmRl
cmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlIChmdi0+bmVlZHNMYXlvdXQoKSkg
eworICAgICAgICBmdi0+bGF5b3V0KCk7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0IGN0
eCh0aGlzKTsKKyAgICBmdi0+ZnJhbWUoKS0+cGFpbnRDYXJldCgmY3R4LCAwLCAwLCB1cGRhdGVS
ZWN0KTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1lc3NhZ2VSZWNlaXZlZChC
TWVzc2FnZSAqbXNnKQoreworICAgIC8vIEZJWE1FOiBDYXB0dXJlIG1vdXNlIHdoZWVsIG1lc3Nh
Z2VzCisgICAgQlZpZXc6Ok1lc3NhZ2VSZWNlaXZlZChtc2cpOworfQorCit2b2lkIFNjcm9sbFZp
ZXdDYW52YXNIYWlrdTo6TW91c2VNb3ZlZChCUG9pbnQgd2hlcmUsIHVpbnQzMiBjb2RlLCBjb25z
dCBCTWVzc2FnZSogYV9tZXNzYWdlKQoreworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnYgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAgIGlmICgh
ZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBCUG9pbnQgc2NyZWVu
UG9zaXRpb24gPSBDb252ZXJ0VG9TY3JlZW4od2hlcmUpOworCisgICAgZnYtPmZyYW1lKCktPmV2
ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChhX21lc3NhZ2UsIHNj
cmVlblBvc2l0aW9uKSk7CisKKyAgICBCVmlldzo6TW91c2VNb3ZlZCh3aGVyZSwgY29kZSwgYV9t
ZXNzYWdlKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNlRG93bihCUG9p
bnQgd2hlcmUpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2U9TG9vcGVyKCktPkN1cnJlbnRNZXNz
YWdlKCk7CisgICAgaWYoIW1lc3NhZ2UpIHJldHVybjsKKworICAgIFdlYkNvcmU6OkZyYW1lVmll
dyogZnYgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOwor
ICAgIGlmICghZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgIEJQb2lu
dCBzY3JlZW5Qb3NpdGlvbiA9IENvbnZlcnRUb1NjcmVlbih3aGVyZSk7CisKKyAgIGZ2LT5mcmFt
ZSgpLT5sb2FkZXIoKS0+cmVzZXRNdWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOwor
CisgICBpbnQzMiBidXR0b25zID0gbWVzc2FnZS0+RmluZEludDMyKCJidXR0b25zIik7CisKKyAg
IGlmKCBidXR0b25zID09IDIgKQorICAgICAgIGZ2LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
c2VuZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KG1lc3NhZ2Usc2NyZWVuUG9z
aXRpb24pKTsKKyAgIGVsc2UKKyAgICAgICBmdi0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhh
bmRsZU1vdXNlUHJlc3NFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQobWVzc2FnZSxzY3JlZW5Qb3Np
dGlvbikpOworCisgICBCVmlldzo6TW91c2VEb3duKHdoZXJlKTsKK30KKwordm9pZCBTY3JvbGxW
aWV3Q2FudmFzSGFpa3U6Ok1vdXNlVXAoQlBvaW50IHdoZXJlKQoreworICAgIEJNZXNzYWdlKiBt
ZXNzYWdlPUxvb3BlcigpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGlmKCFtZXNzYWdlKSByZXR1
cm47CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQlBvaW50IHNjcmVlblBvc2l0aW9uID0gQ29udmVydFRv
U2NyZWVuKHdoZXJlKTsKKworICAgIGZ2LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
TW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KG1lc3NhZ2UsIHNjcmVlblBvc2l0
aW9uKSk7CisKKyAgICBCVmlldzo6TW91c2VVcCh3aGVyZSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmll
d0NhbnZhc0hhaWt1OjpEb1Njcm9sbChib29sIGlzSG9yaXpvbnRhbCwgZmxvYXQgbXVsdGlwbGll
cikKK3sKKyAgICBwcmludGYoIlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RG9TY3JvbGxcbiIpOwor
fQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6S2V5RG93bihjb25zdCBjaGFyKiBieXRl
cywgaW50MzIgbnVtQnl0ZXMpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2U9TG9vcGVyKCktPkN1
cnJlbnRNZXNzYWdlKCk7CisgICAgaWYoIW1lc3NhZ2UpIHJldHVybjsKKworICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9s
bFZpZXcpOworICAgIGlmICghZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgIAlyZXR1cm47CisKKyAg
ICBpZighZnYtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChQbGF0Zm9ybUtleWJv
YXJkRXZlbnQobWVzc2FnZSkpKQorICAgIAlwcmludGYoIi0tPktleURvd246IG5vdCBhcnJpdmVk
XG4iKTsgICAgCisKKyAgICBpZigoaW50KWJ5dGVzWzBdICE9IChpbnQpQl9UQUIpIC8vb3RoZXJz
PworICAgICAgICBCVmlldzo6S2V5RG93bihieXRlcywgbnVtQnl0ZXMpOworfQorCit2b2lkIFNj
cm9sbFZpZXdDYW52YXNIYWlrdTo6S2V5VXAoY29uc3QgY2hhciogYnl0ZXMsIGludDMyIG51bUJ5
dGVzKQoreworICAgIEJNZXNzYWdlKiBtZXNzYWdlPUxvb3BlcigpLT5DdXJyZW50TWVzc2FnZSgp
OworICAgIGlmKCFtZXNzYWdlKSByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBp
ZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAJcmV0dXJuOworCisgICAgaWYoZnYtPmZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQobWVzc2Fn
ZSkpKQorICAgIAlwcmludGYoIi0tPktleVVwOiBub3QgYXJyaXZlZFxuIik7IAorCisgICAgaWYo
Ynl0ZXNbMF0gIT0gKGludClCX1RBQikgLy9vdGhlcnM/CisgICAgICAgIEJWaWV3OjpLZXlVcChi
eXRlcywgbnVtQnl0ZXMpOworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6V2luZG93
QWN0aXZhdGVkKGJvb2wgc3RhdGUpCit7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiBmdiA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldyk7CisgICAgaWYgKCFm
diB8fCAhZnYtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZ2LT5mcmFtZSgpLT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUoc3RhdGUpOworfQorCisKK3ZvaWQg
U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpGcmFtZVJlc2l6ZWQoZmxvYXQgdyxmbG9hdCBoKQorewor
ICAgIGlmICghbV9zY3JvbGxWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zY3Jv
bGxWaWV3LT5jb250ZW50c1dpZHRoKCkgIT0gKGludCkodyArIDEpIHx8IG1fc2Nyb2xsVmlldy0+
Y29udGVudHNIZWlnaHQoKSAhPSAoaW50KShoICsgMSkpIHsKKyAgICAJV2ViQ29yZTo6RnJhbWVW
aWV3KiBmdiA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldyk7
CisgICAgCWlmIChmdil7CisgICAgICAgICAgICAvL2Z2LT5mcmFtZSgpLT5mb3JjZUxheW91dCgp
OworICAgICAgICAgICAgLy9mdi0+YWRqdXN0Vmlld1NpemUoKTsKKyAgICAgICAgICAgIGZ2LT5z
ZXROZWVkc0xheW91dCgpOworICAgIAl9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZh
c0hhaWt1LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZGY2ODkKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oCkBA
IC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29k
IDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgU2Nyb2xsVmlld0NhbnZhc0hhaWt1X2gKKyNkZWZpbmUgU2Nyb2xsVmlld0Nh
bnZhc0hhaWt1X2gKKworI2luY2x1ZGUgPFZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgY2xhc3MgU2Nyb2xsVmlldzsKKworICAgIGNsYXNzIFNjcm9sbFZpZXdDYW52YXNIYWlr
dSA6IHB1YmxpYyBCVmlldworICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjcm9sbFZpZXdD
YW52YXNIYWlrdShTY3JvbGxWaWV3KiwgQlZpZXcqIHBhcmVudCwgdWludDMyIGZsYWdzKTsKKwor
ICAgICAgICB2b2lkIFNldFNjcm9sbEJhck1heFYoZmxvYXQgdlYpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fc2Nyb2xsQmFyTWF4ViA9IHZWOworICAgICAgICB9CisgICAgICAgIHZvaWQgU2V0
U2Nyb2xsQmFyTWF4SChmbG9hdCB2SCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9zY3JvbGxC
YXJNYXhIID0gdkg7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIERyYXcoQlJlY3QgdXBkYXRl
UmVjdCk7CisgICAgICAgIHZvaWQgTWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdlICptc2cpOworICAg
ICAgICB2b2lkIE1vdXNlTW92ZWQoQlBvaW50IHdoZXJlLCB1aW50MzIgY29kZSwgY29uc3QgQk1l
c3NhZ2UqIGFfbWVzc2FnZSk7CisgICAgICAgIHZvaWQgTW91c2VEb3duKEJQb2ludCB3aGVyZSk7
CisgICAgICAgIHZvaWQgTW91c2VVcChCUG9pbnQgd2hlcmUpOworICAgICAgICB2b2lkIEtleURv
d24oY29uc3QgY2hhciogYnl0ZXMsIGludDMyIG51bUJ5dGVzKTsKKyAgICAgICAgdm9pZCBLZXlV
cChjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVtQnl0ZXMpOworICAgICAgICB2b2lkIFdpbmRv
d0FjdGl2YXRlZChib29sIHN0YXRlKTsKKworICAgICAgICB2b2lkIFNldFNjcm9sbFZpZXcoU2Ny
b2xsVmlldyogc2Nyb2xsVmlldykKKyAgICAgICAgeworICAgICAgICAgICAgbV9zY3JvbGxWaWV3
ID0gc2Nyb2xsVmlldzsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgRnJhbWVSZXNpemVkKGZs
b2F0IHcsIGZsb2F0IGgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIERv
U2Nyb2xsKGJvb2wgaXNIb3Jpem9udGFsLCBmbG9hdCBtdWx0aXBsaWVyKTsKKworICAgICAgICBT
Y3JvbGxWaWV3KiBtX3Njcm9sbFZpZXc7CisgICAgICAgIGZsb2F0IG1fc2Nyb2xsQmFyTWF4SDsK
KyAgICAgICAgZmxvYXQgbV9zY3JvbGxCYXJNYXhWOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxWaWV3Q2FudmFzSGFpa3VfaAorCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOTlhZmQzOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvU2Nyb2xsVmlld0hhaWt1LmNwcApAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pICAgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21h
aWwuY29tPgorICogCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkludFBvaW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAi
U2Nyb2xsVmlld0NhbnZhc0hhaWt1LmgiCisjaW5jbHVkZSAiV0tTY3JvbGxWaWV3LmgiCisKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8UmVjdC5oPgorI2luY2x1ZGUg
PFZpZXcuaD4KKyNpbmNsdWRlIDxXaW5kb3cuaD4KKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5o
PgorI2luY2x1ZGUgPHN1cHBvcnQvQXV0b2xvY2suaD4KKyNpbmNsdWRlIDxTY3JvbGxWaWV3Lmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3
UHJpdmF0ZSA6IHB1YmxpYyBXS1Njcm9sbFZpZXcKK3sKK3B1YmxpYzoKKyAgICBTY3JvbGxWaWV3
UHJpdmF0ZShXZWJDb3JlOjpTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KQorICAgICAgICA6IFdLU2Ny
b2xsVmlldygiV2ViQ29yZSBTY3JvbGxWaWV3UHJpdmF0ZSIsIG5ldyBTY3JvbGxWaWV3Q2FudmFz
SGFpa3UoTlVMTCwgTlVMTCwgMCksCisgICAgICAgICAgICAgICAgICAgICAgIEJfRk9MTE9XX05P
TkUsIEJfV0lMTF9EUkFXIHwgQl9GUkFNRV9FVkVOVFMgKSAvL0JfRlVMTF9VUERBVEVfT05fUkVT
SVpFCisgICAgICAgICwgbV9zY3JvbGxWaWV3KHNjcm9sbFZpZXcpCisgICAgICAgICwgbV9jb250
ZW50U2l6ZSgwLCAwKQorICAgIHsKKyAgICAgICAgU2V0Vmlld0NvbG9yKDI1NSwgMjU1LCAyNTUp
OworICAgIH0KKworICAgIHZvaWQgQXR0YWNoZWRUb1dpbmRvdygpCisgICAgeworICAgICAgICBS
ZXNpemVCeSgtIChCX1ZfU0NST0xMX0JBUl9XSURUSCAtIDEpLCAtIChCX0hfU0NST0xMX0JBUl9I
RUlHSFQgLSAxKSk7CisJICAgCVdLU2Nyb2xsVmlldzo6QXR0YWNoZWRUb1dpbmRvdygpOworICAg
IH0KKworCXZvaWQgS2V5RG93bihjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVtQnl0ZXMpCisJ
eworICAgICAgICAvLyBGSVhNRTogd2hlbiBTY3JvbGxWaWV3LmggdGFrZXMgdGhlIGZvY3VzIHNo
b3VsZCBmb2N1cyB0aGUgdGFyZ2V0KCkuLgorCQorICAgICAgICBpZihUYXJnZXQoKSkKKyAgICAg
ICAgICAgIFRhcmdldCgpLT5LZXlEb3duKGJ5dGVzLCBudW1CeXRlcyk7CisJfQorCisgIAl2b2lk
IEtleVVwKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQzMiBudW1CeXRlcykKKwl7CisgICAgICAgIC8v
c2VlIGNvbW1lbnQgYWJvdmUuCisKKyAgICAgICAgaWYoVGFyZ2V0KCkpCisgICAgICAgICAgICBU
YXJnZXQoKS0+S2V5VXAoYnl0ZXMsIG51bUJ5dGVzKTsKKwl9CisKKyAgCUJSZWN0IFZpc2libGVG
cmFtZSgpCisgICAgeworICAgICAgICBpZiAoVGFyZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4g
VGFyZ2V0KCktPkJvdW5kcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gQm91
bmRzKCk7CisgICAgfQorCisgICAgdm9pZCBTZXRDb250ZW50U2l6ZShCU2l6ZSBzaXplKQorICAg
IHsKKyAgICAgICAgbV9jb250ZW50U2l6ZSA9IHNpemU7CisgCX0KKworICAgIEJTaXplIENvbnRl
bnRTaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbnRlbnRTaXplOworICAgIH0KKwor
ICAgIGZsb2F0IENvbnRlbnRXaWR0aCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZW50
U2l6ZS53aWR0aDsKKyAgICB9CisKKyAgICBmbG9hdCBDb250ZW50SGVpZ2h0KCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2NvbnRlbnRTaXplLmhlaWdodDsKKyAgICB9CisKKyAgICBCUG9pbnQg
U2Nyb2xsT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAg
IHJldHVybiBUYXJnZXQoKS0+TGVmdFRvcCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXR1cm4gQlBvaW50KDAsIDApOworICAgIH0KKworICAgIHZvaWQgU2Nyb2xsQnkoZmxvYXQgZGgs
IGZsb2F0IGR2KQorICAgIHsKKyAgICAgICAgaWYgKFRhcmdldCgpKQorICAgICAgICAgICAgVGFy
Z2V0KCktPlNjcm9sbEJ5KGRoLCBkdik7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYkNvcmU6
OlNjcm9sbFZpZXcqIG1fc2Nyb2xsVmlldzsKKyAgICBCU2l6ZSBtX2NvbnRlbnRTaXplOworfTsK
Kwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUluaXQoKQoreworICAgIG1fZGF0YSA9IG5ldyBT
Y3JvbGxWaWV3UHJpdmF0ZSh0aGlzKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybURl
c3Ryb3koKQoreworICAgIGRlbGV0ZSBtX2RhdGE7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6
cGxhdGZvcm1WaXNpYmxlQ29udGVudFJlY3QoYm9vbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9k
YXRhLT5WaXNpYmxlRnJhbWUoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNj
cm9sbGJhck1vZGVzKCkKK3sKKyAgICBpZiAobV9kYXRhLT5TY3JvbGxCYXJNb2RlKEJfSE9SSVpP
TlRBTCkgIT0gaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKSkKKyAgICAgICAgbV9kYXRhLT5TZXRT
Y3JvbGxCYXJNb2RlKEJfSE9SSVpPTlRBTCwgaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKSk7CisK
KyAgICBpZiAobV9kYXRhLT5TY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwpICE9IHZlcnRpY2FsU2Ny
b2xsYmFyTW9kZSgpKQorICAgICAgICBtX2RhdGEtPlNldFNjcm9sbEJhck1vZGUoQl9WRVJUSUNB
TCwgdmVydGljYWxTY3JvbGxiYXJNb2RlKCkpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRm
b3JtU2Nyb2xsYmFyTW9kZXMoU2Nyb2xsYmFyTW9kZSYgaG9yaXpvbnRhbCwgU2Nyb2xsYmFyTW9k
ZSYgdmVydGljYWwpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN0aWxsIHByb2JsbWVzIHdpdGgg
ZGlmZmVyZW50IHNjcm9sbGJhciBtb2Rlcy4KKyAgICAjaWYgMAorCisgICAgaWYgKCFtX2RhdGEp
CisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoaG9yaXpvbnRhbCkgeworICAgIGNhc2Ug
U2Nyb2xsYmFyQXV0bzoKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfSE9SSVpP
TlRBTCwgU2Nyb2xsYmFyQXV0byk7CQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbGJh
ckFsd2F5c09uOgorICAgICAgICBtX2RhdGEtPlNldFNjcm9sbEJhck1vZGUoQl9IT1JJWk9OVEFM
LCBTY3JvbGxiYXJBbHdheXNPbik7IAorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbGJh
ckFsd2F5c09mZjoKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfSE9SSVpPTlRB
TCwgU2Nyb2xsYmFyQWx3YXlzT2ZmKTsgCisgICAgICAgIGJyZWFrOwkKKyAgICB9CisKKyAgICBz
d2l0Y2ggKHZlcnRpY2FsKSB7CisgICAgY2FzZSBTY3JvbGxiYXJBdXRvOgorICAgICAgICBtX2Rh
dGEtPlNldFNjcm9sbEJhck1vZGUoQl9WRVJUSUNBTCwgU2Nyb2xsYmFyQXV0byk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgU2Nyb2xsYmFyQWx3YXlzT246CisgICAgICAgIG1fZGF0YS0+U2V0
U2Nyb2xsQmFyTW9kZShCX1ZFUlRJQ0FMLCBTY3JvbGxiYXJBbHdheXNPbik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU2Nyb2xsYmFyQWx3YXlzT2ZmOgorICAgICAgICBtX2RhdGEtPlNldFNj
cm9sbEJhck1vZGUoQl9WRVJUSUNBTCwgU2Nyb2xsYmFyQWx3YXlzT2ZmKTsKKyAgICAgICAgYnJl
YWs7CQorICAgIH0KKworICAgICNlbmRpZgorfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3Jt
QWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKK3sKKyAgICBCVmlldyogdGFyZ2V0ID0gbV9kYXRhLT5U
YXJnZXQoKTsKKyAgICBpZiAodGFyZ2V0KQorICAgICAgICBjaGlsZC0+c2V0UGxhdGZvcm1XaWRn
ZXQodGFyZ2V0KTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlbW92ZUNoaWxkKFdp
ZGdldCogY2hpbGQpCit7IAorICAgIEJWaWV3KiB0YXJnZXQgPSBtX2RhdGEtPlRhcmdldCgpOwor
CisgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQtPkxvY2tMb29wZXIoKSkgeworICAgICAgICBjaGls
ZC0+cGxhdGZvcm1XaWRnZXQoKS0+UmVtb3ZlU2VsZigpOworICAgICAgICB0YXJnZXQtPlVubG9j
a0xvb3BlcigpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENvbnRl
bnRzU2l6ZSgpCit7CisgICAgLy9zY3JvbGxiYXIgZml4OgorICAgIC8vIG1fZGF0YS0+U2Nyb2xs
QmFyKEJfSE9SSVpPTlRBTCktPlNldFJhbmdlKDAsIHcgLSB3aWR0aCgpIC0xICsgQl9WX1NDUk9M
TF9CQVJfV0lEVEgpOworICAgIC8vIG1fZGF0YS0+U2Nyb2xsQmFyKEJfSE9SSVpPTlRBTCktPlNl
dFByb3BvcnRpb24oICB3aWR0aCgpICAvIChmbG9hdCkody0xKSk7CisKKyAgICAvLyBtX2RhdGEt
PlNjcm9sbEJhcihCX1ZFUlRJQ0FMKS0+U2V0UmFuZ2UoMCwgaCAtIGhlaWdodCgpIC0xICsgQl9I
X1NDUk9MTF9CQVJfSEVJR0hUKTsKKyAgICAvLyBtX2RhdGEtPlNjcm9sbEJhcihCX1ZFUlRJQ0FM
KS0+U2V0UHJvcG9ydGlvbiggIGhlaWdodCgpICAvIChmbG9hdCkoaC0xKSk7Cit9CisKK0ludFNp
emUgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1NpemUoKSBjb25zdAoreworICAgIGludCB3
aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkp
IHsKKyAgICAgICAgQlNpemUgZnJhbWUgPSBwbGF0Zm9ybVdpZGdldCgpLT5QcmVmZXJyZWRTaXpl
KCk7CisgICAgICAgIHdpZHRoID0gZnJhbWUuSW50ZWdlcldpZHRoKCk7CisgICAgICAgIGhlaWdo
dCA9IGZyYW1lLkludGVnZXJIZWlnaHQoKTsKKyAgICAgICAgQVNTRVJUKHdpZHRoID49IDAgJiYg
aGVpZ2h0ID49IDApOworICAgIH0KKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
K30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IElu
dFBvaW50JiBzY3JvbGxQb2ludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCwgYm9vbCBub3cpCit7CisgICAgaWYgKHVwZGF0ZVJlY3Qud2lkdGgoKSA9
PSAwIHx8IHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QlJlY3QgdXBkYXRlKHVwZGF0ZVJlY3QpOworCisgICAgQlZpZXcqIHRhcmdldCA9IG1fZGF0YS0+
VGFyZ2V0KCk7CisKKyAgICBpZiAoIXVwZGF0ZS5Jc1ZhbGlkKCkgfHwgIXRhcmdldCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdXBkYXRlID0gdXBkYXRlICYgbV9kYXRhLT5WaXNpYmxlRnJhbWUo
KTsKKworICAgIHRhcmdldC0+SW52YWxpZGF0ZSh1cGRhdGUpOworCisgICAgaWYgKG5vdykKKyAg
ICAgICAJdGFyZ2V0LT5TeW5jKCk7CisgICAgZWxzZQorICAgICAgIAl0YXJnZXQtPkZsdXNoKCk7
Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gcG9p
bnQ7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1RvU2NyZWVuKGNv
bnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gcmVj
dDsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENhbkJsaXRPblNjcm9sbChib29s
IGZsYWcpCit7CisgICAgaWYoIW1fZGF0YSB8fCAhbV9kYXRhLT5UYXJnZXQoKSkKKyAgICAgICAg
cmV0dXJuOworCQorICAgIGlmIChtX2RhdGEtPlZpZXdDb2xvcigpID09IEJfVFJBTlNQQVJFTlRf
Q09MT1IgJiYgIWZsYWcpIHsKKyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoMjU1LCAyNTUs
IDI1NSk7CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPlNldFZpZXdDb2xvcigyNTUsIDI1NSwg
MjU1KTsKKyAgICAgICAgbV9kYXRhLT5UYXJnZXQoKS0+SW52YWxpZGF0ZSgpOworICAgIH0gZWxz
ZSBpZiAobV9kYXRhLT5WaWV3Q29sb3IoKSAhPSBCX1RSQU5TUEFSRU5UX0NPTE9SICYmIGZsYWcp
IHsKKyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoQl9UUkFOU1BBUkVOVF9DT0xPUik7Cisg
ICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPlNldFZpZXdDb2xvcihCX1RSQU5TUEFSRU5UX0NPTE9S
KTsKKyAgICAgICAgbV9kYXRhLT5UYXJnZXQoKS0+SW52YWxpZGF0ZSgpOworICAgIH0KKy8vICAg
IGlmKGZsYWcpCisvLyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7
CisvLyAgICBlbHNlCisvLyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoQl9UUkFOU1BBUkVO
VF9DT0xPUik7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1DYW5CbGl0T25TY3JvbGwo
KSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPlZpZXdDb2xvcigpID09IEJfVFJBTlNQQVJF
TlRfQ09MT1I7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jc09mZnNjcmVlbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFwbGF0Zm9ybVdpZGdldCgpIHx8ICFwbGF0Zm9ybVdpZGdldCgp
LT5Jc0hpZGRlbigpOworfQorCitib29sIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0QWxsb3dzU2Nyb2xs
aW5nKGJvb2wgYWxsb3dzKQoreworICAgLy9kaXNhYmxlIHNjcm9sbGJhcnMgb3IgaGlkZSBzY3Jv
bGxiYXJzPworICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhh
aWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTdiODIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcApA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29v
ZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlYXJj
aFBvcHVwTWVudS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2VhcmNoUG9wdXBN
ZW51OjpTZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCisgICAgOiBQb3B1
cE1lbnUoY2xpZW50KQoreworfQorCit2b2lkIFNlYXJjaFBvcHVwTWVudTo6c2F2ZVJlY2VudFNl
YXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNl
YXJjaEl0ZW1zKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9w
dXBNZW51Ojpsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0
b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Ym9vbCBTZWFyY2hQb3B1cE1lbnU6OmVuYWJsZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmQwYTQyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTaGFyZWRUaW1lckhhaWt1LmgiCisKKyNpbmNsdWRlICJDdXJyZW50
VGltZS5oIgorCisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1ZGUgPE1lc3NhZ2VSdW5uZXIu
aD4KKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5oPgorI2luY2x1ZGUgPHN1cHBvcnQvQXV0b2xv
Y2suaD4KKyNpbmNsdWRlIDxMb29wZXIuaD4KKworI2RlZmluZSBGSVJFX01FU1NBR0UgJ2ZpcmUn
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTaGFyZWRUaW1lckhhaWt1OjpTaGFyZWRUaW1l
ckhhaWt1KCkKKyAgICA6IEJNZXNzYWdlRmlsdGVyKEZJUkVfTUVTU0FHRSkKKyAgICAsIG1fZmly
ZVRpbWUoMCkKKyAgICAsIG1fc2hvdWxkUnVuKHRydWUpLCBtX3RpbWVyRnVuY3Rpb24oTlVMTCkK
K3sKK30KKworZmlsdGVyX3Jlc3VsdCBTaGFyZWRUaW1lckhhaWt1OjpGaWx0ZXIoQk1lc3NhZ2Uq
IG1lc3NhZ2UsIEJIYW5kbGVyKiogX3RhcmdldCkKK3sKKyAgICBpZiAobV90aW1lckZ1bmN0aW9u
ICYmIG1fc2hvdWxkUnVuKQorICAgICAgICBtX3RpbWVyRnVuY3Rpb24oKTsKKworICAgIHJldHVy
biBCX1NLSVBfTUVTU0FHRTsJCit9CisKK1NoYXJlZFRpbWVySGFpa3U6On5TaGFyZWRUaW1lckhh
aWt1KCkKK3sKK30KKwordm9pZCBTaGFyZWRUaW1lckhhaWt1OjpzZXRGaXJlVGltZShkb3VibGUg
ZmlyZVRpbWUpCit7CisgICAgbV9maXJlVGltZSA9IGZpcmVUaW1lOworICAgIGlmIChtX2ZpcmVU
aW1lID4gMCAmJiBtX3Nob3VsZFJ1bikgeworICAgICAgICBiaWd0aW1lX3Qgc2xlZXB5VGltZSA9
IChiaWd0aW1lX3QpKChtX2ZpcmVUaW1lIC0gV1RGOjpjdXJyZW50VGltZSgpKSAqIDEwMDAwMDAp
OworICAgICAgICAKKyAgICAgICAgaWYoc2xlZXB5VGltZTwwKQorICAgICAgICAgICAgc2xlZXB5
VGltZSA9IDA7CisKKyAgICAgICAgQk1lc3NhZ2VSdW5uZXI6OlN0YXJ0U2VuZGluZyhMb29wZXIo
KSwgbmV3IEJNZXNzYWdlKEZJUkVfTUVTU0FHRSksIHNsZWVweVRpbWUsIDEpOworICAgIH0KK30K
Kwordm9pZCBTaGFyZWRUaW1lckhhaWt1OjpzZXRGaXJlRnVuY3Rpb24odm9pZCAoKmYpKCkpCit7
CisgICAgbV90aW1lckZ1bmN0aW9uID0gZjsKK30KKwordm9pZCBTaGFyZWRUaW1lckhhaWt1Ojpz
ZXRTaG91bGRSdW4oYm9vbCBzaG91bGRSdW4pCit7CisgICAgbV9zaG91bGRSdW4gPSBzaG91bGRS
dW47Cit9CisKKy8vIFN0YXRpYyBpbnN0YW5jZQorU2hhcmVkVGltZXJIYWlrdSogZ2V0U2hhcmVk
VGltZXJIYWlrdSgpCit7CisgICAgLy8gUGxlYXNlIG5vdGUgdGhpcyBpcyBzdGlsbCBhbiBleHBl
cmltZW50YWwgc29sdXRpb24uCisKKyAgICBCTG9vcGVyICpsb29wZXIgPSBCTG9vcGVyOjpMb29w
ZXJGb3JUaHJlYWQoZmluZF90aHJlYWQoTlVMTCkpOworICAgIC8vIEFTU0VSVChsb29wZXIpOwor
ICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGN1cnJlbnQgbG9vcGVyIGhhcyBh
IHZhbGlkIGlmIG5vdCBhZGQgYSBuZXcgb25lLgorICAgIC8vIHdlIHNob3VsZCBhbHNvIGJlIHN1
cmUgdGhlIGxvb3BlciBpcyBhIEJXaW5kb3cuLgorCisgICAgc3RhdGljIFNoYXJlZFRpbWVySGFp
a3UqIHNoYXJlZFRpbWVyID0gTlVMTDsKKworICAgIGlmICghc2hhcmVkVGltZXIpIHsKKyAgICAg
ICAgQkF1dG9sb2NrIGxvY2sobG9vcGVyKTsKKyAgICAgICAgc2hhcmVkVGltZXIgPSBuZXcgU2hh
cmVkVGltZXJIYWlrdSgpOworICAgICAgICBsb29wZXItPkFkZENvbW1vbkZpbHRlcihzaGFyZWRU
aW1lcik7ICAgIAkKKyAgICB9CisKKyAgICByZXR1cm4gc2hhcmVkVGltZXI7Cit9CisKKy8vIFdl
YkNvcmUgZnVuY3Rpb25zCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgq
ZikoKSkKK3sKKyAgICBTaGFyZWRUaW1lckhhaWt1KiB0aW1lcj1nZXRTaGFyZWRUaW1lckhhaWt1
KCk7CisgICAgQkF1dG9sb2NrIGxvY2sodGltZXItPkxvb3BlcigpKTsKKyAgICB0aW1lci0+c2V0
RmlyZUZ1bmN0aW9uKGYpOworfQorCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZG91Ymxl
IGZpcmVUaW1lKQoreworICAgIFNoYXJlZFRpbWVySGFpa3UqIHRpbWVyID0gZ2V0U2hhcmVkVGlt
ZXJIYWlrdSgpOworICAgIEJBdXRvbG9jayBsb2NrKHRpbWVyLT5Mb29wZXIoKSk7CisgICAgdGlt
ZXItPnNldFNob3VsZFJ1bih0cnVlKTsKKyAgIAl0aW1lci0+c2V0RmlyZVRpbWUoZmlyZVRpbWUp
OworfQorCit2b2lkIHN0b3BTaGFyZWRUaW1lcigpCit7CisgICAgU2hhcmVkVGltZXJIYWlrdSog
dGltZXIgPSBnZXRTaGFyZWRUaW1lckhhaWt1KCk7CisgICAgQkF1dG9sb2NrIGxvY2sodGltZXIt
Pkxvb3BlcigpKTsKKyAgICB0aW1lci0+c2V0U2hvdWxkUnVuKGZhbHNlKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1No
YXJlZFRpbWVySGFpa3UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlr
dS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNTRiOTYKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuaApAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8
bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBTaGFyZWRUaW1lckhhaWt1X2gKKyNkZWZpbmUgU2hhcmVkVGltZXJIYWlrdV9o
CisKKyNpbmNsdWRlIDxPUy5oPgorI2luY2x1ZGUgPE1lc3NhZ2VGaWx0ZXIuaD4KKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgU2hhcmVkVGltZXJIYWlrdSA6IHB1YmxpYyBCTWVz
c2FnZUZpbHRlciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFNoYXJlZFRpbWVySGFp
a3UoKTsKKyAgICAgICAgICAgIH5TaGFyZWRUaW1lckhhaWt1KCk7CisKKyAgICAgICAgICAgIHZv
aWQgc2V0RmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKTsKKyAgICAgICAgICAgIHZvaWQgc2V0Rmly
ZUZ1bmN0aW9uKHZvaWQgKCpmKSgpKTsKKyAgICAgICAgICAgIHZvaWQgc2V0U2hvdWxkUnVuKGJv
b2wgc2hvdWxkUnVuKTsKKworICAgICAgICAgICAgLy92b2lkCU1lc3NhZ2VSZWNlaXZlZChCTWVz
c2FnZSogbWVzc2FnZSk7CisgICAgICAgICAgICB2aXJ0dWFsCWZpbHRlcl9yZXN1bHQgRmlsdGVy
KEJNZXNzYWdlKiBtZXNzYWdlLCBCSGFuZGxlcioqIF90YXJnZXQpOworCisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICAvL3ZvaWQgd2FpdCgpOworICAgICAgICAgICAgLy9zdGF0aWMgaW50
MzIgdGhyZWFkRnVuY3Rpb24odm9pZCAqZGF0YSk7CisKKyAgICAgICAgICAgIC8vdGhyZWFkX2lk
IG1fdGhyZWFkOworICAgICAgICAgICAgLy9zZW1faWQgbV93YWl0U2VtOworICAgICAgICAgICAg
ZG91YmxlIG1fZmlyZVRpbWU7CisgICAgICAgICAgICB2b2lkICgqbV90aW1lckZ1bmN0aW9uKSgp
OworICAgICAgICAgICAgYm9vbCBtX3Nob3VsZFJ1bjsKKyAgICB9OworCisgICAgU2hhcmVkVGlt
ZXJIYWlrdSogZ2V0U2hhcmVkVGltZXJIYWlrdSgpOworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gU2hhcmVkVGltZXJIYWlrdV9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvU291bmRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NvdW5k
SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZWU5M2YKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NvdW5kSGFpa3UuY3BwCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29k
IDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VuZC5oIgorCisjaW5jbHVkZSA8
QmVlcC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzeXN0ZW1CZWVwKCkKK3sK
KyAgICBiZWVwKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TeXN0ZW1UaW1lSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9TeXN0ZW1UaW1lSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmQ2MGQwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1N5c3RlbVRpbWVIYWlrdS5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlN5c3RlbVRpbWUuaCIKKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitkb3VibGUgY3VycmVudFRpbWUoKQoreworICAgIHN0cnVjdCB0aW1ldmFsIHR2
OworICAgIHN0cnVjdCB0aW1lem9uZSB0ejsKKworICAgIGdldHRpbWVvZmRheSgmdHYsICZ0eik7
CisgICAgcmV0dXJuIChkb3VibGUpdHYudHZfc2VjICsgKGRvdWJsZSkodHYudHZfdXNlYyAvIDEw
MDAwMDAuMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQwY2M1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29k
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1h
eGltZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZvbnQu
aCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNs
dWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJD
dXJzb3IuaCIKKyNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiU2Nyb2xs
YmFyVGhlbWUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgorI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIlNjcmVlbi5oIgor
I2luY2x1ZGUgIkhpc3RvcnkuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgorI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisjaW5jbHVkZSAi
VGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkljb25M
b2FkZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEYXRh
R3JpZENvbHVtbkxpc3QuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIExvY2FsaXplZFN0cmluZ3MKK1N0cmluZyBXZWJDb3Jl
OjpzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKSB7IHJldHVybiAiU3VibWl0IjsgfQorU3RyaW5n
IFdlYkNvcmU6OmlucHV0RWxlbWVudEFsdFRleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3Ry
aW5nIFdlYkNvcmU6OnJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkgeyByZXR1cm4gIlJlc2V0Ijsg
fQorU3RyaW5nIFdlYkNvcmU6OmRlZmF1bHRMYW5ndWFnZSgpIHsgcmV0dXJuICJlbiI7IH0KK1N0
cmluZyBXZWJDb3JlOjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKSB7IHJldHVybiAiU2Vh
cmNoYWJsZSBJbmRleCI7IH0KK1N0cmluZyBXZWJDb3JlOjpmaWxlQnV0dG9uQ2hvb3NlRmlsZUxh
YmVsKCkgeyByZXR1cm4gIkNob29zZSBGaWxlIjsgfQorU3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0
b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkgeyByZXR1cm4gIk5vIGZpbGUgc2VsZWN0ZWQiOyB9CitT
dHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpIHsg
cmV0dXJuIFN0cmluZyggIk9wZW4gaW4gbmV3IHRhYiIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNv
bnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaygpIHsgcmV0dXJuIFN0cmluZyggIkRv
d25sb2FkIGxpbmsgdG8gZGlzayIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQoKSB7IHJldHVybiBTdHJpbmcoICJDb3B5IGxpbmsgdG8g
Y2xpcGJvYXJkIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3Blbklt
YWdlSW5OZXdXaW5kb3coKSB7IHJldHVybiBTdHJpbmcoICJPcGVuIGltYWdlIGluIG5ldyB3aW5k
b3ciICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdl
VG9EaXNrKCkgeyByZXR1cm4gU3RyaW5nKCAiRG93bmxvYWQgaW1hZ2UgdG8gZGlzayIgKTsgfQor
U3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkg
eyByZXR1cm4gU3RyaW5nKCAiQ29weSBpbWFnZSB0byBjbGlwYm9hcmQiICk7IH0KK1N0cmluZyBX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpIHsgcmV0dXJu
IFN0cmluZyggIk9wZW4gZnJhbWUgaW4gbmV3IHdpbmRvdyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6
OmNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKSB7IHJldHVybiBTdHJpbmcoICJDb3B5IiApOyB9CitT
dHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnR29CYWNrKCkgeyByZXR1cm4gU3RyaW5n
KCAiR28gYmFjayIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0dvRm9y
d2FyZCgpIHsgcmV0dXJuIFN0cmluZyggIkdvIGZvcndhcmQiICk7IH0KK1N0cmluZyBXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkgeyByZXR1cm4gU3RyaW5nKCAiU3RvcCIgKTsgfQor
U3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCgpIHsgcmV0dXJuIFN0cmlu
ZyggIlJlbG9hZCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0N1dCgp
IHsgcmV0dXJuIFN0cmluZyggIkN1dCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51
SXRlbVRhZ1Bhc3RlKCkgeyByZXR1cm4gU3RyaW5nKCAiUGFzdGUiICk7IH0KK1N0cmluZyBXZWJD
b3JlOjpjb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpIHsgcmV0dXJuIFN0cmluZygg
Ik5vIGd1ZXNzZXMgZm91bmQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdJZ25vcmVTcGVsbGluZygpIHsgcmV0dXJuIFN0cmluZyggIklnbm9yZSBzcGVsbGluZyIgKTsg
fQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSB7IHJl
dHVybiBTdHJpbmcoICJMZWFybiBzcGVsbGluZyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRl
eHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpIHsgcmV0dXJuIFN0cmluZyggIlNlYXJjaCB3ZWIiICk7
IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnko
KSB7IHJldHVybiBTdHJpbmcoICJMb29rdXAgaW4gZGljdGlvbmFyeSIgKTsgfQorU3RyaW5nIFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKCkgeyByZXR1cm4gU3RyaW5nKCAiT3Bl
biBsaW5rIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3Jh
bW1hcigpIHsgcmV0dXJuIFN0cmluZyggIklnbm9yZSBncmFtbWFyIiApOyB9CitTdHJpbmcgV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkgeyByZXR1cm4gU3RyaW5nKCAi
U3BlbGxpbmcgbWVudSIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1No
b3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hvdykgeyByZXR1cm4gU3RyaW5nKCAiU2hvdyBzcGVsbGlu
ZyBwYW5lbCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3Bl
bGxpbmcoKSB7IHJldHVybiBTdHJpbmcoICJDaGVjayBzcGVsbGluZyIgKTsgfQorU3RyaW5nIFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpIHsgcmV0
dXJuIFN0cmluZyggIkNoZWNrIHNwZWxsaW5nIHdoaWxlIHR5cGluZyIgKTsgfQorU3RyaW5nIFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZygpIHsgcmV0
dXJuIFN0cmluZyggIkNoZWNrIGZvciBncmFtbWFyIHdpdGggc3BlbGxpbmciICk7IH0KK1N0cmlu
ZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpIHsgcmV0dXJuIFN0cmluZygg
IkZvbnQgbWVudSIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0JvbGQo
KSB7IHJldHVybiBTdHJpbmcoICJCb2xkIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1l
bnVJdGVtVGFnSXRhbGljKCkgeyByZXR1cm4gU3RyaW5nKCAiSXRhbGljIiApOyB9CitTdHJpbmcg
V2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkgeyByZXR1cm4gU3RyaW5nKCAi
VW5kZXJsaW5lIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3V0bGlu
ZSgpIHsgcmV0dXJuIFN0cmluZyggIk91dGxpbmUiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpIHsgcmV0dXJuIFN0cmluZyggIldy
aXRpbmcgZGlyZWN0aW9uIG1lbnUiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkgeyByZXR1cm4gU3RyaW5nKCAiRGVmYXVsdCBkaXJlY3Rp
b24iICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgp
IHsgcmV0dXJuIFN0cmluZyggIkxlZnQgdG8gcmlnaHQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdCgpIHsgcmV0dXJuIFN0cmluZyggIlJpZ2h0IHRv
IGxlZnQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxl
bWVudCgpIHsgcmV0dXJuIFN0cmluZyggIkluc3BlY3QiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpz
ZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKSB7IHJldHVybiBTdHJpbmcoICJObyByZWNl
bnQgdGV4dCBzZWFyY2hlcyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OnNlYXJjaE1lbnVSZWNlbnRT
ZWFyY2hlc1RleHQoKSB7IHJldHVybiBTdHJpbmcoICJSZWNlbnQgdGV4dCBzZWFyY2hlcyIgKTsg
fQorU3RyaW5nIFdlYkNvcmU6OnNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCgpIHsg
cmV0dXJuIFN0cmluZyggIkNsZWFyIHJlY2VudCB0ZXh0IHNlYXJjaGVzIiApOyB9CitTdHJpbmcg
V2ViQ29yZTo6dW5rbm93bkZpbGVTaXplVGV4dCgpIHsgcmV0dXJuIFN0cmluZygiVW5rbm93biIp
OyB9CitTdHJpbmcgV2ViQ29yZTo6QVhXZWJBcmVhVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9
CitTdHJpbmcgV2ViQ29yZTo6QVhMaW5rVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJp
bmcgV2ViQ29yZTo6QVhMaXN0TWFya2VyVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJp
bmcgV2ViQ29yZTo6QVhJbWFnZU1hcFRleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5n
IFdlYkNvcmU6OkFYSGVhZGluZ1RleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdl
YkNvcmU6OmltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkgeyByZXR1cm4gU3RyaW5nKCJJbWFnZSIpOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4
dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3Ry
aW5nIFdlYkNvcmU6OkFYQnV0dG9uQWN0aW9uVmVyYigpIHsgcmV0dXJuIFN0cmluZygpOyB9CitT
dHJpbmcgV2ViQ29yZTo6QVhUZXh0RmllbGRBY3Rpb25WZXJiKCkgeyByZXR1cm4gU3RyaW5nKCk7
IH0KK1N0cmluZyBXZWJDb3JlOjpBWFJhZGlvQnV0dG9uQWN0aW9uVmVyYigpIHsgcmV0dXJuIFN0
cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhDaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkg
eyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWFVuY2hlY2tlZENoZWNrQm94
QWN0aW9uVmVyYigpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhMaW5r
QWN0aW9uVmVyYigpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhEZWZp
bml0aW9uTGlzdFRlcm1UZXh0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3Jl
OjpBWERlZmluaXRpb25MaXN0RGVmaW5pdGlvblRleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQor
CitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFZlY3RvcjxjaGFyPigpOworfQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgaGlzdG9yeUNvbnRhaW5zKFN0cmluZyBjb25zdCYpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRLZXlTaXpl
cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKK30KKworU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25l
ZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBLVVJM
ICZ1cmwpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitmbG9hdCB1c2VySWRsZVRpbWUo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDAuMDsKK30KKwordm9pZCBj
YWxsT25NYWluVGhyZWFkKHZvaWQgKCopKCkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRl
bnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU2Nyb2xsYmFy
VGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBzdGF0aWMgU2Nyb2xsYmFyVGhlbWUgdGhlbWU7CisgICAgcmV0dXJuICZ0aGVt
ZTsKK30KKwordm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODI3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmNwcApAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWls
LmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUcmFuc2xhdG9yRGVjb2Rlci5oIgorCisjaW5jbHVkZSA8VHJhbnNs
YXRpb25VdGlscy5oPgorI2luY2x1ZGUgPERhdGFJTy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
Cit7CisKK1RyYW5zbGF0b3JEZWNvZGVyOjpUcmFuc2xhdG9yRGVjb2RlcigpCit7CisgICAgbV9p
bWFnZSA9IE5VTEw7CisgICAgc2V0U2l6ZSgtMSwtMSk7Cit9CisKK2Jvb2wgVHJhbnNsYXRvckRl
Y29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoc2l6ZSgpID09
IEludFNpemUoLTEsIC0xKSk7Cit9CisKK1JHQkEzMkJ1ZmZlciogVHJhbnNsYXRvckRlY29kZXI6
OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgcmV0dXJuIDA7Cit9CisK
Ky8vIEFsbCBzcGVjaWZpYyBkZWNvZGVyIHBsdWdpbnMgbXVzdCBkbyBzb21ldGhpbmcgd2l0aCB0
aGUgZGF0YSB0aGV5IGFyZSBnaXZlbi4KK3ZvaWQgVHJhbnNsYXRvckRlY29kZXI6OnNldERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkgCit7IAorICAgIGlmKGFs
bERhdGFSZWNlaXZlZCkgeyAvL3Byb2dyZXNzaXZlIGxvYWRpbmc/CisgICAgICAgIEJNZW1vcnlJ
TwlpbyhkYXRhLT5kYXRhKCksZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgbV9pbWFnZSA9IEJUcmFu
c2xhdGlvblV0aWxzOjpHZXRCaXRtYXAoJmlvKTsKKyAgICAgICAgaWYgKG1faW1hZ2UpIHsKKyAg
ICAgICAgICAgIC8vc2V0IHRoZSBpbWFnZSBzaXplIGRlY29kZWQuCisgICAgICAgICAgICBzZXRT
aXplKG1faW1hZ2UtPkJvdW5kcygpLldpZHRoKCkgKyAxLCBtX2ltYWdlLT5Cb3VuZHMoKS5IZWln
aHQoKSArIDEpOworICAgICAgICB9CQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVy
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmZmQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaApAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdt
YWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVHJh
bnNsYXRvckRlY29kZXJfaAorI2RlZmluZSBUcmFuc2xhdG9yRGVjb2Rlcl9oCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4KKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgY2xhc3MgVHJhbnNsYXRvckRlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zbGF0b3JEZWNvZGVyKCk7CisKKyAgICAgICAg
dmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworCisgICAgICAgIC8vIEFsbCBz
cGVjaWZpYyBkZWNvZGVyIHBsdWdpbnMgbXVzdCBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YSB0
aGV5IGFyZSBnaXZlbi4KKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVy
KiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkgOworCisgICAgICAgIHZpcnR1YWwgUkdCQTMy
QnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKworICAgICAgICBCQml0
bWFwKiBnZXRCaXRtYXAoKSB7IHJldHVybiBtX2ltYWdlOyB9CisKKyAgICBwcml2YXRlOgorCQlC
Qml0bWFwKiBtX2ltYWdlOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBUcmFuc2xhdG9yRGVjb2Rlcl9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvV0tTY3JvbGxWaWV3LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxW
aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTE3ZGM4Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZpZXcuY3BwCkBA
IC0wLDAgKzEsNDc2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNSwgQXhlbCBEw7ZyZmxl
ciwgYXhlbGRAcGluYy1zb2Z0d2FyZS5kZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldLU2Nyb2xsVmlldy5oIgorCisjaW5jbHVkZSA8TGF5
b3V0VXRpbHMuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisK
KworV0tTY3JvbGxWaWV3OjpXS1Njcm9sbFZpZXcoY29uc3QgY2hhciAqbmFtZSwgQlZpZXcgKnRh
cmdldCwgdWludDMyIHJlc2l6aW5nTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMiBmbGFncykKKyAgICA6IEJWaWV3KENhbGNGcmFtZSh0YXJnZXQsIHRydWUsIHRydWUpLCBu
YW1lLCByZXNpemluZ01vZGUsIE1vZGlmeUZsYWdzKGZsYWdzKSksCisgICAgZlRhcmdldCh0YXJn
ZXQpLAorICAgIGZIb3Jpem9udGFsU2Nyb2xsQmFyKE5VTEwpLAorICAgIGZWZXJ0aWNhbFNjcm9s
bEJhcihOVUxMKSwKKyAgICBmSGlnaGxpZ2h0ZWQoZmFsc2UpLAorICAgIGZWZXJ0aWNhbFNjcm9s
bEJhck1vZGUoU2Nyb2xsYmFyQWx3YXlzT24pLAorICAgIGZIb3Jpem9udGFsU2Nyb2xsQmFyTW9k
ZShTY3JvbGxiYXJBbHdheXNPbikJCit7CisJYm9vbCBob3Jpem9udGFsID0gdHJ1ZTsKKwlib29s
IHZlcnRpY2FsID0gdHJ1ZTsKKwkKKwlCUmVjdCB0YXJnZXRGcmFtZTsKKwlpZiAoZlRhcmdldCkg
eworCQkvLyBsYXlvdXQgdGFyZ2V0IGFuZCBhZGQgaXQKKwkJLy9mVGFyZ2V0LT5UYXJnZXRlZEJ5
U2Nyb2xsVmlldyh0aGlzKTsKKwkJZlRhcmdldC0+TW92ZVRvKEJfT1JJR0lOKTsKKyAgICAgICAg
CisJCUFkZENoaWxkKGZUYXJnZXQpOworCQl0YXJnZXRGcmFtZSA9IGZUYXJnZXQtPkZyYW1lKCk7
CisJfSBlbHNlIHsKKwkJLy8gbm8gdGFyZ2V0IHNwZWNpZmllZAorCQl0YXJnZXRGcmFtZSA9IEJv
dW5kcygpOworCQlpZiAoaG9yaXpvbnRhbCkKKwkJCXRhcmdldEZyYW1lLmJvdHRvbSAtPSBCX0hf
U0NST0xMX0JBUl9IRUlHSFQgKyAxOworCQlpZiAodmVydGljYWwpCisJCQl0YXJnZXRGcmFtZS5y
aWdodCAtPSBCX1ZfU0NST0xMX0JBUl9XSURUSCArIDE7CisJfQorICAgIAorCWlmIChob3Jpem9u
dGFsKSB7CisJCUJSZWN0IHJlY3QgPSB0YXJnZXRGcmFtZTsKKwkJcmVjdC50b3AgPSByZWN0LmJv
dHRvbSArIDE7CisJCXJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBCX0hfU0NST0xMX0JBUl9IRUlH
SFQ7CisJCWZIb3Jpem9udGFsU2Nyb2xsQmFyID0gbmV3IEJTY3JvbGxCYXIocmVjdCwgIl9IU0Jf
IiwgZlRhcmdldCwgMCwgMTAwMCwgQl9IT1JJWk9OVEFMKTsKKwkJQWRkQ2hpbGQoZkhvcml6b250
YWxTY3JvbGxCYXIpOworCX0KKyAgICAKKwlpZiAodmVydGljYWwpIHsKKwkJQlJlY3QgcmVjdCA9
IHRhcmdldEZyYW1lOworCQlyZWN0LmxlZnQgPSByZWN0LnJpZ2h0ICsgMTsKKwkJcmVjdC5yaWdo
dCA9IHJlY3QubGVmdCArIEJfVl9TQ1JPTExfQkFSX1dJRFRIOworCQlmVmVydGljYWxTY3JvbGxC
YXIgPSBuZXcgQlNjcm9sbEJhcihyZWN0LCAiX1ZTQl8iLCBmVGFyZ2V0LCAwLCAxMDAwLCBCX1ZF
UlRJQ0FMKTsKKwkJQWRkQ2hpbGQoZlZlcnRpY2FsU2Nyb2xsQmFyKTsKKwl9CisgICAgCisJZlBy
ZXZpb3VzV2lkdGggPSB1aW50MTYoQm91bmRzKCkuV2lkdGgoKSk7CisJZlByZXZpb3VzSGVpZ2h0
ID0gdWludDE2KEJvdW5kcygpLkhlaWdodCgpKTsKK30KKworCitXS1Njcm9sbFZpZXc6OldLU2Ny
b2xsVmlldyhCTWVzc2FnZSAqYXJjaGl2ZSkKKzogQlZpZXcoYXJjaGl2ZSksCitmSGlnaGxpZ2h0
ZWQoZmFsc2UpCit7CisJLy8gSW4gYSBzaGFsbG93IGFyY2hpdmUsIHdlIG1heSBub3QgaGF2ZSBh
IHRhcmdldCBhbnltb3JlLiBXZSBtdXN0CisJLy8gYmUgcHJlcGFyZWQgZm9yIHRoaXMgY2FzZQor
ICAgIAorCS8vIGRvbid0IGNvbmZ1c2Ugb3VyIHNjcm9sbCBiYXJzIHdpdGggb3VyIChldmVudHVh
bCkgdGFyZ2V0CisJaW50MzIgZmlyc3RCYXIgPSAwOworCWlmICghYXJjaGl2ZS0+RmluZEJvb2wo
Il9ub190YXJnZXRfIikpIHsKKwkJZlRhcmdldCA9IENoaWxkQXQoMCk7CisJCWZpcnN0QmFyKys7
CisJfSBlbHNlCisJCWZUYXJnZXQgPSBOVUxMOworICAgIAorCS8vIHNlYXJjaCBmb3Igb3VyIHNj
cm9sbCBiYXJzCisgICAgCisJZkhvcml6b250YWxTY3JvbGxCYXIgPSBOVUxMOworCWZWZXJ0aWNh
bFNjcm9sbEJhciA9IE5VTEw7CisgICAgCisJQlZpZXcgKnZpZXc7CisJd2hpbGUgKCh2aWV3ID0g
Q2hpbGRBdChmaXJzdEJhcisrKSkpIHsKKwkJQlNjcm9sbEJhciAqYmFyID0gZHluYW1pY19jYXN0
PEJTY3JvbGxCYXIgKj4odmlldyk7CisJCWlmICghYmFyKQorCQkJY29udGludWU7CisJCQorCQlp
ZiAoYmFyLT5PcmllbnRhdGlvbigpID09IEJfSE9SSVpPTlRBTCkKKwkJCWZIb3Jpem9udGFsU2Ny
b2xsQmFyID0gYmFyOworCQllbHNlIGlmIChiYXItPk9yaWVudGF0aW9uKCkgPT0gQl9WRVJUSUNB
TCkKKwkJCWZWZXJ0aWNhbFNjcm9sbEJhciA9IGJhcjsKKwl9CisgICAgCisJZlByZXZpb3VzV2lk
dGggPSB1aW50MTYoQm91bmRzKCkuV2lkdGgoKSk7CisJZlByZXZpb3VzSGVpZ2h0ID0gdWludDE2
KEJvdW5kcygpLkhlaWdodCgpKTsKK30KKworCitXS1Njcm9sbFZpZXc6On5XS1Njcm9sbFZpZXco
KQoreworfQorCisKK0JBcmNoaXZhYmxlICoKK1dLU2Nyb2xsVmlldzo6SW5zdGFudGlhdGUoQk1l
c3NhZ2UgKmFyY2hpdmUpCit7CisJaWYgKHZhbGlkYXRlX2luc3RhbnRpYXRpb24oYXJjaGl2ZSwg
IldLU2Nyb2xsVmlldyIpKQorCQlyZXR1cm4gbmV3IFdLU2Nyb2xsVmlldyhhcmNoaXZlKTsKKyAg
ICAKKwlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0dXNfdAorV0tTY3JvbGxWaWV3OjpBcmNoaXZl
KEJNZXNzYWdlICphcmNoaXZlLCBib29sIGRlZXApIGNvbnN0Cit7CisJc3RhdHVzX3Qgc3RhdHVz
ID0gQlZpZXc6OkFyY2hpdmUoYXJjaGl2ZSwgZGVlcCk7CisJaWYgKHN0YXR1cyAhPSBCX09LKQor
CQlyZXR1cm4gc3RhdHVzOworICAgIAorCS8vIElmIHRoaXMgaXMgYSBkZWVwIGFyY2hpdmUsIHRo
ZSBCVmlldyBjbGFzcyB3aWxsIHRha2UgY2FyZQorCS8vIG9mIG91ciBjaGlsZHJlbi4KKyAgICAK
KwlpZiAoc3RhdHVzID09IEJfT0sgJiYgIWZUYXJnZXQpCisJCXN0YXR1cyA9IGFyY2hpdmUtPkFk
ZEJvb2woIl9ub190YXJnZXRfIiwgdHJ1ZSk7CisgICAgCisJLy8gVGhlIGhpZ2hsaWdodGVkIHN0
YXRlIGlzIG5vdCBhcmNoaXZlZCwgYnV0IHNpbmNlIGl0IGlzCisJLy8gdXN1YWxseSAob3Igc2hv
dWxkIGJlKSB1c2VkIHRvIGluZGljYXRlIGZvY3VzLCB0aGlzCisJLy8gaXMgcHJvYmFibHkgdGhl
IHJpZ2h0IHRoaW5nIHRvIGRvLgorICAgIAorCXJldHVybiBzdGF0dXM7Cit9CisKKwordm9pZAor
V0tTY3JvbGxWaWV3OjpBdHRhY2hlZFRvV2luZG93KCkKK3sKKwlCVmlldzo6QXR0YWNoZWRUb1dp
bmRvdygpOworICAgIAorCWlmICgoIWZIb3Jpem9udGFsU2Nyb2xsQmFyICYmICFmVmVydGljYWxT
Y3JvbGxCYXIpCisJCXx8IChmSG9yaXpvbnRhbFNjcm9sbEJhciAmJiBmVmVydGljYWxTY3JvbGxC
YXIpCisJCXx8IFdpbmRvdygpLT5Mb29rKCkgIT0gQl9ET0NVTUVOVF9XSU5ET1dfTE9PSykKKwkJ
cmV0dXJuOworICAgIAorCS8vIElmIHdlIGhhdmUgb25seSBvbmUgYmFyLCB3ZSBuZWVkIHRvIGNo
ZWNrIGlmIHdlIGFyZSBpbiB0aGUKKwkvLyBib3R0b20gcmlnaHQgZWRnZSBvZiBhIHdpbmRvdyB3
aXRoIHRoZSBCX0RPQ1VNRU5UX0xPT0sgdG8KKwkvLyBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIGJh
ciB0byBhY2tub3dsZWRnZSB0aGUgcmVzaXplIGtub2IuCisgICAgCisJQlJlY3QgYm91bmRzID0g
Q29udmVydFRvU2NyZWVuKEJvdW5kcygpKTsKKwlCUmVjdCB3aW5kb3dCb3VuZHMgPSBXaW5kb3co
KS0+RnJhbWUoKTsKKyAgICAKKyAgICAKKwlpZiAoZkhvcml6b250YWxTY3JvbGxCYXIpCisJCWZI
b3Jpem9udGFsU2Nyb2xsQmFyLT5SZXNpemVCeSgtQl9WX1NDUk9MTF9CQVJfV0lEVEgsIDApOwor
CWVsc2UgaWYgKGZWZXJ0aWNhbFNjcm9sbEJhcikKKwkJZlZlcnRpY2FsU2Nyb2xsQmFyLT5SZXNp
emVCeSgwLCAtQl9IX1NDUk9MTF9CQVJfSEVJR0hUKTsKK30KKworCit2b2lkCitXS1Njcm9sbFZp
ZXc6OkRldGFjaGVkRnJvbVdpbmRvdygpCit7CisJQlZpZXc6OkRldGFjaGVkRnJvbVdpbmRvdygp
OworfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmlldzo6QWxsQXR0YWNoZWQoKQoreworCUJWaWV3OjpB
bGxBdHRhY2hlZCgpOworfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmlldzo6QWxsRGV0YWNoZWQoKQor
eworCUJWaWV3OjpBbGxEZXRhY2hlZCgpOworfQorCisKKworQlNjcm9sbEJhciAqCitXS1Njcm9s
bFZpZXc6OlNjcm9sbEJhcihvcmllbnRhdGlvbiBwb3N0dXJlKSBjb25zdAoreworCWlmIChwb3N0
dXJlID09IEJfSE9SSVpPTlRBTCkKKwkJcmV0dXJuIGZIb3Jpem9udGFsU2Nyb2xsQmFyOworICAg
IAorCXJldHVybiBmVmVydGljYWxTY3JvbGxCYXI7Cit9CisKK1Njcm9sbGJhck1vZGUJCQorV0tT
Y3JvbGxWaWV3OjpTY3JvbGxCYXJNb2RlKG9yaWVudGF0aW9uIHBvc3R1cmUpCit7CisgICAgLy8J
cmV0dXJuIFNjcm9sbGJhckF1dG87CisJCisJaWYgKHBvc3R1cmUgPT0gQl9IT1JJWk9OVEFMKXsK
KwkJcHJpbnRmKCIrKysrIEggZ2V0ICVkXG4iLGZIb3Jpem9udGFsU2Nyb2xsQmFyTW9kZSk7CisJ
CXJldHVybiBmSG9yaXpvbnRhbFNjcm9sbEJhck1vZGU7CisJfQorICAgIAorCXByaW50ZigiKysr
KyBWIGdldCAlZFxuIixmVmVydGljYWxTY3JvbGxCYXJNb2RlKTsJCisJcmV0dXJuIGZWZXJ0aWNh
bFNjcm9sbEJhck1vZGU7CQorfQorCit2b2lkCitXS1Njcm9sbFZpZXc6OlNldFNjcm9sbEJhck1v
ZGUob3JpZW50YXRpb24gcG9zdHVyZSwgU2Nyb2xsYmFyTW9kZSBtb2RlKQoreworCWlmIChwb3N0
dXJlID09IEJfSE9SSVpPTlRBTCAmJiBtb2RlICE9IGZIb3Jpem9udGFsU2Nyb2xsQmFyTW9kZSkg
eworICAgICAgICAKKwkJcHJpbnRmKCIrKysrIEggY3VycmVudCAlbGQgd2FudCAlbGRcbiIsZkhv
cml6b250YWxTY3JvbGxCYXJNb2RlLG1vZGUpOworICAgICAgICAKKwkJaWYobW9kZSA9PSBTY3Jv
bGxiYXJBbHdheXNPbiB8fCBtb2RlID09IFNjcm9sbGJhckF1dG8gKSB7CisJCQlwcmludGYoIisr
KysrIEggU2hvdyglZClcbiIsKGludCl0aGlzKTsKKwkJCWlmKGZIb3Jpem9udGFsU2Nyb2xsQmFy
LT5Jc0hpZGRlbigpKXsKKwkJCQlmSG9yaXpvbnRhbFNjcm9sbEJhci0+U2hvdygpOworCQkJCWlm
IChUYXJnZXQoKSkKKwkJCQkJVGFyZ2V0KCktPlJlc2l6ZUJ5KDAsIC1CX0hfU0NST0xMX0JBUl9I
RUlHSFQpOworCQkJfQorCQl9CisJCWlmKG1vZGUgPT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKXsKKwkJ
CXByaW50ZigiKysrKysgSCBIaWRlKCVkKVxuIiwoaW50KXRoaXMpOwkJCisJCQlpZighZkhvcml6
b250YWxTY3JvbGxCYXItPklzSGlkZGVuKCkpeworCQkJCWZIb3Jpem9udGFsU2Nyb2xsQmFyLT5I
aWRlKCk7CisJCQkJaWYgKFRhcmdldCgpKQorCQkJCQlUYXJnZXQoKS0+UmVzaXplQnkoMCwgQl9I
X1NDUk9MTF9CQVJfSEVJR0hUKTsKKwkJCX0KKwkJfQkKKwkJCisJCS8vc2V0IHRoZSBuZXcgbW9k
ZS4KKwkJZkhvcml6b250YWxTY3JvbGxCYXJNb2RlID0gbW9kZTsJCisJfSAKKwkKKwkKKyAgICAK
KwlpZiAocG9zdHVyZSA9PSBCX1ZFUlRJQ0FMICYmIG1vZGUgIT0gZlZlcnRpY2FsU2Nyb2xsQmFy
TW9kZSApIHsKKyAgICAgICAgCisJCXByaW50ZigiKysrKyBWIGN1cnJlbnQgJWxkIHdhbnQgJWxk
XG4iLGZWZXJ0aWNhbFNjcm9sbEJhck1vZGUsbW9kZSk7CisgICAgICAgIAorCQlpZiAobW9kZSA9
PSBTY3JvbGxiYXJBbHdheXNPbiB8fCBtb2RlID09IFNjcm9sbGJhckF1dG8pIHsKKwkJCXByaW50
ZigiKysrKysgViBTaG93KCVkKVxuIiwoaW50KXRoaXMpOworCQkJaWYoZlZlcnRpY2FsU2Nyb2xs
QmFyLT5Jc0hpZGRlbigpKXsKKwkJCQlmVmVydGljYWxTY3JvbGxCYXItPlNob3coKTsKKwkJCQlp
ZiAoVGFyZ2V0KCkpCQkJCisJCQkJCVRhcmdldCgpLT5SZXNpemVCeSgtQl9WX1NDUk9MTF9CQVJf
V0lEVEgsIDApOworCQkJfQorCQl9CisJCWlmIChtb2RlID09IFNjcm9sbGJhckFsd2F5c09mZikg
ewkJCisJCQlwcmludGYoIisrKysrIFYgSGlkZSglZClcbiIsKGludCl0aGlzKTsKKwkJCWlmKCFm
VmVydGljYWxTY3JvbGxCYXItPklzSGlkZGVuKCkpIHsKKwkJCQlmVmVydGljYWxTY3JvbGxCYXIt
PkhpZGUoKTsKKwkJCQlpZiAoVGFyZ2V0KCkpCQkJCisJCQkJCVRhcmdldCgpLT5SZXNpemVCeShC
X1ZfU0NST0xMX0JBUl9XSURUSCwgMCk7CisJCQl9CisJCX0JCisJCQorCQkvL3NldCB0aGUgbmV3
IG1vZGU6CisJCWZWZXJ0aWNhbFNjcm9sbEJhck1vZGUgPSBtb2RlOwkJCQorCX0gCisgICAgCit9
CisKKwordm9pZAorV0tTY3JvbGxWaWV3OjpTZXRUYXJnZXQoQlZpZXcgKnRhcmdldCkKK3sKKwlp
ZiAoZlRhcmdldCA9PSB0YXJnZXQpCisJCXJldHVybjsKKyAgICAKKwlpZiAoZlRhcmdldCkgewor
CQlmVGFyZ2V0LT5UYXJnZXRlZEJ5U2Nyb2xsVmlldyhOVUxMKTsKKwkJUmVtb3ZlQ2hpbGQoZlRh
cmdldCk7CisgICAgICAgIAorCQkvLyB3ZSBhcmUgbm90IHN1cHBvc2VkIHRvIGRlbGV0ZSB0aGUg
dmlldworCX0KKyAgICAKKwlmVGFyZ2V0ID0gdGFyZ2V0OworCWlmIChmSG9yaXpvbnRhbFNjcm9s
bEJhcikKKwkJZkhvcml6b250YWxTY3JvbGxCYXItPlNldFRhcmdldCh0YXJnZXQpOworCWlmIChm
VmVydGljYWxTY3JvbGxCYXIpCisJCWZWZXJ0aWNhbFNjcm9sbEJhci0+U2V0VGFyZ2V0KHRhcmdl
dCk7CisgICAgCisJaWYgKHRhcmdldCkgeworCQkvL3RhcmdldC0+VGFyZ2V0ZWRCeVNjcm9sbFZp
ZXcodGhpcyk7CisgICAgICAgIAorCQlBZGRDaGlsZCh0YXJnZXQsIENoaWxkQXQoMCkpOworICAg
ICAgICAvLyBUaGlzIHdheSwgd2UgYXJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIHRhcmdldCB3aWxs
CisgICAgICAgIC8vIGJlIGFkZGVkIHRvcCBtb3N0IGluIHRoZSBsaXN0ICh3aGljaCBpcyBpbXBv
cnRhbnQKKyAgICAgICAgLy8gZm9yIHVuYXJjaGl2aW5nKQorCX0KK30KKworCitCVmlldyAqCitX
S1Njcm9sbFZpZXc6OlRhcmdldCgpIGNvbnN0Cit7CisJcmV0dXJuIGZUYXJnZXQ7Cit9CisKKwor
dm9pZAorV0tTY3JvbGxWaWV3OjpNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2UgKm1lc3NhZ2UpCit7
CisJc3dpdGNoIChtZXNzYWdlLT53aGF0KSB7CisJCWRlZmF1bHQ6CisJCQlCVmlldzo6TWVzc2Fn
ZVJlY2VpdmVkKG1lc3NhZ2UpOworCX0KK30KKworCit2b2lkCitXS1Njcm9sbFZpZXc6Ok1vdXNl
RG93bihCUG9pbnQgcG9pbnQpCit7CisJQlZpZXc6Ok1vdXNlRG93bihwb2ludCk7Cit9CisKKwor
dm9pZAorV0tTY3JvbGxWaWV3OjpNb3VzZVVwKEJQb2ludCBwb2ludCkKK3sKKwlCVmlldzo6TW91
c2VVcChwb2ludCk7Cit9CisKKwordm9pZAorV0tTY3JvbGxWaWV3OjpNb3VzZU1vdmVkKEJQb2lu
dCBwb2ludCwgdWludDMyIGNvZGUsIGNvbnN0IEJNZXNzYWdlICpkcmFnTWVzc2FnZSkKK3sKKwlC
Vmlldzo6TW91c2VNb3ZlZChwb2ludCwgY29kZSwgZHJhZ01lc3NhZ2UpOworfQorCisKK3ZvaWQK
K1dLU2Nyb2xsVmlldzo6RnJhbWVNb3ZlZChCUG9pbnQgcG9zaXRpb24pCit7CisJQlZpZXc6OkZy
YW1lTW92ZWQocG9zaXRpb24pOworfQorCisKK3ZvaWQgCitXS1Njcm9sbFZpZXc6OlJlc2l6ZVRv
UHJlZmVycmVkKCkKK3sKKwlCVmlldzo6UmVzaXplVG9QcmVmZXJyZWQoKTsKK30KKworCit2b2lk
IAorV0tTY3JvbGxWaWV3OjpHZXRQcmVmZXJyZWRTaXplKGZsb2F0ICpfd2lkdGgsIGZsb2F0ICpf
aGVpZ2h0KQoreworCUJSZWN0IGZyYW1lID0gQ2FsY0ZyYW1lKGZUYXJnZXQsIGZIb3Jpem9udGFs
U2Nyb2xsQmFyLCBmVmVydGljYWxTY3JvbGxCYXIpOworICAgIAorCWlmIChmVGFyZ2V0KSB7CisJ
CWZsb2F0IHdpZHRoLCBoZWlnaHQ7CisJCWZUYXJnZXQtPkdldFByZWZlcnJlZFNpemUoJndpZHRo
LCAmaGVpZ2h0KTsKKyAgICAgICAgCisJCWZyYW1lLnJpZ2h0ICs9IHdpZHRoIC0gZlRhcmdldC0+
RnJhbWUoKS5XaWR0aCgpOworCQlmcmFtZS5ib3R0b20gKz0gaGVpZ2h0IC0gZlRhcmdldC0+RnJh
bWUoKS5IZWlnaHQoKTsKKwl9CisgICAgCisJaWYgKF93aWR0aCkKKwkJKl93aWR0aCA9IGZyYW1l
LldpZHRoKCk7CisJaWYgKF9oZWlnaHQpCisJCSpfaGVpZ2h0ID0gZnJhbWUuSGVpZ2h0KCk7Cit9
CisKKworCisKKy8qKiBUaGlzIHN0YXRpYyBtZXRob2QgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhl
IGZyYW1lIHRoYXQgdGhlCisgKglTY3JvbGxWaWV3IHdpbGwgY292ZXIgZGVwZW5kaW5nIG9uIHRo
ZSBmcmFtZSBvZiBpdHMgdGFyZ2V0CisgKgkKKyAqCUl0IGlzIHVzZWQgaW4gdGhlIGNvbnN0cnVj
dG9yIGFuZCBhdCBvdGhlciBwbGFjZXMuCisgKi8KKworQlJlY3QKK1dLU2Nyb2xsVmlldzo6Q2Fs
Y0ZyYW1lKEJWaWV3ICp0YXJnZXQsIGJvb2wgaG9yaXpvbnRhbCwgYm9vbCB2ZXJ0aWNhbCkKK3sK
KwlCUmVjdCBmcmFtZSA9IHRhcmdldCA/IHRhcmdldC0+RnJhbWUoKSA6IEJSZWN0KDAsIDAsIDgw
LCA4MCk7CisgICAgCisJaWYgKHZlcnRpY2FsKQorCQlmcmFtZS5yaWdodCArPSBCX1ZfU0NST0xM
X0JBUl9XSURUSDsKKwlpZiAoaG9yaXpvbnRhbCkKKwkJZnJhbWUuYm90dG9tICs9IEJfSF9TQ1JP
TExfQkFSX0hFSUdIVDsKKyAgICAKKwkKKyAgICAKKwlpZiAodmVydGljYWwpCisgICAgICAgIGZy
YW1lLnJpZ2h0Kys7CisJaWYgKGhvcml6b250YWwpCisgICAgICAgIGZyYW1lLmJvdHRvbSsrOwor
CQorCXJldHVybiBmcmFtZTsKK30KKworCisKKworLyoqIFRoaXMgbWV0aG9kIGNoYW5nZXMgdGhl
ICJmbGFncyIgYXJndW1lbnQgYXMgcGFzc2VkIG9uIHRvCisgKgl0aGUgQlZpZXcgY29uc3RydWN0
b3IuCisgKi8KKworaW50MzIKK1dLU2Nyb2xsVmlldzo6TW9kaWZ5RmxhZ3MoaW50MzIgZmxhZ3Mp
Cit7CisJcmV0dXJuIGZsYWdzICYgfihCX1dJTExfRFJBVyB8IEJfRlJBTUVfRVZFTlRTIHwgQl9G
VUxMX1VQREFURV9PTl9SRVNJWkUpOworfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmlldzo6V2luZG93
QWN0aXZhdGVkKGJvb2wgYWN0aXZlKQoreworCWlmIChmSGlnaGxpZ2h0ZWQpCisJCUludmFsaWRh
dGUoKTsKKyAgICAKKwlCVmlldzo6V2luZG93QWN0aXZhdGVkKGFjdGl2ZSk7Cit9CisKKwordm9p
ZCAKK1dLU2Nyb2xsVmlldzo6TWFrZUZvY3VzKGJvb2wgc3RhdGUpCit7CisJQlZpZXc6Ok1ha2VG
b2N1cyhzdGF0ZSk7Cit9CisKKworQkhhbmRsZXIgKgorV0tTY3JvbGxWaWV3OjpSZXNvbHZlU3Bl
Y2lmaWVyKEJNZXNzYWdlICptc2csIGludDMyIGluZGV4LCBCTWVzc2FnZSAqc3BlY2lmaWVyLCBp
bnQzMiBmb3JtLCBjb25zdCBjaGFyICpwcm9wZXJ0eSkKK3sKKwlyZXR1cm4gQlZpZXc6OlJlc29s
dmVTcGVjaWZpZXIobXNnLCBpbmRleCwgc3BlY2lmaWVyLCBmb3JtLCBwcm9wZXJ0eSk7Cit9CisK
Kworc3RhdHVzX3QgCitXS1Njcm9sbFZpZXc6OkdldFN1cHBvcnRlZFN1aXRlcyhCTWVzc2FnZSAq
ZGF0YSkKK3sKKwlyZXR1cm4gQlZpZXc6OkdldFN1cHBvcnRlZFN1aXRlcyhkYXRhKTsKK30KKwor
CitCU2l6ZQorV0tTY3JvbGxWaWV3OjpNaW5TaXplKCkKK3sKKyAgICAvLyBUT0RPOiBUaGlzIGlz
IG5vdCB5ZXQgY29ycmVjdC4KKwlCU2l6ZSBzaXplID0gKGZUYXJnZXQgPyBmVGFyZ2V0LT5NaW5T
aXplKCkgOiBCU2l6ZSgtMSwgLTEpKTsKKyAgICAKKwlpZiAoZlZlcnRpY2FsU2Nyb2xsQmFyKQor
CQlzaXplLndpZHRoICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOworCWlmIChmSG9yaXpvbnRhbFNj
cm9sbEJhcikKKwkJc2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9MTF9CQVJfSEVJR0hUOworICAgIAor
CXJldHVybiBCTGF5b3V0VXRpbHM6OkNvbXBvc2VTaXplKEV4cGxpY2l0TWluU2l6ZSgpLCBzaXpl
KTsKK30KKworCitCU2l6ZQorV0tTY3JvbGxWaWV3OjpQcmVmZXJyZWRTaXplKCkKK3sKKyAgICAv
LyBUT0RPOiBUaGlzIGlzIG5vdCB5ZXQgY29ycmVjdC4KKwlCU2l6ZSBzaXplID0gKGZUYXJnZXQg
PyBmVGFyZ2V0LT5QcmVmZXJyZWRTaXplKCkgOiBCU2l6ZSgtMSwgLTEpKTsKKyAgICAKKwlpZiAo
ZlZlcnRpY2FsU2Nyb2xsQmFyKQorCQlzaXplLndpZHRoICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRI
OworCWlmIChmSG9yaXpvbnRhbFNjcm9sbEJhcikKKwkJc2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9M
TF9CQVJfSEVJR0hUOworICAgIAorCXJldHVybiBCTGF5b3V0VXRpbHM6OkNvbXBvc2VTaXplKEV4
cGxpY2l0TWluU2l6ZSgpLCBzaXplKTsKK30KKworCitzdGF0dXNfdAorV0tTY3JvbGxWaWV3OjpQ
ZXJmb3JtKHBlcmZvcm1fY29kZSBkLCB2b2lkICphcmcpCit7CisJcmV0dXJuIEJWaWV3OjpQZXJm
b3JtKGQsIGFyZyk7Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tT
Y3JvbGxWaWV3LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmYwMGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oCkBAIC0wLDAgKzEsODQgQEAK
Ky8qCisgKiogQ29weXJpZ2h0IDIwMDQsIE9wZW5CZU9TLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgT3BlbkJlT1MgTGljZW5zZS4K
KyAqLworI2lmbmRlZiBfV0tfU0NST0xMX1ZJRVdfSAorI2RlZmluZSBfV0tfU0NST0xMX1ZJRVdf
SAorCisvKioJVGhlIFdLU2Nyb2xsVmlldyBpcyBhIGNvbnZlbmllbmNlIGNsYXNzIHRvIGFkZCBh
IHNjcm9sbGluZworICoJbWVjaGFuaXNtIHRvIHRoZSB0YXJnZXQgdmlldy4KKyAqLworCisjaW5j
bHVkZSA8U2Nyb2xsQmFyLmg+CisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFdLU2Nyb2xsVmlldyA6IHB1YmxpYyBCVmlldyB7Citw
dWJsaWM6CisgICAgV0tTY3JvbGxWaWV3KGNvbnN0IGNoYXIgKm5hbWUsIEJWaWV3ICp0YXJnZXQs
CisgICAgICAgICAgICAgICAgIHVpbnQzMiByZXNpemluZ01vZGUgPSBCX0ZPTExPV19MRUZUIHwg
Ql9GT0xMT1dfVE9QLAorICAgICAgICAgICAgICAgICB1aW50MzIgZmxhZ3MgPSAwKTsKKyAgICBX
S1Njcm9sbFZpZXcoQk1lc3NhZ2UgKmFyY2hpdmUpOworICAgIHZpcnR1YWwgfldLU2Nyb2xsVmll
dygpOworICAgIAorICAgIHN0YXRpYyBCQXJjaGl2YWJsZQkqSW5zdGFudGlhdGUoQk1lc3NhZ2Ug
KmFyY2hpdmUpOworICAgIHZpcnR1YWwgc3RhdHVzX3QJQXJjaGl2ZShCTWVzc2FnZSAqYXJjaGl2
ZSwgYm9vbCBkZWVwID0gdHJ1ZSkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCB2b2lkCQlBdHRh
Y2hlZFRvV2luZG93KCk7CisgICAgCisgICAgQlNjcm9sbEJhcgkJCSpTY3JvbGxCYXIob3JpZW50
YXRpb24gcG9zdHVyZSkgY29uc3Q7CisgICAgU2Nyb2xsYmFyTW9kZQkJU2Nyb2xsQmFyTW9kZShv
cmllbnRhdGlvbiBwb3N0dXJlKTsKKyAgICB2b2lkCQkJCVNldFNjcm9sbEJhck1vZGUob3JpZW50
YXRpb24gcG9zdHVyZSwgU2Nyb2xsYmFyTW9kZSBtb2RlKTsKKyAgICAKKyAgICB2b2lkCQkJCVNl
dFRhcmdldChCVmlldyAqdGFyZ2V0KTsKKyAgICBCVmlldwkJCQkqVGFyZ2V0KCkgY29uc3Q7Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkCQlNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2UgKm1lc3NhZ2Up
OworICAgIHZpcnR1YWwgdm9pZAkJTW91c2VEb3duKEJQb2ludCBwb2ludCk7CisgICAgCisgICAg
dmlydHVhbCB2b2lkCQlXaW5kb3dBY3RpdmF0ZWQoYm9vbCBhY3RpdmUpOworICAgIHZpcnR1YWwJ
dm9pZAkJTW91c2VVcChCUG9pbnQgcG9pbnQpOworICAgIHZpcnR1YWwJdm9pZAkJTW91c2VNb3Zl
ZChCUG9pbnQgcG9pbnQsIHVpbnQzMiBjb2RlLCBjb25zdCBCTWVzc2FnZSAqbXNnKTsKKyAgICAK
KyAgICB2aXJ0dWFsCXZvaWQJCURldGFjaGVkRnJvbVdpbmRvdygpOworICAgIHZpcnR1YWwJdm9p
ZAkJQWxsQXR0YWNoZWQoKTsKKyAgICB2aXJ0dWFsCXZvaWQJCUFsbERldGFjaGVkKCk7CisgICAg
CisgICAgdmlydHVhbAl2b2lkCQlGcmFtZU1vdmVkKEJQb2ludCBwb3NpdGlvbik7CisgICAgCisg
ICAgdmlydHVhbCBCSGFuZGxlcgkqUmVzb2x2ZVNwZWNpZmllcihCTWVzc2FnZSAqbWVzc2FnZSwg
aW50MzIgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
TWVzc2FnZSAqc3BlY2lmaWVyLCBpbnQzMiBmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvcGVydHkpOworICAgIAorICAgIHZpcnR1
YWwgdm9pZAkJUmVzaXplVG9QcmVmZXJyZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQJCUdldFByZWZl
cnJlZFNpemUoZmxvYXQgKl93aWR0aCwgZmxvYXQgKl9oZWlnaHQpOworICAgIHZpcnR1YWwgdm9p
ZAkJTWFrZUZvY3VzKGJvb2wgc3RhdGUgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190CUdl
dFN1cHBvcnRlZFN1aXRlcyhCTWVzc2FnZSAqZGF0YSk7CisgICAgCisgICAgdmlydHVhbAlCU2l6
ZQkJTWluU2l6ZSgpOworICAgIHZpcnR1YWwJQlNpemUJCVByZWZlcnJlZFNpemUoKTsKKyAgICAK
KyAgICAvLyBwcml2YXRlIG9yIHJlc2VydmVkIG1ldGhvZHMgYXJlIGZvbGxvd2luZworICAgIAor
ICAgIHZpcnR1YWwgc3RhdHVzX3QJUGVyZm9ybShwZXJmb3JtX2NvZGUgZCwgdm9pZCAqYXJnKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJWaWV3OworICAgIAorICAgIHN0YXRp
YyBCUmVjdAkJQ2FsY0ZyYW1lKEJWaWV3ICp0YXJnZXQsIGJvb2wgaCwgYm9vbCB2KTsKKyAgICBz
dGF0aWMgaW50MzIJCU1vZGlmeUZsYWdzKGludDMyIGZsYWdzKTsKKyAgICAKKyAgICBCVmlldwkJ
CQkqZlRhcmdldDsKKyAgICBCU2Nyb2xsQmFyCQkJKmZIb3Jpem9udGFsU2Nyb2xsQmFyOworICAg
IEJTY3JvbGxCYXIJCQkqZlZlcnRpY2FsU2Nyb2xsQmFyOworICAgIHVpbnQxNgkJCQlmUHJldmlv
dXNXaWR0aDsKKyAgICB1aW50MTYJCQkJZlByZXZpb3VzSGVpZ2h0OworICAgIGJvb2wJCQkJZkhp
Z2hsaWdodGVkOworICAgIAorICAgIFNjcm9sbGJhck1vZGUJCWZWZXJ0aWNhbFNjcm9sbEJhck1v
ZGU7CisgICAgU2Nyb2xsYmFyTW9kZQkJZkhvcml6b250YWxTY3JvbGxCYXJNb2RlOwkJCit9Owor
CisjZW5kaWYgIC8qIF9XS19TQ1JPTExfVklFV19IICovCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9X
aWRnZXRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNzIx
NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3Uu
Y3BwCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNp
bmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8
Q29udHJvbC5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1dpZGdldDo6V2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKK3sKKyAgICBpbml0KHdpZGdl
dCk7Cit9CisKK1dpZGdldDo6fldpZGdldCgpCit7Cit9CisKK0ludFJlY3QgV2lkZ2V0OjpmcmFt
ZVJlY3QoKSBjb25zdAoreworICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKworICAgIEludFJlY3QgcmVjdDsKKyAgICBpZihwbGF0Zm9ybVdpZGdl
dCgpLT5Mb2NrTG9vcGVyKCkpeworICAgICAgICByZWN0ID0gcGxhdGZvcm1XaWRnZXQoKS0+RnJh
bWUoKTsKKyAgICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+VW5sb2NrTG9vcGVyKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChmcmFtZVJlY3QoKSAhPSByZWN0KXsKKyAgICAgICAgcGxhdGZvcm1X
aWRnZXQoKS0+TW92ZVRvKHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgICAgIHBsYXRmb3JtV2lk
Z2V0KCktPlJlc2l6ZVRvKHJlY3Qud2lkdGgoKSAtIDEsIHJlY3QuaGVpZ2h0KCkgLSAxKTsKKwl9
Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCit7CisgICAgaWYgKHBsYXRmb3JtV2lkZ2V0
KCkpCisgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPk1ha2VGb2N1cygpOworfQorCit2b2lkIFdp
ZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQoreworICAgIGlmIChwbGF0Zm9y
bVdpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT5TZXRWaWV3Q3Vyc29yKGN1cnNv
ci5pbXBsKCkpOworfQorCit2b2lkIFdpZGdldDo6c2hvdygpCit7CisgICAgaWYgKHBsYXRmb3Jt
V2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPlNob3coKTsKK30KKwordm9pZCBX
aWRnZXQ6OmhpZGUoKQoreworICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBwbGF0
Zm9ybVdpZGdldCgpLT5IaWRlKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0Nv
bnRleHQqIHAsIEludFJlY3QgY29uc3QmIHIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBwbGF0Zm9ybVdpZGdldCgpLT5JbnZhbGlkYXRlKHJlY3QpOworICAgIHBsYXRm
b3JtV2lkZ2V0KCktPkZsdXNoKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAK
MS42LjMuMwoK
</data>
<flag name="review"
          id="16583"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32060</attachid>
            <date>2009-06-30 06:06:02 -0700</date>
            <delta_ts>2009-07-02 14:41:04 -0700</delta_ts>
            <desc>Patch to add WebCore support.</desc>
            <filename>Added-WebCore-Support-for-the-Haiku-port.patch</filename>
            <type>text/plain</type>
            <size>103060</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBjMDcxZTFlYzk4OTIyMmQyYWRmMzc5ZjI1N2NlOTI0MzBhMjI2YzYwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTU6MDU6MDMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBXZWJDb3JlIFN1cHBvcnQgZm9yIHRoZSBIYWlrdSBwb3J0LgogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NjIwCgotLS0KIFdlYktpdC9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI2OSArKysrKysrCiBXZWJLaXQvaGFp
a3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwICB8ICAzNTMgKysrKysrKysr
CiBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaCAgICB8ICAx
NDEgKysrKwogLi4uL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuY3BwICAg
ICAgfCAgIDc5ICsrCiAuLi4vaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRI
YWlrdS5oICB8ICAgNTIgKysKIFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50
SGFpa3UuY3BwICAgIHwgICA3NCArKwogV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRIYWlrdS5oICAgICAgfCAgIDQ2ICsrCiBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50SGFpa3UuY3BwICB8ICA0NzkgKysrKysrKysrKysrCiBXZWJLaXQvaGFpa3Uv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuaCAgICB8ICAxMjQgKysrKwogLi4uL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwICAgICAgfCAgNzY3ICsrKysr
KysrKysrKysrKysrKysrCiAuLi4vaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRIYWlrdS5oICB8ICAyMzQgKysrKysrCiAuLi4vaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50SGFpa3UuY3BwICB8ICAxMTkgKysrCiBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaCB8ICAgNzEgKysKIDEzIGZpbGVzIGNoYW5nZWQsIDI4
MDggaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJL
aXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1l
bnVDbGllbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvaGFpa3UvV2ViQ29y
ZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRIYWlrdS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
S2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEhhaWt1LmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudEhhaWt1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvaGFpa3UvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYktpdC9oYWlrdS9XZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oCgpkaWZmIC0tZ2l0IGEvV2ViS2l0L0NoYW5nZUxv
ZyBiL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjA3YTc1Yy4uZTk2ZDM4NiAxMDA2NDQKLS0tIGEv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcyIEBA
CisyMDA5LTA2LTMwICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIFdlYkNv
cmUgU3VwcG9ydCBmb3IgdGhlIEhhaWt1IHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjYyMAorCisgICAgICAgICogaGFpa3UvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudEhhaWt1OjpDaHJvbWVDbGllbnRIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRIYWlrdTo6fkNocm9tZUNsaWVudEhhaWt1KToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudEhhaWt1OjpjaHJvbWVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50SGFpa3U6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lQ2xpZW50SGFpa3U6OndpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50SGFpa3U6OnBhZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1
OjpzY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6Zm9j
dXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnVuZm9jdXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OmNhblRha2VGb2N1cyk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6dGFrZUZvY3VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudEhhaWt1OjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50SGFpa3U6OmNyZWF0ZU1vZGFsRGlhbG9nKToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudEhhaWt1OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVu
dEhhaWt1OjpjYW5SdW5Nb2RhbCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlr
dTo6cnVuTW9kYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnNldFRv
b2xiYXJzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6dG9v
bGJhcnNWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZXRT
dGF0dXNiYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojpz
dGF0dXNiYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojpz
ZXRTY3JvbGxiYXJzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlr
dTo6c2Nyb2xsYmFyc1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFp
a3U6OnNldE1lbnViYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhh
aWt1OjptZW51YmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlr
dTo6c2V0UmVzaXphYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojph
ZGRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1
OjpjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lQ2xpZW50SGFpa3U6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6Y2xvc2VXaW5kb3dTb29uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpydW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZXRTdGF0dXNiYXJUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojp0YWJzVG9MaW5rcyk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6d2luZG93UmVzaXplclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnJlcGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWVDbGllbnRIYWlrdTo6c2NyZWVuVG9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50SGFpa3U6OndpbmRvd1RvU2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudEhhaWt1OjpwbGF0Zm9ybVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWVDbGllbnRIYWlrdTo6Y29udGVudHNTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsUmVjdEludG9WaWV3KToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudEhhaWt1OjphZGRUb0RpcnR5UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudEhhaWt1OjpzY3JvbGxCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnVwZGF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnNldFRvb2xUaXApOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnByaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
ZUNsaWVudEhhaWt1OjpleGNlZWRlZERhdGFiYXNlUXVvdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50SGFpa3U6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6cnVuT3BlblBhbmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZXRDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OmZvcm1TdGF0ZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6Y3JlYXRlSFRNTFBhcnNlclF1aXJrcyk6Cisg
ICAgICAgICogaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaDogQWRkZWQu
CisgICAgICAgICogaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRIYWlrdS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDbGllbnRIYWlrdTo6Y29u
dGV4dE1lbnVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDbGllbnRI
YWlrdTo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dE1lbnVDbGllbnRIYWlrdTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDbGllbnRIYWlrdTo6ZG93bmxvYWRVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDbGllbnRIYWlrdTo6bG9va1VwSW5EaWN0aW9uYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50SGFpa3U6OnNwZWFrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50SGFpa3U6OnN0b3BTcGVha2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNsaWVudEhhaWt1OjpzZWFyY2hXaXRoR29vZ2xlKToK
KyAgICAgICAgKiBoYWlrdS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEhhaWt1Lmg6
IEFkZGVkLgorICAgICAgICAqIGhhaWt1L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRIYWlrdS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEhhaWt1OjphY3Rpb25NYXNr
Rm9yRHJhZyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ2xpZW50SGFpa3U6OndpbGxQZXJmb3Jt
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRIYWlr
dTo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVu
dEhhaWt1OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdDbGllbnRIYWlrdTo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdDbGllbnRIYWlrdTo6c3RhcnREcmFnKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdDbGllbnRIYWlrdTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgICogaGFp
a3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEhhaWt1Lmg6IEFkZGVkLgorICAgICAgICAqIGhh
aWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6RWRpdG9yQ2xpZW50SGFpa3UpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnNldFBhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnBhZ2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yQ2xpZW50SGFpa3U6OnNob3VsZERlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvckNsaWVudEhhaWt1OjpzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmlzU2VsZWN0VHJhaWxpbmdXaGl0
ZXNwYWNlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Q2xpZW50SGFpa3U6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvckNsaWVudEhhaWt1Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnRvZ2dsZUdyYW1tYXJDaGVja2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c3BlbGxDaGVja2VyRG9jdW1l
bnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmlzRWRpdGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnNob3VsZEJlZ2luRWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkRW5kRWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkSW5zZXJ0Tm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkSW5zZXJ0VGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxk
QXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxk
TW92ZVJhbmdlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFp
a3U6OmRpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlr
dTo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNs
aWVudEhhaWt1OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvckNsaWVudEhhaWt1OjpkaWRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudEhhaWt1OjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6ZGlkU2V0U2VsZWN0aW9uVHlwZXNGb3JQYXN0
ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpyZWdpc3RlckNv
bW1hbmRGb3JVbmRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpyZWdp
c3RlckNvbW1hbmRGb3JSZWRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1
OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGll
bnRIYWlrdTo6Y2FuVW5kbyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6
Y2FuUmVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6dW5kbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6cmVkbyk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnRleHRGaWVsZERpZEVu
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnRleHREaWRD
aGFuZ2VJblRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6
ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNs
aWVudEhhaWt1Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvckNsaWVudEhhaWt1Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYSk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6bGVhcm5Xb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmdldEF1dG9Db3JyZWN0U3VnZ2Vz
dGlvbkZvck1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhh
aWt1OjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGll
bnRIYWlrdTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvckNsaWVudEhhaWt1Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpzaG93U3BlbGxpbmdV
SSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6c3BlbGxpbmdVSUlzU2hv
d2luZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6Z2V0R3Vlc3Nlc0Zv
cldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnNldElucHV0TWV0
aG9kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmlzRWRpdGlu
Zyk6CisgICAgICAgICogaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuaDog
QWRkZWQuCisgICAgICAgICogaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpmcmFtZUxvYWRlckRlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpoYXNXZWJWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6Omhhc0ZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEhhaWt1Ojpwcml2YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6Om1ha2VEb2N1bWVudFZpZXcpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6bWFrZVJlcHJlc2VudGF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZvcmNlTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZvcmNlTGF5b3V0Rm9yTm9u
SFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRDb3Bp
ZXNPblNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpk
ZXRhY2hlZEZyb21QYXJlbnQyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRldGFjaGVkRnJvbVBhcmVudDMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGV0YWNoZWRGcm9tUGFyZW50NCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudEhhaWt1Ojphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFdpbGxT
ZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZENh
bmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0
Y2hEaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRpc3BhdGNoRGlkRmFpbExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRM
b2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNs
aWVudFJlZGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoV2lsbENsb3NlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhh
aWt1OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlk
RmFpbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmlyc3RMYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlzcGF0Y2hDcmVhdGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmRpc3BhdGNoU2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjYW5jZWxQb2xpY3lDaGVjayk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFVuYWJsZVRvSW1w
bGVtZW50UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRNYWluRG9jdW1lbnRF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjbGVhclVu
YXJjaGl2aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6cG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmlj
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cG9zdFBy
b2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzdGFydERvd25sb2FkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OndpbGxDaGFuZ2VUaXRsZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaWRDaGFuZ2VUaXRsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpjb21taXR0ZWRMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZpbmlzaGVkTG9hZGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpmaW5hbFNldHVwRm9y
UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp1cGRh
dGVHbG9iYWxIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnVwZGF0ZUdsb2JhbEhpc3RvcnlGb3JTdGFuZGFyZExv
YWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlR2xv
YmFsSGlzdG9yeUZvclJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dEhhaWt1OjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6Y2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6YmxvY2tlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbm5vdFNob3dVUkxFcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjppbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJv
cik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjYW5ub3RTaG93
TUlNRVR5cGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpmaWxlRG9lc05vdEV4aXN0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6cGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcik6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzaG91bGRGYWxsQmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OndpbGxVc2VBcmNoaXZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmlzQXJjaGl2ZUxvYWRQZW5kaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbmNlbFBlbmRp
bmdBcmNoaXZlTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpjbGVhckFyY2hpdmVkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmNhbkhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6Y2FuU2hvd01JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmdlbmVyYXRlZE1JTUVU
eXBlRm9yVVJMU2NoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OmZyYW1lTG9hZENvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpzYXZlVmlld1N0YXRlVG9JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OnJlc3RvcmVWaWV3U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaWRGaW5pc2hMb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnByZXBhcmVGb3JEYXRhU291cmNl
UmVwbGFjZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
Y3JlYXRlRG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6c2V0VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6dXNlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OnNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp0cmFuc2l0aW9u
VG9Db21taXR0ZWRGb3JOZXdQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmNhbkNhY2hlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudEhhaWt1Ojpkb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dEhhaWt1OjpjcmVhdGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dEhhaWt1OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpvYmplY3RDb250ZW50VHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpvdmVycmlkZU1lZGlhVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp3aW5kb3dPYmplY3RDbGVh
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZFBlcmZv
cm1GaXJzdE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRvY3VtZW50RWxlbWVudEF2YWlsYWJsZSk6CisgICAgICAg
ICogaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6On5GcmFtZUxvYWRlckNs
aWVudEhhaWt1KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNl
dEZyYW1lKToKKyAgICAgICAgKiBoYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50SGFpa3U6
Omluc3BlY3RvckRlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRI
YWlrdTo6Y3JlYXRlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRIYWlr
dTo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGll
bnRIYWlrdTo6aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVu
dEhhaWt1OjpzaG93V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudEhh
aWt1OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRIYWlr
dTo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudEhhaWt1
OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50SGFpa3U6
OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNs
aWVudEhhaWt1OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50
SGFpa3U6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50
SGFpa3U6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2xpZW50SGFpa3U6OnBvcHVsYXRlU2V0dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDbGllbnRIYWlrdTo6c3RvcmVTZXR0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNsaWVudEhhaWt1OjpyZW1vdmVTZXR0aW5nKToKKyAgICAgICAgKiBoYWlrdS9XZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oOiBBZGRlZC4KKwogMjAwOS0wNi0wOCAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IE1h
cmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRIYWlrdS5jcHAgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNjQ0MWIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
SGFpa3UuY3BwCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnRIYWlrdS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorCisjaW5jbHVkZSA8QWxlcnQuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworCituYW1l
c3BhY2UgV2ViQ29yZQoreworCitDaHJvbWVDbGllbnRIYWlrdTo6Q2hyb21lQ2xpZW50SGFpa3Uo
KQoreworfQorCitDaHJvbWVDbGllbnRIYWlrdTo6fkNocm9tZUNsaWVudEhhaWt1KCkKK3sKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Y2hyb21lRGVzdHJveWVkKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1OjpzZXRXaW5kb3dSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRS
ZWN0IENocm9tZUNsaWVudEhhaWt1Ojp3aW5kb3dSZWN0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgMjAwLCAyMDApOworfQorCitGbG9hdFJl
Y3QgQ2hyb21lQ2xpZW50SGFpa3U6OnBhZ2VSZWN0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgMjAwLCAyMDApOworfQorCitmbG9hdCBDaHJv
bWVDbGllbnRIYWlrdTo6c2NhbGVGYWN0b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIDEuMDsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Zm9jdXMoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnVuZm9j
dXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFp
a3U6OmNhblRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1Ojp0YWtlRm9j
dXMoRm9jdXNEaXJlY3Rpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFnZSog
Q2hyb21lQ2xpZW50SGFpa3U6OmNyZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJl
cXVlc3QmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFnZSogQ2hyb21lQ2xpZW50SGFpa3U6OmNy
ZWF0ZU1vZGFsRGlhbG9nKEZyYW1lKiwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDaHJvbWVDbGllbnRI
YWlrdTo6c2hvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBDaHJvbWVD
bGllbnRIYWlrdTo6Y2FuUnVuTW9kYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1OjpydW5Nb2RhbCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0
VG9vbGJhcnNWaXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9v
bCBDaHJvbWVDbGllbnRIYWlrdTo6dG9vbGJhcnNWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6
c2V0U3RhdHVzYmFyVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K2Jvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnN0YXR1c2JhclZpc2libGUoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEhh
aWt1OjpzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnNjcm9sbGJhcnNWaXNpYmxlKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENocm9tZUNs
aWVudEhhaWt1OjpzZXRNZW51YmFyVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFpa3U6Om1lbnViYXJWaXNpYmxlKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDaHJvbWVD
bGllbnRIYWlrdTo6c2V0UmVzaXphYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6YWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQorewor
ICAgIHByaW50ZigiTUVTU0FHRSAlczolaSAlc1xuIiwgQlN0cmluZyhzb3VyY2VJRCkuU3RyaW5n
KCksIGxpbmVOdW1iZXIsIEJTdHJpbmcobWVzc2FnZSkuU3RyaW5nKCkpOworfQorCit2b2lkIENo
cm9tZUNsaWVudEhhaWt1OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQpCit7CisgICAgcHJpbnRmKCJNRVNTQUdFICVzOiVpICVzXG4iLCBCU3RyaW5n
KHNvdXJjZUlEKS5TdHJpbmcoKSwgbGluZU51bWJlciwgQlN0cmluZyhtZXNzYWdlKS5TdHJpbmco
KSk7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OmNhblJ1bkJlZm9yZVVubG9hZENvbmZp
cm1QYW5lbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Y2xv
c2VXaW5kb3dTb29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9t
ZUNsaWVudEhhaWt1OjpydW5KYXZhU2NyaXB0QWxlcnQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1z
ZykKK3sKKyAgICBwcmludGYoIkNocm9tZUNsaWVudEhhaWt1OjpydW5KYXZhU2NyaXB0QWxlcnQo
KVxuIik7CisgICAgQkFsZXJ0KiBhbGVydCA9IG5ldyBCQWxlcnQoIkphdmFTY3JpcHQiLCBCU3Ry
aW5nKG1zZykuU3RyaW5nKCksICJPSyIpOworICAgIGFsZXJ0LT5HbygpOworfQorCitib29sIENo
cm9tZUNsaWVudEhhaWt1OjpydW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgbXNnKQoreworICAgIHByaW50ZigiQ2hyb21lQ2xpZW50SGFpa3U6OnJ1bkphdmFTY3JpcHRD
b25maXJtKClcbiIpOworICAgIEJBbGVydCogYWxlcnQgPSBuZXcgQkFsZXJ0KCJKYXZhU2NyaXB0
IiwgQlN0cmluZyhtc2cpLlN0cmluZygpLCAiWWVzIiwgIk5vIik7CisgICAgcmV0dXJuIChhbGVy
dC0+R28oKSA9PSAwKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6cnVuSmF2YVNjcmlw
dFByb21wdChGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZh
dWx0VmFsdWUsIFN0cmluZyYgcmVzdWx0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1OjpzZXRTdGF0dXNiYXJU
ZXh0KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBD
aHJvbWVDbGllbnRIYWlrdTo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ2hyb21lQ2xpZW50
SGFpa3U6OnRhYnNUb0xpbmtzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0lu
dFJlY3QgQ2hyb21lQ2xpZW50SGFpa3U6OndpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSW50UmVjdCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1OjpyZXBhaW50
KGNvbnN0IEludFJlY3QmLCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29sIGltbWVkaWF0ZSwgYm9v
bCByZXBhaW50Q29udGVudE9ubHkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBj
b25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0ludFBvaW50IENocm9tZUNsaWVudEhhaWt1Ojpz
Y3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gSW50UG9pbnQoKTsKK30KKworSW50UmVjdCBDaHJvbWVDbGllbnRI
YWlrdTo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitQbGF0Zm9ybVdpZGdldCBD
aHJvbWVDbGllbnRIYWlrdTo6cGxhdGZvcm1XaW5kb3coKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFBsYXRmb3JtV2lkZ2V0KCk7Cit9CisKK3ZvaWQgQ2hyb21l
Q2xpZW50SGFpa3U6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXplJikg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEhh
aWt1OjpzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcq
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50
SGFpa3U6OmFkZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVjdCYpCit7Cit9CisKK3ZvaWQgQ2hy
b21lQ2xpZW50SGFpa3U6OnNjcm9sbEJhY2tpbmdTdG9yZShpbnQsIGludCwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFJlY3QmKQoreworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1Ojp1cGRh
dGVCYWNraW5nU3RvcmUoKQoreworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1Ojptb3VzZURp
ZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXQsIHVuc2lnbmVkIC8qbW9k
aWZpZXJGbGFncyovKQoreworICAgIC8vIFNvbWUgZXh0cmEgaW5mbworICAgIC8vcHJpbnRmKCJI
aXRUZXN0UmVzdWx0IHRpdGxlIFslc10gc3BlbGxpbmdUb29sVGlwIFslc11cbiIsQlN0cmluZyho
aXQudGl0bGUoKSkuU3RyaW5nKCksQlN0cmluZyhoaXQuc3BlbGxpbmdUb29sVGlwKCkpLlN0cmlu
ZygpKTsJCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlr
dTo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRpcCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIC8vcHJpbnRmKCJzZXRUb29sVGlwIFslc11cbiIsQlN0cmluZyh0aXApLlN0cmluZygp
KTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6cHJpbnQoRnJhbWUqKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmV4Y2VlZGVkRGF0
YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnJlcXVlc3RHZW9s
b2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9tZUNsaWVudEhhaWt1OjpydW5PcGVuUGFu
ZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitib29sIENocm9tZUNsaWVudEhhaWt1OjpzZXRDdXJzb3IoUGxhdGZvcm1DdXJz
b3JIYW5kbGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vIE5vdGlmaWNhdGlvbiB0aGF0IHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQgaGFzIGNoYW5n
ZWQuIFRoaXMgZnVuY3Rpb24KKy8vIHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHksIHNvIGhhbmRs
aW5nIHNob3VsZCBiZSB2ZXJ5IGZhc3QuCit2b2lkIENocm9tZUNsaWVudEhhaWt1Ojpmb3JtU3Rh
dGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
UGFzc093blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBDaHJvbWVDbGllbnRIYWlrdTo6Y3JlYXRlSFRN
TFBhcnNlclF1aXJrcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50SGFpa3UuaCBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRIYWlrdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OWFmZWQK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50SGFpa3UuaApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBa
YWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2
ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ2hyb21lQ2xpZW50SGFpa3VfSAorI2RlZmluZSBDaHJvbWVDbGll
bnRIYWlrdV9ICisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisgICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIFBhZ2U7CisgICAgc3RydWN0IEZyYW1l
TG9hZFJlcXVlc3Q7CisKKyAgICBjbGFzcyBDaHJvbWVDbGllbnRIYWlrdSA6IHB1YmxpYyBDaHJv
bWVDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ2hyb21lQ2xpZW50SGFpa3UoKTsKKyAg
ICAgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50SGFpa3UoKTsKKyAgICAgICAgdm9pZCBjaHJvbWVE
ZXN0cm95ZWQoKTsKKworICAgICAgICB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0
Jik7CisgICAgICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisKKyAgICAgICAgRmxvYXRSZWN0
IHBhZ2VSZWN0KCk7CisKKyAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IoKTsKKworICAgICAgICB2
b2lkIGZvY3VzKCk7CisgICAgICAgIHZvaWQgdW5mb2N1cygpOworCisgICAgICAgIGJvb2wgY2Fu
VGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKTsKKyAgICAgICAgdm9pZCB0YWtlRm9jdXMoRm9jdXNE
aXJlY3Rpb24pOworCisgICAgICAgIFBhZ2UqIGNyZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpOworICAgICAg
ICBQYWdlKiBjcmVhdGVNb2RhbERpYWxvZyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
KTsKKyAgICAgICAgdm9pZCBzaG93KCk7CisKKyAgICAgICAgYm9vbCBjYW5SdW5Nb2RhbCgpOwor
ICAgICAgICB2b2lkIHJ1bk1vZGFsKCk7CisKKyAgICAgICAgdm9pZCBzZXRUb29sYmFyc1Zpc2li
bGUoYm9vbCk7CisgICAgICAgIGJvb2wgdG9vbGJhcnNWaXNpYmxlKCk7CisKKyAgICAgICAgdm9p
ZCBzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpOworICAgICAgICBib29sIHN0YXR1c2JhclZpc2li
bGUoKTsKKworICAgICAgICB2b2lkIHNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpOworICAgICAg
ICBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCk7CisKKyAgICAgICAgdm9pZCBzZXRNZW51YmFyVmlz
aWJsZShib29sKTsKKyAgICAgICAgYm9vbCBtZW51YmFyVmlzaWJsZSgpOworCisgICAgICAgIHZv
aWQgc2V0UmVzaXphYmxlKGJvb2wpOworCisgICAgICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29s
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CisJCXZv
aWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKKworCQlib29sIGNh
blJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpOworCisgICAgICAgIGJvb2wgcnVuQmVmb3Jl
VW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqIGZyYW1lKTsK
KworICAgICAgICB2b2lkIGNsb3NlV2luZG93U29vbigpOworCisgICAgICAgIHZvaWQgcnVuSmF2
YVNjcmlwdEFsZXJ0KEZyYW1lKiwgY29uc3QgU3RyaW5nJik7CisgICAgICAgIGJvb2wgcnVuSmF2
YVNjcmlwdENvbmZpcm0oRnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgYm9vbCBydW5K
YXZhU2NyaXB0UHJvbXB0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpOworICAgICAgICBib29sIHNob3VsZElu
dGVycnVwdEphdmFTY3JpcHQoKTsKKworICAgICAgICB2b2lkIHNldFN0YXR1c2JhclRleHQoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJik7CisgICAgICAgIGJvb2wgdGFic1RvTGlua3MoKSBjb25zdDsg
ICAgICAgIAorICAgICAgICBJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Q7CisKKyAg
ICAgICAgdm9pZCByZXBhaW50KGNvbnN0IEludFJlY3QmLCBib29sIGNvbnRlbnRDaGFuZ2VkLCBi
b29sIGltbWVkaWF0ZSA9IGZhbHNlLCBib29sIHJlcGFpbnRDb250ZW50T25seSA9IGZhbHNlKTsK
KyAgICAgICAgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IElu
dFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOworICAgICAgICBJ
bnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgICAgICBJ
bnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICAgICAgUGxh
dGZvcm1XaWRnZXQgcGxhdGZvcm1XaW5kb3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBjb250ZW50
c1NpemVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgICAgICB2b2lk
IHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNv
bnN0OwkJCisKKyAgICAgICAgdm9pZCBhZGRUb0RpcnR5UmVnaW9uKGNvbnN0IEludFJlY3QmKTsK
KyAgICAgICAgdm9pZCBzY3JvbGxCYWNraW5nU3RvcmUoaW50LCBpbnQsIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCk7CisK
KyAgICAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0
JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CisKKyAgICAgICAgdm9pZCBzZXRUb29sVGlwKGNv
bnN0IFN0cmluZyYpOworCisgICAgICAgIHZvaWQgcHJpbnQoRnJhbWUqKTsKKworICAgICAgICB2
b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VO
YW1lKTsKKworICAgICAgICAvLyBUaGlzIGlzIGFuIGFzeW5jaHJvbm91cyBjYWxsLiBUaGUgQ2hy
b21lQ2xpZW50IGNhbiBkaXNwbGF5IFVJIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbgor
ICAgICAgICAvLyB0byB1c2UgR2VvbG9jb2NhdGlvbi4gVGhlIENocm9tZUNsaWVudCBtdXN0IGNh
bGwgR2VvbG9jYXRpb246OnNldFNob3VsZENsZWFyQ2FjaGUoKSBhcHByb3ByaWF0ZWx5LgorICAg
ICAgICB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdl
b2xvY2F0aW9uKik7CisKKyAgICAgICAgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVm
UHRyPEZpbGVDaG9vc2VyPik7CisKKyAgICAgICAgYm9vbCBzZXRDdXJzb3IoUGxhdGZvcm1DdXJz
b3JIYW5kbGUpOworCisgICAgICAgIC8vIE5vdGlmaWNhdGlvbiB0aGF0IHRoZSBnaXZlbiBmb3Jt
IGVsZW1lbnQgaGFzIGNoYW5nZWQuIFRoaXMgZnVuY3Rpb24KKyAgICAgICAgLy8gd2lsbCBiZSBj
YWxsZWQgZnJlcXVlbnRseSwgc28gaGFuZGxpbmcgc2hvdWxkIGJlIHZlcnkgZmFzdC4KKyAgICAg
ICAgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopOworCisgICAgICAgIFBhc3NP
d25QdHI8SFRNTFBhcnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpOworICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1dlYktp
dC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEhhaWt1LmNwcCBiL1dlYktp
dC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEhhaWt1LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWQ3YjBkCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuY3BwCkBA
IC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFj
a0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250
ZXh0TWVudUNsaWVudEhhaWt1LmgiCisKKyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgQ29udGV4
dE1lbnVDbGllbnRIYWlrdTo6Y29udGV4dE1lbnVEZXN0cm95ZWQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW50
SGFpa3U6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKENvbnRleHRNZW51KiBtZW51KQor
eworICAgIHJldHVybiBtZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCk7Cit9CisKK3ZvaWQgQ29u
dGV4dE1lbnVDbGllbnRIYWlrdTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJ
dGVtKiwgY29uc3QgQ29udGV4dE1lbnUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgQ29udGV4dE1lbnVDbGllbnRIYWlrdTo6ZG93bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJs
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVDbGllbnRI
YWlrdTo6bG9va1VwSW5EaWN0aW9uYXJ5KEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIENvbnRleHRNZW51Q2xpZW50SGFpa3U6OnNwZWFrKGNvbnN0IFN0cmluZyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudUNsaWVudEhh
aWt1OjpzdG9wU3BlYWtpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
Q29udGV4dE1lbnVDbGllbnRIYWlrdTo6c2VhcmNoV2l0aEdvb2dsZShjb25zdCBGcmFtZSopCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRI
YWlrdS5oIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50SGFp
a3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjUzYWQzCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50
SGFpa3UuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sg
UnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29udGV4dE1lbnVDbGll
bnRIYWlrdV9oCisjZGVmaW5lIENvbnRleHRNZW51Q2xpZW50SGFpa3VfaAorCisjaW5jbHVkZSAi
Q29udGV4dE1lbnVDbGllbnQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3Mg
Q29udGV4dE1lbnU7CisKKyAgICBjbGFzcyBDb250ZXh0TWVudUNsaWVudEhhaWt1IDogcHVibGlj
IENvbnRleHRNZW51Q2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBj
b250ZXh0TWVudURlc3Ryb3llZCgpOworCisgICAgICAgIHZpcnR1YWwgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gZ2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMoQ29udGV4dE1lbnUqKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRl
bSosIGNvbnN0IENvbnRleHRNZW51Kik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRvd25sb2Fk
VVJMKGNvbnN0IEtVUkwmIHVybCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hXaXRoR29v
Z2xlKGNvbnN0IEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBsb29rVXBJbkRpY3Rpb25h
cnkoRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNwZWFrKGNvbnN0IFN0cmluZyYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcFNwZWFraW5nKCk7CisgICAgfTsKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENvbnRleHRNZW51Q2xpZW50SGFpa3VfaAorCmRpZmYg
LS1naXQgYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEhhaWt1LmNwcCBi
L1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50SGFpa3UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjRjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEhhaWt1LmNwcApAQCAtMCwwICsx
LDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5n
b29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRy
YWdDbGllbnRIYWlrdS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0RyYWdEZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50SGFpa3U6
OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rpb25Bbnk7Cit9CisKK3ZvaWQgRHJhZ0NsaWVu
dEhhaWt1Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25B
Y3Rpb24sIERyYWdEYXRhKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIERy
YWdDbGllbnRIYWlrdTo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK0RyYWdTb3VyY2VBY3Rpb24gRHJhZ0NsaWVudEhhaWt1OjpkcmFnU291
cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBEcmFnU291cmNlQWN0aW9uQW55OworfQorCit2b2lkIERyYWdD
bGllbnRIYWlrdTo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24s
IGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIERyYWdDbGllbnRIYWlrdTo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1h
Z2UsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqLCBGcmFtZSos
IGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRHJhZ0ltYWdlUmVmIERyYWdD
bGllbnRIYWlrdTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayhLVVJMJiwgY29uc3QgU3RyaW5nJiwg
RnJhbWUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVT
dXBwb3J0L0RyYWdDbGllbnRIYWlrdS5oIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Ry
YWdDbGllbnRIYWlrdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOWNk
Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0Ns
aWVudEhhaWt1LmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJE
cmFnQ2xpZW50LmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRHJhZ0Ns
aWVudEhhaWt1IDogcHVibGljIERyYWdDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlv
bkFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERyYWdEYXRhKik7CisgICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOworICAgICAgICB2aXJ0dWFsIERyYWdTb3Vy
Y2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3Vy
Y2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKik7ICAgIAorICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50
JiBkcmFnSW1hZ2VPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wgbGlua0RyYWcgPSBm
YWxzZSk7CisgICAgICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxp
bmsoS1VSTCYsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKik7CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50SGFpa3UuY3BwIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5h
ODcyN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudEhhaWt1LmNwcApAQCAtMCwwICsxLDQ3OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4gCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBM
ZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBB
bmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIAorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWRpdG9y
Q2xpZW50SGFpa3UuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWRpdG9y
LmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKworI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFZGl0
b3JDbGllbnRIYWlrdTo6RWRpdG9yQ2xpZW50SGFpa3UoKQorICAgIDogbV9lZGl0aW5nKGZhbHNl
KQorICAgICwgbV9pblVuZG9SZWRvKGZhbHNlKQoreworfQorCit2b2lkIEVkaXRvckNsaWVudEhh
aWt1OjpzZXRQYWdlKCBQYWdlKiBwYWdlICkKK3sKKyAgICBtX3BhZ2UgPSBwYWdlOworfQorCit2
b2lkIEVkaXRvckNsaWVudEhhaWt1OjpwYWdlRGVzdHJveWVkKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitib29sIEVkaXRvckNsaWVudEhhaWt1OjpzaG91bGREZWxldGVSYW5nZShS
YW5nZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShIVE1MRWxl
bWVudCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRWRpdG9yQ2xpZW50SGFpa3U6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRWRpdG9y
Q2xpZW50SGFpa3U6OmlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRWRpdG9yQ2xp
ZW50SGFpa3U6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRI
YWlrdTo6dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SGFpa3U6OmlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnRvZ2dsZUdyYW1tYXJDaGVja2luZygpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworaW50IEVkaXRvckNsaWVudEhhaWt1OjpzcGVsbENoZWNr
ZXJEb2N1bWVudFRhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6aXNFZGl0YWJsZSgpCit7CisgICAgLy8gRklY
TUU6IHNob3VsZCBiZSBjb250cm9sbGFibGUKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
RWRpdG9yQ2xpZW50SGFpa3U6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFZGl0
b3JDbGllbnRIYWlrdTo6c2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFZGl0b3JDbGll
bnRIYWlrdTo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rp
b24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5n
ZSosIEVkaXRvckluc2VydEFjdGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEVkaXRvckNsaWVudEhhaWt1OjpzaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQWZmaW5pdHksIGJvb2wgc3Rp
bGxTZWxlY3RpbmcpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpD
U1NTdHlsZURlY2xhcmF0aW9uKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6UmFuZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SGFpa3U6OnNob3VsZE1vdmVSYW5nZUFmdGVy
RGVsZXRlKFJhbmdlKiwgUmFuZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmRpZEJlZ2luRWRpdGluZygp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2VkaXRpbmcgPSB0cnVlOworfQorCit2
b2lkIEVkaXRvckNsaWVudEhhaWt1OjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
RWRpdG9yQ2xpZW50SGFpa3U6OmRpZEVuZEVkaXRpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgbV9lZGl0aW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6
OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpkaWRTZXRTZWxlY3Rpb25UeXBlc0ZvclBh
c3RlYm9hcmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xp
ZW50SGFpa3U6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkVkaXRDb21tYW5kPiBjbWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBF
ZGl0b3JDbGllbnRIYWlrdTo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6RWRpdENvbW1hbmQ+KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRWRpdG9yQ2xpZW50SGFpa3U6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEVkaXRvckNsaWVudEhhaWt1OjpjYW5VbmRvKCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBFZGl0b3JDbGllbnRIYWlrdTo6Y2FuUmVkbygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6
OnVuZG8oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9pblVuZG9SZWRvID0gdHJ1
ZTsKKyAgICBtX2luVW5kb1JlZG8gPSBmYWxzZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlr
dTo6cmVkbygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2luVW5kb1JlZG8gPSB0
cnVlOworICAgIG1faW5VbmRvUmVkbyA9IGZhbHNlOworfQorCit2b2lkIEVkaXRvckNsaWVudEhh
aWt1OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIEZy
YW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgp
KQorICAgICAgICByZXR1cm47CisJCisgICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBr
ZXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKTsKKyAgICBpZiAoIWtldmVudCB8fCBrZXZlbnQtPnR5
cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OktleVVwKQorICAgICAgICByZXR1cm47CisJ
CisgICAgTm9kZSogc3RhcnQgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpOwor
ICAgIGlmICghc3RhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdGFydC0+aXNDb250
ZW50RWRpdGFibGUoKSkgeworICAgICAgICBzd2l0Y2goa2V2ZW50LT53aW5kb3dzVmlydHVhbEtl
eUNvZGUoKSkgeworICAgICAgICBjYXNlIFZLX0JBQ0s6CisgICAgICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V2ZW50
LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdHJ1
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19ERUxFVEU6CisgICAgICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uQ29udHJv
bGxlcjo6Rk9SV0FSRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrZXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3Rlckdy
YW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX0xF
RlQ6CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXZlbnQtPnNoaWZ0
S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVy
OjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9u
Q29udHJvbGxlcjo6TEVGVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtldmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJp
dHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX1JJR0hUOgorICAgICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJv
bGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V2ZW50LT5jdHJsS2V5KCkgPyBX
b3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVktfVVA6CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXZl
bnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQgOiBTZWxlY3Rpb25D
b250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDog
TGluZUdyYW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19ET1dOOgorICAgICAg
ICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8gU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkZPUldBUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXZlbnQt
PmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGluZUdyYW51bGFyaXR5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWS19QUklPUjogIC8vIFBhZ2VVcAorICAgICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlVXBCeVBhZ2VBbmRNb2RpZnlDYXJldCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfTkVYVDogIC8vIFBhZ2VEb3duCisgICAg
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVEb3duQnlQYWdlQW5kTW9kaWZ5
Q2FyZXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX1JFVFVSTjoKKyAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiSW5zZXJ0TGluZUJyZWFrIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19UQUI6CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIWtldmVudC0+Y3RybEtleSgp
ICYmICFrZXZlbnQtPmFsdEtleSgpICYmICFrZXZlbnQtPnRleHQoKS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoa2V2ZW50LT50ZXh0KCkubGVuZ3RoKCkgPT0gMSkgeworICAgICAg
ICAgICAgICAgICAgICBVQ2hhciBjaCA9IGtldmVudC0+dGV4dCgpWzBdOworICAgICAgICAgICAg
ICAgICAgICAvLyBEb24ndCBpbnNlcnQgbnVsbCBvciBjb250cm9sIGNoYXJhY3RlcnMgYXMgdGhl
eSBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3VyCisgICAgICAgICAgICAgICAgICAg
IGlmIChjaCA8ICcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoa2V2
ZW50LT50ZXh0KCksIGV2ZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V2ZW50LT5jdHJs
S2V5KCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGtldmVudC0+d2luZG93c1ZpcnR1YWxL
ZXlDb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX0E6CisgICAgICAgICAgICAgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiU2VsZWN0QWxsIik7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVktfQjoKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJUb2dnbGVCb2xkIik7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVktfQzoKKyAgICAgICAgICAg
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJDb3B5Iik7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVktfSToKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJUb2dnbGVJdGFsaWMiKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWS19WOgorICAgICAgICAg
ICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIlBhc3RlIik7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVktfWDoKKyAgICAgICAgICAg
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJDdXQiKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWS19ZOgorICAgICAgICAgICAgICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIlJlZG8iKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWS19aOgorICAgICAgICAgICAgICAgICAg
ICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIlVuZG8iKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGtldmVudC0+d2luZG93c1ZpcnR1
YWxLZXlDb2RlKCkpIHsKKyAgICAgICAgY2FzZSBWS19VUDoKKyAgICAgICAgICAgIGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVVwIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBWS19ET1dOOgorICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3Zl
RG93biIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfUFJJT1I6ICAvLyBQ
YWdlVXAKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVVwQnlQYWdl
QW5kTW9kaWZ5Q2FyZXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX05F
WFQ6ICAvLyBQYWdlRG93bgorICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJN
b3ZlRG93bkJ5UGFnZUFuZE1vZGlmeUNhcmV0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWS19IT01FOgorICAgICAgICAgICAgaWYgKGtldmVudC0+Y3RybEtleSgpKQorICAg
ICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVRvQmVnaW5uaW5nT2ZE
b2N1bWVudCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfRU5EOgorICAg
ICAgICAgICAgaWYgKGtldmVudC0+Y3RybEtleSgpKQorICAgICAgICAgICAgICAgIGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVRvRW5kT2ZEb2N1bWVudCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoa2V2ZW50LT5jdHJsS2V5KCkp
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2goa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX0E6CisgICAgICAgICAgICAgICAgICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIlNlbGVjdEFsbCIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfQzogY2FzZSBW
S19YOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJD
b3B5Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1
OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCopCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6dGV4dEZpZWxkRGlkQmVn
aW5FZGl0aW5nKEVsZW1lbnQqKQoreworICAgIG1fZWRpdGluZyA9IHRydWU7Cit9CisKK3ZvaWQg
RWRpdG9yQ2xpZW50SGFpa3U6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCopCit7Cisg
ICAgbV9lZGl0aW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnRleHRE
aWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIEVkaXRvckNsaWVudEhhaWt1Ojpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQo
RWxlbWVudCosIEtleWJvYXJkRXZlbnQqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBFZGl0b3JDbGllbnRIYWlrdTo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1
Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1OjppZ25vcmVXb3JkSW5TcGVsbERvY3Vt
ZW50KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBF
ZGl0b3JDbGllbnRIYWlrdTo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBpbnQqLCBpbnQqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK1N0cmluZyBFZGl0b3JDbGllbnRIYWlrdTo6Z2V0QXV0b0NvcnJlY3RTdWdn
ZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBF
ZGl0b3JDbGllbnRIYWlrdTo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQs
IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCosIGludCopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpzaG93U3BlbGxpbmdVSShi
b29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SGFp
a3U6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpnZXRHdWVzc2VzRm9y
V29yZChjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6c2V0SW5wdXRNZXRob2RTdGF0ZShi
b29sIGVuYWJsZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBFZGl0b3JD
bGllbnRIYWlrdTo6aXNFZGl0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZGl0aW5nOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9X
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5oIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZWRhOTU5NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRIYWlrdS5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEVkaXRvckNsaWVudEhhaWt1X0gKKyNkZWZpbmUgRWRp
dG9yQ2xpZW50SGFpa3VfSAorCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAi
UmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRWRpdG9yQ2xpZW50SGFp
a3UgOiBwdWJsaWMgRWRpdG9yQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEVkaXRvckNs
aWVudEhhaWt1KCk7CisgICAgICAgIHZvaWQgc2V0UGFnZSggUGFnZSogcGFnZSApOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVzdHJveWVkKCk7CisKKyAgICAgICAgdmlydHVhbCBib29s
IHNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRT
aG93RGVsZXRlSW50ZXJmYWNlKEhUTUxFbGVtZW50Kik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBz
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKKyAgICAgICAgdmlydHVhbCBib29sIGlzU2VsZWN0
VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvZ2ds
ZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZUdyYW1tYXJD
aGVja2luZygpOworICAgICAgICB2aXJ0dWFsIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygp
OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRhYmxlKCk7CisKKyAgICAgICAgdmlydHVh
bCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhSYW5nZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkRW5kRWRpdGluZyhSYW5nZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5z
ZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pOworICAgICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvcklu
c2VydEFjdGlvbik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJh
bmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rp
bmcpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24qLCBSYW5nZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTW92ZVJhbmdl
QWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5nZSopOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRC
ZWdpbkVkaXRpbmcoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250
ZW50cygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGluZygpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFNldFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2FyZCgpOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oUGFzc1JlZlB0cjxF
ZGl0Q29tbWFuZD4pOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJVbmRvUmVkb09wZXJhdGlv
bnMoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuVW5kbygpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIGJvb2wgY2FuUmVkbygpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCB1bmRv
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWRvKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqKTsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqKTsKKyAgICAgICAg
dmlydHVhbCBib29sIGRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiwgS2V5Ym9h
cmRFdmVudCopOworICAgICAgICB2aXJ0dWFsIHZvaWQgdGV4dFdpbGxCZURlbGV0ZWRJblRleHRG
aWVsZChFbGVtZW50Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0
QXJlYShFbGVtZW50Kik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxs
RG9jdW1lbnQoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQo
Y29uc3QgU3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJp
bmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBtaXNzcGVsbGlu
Z0xlbmd0aCk7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlv
bkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVu
Z3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxl
bmd0aCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdyk7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5h
YmxlZCk7CisKKyAgICAgICAgYm9vbCBpc0VkaXRpbmcoKSBjb25zdDsKKworICAgIHByaXZhdGU6
CisgICAgICAgIFBhZ2UqIG1fcGFnZTsKKyAgICAgICAgYm9vbCBtX2VkaXRpbmc7CisgICAgICAg
IGJvb2wgbV9pblVuZG9SZWRvOyAvLyBvdXIgdW5kbyBzdGFjayB3b3JrcyBkaWZmZXJlbnRseSAt
IGRvbid0IHJlLWVudGVyIQorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVkaXRvckNsaWVudEhhaWt1X2gKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwIGIvV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjY1MWIxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvaGFp
a3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw3
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRG9uIEdpYnNvbiA8ZGdpYnNvbjc3QGdt
YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8U3RyaW5nLmg+CisvLyNpbmNsdWRlIDxW
aWV3Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpGcmFtZUxvYWRlckNsaWVudEhhaWt1KCkKKyAgICA6IG1fZnJhbWUoMCkKKyAgICAsIG1fZmly
c3REYXRhKGZhbHNlKQoreworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZyYW1l
TG9hZGVyRGVzdHJveWVkKCkKK3sKKyAgICBtX2ZyYW1lID0gMDsKKyAgICBkZWxldGUgdGhpczsK
K30KKworRnJhbWUqIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZyYW1lKCkKK3sgCisgICAgcmV0
dXJuIG1fZnJhbWU7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6aGFzV2ViVmll
dygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpoYXNGcmFtZVZpZXcoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0IAoreyAKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOyAKKyAgICByZXR1cm4gZmFsc2U7IAorfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6Om1ha2VEb2N1bWVudFZpZXcoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6bWFrZVJlcHJlc2VudGF0
aW9uKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisvLyB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldERvY3VtZW50Vmlld0Zyb21DYWNoZWRQYWdl
KFdlYkNvcmU6OkNhY2hlZFBhZ2UqKQorLy97CisvLyAgICBub3RJbXBsZW1lbnRlZCgpOworLy99
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Zm9yY2VMYXlvdXQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Zm9yY2VM
YXlvdXRGb3JOb25IVE1MKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldENvcGllc09uU2Nyb2xsKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCisvL3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGV0YWNoZWRG
cm9tUGFyZW50MSgpCisvL3sKKy8vICBub3RJbXBsZW1lbnRlZCgpOworLy99CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGV0YWNoZWRGcm9tUGFyZW50MigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkZXRhY2hlZEZy
b21QYXJlbnQzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmRldGFjaGVkRnJvbVBhcmVudDQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKKy8vdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpsb2FkZWRGcm9tQ2Fj
aGVkUGFnZSgpCisvL3sKKy8vICAgIG5vdEltcGxlbWVudGVkKCk7CisvL30KKwordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1Ojphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAgIAorfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoRG9jdW1lbnRMb2FkZXIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpk
aXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIG1fcmVzcG9uc2UgPSBy
ZXNwb25zZTsKKyAgICBtX2ZpcnN0RGF0YSA9IHRydWU7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hE
aWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiwgaW50IGxlbmd0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRS
ZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBT
Y3JpcHRTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFdpbGxQZXJmb3JtQ2xp
ZW50UmVkaXJlY3QoY29uc3QgS1VSTCYsIGRvdWJsZSwgZG91YmxlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRD
aGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsQ2xvc2UoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEaWRSZWNlaXZlSWNvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2Fk
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRj
aERpZENvbW1pdExvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0
IFJlc291cmNlRXJyb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNvdXJjZUVy
cm9yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlk
RmluaXNoTG9hZCgpIAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hE
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK0ZyYW1lKiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaENyZWF0ZVBhZ2Uo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hTaG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9s
aWN5Rm9yTUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbiBwb2xpY3lGdW5jdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gY2FsbCBkaXJlY3RseSBoZXJlIChjb21t
ZW50IGNvcGllZCBmcm9tIFF0IHZlcnNpb24pCisgICAgQVNTRVJUKGZyYW1lKCkgJiYgcG9saWN5
RnVuY3Rpb24pOworICAgIGlmICghZnJhbWUoKSB8fCAhcG9saWN5RnVuY3Rpb24pCisgICAgICAg
IHJldHVybjsKKyAgICAoZnJhbWUoKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5
VXNlKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBv
bGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIEFTU0VSVChmcmFtZSgpICYmIHBvbGljeUZ1bmN0aW9uKTsKKyAgICBpZiAoIWZyYW1l
KCkgfHwgIXBvbGljeUZ1bmN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IEkg
dGhpbmsgUXQgdmVyc2lvbiBtYXJzaGFscyB0aGlzIHRvIGFub3RoZXIgdGhyZWFkIHNvIHdoZW4g
d2UKKyAgICAvLyBoYXZlIG11bHRpLXRocmVhZGVkIGRvd25sb2FkLCB3ZSBtaWdodCBuZWVkIHRv
IGRvIHRoZSBzYW1lCisgICAgKGZyYW1lKCktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBv
bGljeVVzZSk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBwb2xpY3lGdW5j
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5n
JiBmcmFtZU5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQoZnJhbWUo
KSAmJiBwb2xpY3lGdW5jdGlvbik7CisgICAgaWYgKCFmcmFtZSgpIHx8ICFwb2xpY3lGdW5jdGlv
bikKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBJIHRoaW5rIFF0IHZlcnNpb24gbWFy
c2hhbHMgdGhpcyB0byBhbm90aGVyIHRocmVhZCBzbyB3aGVuIHdlCisgICAgLy8gaGF2ZSBtdWx0
aS10aHJlYWRlZCBkb3dubG9hZCwgd2UgbWlnaHQgbmVlZCB0byBkbyB0aGUgc2FtZQorICAgIChm
cmFtZSgpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOworfQorCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQoZnJhbWUoKSAmJiBwb2xpY3lGdW5jdGlvbik7
CisgICAgaWYgKCFmcmFtZSgpIHx8ICFwb2xpY3lGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIChmcmFtZSgpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBBU1NFUlQoZnJhbWUoKSAmJiBwb2xpY3lGdW5jdGlvbik7CisgICAgaWYgKCFmcmFt
ZSgpIHx8ICFwb2xpY3lGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIChmcmFtZSgpLT5s
b2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOworfQorCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmNhbmNlbFBvbGljeUNoZWNrKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoVW5hYmxlVG9J
bXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFdpbGxTdWJt
aXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24sIFBhc3NSZWZQdHI8Rm9y
bVN0YXRlPikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBzdXJlbHkgdG9vIHNpbXBsZQorICAg
IEFTU0VSVChmcmFtZSgpICYmIHBvbGljeUZ1bmN0aW9uKTsKKyAgICBpZiAoIWZyYW1lKCkgfHwg
IXBvbGljeUZ1bmN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgKGZyYW1lKCktPmxvYWRlcigp
LT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1bWVudExvYWRlciopCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRNYWluRG9j
dW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSAK
K3sKKyAgICBwcmludGYoIlxuXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOworICAg
IHByaW50ZigiRG9jdW1lbnQgZXJyb3I6ICVzXG4iLEJTdHJpbmcoZXJyb3IuZG9tYWluKCkpLlN0
cmluZygpKTsKKyAgICBwcmludGYoIlxuXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIp
OwkgCisgICAgbm90SW1wbGVtZW50ZWQoKTsgCit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6Y2xlYXJVbmFyY2hpdmluZ1N0YXRlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnBvc3RQcm9n
cmVzc1N0YXJ0ZWROb3RpZmljYXRpb24oKQoreworICAgIC8vIG5vIHByb2dyZXNzIG5vdGlmaWNh
dGlvbiBmb3Igbm93Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cG9zdFByb2dy
ZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCkKK3sKKyAgICAvLyBubyBwcm9ncmVzcyBu
b3RpZmljYXRpb24gZm9yIG5vdyAgICAKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCit7CisgICAgLy8gbm8gcHJvZ3Jl
c3Mgbm90aWZpY2F0aW9uIGZvciBub3cKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpIAoreworICAgIC8vIHRoaXMgaXMgb25s
eSBpbnRlcmVzdGluZyBvbmNlIHdlIHByb3ZpZGUgYW4gZXh0ZXJuYWwgQVBJIGZvciB0aGUgRE9N
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c3RhcnREb3dubG9hZChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6d2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyICpsKQoreworICAgIHNldFRpdGxlKGwtPnRp
dGxlKCksIGwtPnVybCgpKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpjb21t
aXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCit7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVM
b2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgIGZsLT5zZXRFbmNvZGluZyht
X3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOworICAgIGZsLT5hZGREYXRhKGRh
dGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZmluaXNoZWRM
b2FkaW5nKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZpbmFsU2V0dXBGb3JSZXBsYWNlKERvY3VtZW50
TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlR2xvYmFsSGlzdG9y
eVJlZGlyZWN0TGlua3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlR2xvYmFsSGlzdG9yeUZvclN0YW5kYXJkTG9hZChj
b25zdCBLVVJMJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OnVwZGF0ZUdsb2JhbEhpc3RvcnlGb3JSZWxvYWQoY29uc3QgS1VSTCYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEhh
aWt1OjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0IAorewor
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgaW1wbGVtZW50YXRpb24uIE1vcmUg
c29waGlzdGljYXRlZAorICAgIC8vIGltcGxlbWVudGF0aW9uIHdvdWxkIGRlbGVnYXRlIHRoZSBk
ZWNpc2lvbiB0byBhIFBvbGljeURlbGVnYXRlLgorICAgIC8vIFNlZSBtYWMgaW1wbGVtZW50YXRp
b24gZm9yIGV4YW1wbGUuCisgICAgcmV0dXJuIGl0ZW0gIT0gMDsKK30KKworUmVzb3VyY2VFcnJv
ciBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoKTsKK30KKworUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpibG9ja2Vk
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6Y2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOwor
fQorCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmludGVycnVwdEZvclBv
bGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitSZXNvdXJjZUVycm9y
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoKTsKK30KKworUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitSZXNv
dXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnBsdWdpbldpbGxIYW5kbGVMb2FkRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OnNob3VsZEZhbGxCYWNrKGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OndpbGxVc2VBcmNoaXZlKFJlc291cmNl
TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgS1VSTCYgb3JpZ2luYWxVUkwp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6aXNBcmNoaXZlTG9hZFBlbmRpbmcoUmVzb3Vy
Y2VMb2FkZXIqKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbmNlbFBlbmRpbmdBcmNo
aXZlTG9hZChSZXNvdXJjZUxvYWRlciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjbGVhckFyY2hpdmVkUmVzb3VyY2VzKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmNhbkhhbmRsZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmNhblNob3dNSU1FVHlwZShjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNv
bnN0IFN0cmluZyYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1N0cmluZyBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpnZW5lcmF0ZWRNSU1F
VHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmZyYW1lTG9hZENvbXBsZXRlZCgpIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0
b3J5SXRlbSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpyZXN0b3JlVmlld1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6ZGlkRmluaXNoTG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxhY2Vt
ZW50KCkgCit7CisgICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+bG9hZGVyKCkpCisgICAgICAg
IG1fZnJhbWUtPmxvYWRlcigpLT5zZXR1cEZvclJlcGxhY2UoKTsKK30KKworUGFzc1JlZlB0cjxE
b2N1bWVudExvYWRlcj4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlRG9jdW1lbnRMb2Fk
ZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3Vic3RpdHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQoreworICAgIFJlZlB0cjxEb2N1bWVudExv
YWRlcj4gbG9hZGVyID0gRG9jdW1lbnRMb2FkZXI6OmNyZWF0ZShyZXF1ZXN0LCBzdWJzdGl0dXRl
RGF0YSk7CisgICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiwgY29uc3QgS1VSTCYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OnVzZXJBZ2VudChjb25zdCBLVVJMJikKK3sKKyAgICByZXR1cm4gIk1vemlsbGEvNS4wIChjb21w
YXRpYmxlOyBVOyBJbmZpTmV0IDAuMTsgSGFpa3UpIEFwcGxlV2ViS2l0LzQyMCsgKEtIVE1MLCBs
aWtlIEdlY2tvKSI7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2F2ZVBsYXRm
b3JtRGF0YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dHJhbnNpdGlvblRvQ29tbWl0
dGVkRnJvbUNhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnRyYW5zaXRpb25Ub0NvbW1pdHRl
ZEZvck5ld1BhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKy8vIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6c2F2ZURvY3VtZW50Vmlld1RvQ2FjaGVkUGFnZShDYWNoZWRQ
YWdlKikKKy8veworLy8gICAgbm90SW1wbGVtZW50ZWQoKTsKKy8vfQorCitib29sIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmNhbkNhY2hlUGFnZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgICAgCit9Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRvd25sb2FkKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlRnJh
bWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xs
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KQoreworCS8vIEZJWE1FOgorICAg
IC8vIHRoaXJkOiAgIHdlIHNob3VsZCBhcHBseSB0aGUgcmlnaHQgcHJvcGVydHkgdG8gdGhlIGZy
YW1lVmlldy4gKHNjcm9sbGJhcixtYXJnaW5zKQorICAgIC8vIGVycm9yOiAgIHdoZW4gY29tcGls
aW5nIHVuZGVyIGdjYzQsIGVycm9yOiBjYW5ub3QgYWxsb2NhdGUgYW4gb2JqZWN0IG9mIGFic3Ry
YWN0IHR5cGUKKworICAgIC8vIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UqIGxvYWRl
ckNsaWVudCA9IG5ldyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1KCk7CisgICAgUmVm
UHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gRnJhbWU6OmNyZWF0ZShtX2ZyYW1lLT5wYWdlKCksIG93
bmVyRWxlbWVudCwgdGhpcyk7CisgICAgc2V0RnJhbWUoY2hpbGRGcmFtZS5nZXQoKSk7CisKKyAg
ICBSZWZQdHI8RnJhbWVWaWV3PiBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShjaGlsZEZy
YW1lLmdldCgpKTsKKworICAgIC8vcHJpbnRmKCIqKiogc3VwcHJlc3NTY3JvbGxCYXJzID0gJWQi
LCFhbGxvd3NTY3JvbGxpbmcpOworCisgICAgZnJhbWVWaWV3LT5zZXRBbGxvd3NTY3JvbGxpbmco
YWxsb3dzU2Nyb2xsaW5nKTsKKyAgICBmcmFtZVZpZXctPmRlcmVmKCk7CisgICAgY2hpbGRGcmFt
ZS0+c2V0VmlldyhmcmFtZVZpZXcuZ2V0KCkpOworICAgIGNoaWxkRnJhbWUtPmluaXQoKTsKKwor
ICAgIGNoaWxkRnJhbWUtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKKyAgICBtX2ZyYW1lLT50cmVl
KCktPmFwcGVuZENoaWxkKGNoaWxkRnJhbWUpOworCisgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkt
PmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSh1cmwsIHJlZmVycmVyLCBjaGlsZEZyYW1lLmdldCgpKTsK
KworICAgIC8vIFRoZSBmcmFtZSdzIG9ubG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92ZWQgaXQg
ZnJvbSB0aGUgZG9jdW1lbnQuCisgICAgaWYgKCFjaGlsZEZyYW1lLT50cmVlKCktPnBhcmVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgCXJldHVybiBjaGlsZEZyYW1lLnJlbGVhc2UoKTsK
K30KKworV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVQbHVnaW4oY29uc3Qg
SW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiwgYm9vbCBsb2FkTWFudWFsbHkpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpj
cmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wgbG9hZE1hbnVh
bGx5KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVn
aW5XaWRnZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47Cit9CisKK1dp
ZGdldCogRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25z
dCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtTmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1dpZGdldCogRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwg
SFRNTEFwcGxldEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitPYmplY3RDb250ZW50VHlw
ZSBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gT2JqZWN0Q29udGVudFR5cGUoKTsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6Om92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEhh
aWt1Ojp3aW5kb3dPYmplY3RDbGVhcmVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24o
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVuICkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oIGIvV2ViS2l0L2hhaWt1L1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42ZjUwM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaApAQCAtMCwwICsxLDIzNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdV9ICisjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3VfSAor
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKworI2luY2x1ZGUgIlJlc291cmNlUmVz
cG9uc2UuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdSA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAg
ICAgICBGcmFtZUxvYWRlckNsaWVudEhhaWt1KCk7CisgICAgICAgIH5GcmFtZUxvYWRlckNsaWVu
dEhhaWt1KCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3llZCgp
OworCisgICAgICAgIHZvaWQgc2V0RnJhbWUoRnJhbWUgKmZyYW1lKSB7IG1fZnJhbWUgPSBmcmFt
ZTsgfQorICAgICAgICBGcmFtZSogZnJhbWUoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFz
V2ViVmlldygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzRnJhbWVWaWV3KCkgY29u
c3Q7CisKKyAgICAgICAgdmlydHVhbCBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25z
dDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFrZURvY3VtZW50VmlldygpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgbWFrZVJlcHJlc2VudGF0aW9uKERvY3VtZW50TG9hZGVyKik7CisgICAgICAg
IC8vIHZpcnR1YWwgdm9pZCBzZXREb2N1bWVudFZpZXdGcm9tQ2FjaGVkUGFnZShDYWNoZWRQYWdl
Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dCgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZm9yY2VMYXlvdXRGb3JOb25IVE1MKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNl
dENvcGllc09uU2Nyb2xsKCk7CisKKyAgICAgICAgLy92aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9t
UGFyZW50MSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MigpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MygpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50NCgpOworCisgICAgICAgIC8vdmlydHVhbCB2b2lk
IGxvYWRlZEZyb21DYWNoZWRQYWdlKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFzc2lnbklk
ZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bnRMb2FkZXIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAg
aWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpOworCQl2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRj
aERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50IGxlbmd0aCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJl
cXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJpbmcmKTsKKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxMb2FkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENs
aWVudFJlZGlyZWN0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxQZXJmb3Jt
Q2xpZW50UmVkaXJlY3QoY29uc3QgS1VSTCYsIGRvdWJsZSwgZG91YmxlKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZENvbW1pdExvYWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFp
bFByb3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCk7CisKKyAgICAgICAgdmlydHVhbCBGcmFt
ZSogZGlzcGF0Y2hDcmVhdGVQYWdlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFNo
b3coKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1F
VHlwZShGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5
Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25B
Y3Rpb24mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBmcmFtZU5h
bWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5k
b3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIGZyYW1lTmFtZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2
aWdhdGlvbkFjdGlvbiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQ
b2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGNhbmNlbFBvbGljeUNoZWNrKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVW5h
YmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYpOworCisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24sIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
TG9hZE1haW5SZXNvdXJjZShEb2N1bWVudExvYWRlciopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291
cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyVW5hcmNoaXZpbmdTdGF0ZShE
b2N1bWVudExvYWRlciopOworCisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgaW4gRnJhbWVM
b2FkZXJDbGllbnQsIG5vdCBzdXJlIGlmIHdlIG5lZWQgdG8gaW1wbGVtZW50CisgICAgICAgIC8v
dmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcygpOworICAgICAgICAvL3Zp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcygpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9zdFByb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKik7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqLCBjb25z
dCBjaGFyKiwgaW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaGVkTG9hZGluZyhEb2N1
bWVudExvYWRlciopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxTZXR1cEZvclJlcGxhY2Uo
RG9jdW1lbnRMb2FkZXIqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlz
dG9yeSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0
TGlua3MoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeUZvclN0
YW5kYXJkTG9hZChjb25zdCBLVVJMJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9i
YWxIaXN0b3J5Rm9yUmVsb2FkKGNvbnN0IEtVUkwmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHNo
b3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSopIGNvbnN0OworCisgICAgICAgIHZpcnR1
YWwgUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
KyAgICAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmKTsKKyAgICAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxF
cnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAgICAgdmlydHVhbCBSZXNvdXJjZUVy
cm9yIGludGVycnVwdEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
OworCisgICAgICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJv
cihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJv
ciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAg
ICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJik7CisKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEZhbGxCYWNr
KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJz
TG9hZGluZyhib29sKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgd2lsbFVzZUFyY2hpdmUoUmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBLVVJMJiBvcmlnaW5h
bFVSTCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0FyY2hpdmVMb2FkUGVuZGluZyhS
ZXNvdXJjZUxvYWRlciopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGVuZGlu
Z0FyY2hpdmVMb2FkKFJlc291cmNlTG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckFyY2hpdmVkUmVzb3VyY2VzKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJl
cXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUo
Y29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZENv
bXBsZXRlZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0
b3J5SXRlbSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVZpZXdTdGF0ZSgpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZv
ckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpOworCisgICAgICAgIC8vdmlydHVhbCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRh
Jik7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9j
dW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEm
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNv
bnN0IEtVUkwmKTsKKworICAgICAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VS
TCYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFt
ZShDYWNoZWRGcmFtZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0
dGVkRnJvbUNhY2hlZEZyYW1lKENhY2hlZEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0
cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCk7CisKKyAgICAgICAgLy8gdmlydHVhbCB2
b2lkIHNhdmVEb2N1bWVudFZpZXdUb0NhY2hlZFBhZ2UoQ2FjaGVkUGFnZSopOworICAgICAgICB2
aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
b3dubG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKworICAgICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RnJhbWU+IGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJv
b2wgYWxsb3dzU2Nyb2xsaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCk7CisgICAgICAgIHZp
cnR1YWwgV2lkZ2V0KiBjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25z
dCBLVVJMJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmLCBib29sIGxvYWRNYW51YWxseSk7CisgICAg
ICAgIHZpcnR1YWwgV2lkZ2V0KiBjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEhUTUxQbHVn
SW5FbGVtZW50KiwgY29uc3QgS1VSTCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiwgYm9vbCBsb2Fk
TWFudWFsbHkpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3REYXRhVG9QbHVnaW4oV2lk
Z2V0KiBwbHVnaW5XaWRnZXQpOworCisgICAgICAgIHZpcnR1YWwgV2lkZ2V0KiBjcmVhdGVKYXZh
QXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7Cisg
ICAgICAgIHZpcnR1YWwgV2lkZ2V0KiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNp
emUmLCBIVE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworCisgICAgICAgIHZpcnR1
YWwgT2JqZWN0Q29udGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVN
ZWRpYVR5cGUoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2JqZWN0Q2xl
YXJlZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigp
IGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRp
b24oYm9vbCBsaXN0ZW4gPSB0cnVlKTsKKworCQl2aXJ0dWFsIHZvaWQgZG9jdW1lbnRFbGVtZW50
QXZhaWxhYmxlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBGcmFtZSAqbV9mcmFtZTsKKyAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgICAgICBib29sIG1fZmlyc3RE
YXRhOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGcmFtZUxv
YWRlckNsaWVudEhhaWt1X2gKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcCBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzE3ZmNjNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRIYWlrdS5oIgor
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1
OjppbnNwZWN0b3JEZXN0cm95ZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bh
Z2UqIEluc3BlY3RvckNsaWVudEhhaWt1OjpjcmVhdGVQYWdlKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQorCitTdHJpbmcgSW5zcGVjdG9yQ2xpZW50SGFpa3U6
OmxvY2FsaXplZFN0cmluZ3NVUkwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGRlblBh
bmVscygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OnNob3dXaW5kb3coKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmNsb3NlV2luZG93
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEhh
aWt1OjphdHRhY2hXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ2xpZW50SGFpa3U6OmRldGFjaFdpbmRvdygpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6c2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZ2hsaWdodChOb2RlKiBub2RlKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGVIaWdo
bGlnaHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xp
ZW50SGFpa3U6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1Ojpwb3B1bGF0ZVNl
dHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lkIEluc3BlY3RvckNsaWVudEhh
aWt1OjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IEluc3BlY3RvckNvbnRy
b2xsZXI6OlNldHRpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lk
IEluc3BlY3RvckNsaWVudEhhaWt1OjpyZW1vdmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9ICAgIAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRIYWlrdS5oIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhh
aWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlOTk2ZAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRI
YWlrdS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yQ2xpZW50
SGFpa3VfaAorI2RlZmluZSBJbnNwZWN0b3JDbGllbnRIYWlrdV9oCisKKyNpbmNsdWRlICJJbnNw
ZWN0b3JDbGllbnQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgTm9kZTsK
KyAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFN0cmluZzsKKworICAgIGNsYXNzIEluc3BlY3Rv
ckNsaWVudEhhaWt1IDogcHVibGljIEluc3BlY3RvckNsaWVudCB7CisgICAgcHVibGljOgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CisKKyAgICAgICAgdmlydHVh
bCBQYWdlKiBjcmVhdGVQYWdlKCk7CisKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVk
U3RyaW5nc1VSTCgpOworCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZVdpbmRvdygpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOworCisgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworCisgICAgICAg
IHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGlk
ZUhpZ2hsaWdodCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYgbmV3VVJMKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVT
ZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXkpOworICAgIH07Cit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJbnNwZWN0b3JDbGllbnRIYWlrdV9oCisKLS0gCjEuNi4z
LjMKCg==
</data>
<flag name="review"
          id="16585"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32069</attachid>
            <date>2009-06-30 09:32:19 -0700</date>
            <delta_ts>2009-07-02 14:41:39 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/bindings/js/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-bindings-js.patch</filename>
            <type>text/plain</type>
            <size>3226</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBlOWVkZmI4MDUxNWZjOGViNjg4YzM5NGU1YjU3YjU0ZDIyNDZmODVhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTg6Mjk6MjIgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9iaW5kaW5ncy9qcy8uCiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKCi0tLQogV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKysrKysKIFdlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlckhhaWt1LmNwcCB8ICAgNDYgKysrKysrKysr
KysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspLCAwIGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlckhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZjczYjQ4Yy4uMzU3MTE0ZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAw
OS0wNi0zMCAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBIYWlrdS1zcGVj
aWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9iaW5kaW5ncy9qcy8uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjYyMAorCisgICAgICAgIFdBUk5JTkc6IE5P
IFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldCk6CisKIDIwMDktMDYtMzAg
IEFkcmllbiBOYWRlciAgPGNhbWFyYWRldHV4QGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXJIYWlrdS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJI
YWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3M2I5NwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlckhhaWt1
LmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5o
IgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NS
ZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNj
cmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0
LT5pc1BsdWdpblZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4zLjMKCg==
</data>
<flag name="review"
          id="16591"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32071</attachid>
            <date>2009-06-30 09:36:47 -0700</date>
            <delta_ts>2009-07-02 14:42:45 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/editing/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-editing.patch</filename>
            <type>text/plain</type>
            <size>3067</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBkMjU1NTJjM2E3ZmJiYWI3NzYyMTM0MjBmM2U0ZGI3ZTJkZWE1YzQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTg6MzU6MTkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9lZGl0aW5nLy4KIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjYyMAoKLS0tCiBXZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKysrKysrKysKIFdlYkNvcmUvZWRpdGlu
Zy9oYWlrdS9FZGl0b3JIYWlrdS5jcHAgfCAgIDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygt
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvZWRpdGluZy9oYWlrdS9FZGl0b3JIYWlrdS5j
cHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGY3M2I0OGMuLmI5OTJjM2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDYtMzAgIE1heGltZSBT
aW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdl
YkNvcmUvZWRpdGluZy8uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNjYyMAorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1Ig
Q0hBTkdFRAorCisgICAgICAgICogZWRpdGluZy9oYWlrdS9FZGl0b3JIYWlrdS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKToKKwogMjAw
OS0wNi0zMCAgQWRyaWVuIE5hZGVyICA8Y2FtYXJhZGV0dXhAZ21haWwuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFhhbiBMb3Blei4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9oYWlr
dS9FZGl0b3JIYWlrdS5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZmRlMWYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2VkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3UuY3BwCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5n
b29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKworI2luY2x1ZGUgIkNsaXBib2Fy
ZEFjY2Vzc1BvbGljeS5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorCisjaW5jbHVkZSAiQ2xp
cGJvYXJkSGFpa3UuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8Q2xp
cGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5
IHBvbGljeSkKK3sKKyAgICByZXR1cm4gbmV3IENsaXBib2FyZEhhaWt1KHBvbGljeSwgZmFsc2Up
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4zLjMKCg==
</data>
<flag name="review"
          id="16593"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32073</attachid>
            <date>2009-06-30 09:42:15 -0700</date>
            <delta_ts>2009-07-02 14:44:31 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/page/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-page.patch</filename>
            <type>text/plain</type>
            <size>12158</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAxODU4OWQ3MmJmNTk2YzUyNjU2Y2U4Yjg1NzQ0MGE1ZTFiNmQwMWYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTg6NDA6MzEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9wYWdlLy4KIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjYyMAoKLS0tCiBXZWJDb3JlL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsrKysrKwogV2ViQ29yZS9wYWdlL2hh
aWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwIHwgICA4MCArKysrKysrKysrKysrKysKIFdlYkNv
cmUvcGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAgICB8ICAxNTAgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogV2ViQ29yZS9wYWdlL2hhaWt1L0ZyYW1lSGFpa3UuY3BwICAgICAg
ICAgIHwgICA0MyArKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAzMDUgaW5zZXJ0aW9ucygrKSwg
MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BhZ2UvaGFpa3UvRHJh
Z0NvbnRyb2xsZXJIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BhZ2UvaGFp
a3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wYWdl
L2hhaWt1L0ZyYW1lSGFpa3UuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNzNiNDhjLi4wMTAxNDMwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisy
MDA5LTA2LTMwICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNw
ZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL3BhZ2UvLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKKworICAgICAgICBXQVJOSU5HOiBOTyBURVNU
IENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICAqIHBhZ2UvaGFpa3UvRHJhZ0NvbnRy
b2xsZXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6
OmlzQ29weUtleURvd24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdP
cGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6Om1heERyYWdJbWFn
ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNsZWFudXBBZnRlclN5
c3RlbURyYWcpOgorICAgICAgICAqIHBhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzS2V5Ym9hcmRPcHRpb25UYWIpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjppbnZlcnRTZW5zZU9mVGFic1RvTGlua3MpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBi
b2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZl
bnRUb1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNl
TW92ZUV2ZW50VG9TdWJmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBh
c3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjphY2Nlc3NLZXlNb2RpZmllcnMpOgorICAgICAgICAqIHBhZ2UvaGFpa3UvRnJhbWVI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRyYWdJbWFnZUZvclNl
bGVjdGlvbik6CisKIDIwMDktMDYtMzAgIEFkcmllbiBOYWRlciAgPGNhbWFyYWRldHV4QGdtYWls
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAgYi9XZWJDb3JlL3BhZ2UvaGFp
a3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODQzNmUzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9oYWlrdS9EcmFn
Q29udHJvbGxlckhhaWt1LmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCisKKyNpbmNsdWRl
ICJEcmFnRGF0YS5oIgorLy8jaW5jbHVkZSAiRnJhbWUuaCIKKy8vI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorLy8jaW5jbHVkZSAiUGFnZS5oIgorCisjaW5jbHVkZSA8SW50ZXJmYWNlRGVmcy5oPgor
CisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisKKy8vIEZJWE1FOiBUaGVzZSB2YWx1ZXMgYXJlIHN0
cmFpZ2h0IG91dCBvZiBEcmFnQ29udHJvbGxlck1hYywgc28gcHJvYmFibHkgaGF2ZSAKKy8vIGxp
dHRsZSBjb3JyZWxhdGlvbiB3aXRoIEhhaWt1IHN0YW5kYXJkcy4uLgorY29uc3QgaW50IERyYWdD
b250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0ID0gMjsKK2NvbnN0IGludCBEcmFnQ29udHJv
bGxlcjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAxNTAwICogMTUwMDsKK2NvbnN0IGludCBEcmFn
Q29udHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0gNzsKK2NvbnN0IGludCBEcmFnQ29udHJv
bGxlcjo6RHJhZ0ljb25Cb3R0b21JbnNldCA9IDM7CisKK2NvbnN0IGZsb2F0IERyYWdDb250cm9s
bGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOworCisKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6Omlz
Q29weUtleURvd24oKQoreworICAgIGlmIChtb2RpZmllcnMoKSAmIEJfQ09NTUFORF9LRVkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorRHJhZ09w
ZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEp
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgaW5jb21wbGV0ZQorICAgIGlmIChkcmFn
RGF0YS0+Y29udGFpbnNVUkwoKSkKKyAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5Owor
CisgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOworfSAKKworY29uc3QgSW50U2l6ZSYgRHJh
Z0NvbnRyb2xsZXI6Om1heERyYWdJbWFnZVNpemUoKQoreworICAgIHN0YXRpYyBjb25zdCBJbnRT
aXplIG1heERyYWdJbWFnZVNpemUoNDAwLCA0MDApOworCisgICAgcmV0dXJuIG1heERyYWdJbWFn
ZVNpemU7Cit9CisKK3ZvaWQgRHJhZ0NvbnRyb2xsZXI6OmNsZWFudXBBZnRlclN5c3RlbURyYWco
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAgYi9XZWJDb3JlL3BhZ2UvaGFpa3UvRXZl
bnRIYW5kbGVySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2
NjcwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVy
SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGlt
ZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkSGFp
a3UuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
Ik1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxC
YXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJX
aWRnZXQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8aW50ZXJm
YWNlL1ZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGRvdWJsZSBFdmVu
dEhhbmRsZXI6OlRleHREcmFnRGVsYXkgPSAwLjA7CisKK3N0YXRpYyBib29sIGlzS2V5Ym9hcmRP
cHRpb25UYWIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgcmV0dXJuIGV2ZW50CisgICAg
ICAgICYmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQKKyAgICAg
ICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpCisg
ICAgICAgICYmIGV2ZW50LT5hbHRLZXkoKQorICAgICAgICAmJiBldmVudC0+a2V5SWRlbnRpZmll
cigpID09ICJVKzAwMDAwOSI7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjppbnZlcnRTZW5zZU9m
VGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlz
S2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6dGFic1Rv
QWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgYm9vbCBoYW5k
bGluZ09wdGlvblRhYiA9IGlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOworCisgICAgcmV0dXJu
IGhhbmRsaW5nT3B0aW9uVGFiOworfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVu
dFZpZXcoKQoreworICAgIEJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpLT5oYWlrdVdpZGdl
dCgpOworICAgIGlmICh2aWV3KQorICAgICAgICB2aWV3LT5NYWtlRm9jdXMoKTsKKworICAgIFBh
Z2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9mcmFtZSk7Cit9CisKK2Jvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKK3sKKyAgICAvLyBGaWd1cmUgb3V0IHdo
aWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQg
PSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiAw
OworICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChzdGF0aWNf
Y2FzdDxSZW5kZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKSk7Cit9CisKK2Jvb2wgRXZlbnRI
YW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJXaWRnZXQqIHJl
bmRlcldpZGdldCkKK3sKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQocmVu
ZGVyV2lkZ2V0LT53aWRnZXQoKSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VE
b3duRXZlbnRUb1dpZGdldChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZh
dGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBjb25zdAoreworICAgIC8vbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYg
ZXZlbnQsIEZyYW1lKiBzdWJmcmFtZSwgSGl0VGVzdFJlc3VsdCopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NX
aGVlbEV2ZW50VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAg
CitQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBi
b2FyZCgpIGNvbnN0IAoreworICAgIHJldHVybiBuZXcgQ2xpcGJvYXJkSGFpa3UoQ2xpcGJvYXJk
V3JpdGFibGUsIHRydWUpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NF
dmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSog
c3ViZnJhbWUpCit7CisgICAgcmV0dXJuIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYs
IHN1YmZyYW1lKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVFdmVudFRv
U3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJh
bWUsIEhpdFRlc3RSZXN1bHQqIGhvdmVyZWROb2RlKQoreworICAgIHJldHVybiBwYXNzU3ViZnJh
bWVFdmVudFRvU3ViZnJhbWUobWV2LCBzdWJmcmFtZSwgaG92ZXJlZE5vZGUpOworfQorCitib29s
IEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKK3sKKyAgICByZXR1cm4g
cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3ViZnJhbWUpOworfQorCit1bnNpZ25l
ZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1vZGlmaWVycygpCit7CisgICAgcmV0dXJuIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6QWx0S2V5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcCBiL1dlYkNvcmUv
cGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40Yjk0ODE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL2hhaWt1L0ZyYW1l
SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0RyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkgCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="16595"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32075</attachid>
            <date>2009-06-30 10:04:00 -0700</date>
            <delta_ts>2009-06-30 10:04:30 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/page/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-page.patch</filename>
            <type>text/plain</type>
            <size>12158</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAxODU4OWQ3MmJmNTk2YzUyNjU2Y2U4Yjg1NzQ0MGE1ZTFiNmQwMWYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTg6NDA6MzEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9wYWdlLy4KIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjYyMAoKLS0tCiBXZWJDb3JlL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsrKysrKwogV2ViQ29yZS9wYWdlL2hh
aWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwIHwgICA4MCArKysrKysrKysrKysrKysKIFdlYkNv
cmUvcGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAgICB8ICAxNTAgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogV2ViQ29yZS9wYWdlL2hhaWt1L0ZyYW1lSGFpa3UuY3BwICAgICAg
ICAgIHwgICA0MyArKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAzMDUgaW5zZXJ0aW9ucygrKSwg
MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BhZ2UvaGFpa3UvRHJh
Z0NvbnRyb2xsZXJIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BhZ2UvaGFp
a3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wYWdl
L2hhaWt1L0ZyYW1lSGFpa3UuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNzNiNDhjLi4wMTAxNDMwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisy
MDA5LTA2LTMwICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNw
ZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL3BhZ2UvLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKKworICAgICAgICBXQVJOSU5HOiBOTyBURVNU
IENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICAqIHBhZ2UvaGFpa3UvRHJhZ0NvbnRy
b2xsZXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6
OmlzQ29weUtleURvd24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdP
cGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6Om1heERyYWdJbWFn
ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNsZWFudXBBZnRlclN5
c3RlbURyYWcpOgorICAgICAgICAqIHBhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzS2V5Ym9hcmRPcHRpb25UYWIpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjppbnZlcnRTZW5zZU9mVGFic1RvTGlua3MpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBi
b2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZl
bnRUb1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNl
TW92ZUV2ZW50VG9TdWJmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBh
c3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjphY2Nlc3NLZXlNb2RpZmllcnMpOgorICAgICAgICAqIHBhZ2UvaGFpa3UvRnJhbWVI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRyYWdJbWFnZUZvclNl
bGVjdGlvbik6CisKIDIwMDktMDYtMzAgIEFkcmllbiBOYWRlciAgPGNhbWFyYWRldHV4QGdtYWls
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAgYi9XZWJDb3JlL3BhZ2UvaGFp
a3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODQzNmUzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9oYWlrdS9EcmFn
Q29udHJvbGxlckhhaWt1LmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCisKKyNpbmNsdWRl
ICJEcmFnRGF0YS5oIgorLy8jaW5jbHVkZSAiRnJhbWUuaCIKKy8vI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorLy8jaW5jbHVkZSAiUGFnZS5oIgorCisjaW5jbHVkZSA8SW50ZXJmYWNlRGVmcy5oPgor
CisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisKKy8vIEZJWE1FOiBUaGVzZSB2YWx1ZXMgYXJlIHN0
cmFpZ2h0IG91dCBvZiBEcmFnQ29udHJvbGxlck1hYywgc28gcHJvYmFibHkgaGF2ZSAKKy8vIGxp
dHRsZSBjb3JyZWxhdGlvbiB3aXRoIEhhaWt1IHN0YW5kYXJkcy4uLgorY29uc3QgaW50IERyYWdD
b250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0ID0gMjsKK2NvbnN0IGludCBEcmFnQ29udHJv
bGxlcjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAxNTAwICogMTUwMDsKK2NvbnN0IGludCBEcmFn
Q29udHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0gNzsKK2NvbnN0IGludCBEcmFnQ29udHJv
bGxlcjo6RHJhZ0ljb25Cb3R0b21JbnNldCA9IDM7CisKK2NvbnN0IGZsb2F0IERyYWdDb250cm9s
bGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOworCisKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6Omlz
Q29weUtleURvd24oKQoreworICAgIGlmIChtb2RpZmllcnMoKSAmIEJfQ09NTUFORF9LRVkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorRHJhZ09w
ZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEp
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgaW5jb21wbGV0ZQorICAgIGlmIChkcmFn
RGF0YS0+Y29udGFpbnNVUkwoKSkKKyAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5Owor
CisgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOworfSAKKworY29uc3QgSW50U2l6ZSYgRHJh
Z0NvbnRyb2xsZXI6Om1heERyYWdJbWFnZVNpemUoKQoreworICAgIHN0YXRpYyBjb25zdCBJbnRT
aXplIG1heERyYWdJbWFnZVNpemUoNDAwLCA0MDApOworCisgICAgcmV0dXJuIG1heERyYWdJbWFn
ZVNpemU7Cit9CisKK3ZvaWQgRHJhZ0NvbnRyb2xsZXI6OmNsZWFudXBBZnRlclN5c3RlbURyYWco
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAgYi9XZWJDb3JlL3BhZ2UvaGFpa3UvRXZl
bnRIYW5kbGVySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2
NjcwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVy
SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGlt
ZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkSGFp
a3UuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
Ik1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxC
YXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJX
aWRnZXQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8aW50ZXJm
YWNlL1ZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGRvdWJsZSBFdmVu
dEhhbmRsZXI6OlRleHREcmFnRGVsYXkgPSAwLjA7CisKK3N0YXRpYyBib29sIGlzS2V5Ym9hcmRP
cHRpb25UYWIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgcmV0dXJuIGV2ZW50CisgICAg
ICAgICYmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQKKyAgICAg
ICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpCisg
ICAgICAgICYmIGV2ZW50LT5hbHRLZXkoKQorICAgICAgICAmJiBldmVudC0+a2V5SWRlbnRpZmll
cigpID09ICJVKzAwMDAwOSI7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjppbnZlcnRTZW5zZU9m
VGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlz
S2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6dGFic1Rv
QWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgYm9vbCBoYW5k
bGluZ09wdGlvblRhYiA9IGlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOworCisgICAgcmV0dXJu
IGhhbmRsaW5nT3B0aW9uVGFiOworfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVu
dFZpZXcoKQoreworICAgIEJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpLT5oYWlrdVdpZGdl
dCgpOworICAgIGlmICh2aWV3KQorICAgICAgICB2aWV3LT5NYWtlRm9jdXMoKTsKKworICAgIFBh
Z2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9mcmFtZSk7Cit9CisKK2Jvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKK3sKKyAgICAvLyBGaWd1cmUgb3V0IHdo
aWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQg
PSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiAw
OworICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChzdGF0aWNf
Y2FzdDxSZW5kZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKSk7Cit9CisKK2Jvb2wgRXZlbnRI
YW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJXaWRnZXQqIHJl
bmRlcldpZGdldCkKK3sKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQocmVu
ZGVyV2lkZ2V0LT53aWRnZXQoKSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VE
b3duRXZlbnRUb1dpZGdldChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZh
dGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBjb25zdAoreworICAgIC8vbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYg
ZXZlbnQsIEZyYW1lKiBzdWJmcmFtZSwgSGl0VGVzdFJlc3VsdCopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NX
aGVlbEV2ZW50VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAg
CitQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBi
b2FyZCgpIGNvbnN0IAoreworICAgIHJldHVybiBuZXcgQ2xpcGJvYXJkSGFpa3UoQ2xpcGJvYXJk
V3JpdGFibGUsIHRydWUpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NF
dmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSog
c3ViZnJhbWUpCit7CisgICAgcmV0dXJuIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYs
IHN1YmZyYW1lKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVFdmVudFRv
U3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJh
bWUsIEhpdFRlc3RSZXN1bHQqIGhvdmVyZWROb2RlKQoreworICAgIHJldHVybiBwYXNzU3ViZnJh
bWVFdmVudFRvU3ViZnJhbWUobWV2LCBzdWJmcmFtZSwgaG92ZXJlZE5vZGUpOworfQorCitib29s
IEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKK3sKKyAgICByZXR1cm4g
cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3ViZnJhbWUpOworfQorCit1bnNpZ25l
ZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1vZGlmaWVycygpCit7CisgICAgcmV0dXJuIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6QWx0S2V5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcCBiL1dlYkNvcmUv
cGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40Yjk0ODE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL2hhaWt1L0ZyYW1l
SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0RyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkgCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCi0tIAoxLjYuMy4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32076</attachid>
            <date>2009-06-30 10:17:01 -0700</date>
            <delta_ts>2009-07-17 04:17:17 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-platform-grap.patch</filename>
            <type>text/plain</type>
            <size>87648</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBjNDNmODk4YzgxNTNiZTEzMWVjNjRjZTk4MzQxNjA2NDA3ZTkzOTg2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMzAgSnVuIDIwMDkgMTk6MTU6NDAgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy8u
CiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKCi0tLQogV2Vi
Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTg4ICsr
KysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAgICAg
IHwgICA1NCArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlrdS5j
cHAgICAgfCAgIDQ4ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVj
dEhhaWt1LmNwcCB8ICAgNTAgKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9u
dENhY2hlSGFpa3UuY3BwIHwgICA5OCArKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ZvbnREYXRhSGFpa3UuY3BwICB8ICAgNzkgKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAgICAgICB8ICAxMDEgKysrKwogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmggfCAgIDY5ICsrKwogLi4uL2dyYXBo
aWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAgICAgICAgfCAgMTc5ICsrKysrKysK
IC4uLi9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcCAgICAgIHwgICA2
NCArKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAg
IHwgICA1NCArKwogLi4uL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcCAg
ICAgICAgfCAgNTYwICsrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ljb25IYWlrdS5jcHAgICAgICB8ICAgNjMgKysrCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oICB8ICAgNDYgKysKIC4uLi9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcCAgIHwgICA4MSArKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAgICAgIHwgIDE3MiArKysr
KysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcCAgIHwg
IDIxOSArKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhh
aWt1LmNwcCAgfCAgIDQ4ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJl
Y3RIYWlrdS5jcHAgICB8ICAgNDkgKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW50U2l6ZUhhaWt1LmNwcCAgIHwgICA0OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9QYXRoSGFpa3UuY3BwICAgICAgfCAgMTU5ICsrKysrKwogLi4uL2dyYXBoaWNzL2hhaWt1
L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwICAgICAgICAgfCAgMTA0ICsrKysKIDIyIGZpbGVzIGNo
YW5nZWQsIDI1MzMgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50
SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnRQbGF0Zm9ybURhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dy
YWRpZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFn
ZUJ1ZmZlckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVj
dEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW50U2l6ZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAKCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY3M2I0
OGMuLmU5MTUzZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkxIEBACisyMDA5LTA2LTMwICBNYXhpbWUgU2ltb24gIDxz
aW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzLy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI2NjIwCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBP
UiBDSEFOR0VECisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Db2xvckhhaWt1
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yIHJnYl9jb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpm
b2N1c1JpbmdDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQ
b2ludEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9h
dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UmVjdDo6b3BlcmF0b3IgQlJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRUcmFpdHNJbkZhbWlseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRm9udERhdGFIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoY2hhcl91bmljb2RlX3RvX3V0
ZjgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Zmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9Gb250UGxhdGZvcm1EYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2gpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJh
dG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dseXBoUGFnZVRyZWVO
b2RlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0
ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ry
b2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVh
clBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25I
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6SWNvbik6CisgICAgICAg
IChXZWJDb3JlOjpJY29uOjp+SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJ
Y29uRm9yRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRCaXRtYXApOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjp+SW1hZ2VT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aXNT
aXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpj
cmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1l
RHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUhh
c0FscGhhQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9p
bnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6OkludFBvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpvcGVyYXRvciBCUG9pbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRS
ZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW50U2l6ZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjpJbnRT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6Om9wZXJhdG9yIEJTaXplKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6flBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXRoOjpib3VuZGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZExpbmVUbyk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjphZGRRdWFkQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjphZGRCZXppZXJDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEFyY1Rv
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNsb3NlU3VicGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjphZGRBcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGg6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlzRW1wdHkpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6ZGVidWdTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Rm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorCiAyMDA5LTA2LTMwICBBZHJpZW4gTmFkZXIgIDxj
YW1hcmFkZXR1eEBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6Lgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Db2xvckhhaWt1LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0YmEzZAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZl
bmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisKKyNpbmNsdWRlIDxJbnRlcmZh
Y2VEZWZzLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb2xvcjo6Q29sb3IoY29uc3Qg
cmdiX2NvbG9yJiBjKQorICAgIDogbV9jb2xvcihtYWtlUkdCQShjLnJlZCwgYy5ncmVlbiwgYy5i
bHVlLCBjLmFscGhhKSkKK3sKKyAgICBtX3ZhbGlkID0gdHJ1ZTsKK30KKworQ29sb3I6Om9wZXJh
dG9yIHJnYl9jb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2VfY29sb3IocmVkKCksIGdy
ZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7Cit9CisKKworQ29sb3IgZm9jdXNSaW5nQ29sb3IoKQor
eworICAgIHJldHVybiBDb2xvcihrZXlib2FyZF9uYXZpZ2F0aW9uX2NvbG9yKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44MWM5ZDlmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNpbmNsdWRlIDxQb2ludC5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBCUG9pbnQmIHAp
CisgICAgOiBtX3gocC54KQorICAgICwgbV95KHAueSkKK3sKK30KKworRmxvYXRQb2ludDo6b3Bl
cmF0b3IgQlBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQlBvaW50KG1feCwgbV95KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjMxZjhiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNsdWRlIDxSZWN0Lmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBCUmVjdCYgcmVjdCkK
KyAgICA6IG1fbG9jYXRpb24ocmVjdC5MZWZ0VG9wKCkpCisgICAgICAvLyBBZGRpbmcgMSBjb3Bp
ZWQgZnJvbSBTeWxsYWJsZSBwb3J0CisgICAgLCBtX3NpemUocmVjdC5XaWR0aCgpICsgMSwgcmVj
dC5IZWlnaHQoKSArIDEpCit7Cit9CisKK0Zsb2F0UmVjdDo6b3BlcmF0b3IgQlJlY3QoKSBjb25z
dAoreworICAgIC8vIEZJWE1FOiBzdWJ0cmFjdCAxIGZyb20gaGVpZ2h0IGFuZCB3aWR0aD8gVGhp
cyB3YXMgbm90IGRvbmUgaW4gU3lsbGFibGUgcG9ydAorICAgIHJldHVybiBCUmVjdChCUG9pbnQo
eCgpLCB5KCkpLCBCU2l6ZSh3aWR0aCgpLGhlaWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250Q2FjaGVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
YWNoZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWY3NTNl
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250
Q2FjaGVIYWlrdS5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgor
CisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9u
dFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1
ZGUgPFN0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FjaGU6
OnBsYXRmb3JtSW5pdCgpCit7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAgICBwcmludGYoIkZvbnRDYWNoZTo6Z2V0Rm9u
dERhdGFGb3JDaGFyYWN0ZXJzXG4iKTsgICAgCisgICAgRm9udFBsYXRmb3JtRGF0YSBkYXRhKGZv
bnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnQuZmFtaWx5KCkuZmFtaWx5KCkpOworICAgIHJldHVy
biBnZXRDYWNoZWRGb250RGF0YSgmZGF0YSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRD
YWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitGb250UGxhdGZvcm1EYXRh
KiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pCit7CisKKyAgICBjb25zdCBCRm9udCogcGNEZWZhdWx0Rm9u
dCA9IGJlX3BsYWluX2ZvbnQ7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5
KCkgPT0gRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpCisgICAgICAgIHBjRGVmYXVs
dEZvbnQgPSBiZV9maXhlZF9mb250OworICAgIGVsc2UgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWln
aHQoKSA9PSBGb250V2VpZ2h0Qm9sZCkKKyAgICAgICAgcGNEZWZhdWx0Rm9udCA9IGJlX2JvbGRf
Zm9udDsKKyAgICBmb250X2ZhbWlseSBmYW1pbHk7CisgICAgcGNEZWZhdWx0Rm9udC0+R2V0RmFt
aWx5QW5kU3R5bGUoJmZhbWlseSwgTlVMTCk7CisgICAgcHJpbnRmKCJGb250Q2FjaGU6OmdldExh
c3RSZXNvcnRGYWxsYmFja0ZvbnQgLT4gJXNcbiIsIGZhbWlseSk7CisgICAgc3RhdGljIEF0b21p
Y1N0cmluZyBzX0RlZmF1bHRTdHIoZmFtaWx5KTsKKworICAgIC8vcmV0dXJuIG5ldyBGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKEJGb250KilwY0RlZmF1bHRGb250KTsKKyAgICBy
ZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIHNfRGVmYXVs
dFN0cik7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogcGNEYXRhID0gbmV3
IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpOworICAgIGlmICghcGNE
YXRhLT5mb250KCkpCisgICAgeworICAgICAgICBwcmludGYoIkNvdWxkIG5vdCBmaW5kIGZvbnQg
JXMhXG4iLCBCU3RyaW5nKGZhbWlseS5zdHJpbmcoKSApLlN0cmluZygpKTsKKyAgICAgICAgZGVs
ZXRlIHBjRGF0YTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBwY0Rh
dGE7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlMzUxNwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKQEAgLTAs
MCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtv
c0BrZGUub3JnPiAKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZl
bmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAi
R2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxpbnRlcmZhY2UvRm9udC5oPgorI2luY2x1
ZGUgPHN1cHBvcnQvVVRGOC5oPgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKworCisvLyBGaXggdGVt
cCByb3V0aW5lIHRvIGNoZWNrIHRoZSBjb252ZXJzaW9uIHdvcmtzLCBwbGVhc2UgbW92ZSBpdCBB
U0FQCQoraW50IGNoYXJfdW5pY29kZV90b191dGY4KHVuc2lnbmVkIHNob3J0IGdseXBoLCBjaGFy
KiBvdXQpIHsKKwlpbnQgaSA9IDA7CisKKwlpZiAoZ2x5cGggPCAweDAwODApCisJCW91dFtpKytd
ID0gKGNoYXIpZ2x5cGg7CisJZWxzZSBpZiAoZ2x5cGggPCAweDA4MDApIHsgLy90d28gYnl0ZXMK
KyAgICAJb3V0W2krK10gPSAweGMwIHwgKCggZ2x5cGggKSA+PiA2ICk7CisgICAgCW91dFtpKytd
ID0gMHg4MCB8ICgoIGdseXBoICkgJiAweDNGICk7CisJfSBlbHNlIGlmIChnbHlwaCA+IDB4MDgw
MCkgeyAvLzMgYnl0ZXMJCisJCW91dFtpKytdID0gMHhlMCB8ICgoIGdseXBoICkgPj4gMTIgKTsK
KyAgICAJb3V0W2krK10gPSAweDgwIHwgKCAoKCBnbHlwaCApID4+IDYgKSAmIDB4M0YgKTsKKyAg
ICAJb3V0W2krK10gPSAweDgwIHwgKCggZ2x5cGggKSAmIDB4M0YpOyAKKyAgICB9CisKKwlvdXRb
aV09J1wwJzsKKwlyZXR1cm4gaTsKK30KKwkJCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKSBjb25zdAoreworCW5vdEltcGxlbWVudGVkKCk7CisJcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
Ljk1MjY0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ZvbnRIYWlrdS5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIAorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Rm9udC5oIgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxpbnRlcmZh
Y2UvRm9udC5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworCitp
bnQgY2hhcl91bmljb2RlX3RvX3V0ZjgodW5zaWduZWQgc2hvcnQgZ2x5cGgsIGNoYXIqIG91dCk7
IC8vIGltcGxlbWVudGVkIGluIEZvbnREYXRhSGFpa3UuY3BwCisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAor
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50
IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorewor
ICAgIENvbG9yIGNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKTsKKyAgICBCVmll
dyogdmlldyA9IChCVmlldyopZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAg
ICBCRm9udCogbV9mb250ID0gKEJGb250Kilmb250LT5wbGF0Zm9ybURhdGEoKS5mb250KCk7CisK
KyAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKKyAgICB2aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOwkJCisgICAgdmlldy0+U2V0
Rm9udChtX2ZvbnQpOworCisgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29uc3RfY2Fz
dDxHbHlwaEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKKyAgICBmbG9h
dCBvZmZzZXQgPSBwb2ludC54KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7
IGkrKykgeworICAgICAgIAljaGFyIG91dFs0XTsKKyAgICAJY2hhcl91bmljb2RlX3RvX3V0Zjgo
Z2x5cGhzW2ldLCBvdXQpOworCisgICAgICAgIHZpZXctPkRyYXdTdHJpbmcob3V0LCBzaXplb2Yo
b3V0KSwgQlBvaW50KG9mZnNldCxwb2ludC55KCkpKTsKKyAgICAgICAgb2Zmc2V0ICs9IGdseXBo
QnVmZmVyLmFkdmFuY2VBdChmcm9tICsgaSk7CisgICAgfQorfQorCit2b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitmbG9hdCBG
b250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMy4wOworfQorCitGbG9hdFJlY3QgRm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBJbnRQb2ludCYs
IGludCwgaW50LCBpbnQpIGNvbnN0Cit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOyAKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGludCwgYm9vbCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRh
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlYTExNAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0
YS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50
ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkg
YW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5j
cHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiAK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YV9ICisjZGVm
aW5lIEZvbnRQbGF0Zm9ybURhdGFfSAorCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKKworLy8gQWRkaW5nIGludGVyZmFjZS8gdG8gYXZvaWQg
Y29uZnVzaW9uIHdpdGggV2ViS2l0IEZvbnQuaAorI2luY2x1ZGUgPGludGVyZmFjZS9Gb250Lmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7
CisgICAgcHVibGljOgorICAgICAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSk7CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSgpOworICAgICAgICBG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mLCBCRm9udCogZm9udCk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIGl0YWxpYyk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZik7CisgICAgICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAg
ICAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKKyAgICAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udCA9PSAwOyB9CisKKyAgICAgICAgQkZvbnQq
IGZvbnQoKSBjb25zdDsKKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKKworICAg
IHByaXZhdGU6CisgICAgICAgIEJGb250KiBtX2ZvbnQ7CisgICAgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjMwOGNjODQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAKQEAgLTAsMCAr
MSwxNzkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBp
bXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVy
IHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24g
SGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIAorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0
Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkF0
b21pY1N0cmluZy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUg
PEZvbnQuaD4KKyNpbmNsdWRlIDxzdXBwb3J0L1N0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSgpCisgICAgOiBtX2Zv
bnQoMCkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgOiBtX2ZvbnQoMCkKK3sKK30KKworRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQor
eworICAgIGlmIChmLm1fZm9udCkKKyAgICB7CisgICAgICAgIG1fZm9udCA9IG5ldyBCRm9udChm
Lm1fZm9udCk7CisgICAgfQorfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseU5hbWUpCisgICAgOiBtX2ZvbnQoMCkKK3sKKyAgICBib29sIGJGb3VuZCA9IGZh
bHNlOworICAgIGJvb2wgYkl0YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsKKyAgICBi
b29sIGJCb2xkID0gZm9udERlc2NyaXB0aW9uLndlaWdodCgpID09IEZvbnRXZWlnaHRCb2xkOwor
ICAgIGZvbnRfZmFtaWx5CWZhbTsKKyAgICAvLyBXZSBzaG91bGQgZmluZCB0aGUgc3BlY2lmaWVk
IGZvbnQuLgorCisgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50X2ZvbnRfZmFtaWxpZXMoKTsg
aSsrKSB7CisKKyAgICAgICAgZ2V0X2ZvbnRfZmFtaWx5KGksICZmYW0sIE5VTEwpOworICAgICAg
ICBpZihCU3RyaW5nKGZhbWlseU5hbWUuc3RyaW5nKCkpLkNvbXBhcmUoZmFtKSA9PSAwKXsKKyAg
ICAgICAgICAgIG1fZm9udCA9IG5ldyBCRm9udCgpOworICAgICAgICAgICAgbV9mb250LT5TZXRG
YW1pbHlBbmRTdHlsZShmYW0sIE5VTEwpOyAvLyBKdXN0IGluIGNhc2Ugd2UgZG9uJ3QgZmluZCBh
IHN0eWxlLi4KKyAgICAgICAgICAgIG1fZm9udC0+U2V0U2l6ZShmb250RGVzY3JpcHRpb24uY29t
cHV0ZWRTaXplKCkpOworCisgICAgICAgICAgICBiRm91bmQ9dHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCQorICAgIGlmIChiRm91bmQpIHsgLy8gTm93IHNlYXJj
aCBmb3Igc3R5bGUuCisKKyAgICAgICAgaW50MzIgbnVtU3R5bGVzID0gY291bnRfZm9udF9zdHls
ZXMoZmFtKTsKKyAgICAgICAgZm9udF9zdHlsZSBzdHlsZSA7CisgICAgICAgIHVpbnQzMiBmbGFn
cyA7CisgICAgICAgIGJGb3VuZCA9IGZhbHNlOwkJCQorCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtU3R5bGVzOyBpKyspIHsKKyAgICAgICAgICAgIGlmICggZ2V0X2ZvbnRfc3R5bGUo
ZmFtLCBpLCAmc3R5bGUsICZmbGFncykgPT0gQl9PSykgeworCisgICAgICAgICAgICAgICAgLy8g
VGhpcyBjb21wYXJpc29ucyBpcyB0YWtlbiBmcm9tIHN5bGxhYmxlOgorICAgICAgICAgICAgICAg
IGlmKChiSXRhbGljICYmIGJCb2xkKSAmJiAgKCFzdHJjbXAoIHN0eWxlLCAiQm9sZEl0YWxpYyIp
CisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhc3RyY21wKHN0eWxlLCAiQm9sZCBPYmxpcXVl
IikpKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBiRm91bmQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZigoYkl0YWxpYyAmJiAhYkJvbGQpICYmICghc3RyY21wKHN0eWxlLCAi
SXRhbGljIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFzdHJjbXAoc3R5bGUsICJPYmxp
cXVlIikpKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBiRm91bmQg
PSB0cnVlOwkJCQkKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYoKCFiSXRhbGljICYmIGJCb2xkKSAmJiAoIXN0cmNtcChz
dHlsZSwgIkJvbGQiKSkpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
IGJGb3VuZCA9IHRydWU7CQkJCQorICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZigoIWJJdGFsaWMgJiYgIWJCb2xkKSAmJiAo
IXN0cmNtcChzdHlsZSwgIlJvbWEiKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXN0cmNt
cChzdHlsZSwgIkJvb2siKSB8fCAhc3RyY21wKHN0eWxlLCAiQ29uZGVuc2VkIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHx8ICFzdHJjbXAoc3R5bGUsICJSZWd1bGFyIikgfHwgIXN0cmNtcChz
dHlsZSwgIk1lZGl1bSIpKSkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgYkZvdW5kID0gdHJ1ZTsJCQkJCisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgfQkJCQkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
KGJGb3VuZCkgLy8gV2UgYWxzbyBmb3VuZCBhIHN0eWxlLgorICAgICAgICAgICAgbV9mb250LT5T
ZXRGYW1pbHlBbmRTdHlsZShmYW0sIHN0eWxlKTsKKyAgICB9Cit9CisKK0ZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIEJGb250KiBmb250KQoreworICAgIG1fZm9udCA9IGZvbnQ7CisgICAgbV9mb250LT5TZXRT
aXplKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykK
K3sKKyAgICBtX2ZvbnQtPlNldFNpemUoc2l6ZSk7CisKKyAgICBpZiAoYm9sZCAmJiBpdGFsaWMp
CisgICAgICAgIG1fZm9udC0+U2V0RmFjZShCX0JPTERfRkFDRSB8IEJfSVRBTElDX0ZBQ0UpOwor
ICAgIGVsc2UgaWYgKGJvbGQpCisgICAgICAgIG1fZm9udC0+U2V0RmFjZShCX0JPTERfRkFDRSk7
CisgICAgZWxzZSBpZiAoaXRhbGljKQorICAgICAgICBtX2ZvbnQtPlNldEZhY2UoQl9JVEFMSUNf
RkFDRSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKKyAg
ICBkZWxldGUgbV9mb250OworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRj
aCgpCit7CisgICAgaWYgKG1fZm9udCkKKyAgICAgICAgcmV0dXJuIG1fZm9udC0+U3BhY2luZygp
ID09IEJfRklYRURfU1BBQ0lORzsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworQkZvbnQqIEZv
bnRQbGF0Zm9ybURhdGE6OmZvbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQ7Cit9CisK
K3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAoreworICAgIHVpbnRwdHJf
dCBoYXNoQ29kZXNbMV0gPSB7ICh1aW50cHRyX3QpZm9udCgpIH07CisgICAgdW5zaWduZWQgblJl
c3VsdCA9IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPiho
YXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworICAgIHJldHVy
biBuUmVzdWx0OworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX2ZvbnQgPT0g
b3RoZXIubV9mb250KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dseXBoUGFnZVRyZWVOb2RlSGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VUcmVlTm9kZUhh
aWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQ2YjljCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VU
cmVlTm9kZUhhaWt1LmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
WmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5v
ZGUuaCIKKworI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQoreworICAg
IGJvb2wgaXNVdGYxNiA9IGJ1ZmZlckxlbmd0aCAhPSBHbHlwaFBhZ2U6OnNpemU7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAg
VUNoYXIzMiBjaGFyYWN0ZXI7CisKKyAgICAgICAgaWYoaXNVdGYxNikgeworICAgICAgICAgICAg
VUNoYXIgbGVhZCA9IGNoYXJhY3RlckJ1ZmZlcltpICogMl07CisgICAgICAgICAgICBVQ2hhciB0
cmFpbCA9IGNoYXJhY3RlckJ1ZmZlcltpICogMiArIDFdOworICAgICAgICAgICAgY2hhcmFjdGVy
ID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGxlYWQsIHRyYWlsKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlckJ1ZmZlcltpXTsKKyAgICAgICAgfQor
CisgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIGNoYXJhY3RlciwgZm9udERhdGEpOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlr
dS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDg5YTIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3Bw
CkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2aW4gT2xsaXZp
ZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUB0aGVvbGxpdmllcnMu
Y29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIK
KworI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJv
eSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1HcmFkaWVudCBHcmFk
aWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jZTU4YWExCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKQEAgLTAsMCArMSw1NjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJQZW4uaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKwor
I2luY2x1ZGUgPEdyYXBoaWNzRGVmcy5oPgorCisjaW5jbHVkZSA8Vmlldy5oPgorI2luY2x1ZGUg
PFdpbmRvdy5oPgorI2luY2x1ZGUgPFJlZ2lvbi5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlCit7CitwdWJsaWM6CisgICAg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3KTsKKyAgICB+R3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CisKKyAgICBCVmlldyogdmlldzsKK307CisKK0dy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKEJWaWV3KiBwX3ZpZXcpCit7CisgICAgdmlldyA9IHBfdmlldzsKK30KKworR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkK
K3sKK30KKworR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQ
cml2YXRlKCkpCisgICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZShjb250ZXh0KSkKK3sKKyAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFjb250ZXh0KTsKK30KKwor
R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3sKKyAgICBkZXN0cm95R3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CisgICAgZGVsZXRlIG1fZGF0YTsKK30KKworUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT52aWV3OworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQoreworICAgIG1fZGF0YS0+dmlldy0+UHVzaFN0YXRl
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCit7
CisgICAgbV9kYXRhLT52aWV3LT5Qb3BTdGF0ZSgpOworfQorCisvLyBEcmF3cyBhIGZpbGxlZCBy
ZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3LT5GaWxsUmVjdChyKTsKKyAgICBp
ZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAgbV9kYXRhLT52aWV3LT5TdHJv
a2VSZWN0KHIsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKKy8vIFRoaXMgaXMgb25seSB1
c2VkIHRvIGRyYXcgYm9yZGVycy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25z
dCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdHJva2VTdHls
ZSgpID09IE5vU3Ryb2tlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlN0
cm9rZUxpbmUocG9pbnQxLCBwb2ludDIsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKKy8v
IFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2Vk
IGluIGxpc3RzLgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9kYXRhLT52aWV3LT5GaWxsRWxsaXBzZShyZWN0KTsKKyAgICBpZiAoc3Ryb2tl
U3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAgbV9kYXRhLT52aWV3LT5TdHJva2VFbGxpcHNl
KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmds
ZVNwYW4pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9kYXRhLT52aWV3LT5TdHJva2VBcmMocmVjdCwgc3RhcnRBbmdsZSwgYW5nbGVTcGFu
LCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50
KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJQb2ludCBiUG9pbnRzW25wb2ludHNdOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnBvaW50czsgaSsrKQorICAgICAgICBiUG9pbnRz
W2ldID0gcG9pbnRzW2ldOworCisgICAgbV9kYXRhLT52aWV3LT5GaWxsUG9seWdvbihiUG9pbnRz
LCBucG9pbnRzKTsKKyAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAg
Ly8gU3Ryb2tlIHdpdGggbG93IGNvbG9yCisgICAgICAgIG1fZGF0YS0+dmlldy0+U3Ryb2tlUG9s
eWdvbihiUG9pbnRzLCBucG9pbnRzLCB0cnVlLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgYykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICByZ2JfY29sb3Igb2xkQ29sb3IgPSBtX2RhdGEtPnZpZXctPkhpZ2hDb2xv
cigpOworICAgIG1fZGF0YS0+dmlldy0+U2V0SGlnaENvbG9yKGMpOworICAgIG1fZGF0YS0+dmll
dy0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9kYXRhLT52aWV3LT5TZXRIaWdoQ29sb3Iob2xkQ29s
b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwg
Y29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFjb2xv
ci5hbHBoYSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IC8vIEZJWE1FOiBBIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBjb3VsZCBqdXN0IHVzZSBGaWxsUm91
bmRSZWN0IGlmIGFsbCAKKyAgICAvLyB0aGUgc2l6ZXMgYXJlIHRoZSBzYW1lLCBvciBldmVuIGlm
IHRoZXkgYXJlIG5vdC4gT3RoZXJ3aXNlIHNldmVyYWwKKyAgICAvLyBGaWxsUmVjdCBhbmQgRmls
bEFyYyBjYWxscyBhcmUgbmVlZGVkLgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblBhdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEJSZWdpb24gcmVnaW9uKHJlY3QpOworICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/
CisgICAgLy8gc3lsbGFibGUgYWRkczoKKyAgICAvLyBjUmVjdCArPSBtX2RhdGEtPnAoKS0+R2V0
U2Nyb2xsT2Zmc2V0KCk7IHRvIHRoZSByZWN0IGJlZm9yZQorICAgIC8vIGNyZWF0aW4gdGhlIHJl
Z2lvbi4KKyAgICBtX2RhdGEtPnZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKCZyZWdpb24p
OworfQorCit2b2lkIHNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkK
K3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgQ29sb3Im
IGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMgPSBmb2N1c1JpbmdSZWN0cygpOwor
ICAgIHVuc2lnbmVkIHJlY3RDb3VudCA9IHJlY3RzLnNpemUoKTsKKworICAgIC8vIEZJWE1FOiBt
YXliZSB3ZSBzaG91bGQgaW1wbGVtZW50IHRoaXMgd2l0aCBCU2hhcGU/CisKKyAgICBpZiAocmVj
dHMuc2l6ZSgpID4gMSkKKyAgICB7CisgICAgICAgIEJSZWdpb24JcmVnaW9uOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQorICAgICAgICAgICAgcmVnaW9uLklu
Y2x1ZGUoQlJlY3QocmVjdHNbaV0pKTsKKworICAgICAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hD
b2xvcihjb2xvcik7CisgCQltX2RhdGEtPnZpZXctPlN0cm9rZVJlY3QocmVnaW9uLkZyYW1lKCks
Ql9NSVhFRF9DT0xPUlMpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dChjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJvb2wgcHJpbnRp
bmcpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKTsKKyAgICBk
cmF3TGluZShvcmlnaW4sIGVuZFBvaW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdp
ZHRoLCBib29sIGdyYW1tYXIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZyZWN0OworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lM
YXllcigpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBmbG9hdCB3aWR0
aCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmbG9hdCBvbGRTaXplID0gbV9kYXRhLT52aWV3LT5QZW5TaXplKCk7CisgICAgbV9kYXRhLT52
aWV3LT5TZXRQZW5TaXplKHdpZHRoKTsKKyAgICBtX2RhdGEtPnZpZXctPlN0cm9rZVJlY3Qociwg
Z2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBtX2RhdGEtPnZpZXctPlNldFBlblNpemUob2xk
U2l6ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGMp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FwX21vZGUgbW9kZSA9IEJfQlVUVF9DQVA7CisgICAgc3dpdGNoIChsYykgeworICAgIGNhc2Ug
Um91bmRDYXA6CisgICAgICAgIG1vZGUgPSBCX1JPVU5EX0NBUDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgIG1vZGUgPSBCX1NRVUFSRV9DQVA7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQnV0dENhcDoKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBtX2RhdGEtPnZpZXctPlNldExpbmVNb2RlKG1vZGUsIG1fZGF0YS0+dmll
dy0+TGluZUpvaW5Nb2RlKCksIG1fZGF0YS0+dmlldy0+TGluZU1pdGVyTGltaXQoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaikKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBqb2luX21vZGUg
bW9kZSA9IEJfTUlURVJfSk9JTjsKKyAgICBzd2l0Y2ggKGxqKSB7CisgICAgY2FzZSBSb3VuZEpv
aW46CisgICAgICAgIG1vZGUgPSBCX1JPVU5EX0pPSU47CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQmV2ZWxKb2luOgorICAgICAgICBtb2RlID0gQl9CRVZFTF9KT0lOOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE1pdGVySm9pbjoKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBtX2RhdGEtPnZpZXctPlNldExpbmVNb2RlKG1fZGF0YS0+dmlldy0+TGluZUNh
cE1vZGUoKSwgbW9kZSwgbV9kYXRhLT52aWV3LT5MaW5lTWl0ZXJMaW1pdCgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3
LT5TZXRMaW5lTW9kZShtX2RhdGEtPnZpZXctPkxpbmVDYXBNb2RlKCksIG1fZGF0YS0+dmlldy0+
TGluZUpvaW5Nb2RlKCksIGxpbWl0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFs
cGhhKGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkcmF3aW5n
X21vZGUgbW9kZSA9IEJfT1BfQ09QWTsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBDb21w
b3NpdGVDbGVhcjoKKyAgICBjYXNlIENvbXBvc2l0ZUNvcHk6CisgICAgICAgIC8vIFVzZSB0aGUg
ZGVmYXVsdCBhYm92ZQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU92
ZXI6CisgICAgICAgIG1vZGUgPSBCX09QX09WRVI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRp
b246IFVuc3VwcG9ydGVkIGNvbXBvc2l0ZSBvcGVyYXRpb24gJXNcbiIsCisgICAgICAgICAgICBj
b21wb3NpdGVPcGVyYXRvck5hbWUob3ApLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyAgICBtX2Rh
dGEtPnZpZXctPlNldERyYXdpbmdNb2RlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+dmlldy0+Q29uc3RyYWluQ2xpcHBpbmdS
ZWdpb24ocGF0aC5wbGF0Zm9ybVBhdGgoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlQnVmZmVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0Cit7IAorICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitJbnRQb2ludCBHcmFwaGljc0NvbnRleHQ6Om9yaWdpbigpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0
IEludFJlY3QmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHRoaWNrbmVzcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0p
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRp
b25RdWFsaXR5KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChj
b25zdCBLVVJMJiBsaW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Gb250KGNv
bnN0IEZvbnQmIGFGb250KQoreworICAgIG1fZGF0YS0+dmlldy0+U2V0Rm9udChhRm9udC5wcmlt
YXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5mb250KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52
aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworfQorCitwYXR0ZXJuCUdyYXBoaWNzQ29udGV4dDo6
Z2V0SGFpa3VTdHJva2VTdHlsZSgpeworICAgIHN3aXRjaCAoc3Ryb2tlU3R5bGUoKSkgeworICAg
IGNhc2UgU29saWRTdHJva2U6CisgICAgICAgIHJldHVybiBCX1NPTElEX0hJR0g7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRG90dGVkU3Ryb2tlOgorICAgICAgICByZXR1cm4gQl9NSVhFRF9D
T0xPUlM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGFzaGVkU3Ryb2tlOgorICAgICAgICAv
LyBGSVhNRTogdXNlIGEgYmV0dGVyIGRhc2hlZCBzdHJva2UhCisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7IAorICAgICAgICByZXR1cm4gQl9NSVhFRF9DT0xPUlM7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBCX1NPTElEX0xPVzsKKyAgICAgICAgYnJlYWs7
CisJfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShj
b25zdCBTdHJva2VTdHlsZSYgc3Ryb2tlU3R5bGUpCit7ICAgCisJLy8gRklYTUUgc2VlIGdldEhh
aWt1U3Ryb2tlU3R5bGUuCisJCisgICAgLy9pZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIC8v
ICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSBpbXBsZW1l
bnRlZCB1c2luZyBwYXR0ZXJucy4gVGhlIHN0cm9rZVN0eWxlczoKKyAgICAvLyBlbnVtIFN0cm9r
ZVN0eWxlIHsKKyAgICAvLyAgICAgTm9TdHJva2UsCisgICAgLy8gICAgIFNvbGlkU3Ryb2tlLAor
ICAgIC8vICAgICBEb3R0ZWRTdHJva2UsCisgICAgLy8gICAgIERhc2hlZFN0cm9rZQorICAgIC8v
IH07CisgICAgLy9ub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+dmlldy0+
U2V0UGVuU2l6ZSh0aGlja25lc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+dmlldy0+U2V0SGlnaENv
bG9yKGNvbG9yKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFk
b3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVNoYWRvdyhJbnRTaXplIGNvbnN0JixpbnQsQ29sb3IgY29uc3QmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTZkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RA
Z21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJY29uLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJY29uOjpJ
Y29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitJY29uOjp+SWNvbigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyAgICAKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3Jl
YXRlSWNvbkZvckZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBQYXNzUmVmUHRyPEljb24+KDApOworfQorCitQYXNzUmVmUHRy
PEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmls
ZW5hbWVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8
SWNvbj4oMCk7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lt
YWdlQnVmZmVyRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1
ZmZlckRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ5YTBkCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1
ZmZlckRhdGEuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1h
eGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqIAorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlQnVmZmVyRGF0YV9oCisjZGVmaW5lIEltYWdl
QnVmZmVyRGF0YV9oCisKKyNpbmNsdWRlICJPd25QdHIuaCIKKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyAgICBjbGFzcyBJbnRTaXplOworCisgICAgY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJik7Cisg
ICAgfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBJbWFnZUJ1ZmZl
ckRhdGFfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lt
YWdlQnVmZmVySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFn
ZUJ1ZmZlckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGUz
ZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bWFnZUJ1ZmZlckhhaWt1LmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJEYXRh
OjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCit7Cit9CisKK0ltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgYm9vbCBncmF5U2NhbGUsIGJvb2wmIHN1Y2Nlc3Mp
CisgICAgOiBtX2RhdGEoSW50U2l6ZSgpKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
c3VjY2VzcyA9IGZhbHNlOworfQorCitJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKK3sKK30K
KworR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxJbWFnZURh
dGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
cjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2lu
dCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyOjp0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bWFnZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWQxNGVl
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFn
ZUhhaWt1LmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBE
aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21h
bm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEg
QW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCisj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEFwcGxpY2F0aW9uLmg+CisjaW5j
bHVkZSA8Qml0bWFwLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisjaW5jbHVkZSA8bWF0aC5oPgor
CisKKy8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0CitWZWN0b3I8
Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCit7
CisgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisgICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7
CisKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICAvLyBGSVhNRTogTm90IHN1cmUgd2h5IGJl
X2FwcCBpcyBjaGVja2VkICh0aGlzIHdhcyBjb3BpZWQgZnJvbSBTeWxsYWJsZSkKKyAgICAgICAg
aWYgKGJlX2FwcCkKKyAgICAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lOworICAgICAgICBtX2ZyYW1l
ID0gMDsKKyAgICAgICAgbV9kdXJhdGlvbiA9IDAuMGY7CisgICAgICAgIG1faGFzQWxwaGEgPSB0
cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor
Ly8gSW1hZ2UgQ2xhc3MKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorCitXVEY6OlBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIFZlY3RvcjxjaGFyPiBhcnIgPSBsb2Fk
UmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7CisgICAgV1RGOjpQYXNzUmVmUHRyPEJpdG1hcEltYWdl
PiBpbWcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoYXJyLmRhdGEoKSwgYXJyLnNpemUoKSk7Cisg
ICAgaW1nLT5zZXREYXRhKGJ1ZmZlciwgdHJ1ZSk7CisgICAgcmV0dXJuIGltZzsKK30KKwordm9p
ZCBCaXRtYXBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgpCit7Cit9CisKK3ZvaWQgQml0bWFwSW1h
Z2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQoreworfQorCisvLyBEcmF3aW5nIFJvdXRpbmVz
Cit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNy
YywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgQkJpdG1hcCogaW1hZ2UgPSBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVh
cmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9y
KGN0eHQsIGRzdCwgc29saWRDb2xvcigpLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBJbnRTaXplIHNlbGZTaXplID0gc2l6ZSgpOworCisgICAgY3R4dC0+c2F2ZSgpOworCisg
ICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgLy8gRklYTUU6IHdlIHNo
b3VsZCBzdXBwb3J0IGFsbCB0aGUgY29tcG9zaXRlIG1vZGVzIDoKKyAgICAvLwljdHh0LT5zZXRD
b21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgQlZpZXcqIHZpZXcgPSBjdHh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKworICAgIEJSZWN0IHNyY1JlY3Qoc3JjKTsKKyAgICAvLyBUZXN0IHVzaW5n
IGV4YW1wbGUgc2l0ZSBhdAorICAgIC8vIGh0dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3Nz
L2VkZ2UvY29tcGxleHNwaXJhbC9kZW1vLmh0bWwKKyAgICB2aWV3LT5TZXREcmF3aW5nTW9kZShC
X09QX0FMUEhBKTsgICAgCisgICAgdmlldy0+RHJhd0JpdG1hcChpbWFnZSwgc3JjUmVjdCAmIGlt
YWdlLT5Cb3VuZHMoKSwgZHN0KTsKKworICAgIGN0eHQtPnJlc3RvcmUoKTsKKworICAgIHN0YXJ0
QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiBzcmNQb2ludCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCkKK3sKKwkvLyBGSVhNRTogZmluaXNoIHRoaXMgdG8gc3VwcG9ydCBhbHNvIHBo
YXNlZCBwb3NpdGlvbiAoc3JjUG9pbnQpCisKKyAgICBCQml0bWFwKiBpbWFnZSA9IG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFy
bHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKworICAgIGZs
b2F0IGN1cnJlbnRXID0gMDsKKyAgICBmbG9hdCBjdXJyZW50SCA9IDA7CisKKyAgICBjdHh0LT5z
YXZlKCk7CisKKyAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+U2V0RHJhd2luZ01vZGUoQl9P
UF9BTFBIQSk7CisKKyAgICBjdHh0LT5jbGlwKEludFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3Qu
eSgpLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpKTsKKworICAgIHdoaWxlIChj
dXJyZW50VyA8IGRzdFJlY3Qud2lkdGgoKSkgeworICAgICAgICB3aGlsZSAoY3VycmVudEggPCBk
c3RSZWN0LmhlaWdodCgpKSB7CisgICAgICAgICAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
RHJhd0JpdG1hcChpbWFnZSwgQlBvaW50KGRzdFJlY3QueCgpICsgY3VycmVudFcsIGRzdFJlY3Qu
eSgpICsgY3VycmVudEgpKTsKKyAgICAgICAgICAgIGN1cnJlbnRIICs9IHRpbGVSZWN0LmhlaWdo
dCgpOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRXICs9IHRpbGVSZWN0LndpZHRoKCk7Cisg
ICAgICAgIGN1cnJlbnRIID0gMDsKKyAgICB9CisgICAgY3R4dC0+cmVzdG9yZSgpOworCisgICAg
c3RhcnRBbmltYXRpb24oKTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENv
bG9yKCkKK3sKKyAgICAvLyBGSVhNRTogSXQncyBlYXN5IHRvIGltcGxlbWVudCB0aGlzIG9wdGlt
aXphdGlvbi4KKyAgICAvLyBKdXN0IG5lZWQgdG8gY2hlY2sgdGhlIFJHQkEzMiBidWZmZXIgdG8g
c2VlIGlmIGl0IGlzIDF4MS4gICAgCisgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKK30KKwor
QkJpdG1hcCogQml0bWFwSW1hZ2U6OmdldEJpdG1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8Qml0bWFwSW1hZ2UqPih0aGlzKS0+ZnJhbWVBdEluZGV4KDApOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjA2NmUxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pICAgPGFuZHJlYS5hbnphbmlAZ21h
aWwuY29tPgorICogCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRv
ckRlY29kZXIuaCIKKyNpbmNsdWRlICJQTkdJbWFnZURlY29kZXIuaCIKKy8vICNpbmNsdWRlICJK
UEVHSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVk
ZSAiSUNPSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiWEJNSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEJpdG1hcC5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgSGFpa3UgdHJh
bnNsYXRvciBBUEkKK0ltYWdlRGVjb2RlciogY3JlYXRlRGVjb2Rlcihjb25zdCBWZWN0b3I8Y2hh
cj4mIGRhdGEpCit7CisgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBv
dXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcgd2l0aC4KKyAgICBpbnQgbGVuZ3Ro
ID0gZGF0YS5zaXplKCk7CisgICAgaWYgKGxlbmd0aCA8IDQpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogdUNvbnRlbnRzID0gKGNvbnN0IHVuc2lnbmVkIGNo
YXIqKSBkYXRhLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBjb250ZW50cyA9IGRhdGEuZGF0YSgp
OworCisgICAgLy8gR0lGcyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5KS4KKyAgICBpZiAoc3RybmNt
cChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAwKQorICAgICAgICByZXR1cm4gbmV3IEdJRkltYWdl
RGVjb2RlcigpOworCisgICAgLy8gVGVzdCBmb3IgUE5HLgorICAgIGlmICh1Q29udGVudHNbMF0g
PT0gMHg4OSAmJgorICAgICAgICB1Q29udGVudHNbMV0gPT0gMHg1MCAmJgorICAgICAgICB1Q29u
dGVudHNbMl0gPT0gMHg0RSAmJgorICAgICAgICB1Q29udGVudHNbM10gPT0gMHg0NykKKyAgICAg
ICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIoKTsKKworICAgIC8vIEpQRUcKKyAgICAvLyBp
ZiAodUNvbnRlbnRzWzBdID09IDB4RkYgJiYKKyAgICAvLyAgICAgdUNvbnRlbnRzWzFdID09IDB4
RDggJiYKKyAgICAvLyAgICAgdUNvbnRlbnRzWzJdID09IDB4RkYpCisgICAgLy8gICAgIHJldHVy
biBuZXcgSlBFR0ltYWdlRGVjb2RlcigpOworCisgICAgLy8gQk1QCisgICAgaWYgKHN0cm5jbXAo
Y29udGVudHMsICJCTSIsIDIpID09IDApCisgICAgICAgIHJldHVybiBuZXcgQk1QSW1hZ2VEZWNv
ZGVyKCk7CisKKyAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93
ZWQgYnkgYSAyLWJ5dGUgMS4KKyAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93
ZWQgYnkgMi1ieXRlIDIuCisgICAgLy8gaWYgKCFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFww
MDFcMDAwIiwgNCkgfHwKKyAgICAvLyAgICAgIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAw
MlwwMDAiLCA0KSkKKyAgICAvLyAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoKTsKKwor
ICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCisgICAgaWYgKGxlbmd0aCA+PSA4
ICYmIHN0cm5jbXAoY29udGVudHMsICIjZGVmaW5lICIsIDgpID09IDApCisgICAgICAgIHJldHVy
biBuZXcgWEJNSW1hZ2VEZWNvZGVyKCk7CisKKyAgICBwcmludGYoIkludmFsaWQgaW1hZ2UhXG4i
ICk7CisgICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBoZWNrIHRoaXMgaXMu
CisgICAgcmV0dXJuIDA7Cit9CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZSgpCisgICAgOiBt
X2RlY29kZXIoMCkKK3sKK30KKworSW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCit7CisgICAg
Y2xlYXIodHJ1ZSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFs
bCwgc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGRlbGV0ZSBtX2Rl
Y29kZXI7CisgICAgbV9kZWNvZGVyID0gMDsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlh
bGl6ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXI7Cit9CisKK3ZvaWQgSW1hZ2VT
b3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkK
K3sKKyAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KKyAgICAv
LyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFuIGlu
c3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KKyAgICAvLyBJZiBpbnN1
ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUs
IG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKKyAgICAvLyBtYWRlLgorICAgIGlmKCFtX2RlY29k
ZXIpCisgICAgCW1fZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoZGF0YS0+YnVmZmVyKCkpOworCisg
ICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlY29kZXItPnNldERh
dGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXpl
QXZhaWxhYmxlKCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7Cit9CisKK0ludFNp
emUgSW1hZ2VTb3VyY2U6OnNpemUoKSBjb25zdAoreworICAgIGlmICghbV9kZWNvZGVyKQorICAg
ICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2l6ZSgpOwor
fQorCitJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc2l6ZSgpOworfQorCitpbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25D
b3VudCgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBjQW5pbWF0aW9u
Tm9uZTsKKworICAgIHJldHVybiBtX2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOworfQorCitT
dHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworc2l6ZV90IEltYWdlU291
cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNv
ZGVyLT5mcmFtZUNvdW50KCkgOiAwOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6
Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rl
ci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXIt
PnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7Cit9CisKK2Jvb2wgSW1h
Z2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlm
ICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSR0JBMzJCdWZmZXIq
IGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICByZXR1
cm4gYnVmZmVyICYmIGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBs
ZXRlOworfQorCitmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVy
OjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBidWZmZXItPmR1
cmF0aW9uKCkgLyAxMDAwLjBmOworfQorCitib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhh
QXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIgfHwgIW1fZGVjb2Rl
ci0+c3VwcG9ydHNBbHBoYSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSR0JBMzJC
dWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAg
ICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVF
bXB0eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGJ1ZmZlci0+aGFzQWxw
aGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iNTU1YTRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcApAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFp
bC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKworI2luY2x1ZGUgPFBvaW50Lmg+CisKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRQb2ludDo6SW50UG9pbnQoY29uc3QgQlBvaW50JiBw
KQorICAgIDogbV94KHN0YXRpY19jYXN0PGludD4ocC54KSkKKyAgICAsIG1feShzdGF0aWNfY2Fz
dDxpbnQ+KHAueSkpCit7Cit9CisKK0ludFBvaW50OjpvcGVyYXRvciBCUG9pbnQoKSBjb25zdAor
eworICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVj
dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRhZGJiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3Uu
Y3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2
ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNp
bmNsdWRlIDxSZWN0Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRSZWN0OjpJbnRS
ZWN0KGNvbnN0IEJSZWN0JiByKQorICAgIDogbV9sb2NhdGlvbihyLkxlZnRUb3AoKSkKKyAgICAs
IG1fc2l6ZShyLkludGVnZXJXaWR0aCgpICsgMSwgci5JbnRlZ2VySGVpZ2h0KCkgKyAxKQorewor
fQorCitJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN1
YnRyYWN0IDEgZnJvbSBoZWlnaHQgYW5kIHdpZHRoPworICAgIHJldHVybiBCUmVjdChCUG9pbnQo
eCgpLCB5KCkpLCBCU2l6ZSh3aWR0aCgpLGhlaWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bnRTaXplSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXpl
SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjkxYTUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVI
YWlrdS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIK
KworI2luY2x1ZGUgPFNpemUuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemU6
OkludFNpemUoY29uc3QgQlNpemUmIHMpCisgICAgOiBtX3dpZHRoKHMuSW50ZWdlcldpZHRoKCkp
CisgICAgLCBtX2hlaWdodChzLkludGVnZXJIZWlnaHQoKSkKK3sKK30KKworSW50U2l6ZTo6b3Bl
cmF0b3IgQlNpemUoKSBjb25zdAoreworICAgIHJldHVybiBCU2l6ZSh3aWR0aCgpLCBoZWlnaHQo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjVmMjc4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQYXRoLmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPG1h
dGguaD4KKyNpbmNsdWRlIDxSZWdpb24uaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
dGg6OlBhdGgoKQorICAgIDogbV9wYXRoKG5ldyBCUmVnaW9uKCkpCit7Cit9CisKK1BhdGg6On5Q
YXRoKCkKK3sKKyAgICBkZWxldGUgbV9wYXRoOworfQorCitQYXRoOjpQYXRoKGNvbnN0IFBhdGgm
IG90aGVyKQorICAgIDogbV9wYXRoKG5ldyBCUmVnaW9uKCpvdGhlci5wbGF0Zm9ybVBhdGgoKSkp
Cit7Cit9CisKK1BhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKK3sKKyAg
ICBpZiAoJm90aGVyICE9IHRoaXMpCisgICAgICAgIG1fcGF0aCA9IG90aGVyLnBsYXRmb3JtUGF0
aCgpOworCisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAoreworICAgIHJldHVybiBt
X3BhdGgtPkNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVj
dCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPkZyYW1l
KCk7Cit9CisKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorewor
ICAgIC8vIEZJWE1FOiBVc2UgT2Zmc2V0Qnk/CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCit9CisK
K3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsJCit9CisKK3ZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJ
Cit9CisKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEs
IGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50
JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOwkKK30KKwordm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBw
LCBmbG9hdCByLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CQorfQorCit2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByKQoreworICAgIG1fcGF0aC0+SW5jbHVkZShyKTsKK30KKwordm9pZCBQYXRoOjph
ZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwkK
K30KKwordm9pZCBQYXRoOjpjbGVhcigpCit7CisgICAgbV9wYXRoLT5NYWtlRW1wdHkoKTsKK30K
KworYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fcGF0aC0+RnJh
bWUoKS5Jc1ZhbGlkKCk7Cit9CisKK1N0cmluZyBQYXRoOjpkZWJ1Z1N0cmluZygpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lk
IFBhdGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsJCit9CisKK3ZvaWQgUGF0aDo6dHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsJCit9CisKK0Zsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tl
U3R5bGVBcHBsaWVyKiBhcHBsaWVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzJkYTMKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRh
SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVkZSAiRm9udENhY2hl
LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Jbml0KCkKK3sgICAgCisgICAgQkZvbnQgKmZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7
CisgICAgaWYgKGZvbnQpIHsKKyAgICAgICAgZm9udF9oZWlnaHQgaGVpZ2h0OworICAgICAgICBm
b250LT5HZXRIZWlnaHQoJmhlaWdodCk7CisgICAgICAgIG1fYXNjZW50ID0gaGVpZ2h0LmFzY2Vu
dDsKKyAgICAgICAgbV9kZXNjZW50ID0gaGVpZ2h0LmRlc2NlbnQ7CisgICAgICAgIG1fbGluZVNw
YWNpbmcgPSBoZWlnaHQubGVhZGluZzsKKyAgICAgICAgbV94SGVpZ2h0ID0gZm9udC0+U2l6ZSgp
OyAvLyBOb3Qgc3VyZSBhYm91dCB0aGlzCisgICAgICAgIG1fdW5pdHNQZXJFbSA9IDE7IC8vIEZJ
WE1FIQorICAgICAgICBtX2xpbmVHYXAgPSBoZWlnaHQubGVhZGluZzsKKyAgICB9Cit9CisKK3Zv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdD
aGFyV2lkdGggPSAwLmY7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5pdENoYXJX
aWR0aHMoKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sK
KyAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRh
ID0gMDsKK30KKworU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAg
ICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpeworICAgICAgICBGb250RGVzY3JpcHRpb24gZGVz
YyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBkZXNjLnNldFNw
ZWNpZmllZFNpemUoMC43MGYqZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKKyAgICAg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGRhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShk
ZXNjLCBkZXNjLmZhbWlseSgpLmZhbWlseSgpKTsKKyAgICAgICAgbV9zbWFsbENhcHNGb250RGF0
YSA9IG5ldyBTaW1wbGVGb250RGF0YSgqcGRhdGEpOworICAgIH0KKyAgICByZXR1cm4gbV9zbWFs
bENhcHNGb250RGF0YTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBXZSB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgdG8gbG9hZCBub24tQVNDSUkg
ZW5jb2Rpbmcgc2l0ZXMKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0
YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIGlmIChtX3BsYXRmb3JtRGF0YS5mb250KCkpCisg
ICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5mb250KCktPklzRml4
ZWQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKK30K
KworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwLjA7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMwoK
</data>
<flag name="review"
          id="16598"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32917</attachid>
            <date>2009-07-17 00:14:55 -0700</date>
            <delta_ts>2009-07-19 05:39:46 -0700</delta_ts>
            <desc>Modifications on WebKit source code to allow Haiku port.</desc>
            <filename>Modifications-on-WebKit-source-code-to-allow-Haiku-p.patch</filename>
            <type>text/plain</type>
            <size>28064</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAzN2UwMjNiZDM0OTNkYWUwOGVkOTQ3YmNiZDRhNTRlNjBmZTA2ZTY2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMTcgSnVsIDIwMDkgMDg6NTk6MzQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBN
b2RpZmljYXRpb25zIG9uIFdlYktpdCBzb3VyY2UgY29kZSB0byBhbGxvdyBIYWlrdSBwb3J0LgoK
LS0tCiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgIHwgICAx
MSArKysrKysKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcCAgICAgICAgICAg
fCAgIDEwICsrKysrCiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCAgICAgICAgICAgICAg
ICAgIHwgICAyMCArKysrKysrKystLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgNDMgKysrKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL2Nv
bmZpZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArKwogV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUv
cGxhdGZvcm0vQ29udGV4dE1lbnUuaCAgICAgICAgICAgICAgICAgfCAgICA1ICsrKwogV2ViQ29y
ZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCAgICAgICAgICAgICB8ICAgIDQgKysKIFdlYkNv
cmUvcGxhdGZvcm0vQ3Vyc29yLmggICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsrKwogV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKysKIFdl
YkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmggICAgICAgICAgICAgICAgICAgfCAgICA0ICsrCiBX
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oICAgICAgIHwgICAgOCArKysr
CiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmggICAgIHwgICAgNCAr
KwogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCAgICAgICAgICB8ICAgIDgg
KysrKwogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCAgICAgICAgICB8ICAg
IDggKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaCAgICAgICAgICAgICAgICAgICB8
ICAgIDQgKysKIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgICAgICAgICAgICAgICAg
fCAgICA2ICsrLS0KIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oICAgICAgICAgICAgICAg
ICAgfCAgIDEzICsrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmggICAgICAgICAgICAg
ICAgICAgICAgfCAgICA3ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuaCAgICAgICAgfCAgIDEyICsrKysrKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaCAgICAgICAgICAgICAgfCAgICA5ICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaCAgICAgICAgIHwgICAgOSArKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaCAgICAgICAgICB8ICAgIDkgKysrKysKIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCAgfCAgICAyICstCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oICAgIHwgICAgOCArKysrCiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ljb24uaCAgICAgICAgICAgICAgIHwgICAgMiArCiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggICAgICAgIHwgICAgNiArKysKIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCAgICAgICAgICAgfCAgICA1ICsrKwogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmggICAgICAgICAgICB8ICAgIDUgKysrCiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCAgICAgICAgICAgIHwgICAgNyArKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaCAgICAgICAgICAgICAgIHwgICAgMyArKwogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmggICAgICAgICAgICB8ICAgIDMgKysKIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaCAgICAgfCAgICA4ICsrKysK
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggfCAgICAyICst
CiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCAgICAgIHwgICAgMiAr
LQogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmggICAgICAgICB8ICAgIDkg
KysrKysKIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuaCAgICAgICAgICAgfCAg
ICA0ICsrCiAzNyBmaWxlcyBjaGFuZ2VkLCAyNjMgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCmluZGV4IDBlZmY4MjMuLmVlODRkMDggMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAwOS0wNy0xNiAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb2Rp
ZmljYXRpb25zIG9uIFdlYktpdCBzb3VyY2UgY29kZSB0byBhbGxvdyBIYWlrdSBwb3J0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKKworICAg
ICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y3VycmVudFRocmVh
ZFN0YWNrQmFzZSk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMDktMDctMTUgIExh
c3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db2xsZWN0b3IuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCmlu
ZGV4IDA3YTg4OTguLjQ2MDg1ZmIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29sbGVjdG9yLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAK
QEAgLTUyLDEwICs1MiwxNiBAQAogCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCisjZWxpZiBQTEFU
Rk9STShIQUlLVSkKKworI2luY2x1ZGUgPE9TLmg+CisKICNlbGlmIFBMQVRGT1JNKFVOSVgpCiAK
ICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAhUExBVEZPUk0oSEFJS1UpCiAjaW5jbHVkZSA8c3lz
L21tYW4uaD4KKyNlbmRpZgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaWYgUExBVEZPUk0oU09M
QVJJUykKQEAgLTQ5Myw2ICs0OTksMTAgQEAgc3RhdGljIGlubGluZSB2b2lkKiBjdXJyZW50VGhy
ZWFkU3RhY2tCYXNlKCkKICAgICAgICAgc3RhY2tCYXNlID0gKHZvaWQqKWluZm8uaUJhc2U7CiAg
ICAgfQogICAgIHJldHVybiAodm9pZCopc3RhY2tCYXNlOworI2VsaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgdGhyZWFkX2luZm8gdGhyZWFkSW5mbzsKKyAgICBnZXRfdGhyZWFkX2luZm8oZmluZF90
aHJlYWQoTlVMTCksICZ0aHJlYWRJbmZvKTsKKyAgICByZXR1cm4gdGhyZWFkSW5mby5zdGFja19l
bmQ7CiAjZWxpZiBQTEFURk9STShVTklYKQogICAgIHN0YXRpYyB2b2lkKiBzdGFja0Jhc2UgPSAw
OwogICAgIHN0YXRpYyBzaXplX3Qgc3RhY2tTaXplID0gMDsKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5k
ZXggNTY5ZTE0Yi4uOTg2MmZjZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRm
b3JtLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKQEAgLTExOSw3ICsxMTks
OCBAQAogICAgfHwgZGVmaW5lZCh1bml4KSAgICAgICAgXAogICAgfHwgZGVmaW5lZChfX3VuaXgp
ICAgICAgXAogICAgfHwgZGVmaW5lZChfX3VuaXhfXykgICAgXAotICAgfHwgZGVmaW5lZChfQUlY
KQorICAgfHwgZGVmaW5lZChfQUlYKSAgICAgICAgXAorICAgfHwgZGVmaW5lZChfX0hBSUtVX18p
CiAjZGVmaW5lIFdURl9QTEFURk9STV9VTklYIDEKICNlbmRpZgogCkBAIC0xNDQsNiArMTQ1LDgg
QEAKICNkZWZpbmUgV1RGX1BMQVRGT1JNX1dYIDEKICNlbGlmIGRlZmluZWQoQlVJTERJTkdfR1RL
X18pCiAjZGVmaW5lIFdURl9QTEFURk9STV9HVEsgMQorI2VsaWYgZGVmaW5lZChCVUlMRElOR19I
QUlLVV9fKQorI2RlZmluZSBXVEZfUExBVEZPUk1fSEFJS1UgMQogI2VsaWYgUExBVEZPUk0oREFS
V0lOKQogI2RlZmluZSBXVEZfUExBVEZPUk1fTUFDIDEKICNlbGlmIFBMQVRGT1JNKFdJTl9PUykK
QEAgLTE5MCw3ICsxOTMsNyBAQAogCiAvKiBNYWtlcyBQTEFURk9STShXSU4pIGRlZmF1bHQgdG8g
UExBVEZPUk0oQ0FJUk8pICovCiAvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgY2hhbmdlZCBmcm9t
IGEgYmxhY2tsaXN0IHRvIGEgd2hpdGVsaXN0ICovCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9STShDSFJPTUlVTSkKKyNpZiAh
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShXWCkgJiYgIVBMQVRG
T1JNKENIUk9NSVVNKSAmJiAhUExBVEZPUk0oSEFJS1UpCiAjZGVmaW5lIFdURl9QTEFURk9STV9D
QUlSTyAxCiAjZW5kaWYKIApAQCAtMzk1LDYgKzM5OCwxNCBAQAogI2VuZGlmCiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEhBSUtVKQorI2RlZmluZSBIQVZFX1BPU0lYX01FTUFMSUdOIDEKKyNkZWZp
bmUgV1RGX1VTRV9DVVJMIDEKKyNkZWZpbmUgV1RGX1VTRV9QVEhSRUFEUyAxCisjZGVmaW5lIFVT
RV9TWVNURU1fTUFMTE9DIDEKKyNkZWZpbmUgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgMAor
I2VuZGlmCisKICNpZiAhZGVmaW5lZChIQVZFX0FDQ0VTU0lCSUxJVFkpCiAjaWYgUExBVEZPUk0o
SVBIT05FKSB8fCBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShDSFJPTUlVTSkKICNkZWZpbmUgSEFWRV9BQ0NFU1NJQklMSVRZIDEKQEAg
LTQwNSw3ICs0MTYsNyBAQAogI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKICNlbmRpZgogCi0jaWYg
IVBMQVRGT1JNKFdJTl9PUykgJiYgIVBMQVRGT1JNKFNPTEFSSVMpICYmICFQTEFURk9STShTWU1C
SUFOKSAmJiAhQ09NUElMRVIoUlZDVCkKKyNpZiAhUExBVEZPUk0oV0lOX09TKSAmJiAhUExBVEZP
Uk0oU09MQVJJUykgJiYgIVBMQVRGT1JNKFNZTUJJQU4pICYmICFDT01QSUxFUihSVkNUKSAmJiAh
KEhBSUtVKQogI2RlZmluZSBIQVZFX1RNX0dNVE9GRiAxCiAjZGVmaW5lIEhBVkVfVE1fWk9ORSAx
CiAjZGVmaW5lIEhBVkVfVElNRUdNIDEKQEAgLTQ2MCw3ICs0NzEsMTAgQEAKIC8qIEZJWE1FOiBp
cyB0aGlzIGFjdHVhbGx5IHVzZWQgb3IgZG8gb3RoZXIgcGxhdGZvcm1zIGdlbmVyYXRlIHRoZWly
IG93biBjb25maWcuaD8gKi8KIAogI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorLyogQXMgbG9uZyBh
cyBIYWlrdSBkb2Vzbid0IGhhdmUgYSBjb21wbGV0ZSBzdXBwb3J0IG9mIGxvY2FsZSB0aGlzIHdp
bGwgYmUgZGlzYWJsZWQuICovCisjaWYgIVBMQVRGT1JNKEhBSUtVKQogI2RlZmluZSBIQVZFX0xB
TkdJTkZPX0ggMQorI2VuZGlmCiAjZGVmaW5lIEhBVkVfTU1BUCAxCiAjZGVmaW5lIEhBVkVfU0JS
SyAxCiAjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2U1YTgwNi4uNTBlZmQ5NiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
NiBAQAorMjAwOS0wNy0xNiAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmlj
YXRpb25zIG9uIFdlYktpdCBzb3VyY2UgY29kZSB0byBhbGxvdyBIYWlrdSBwb3J0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKKworICAgICAg
ICAqIGNvbmZpZy5oOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51
SXRlbS5oOgorICAgICAgICAqIHBsYXRmb3JtL0N1cnNvci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L0RyYWdEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmg6CisgICAgICAgICog
cGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vUGxh
dGZvcm1NZW51RGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybU1vdXNl
RXZlbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Qb3B1cE1lbnUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSWNvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpn
ZXRCRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1VuaWNvZGVSYW5nZS5oOgorCiAyMDA5LTA3LTE1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xh
emtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9jb25maWcuaCBiL1dlYkNvcmUvY29uZmlnLmgKaW5kZXggNDEx
ZGRiMS4uNzE0N2FmYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jb25maWcuaAorKysgYi9XZWJDb3Jl
L2NvbmZpZy5oCkBAIC0xODcsMyArMTg3LDcgQEAgdHlwZWRlZiBmbG9hdCBDR0Zsb2F0OwogI2lm
IFBMQVRGT1JNKFdJTikgJiYgUExBVEZPUk0oQ0cpCiAjZGVmaW5lIFdURl9VU0VfU0FGQVJJX1RI
RU1FIDEKICNlbmRpZgorCisjaWYgUExBVEZPUk0oSEFJS1UpCisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAzZjAyOTZlLi5lYjY5NzYxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMjMwMiw3ICsyMzAyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6Omhh
bmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdF
dmUKIH0KICAgICAKICAgICAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpCisj
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oSEFJS1UpCiBi
b29sIEV2ZW50SGFuZGxlcjo6aW52ZXJ0U2Vuc2VPZlRhYnNUb0xpbmtzKEtleWJvYXJkRXZlbnQq
KSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vQ29udGV4dE1lbnUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAppbmRleCBk
YzQ4NGIyLi5jYjczNThlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCkBAIC0zNiw2ICszNiw4IEBA
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VsaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVk
ZSA8UU1lbnU+CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyNpbmNsdWRlIDxQb2ludC5oPgogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc4LDYgKzgwLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1fcGxhdGZvcm1EZXNj
cmlwdGlvbjsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTGlzdDxDb250ZXh0TWVudUl0
ZW0+IG1faXRlbXM7CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICAgICAgUGxhdGZvcm1NZW51
RGVzY3JpcHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworICAgICAgICBCUG9pbnQgbV9wb2lu
dDsKICNlbHNlCiAgICAgICAgIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1fcGxhdGZvcm1EZXNj
cmlwdGlvbjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVu
dUl0ZW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmgKaW5kZXggMjkxMjU4
ZC4uMWVjNTNiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0u
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oCkBAIC00Niw2ICs0Niw4
IEBAIHR5cGVkZWYgc3RydWN0IF9HdGtNZW51SXRlbSBHdGtNZW51SXRlbTsKICNpbmNsdWRlIDxR
QWN0aW9uPgogI2VsaWYgUExBVEZPUk0oV1gpCiBjbGFzcyB3eE1lbnVJdGVtOworI2VsaWYgUExB
VEZPUk0oSEFJS1UpCitjbGFzcyBCTWVudUl0ZW07CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMjAyLDYgKzIwNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBjaGVja2VkOwogICAgICAgICBib29sIGVuYWJsZWQ7CiAgICAgfTsKKyNlbGlmIFBMQVRGT1JN
KEhBSUtVKQorICAgIHR5cGVkZWYgQk1lbnVJdGVtKiBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRp
b247CiAjZWxzZQogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9u
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9DdXJzb3IuaAppbmRleCBlYTc1MTkxLi4yZDA0MWQyIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmgK
QEAgLTQwLDYgKzQwLDggQEAgdHlwZWRlZiBzdHJ1Y3QgX0dka0N1cnNvciBHZGtDdXJzb3I7CiAj
aW5jbHVkZSA8UUN1cnNvcj4KICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgIlBs
YXRmb3JtQ3Vyc29yLmgiCisjZWxpZiBQTEFURk9STShIQUlLVSkKKyNpbmNsdWRlIDxhcHAvQ3Vy
c29yLmg+CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTg2LDYgKzg4LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgLy8gU2VlIFBs
YXRmb3JtQ3Vyc29yLmgKICAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ3Vyc29ySGFuZGxlOwor
I2VsaWYgUExBVEZPUk0oSEFJS1UpCisgICAgdHlwZWRlZiBCQ3Vyc29yKiBQbGF0Zm9ybUN1cnNv
cjsKKyAgICB0eXBlZGVmIEJDdXJzb3IqIFBsYXRmb3JtQ3Vyc29ySGFuZGxlOwogI2Vsc2UKICAg
ICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ3Vyc29yOwogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZv
cm1DdXJzb3JIYW5kbGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKaW5kZXggYTJjNTYyOC4uNDYyNDI0YiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vRHJhZ0RhdGEuaApAQCAtNTYsNiArNTYsOSBAQCB0eXBlZGVmIGNsYXNzIHd4RGF0YU9iamVj
dCogRHJhZ0RhdGFSZWY7CiB0eXBlZGVmIHZvaWQqIERyYWdEYXRhUmVmOwogI2VsaWYgUExBVEZP
Uk0oQ0hST01JVU0pCiAjaW5jbHVkZSAiRHJhZ0RhdGFSZWYuaCIKKyNlbGlmIFBMQVRGT1JNKEhB
SUtVKQorY2xhc3MgQk1lc3NhZ2U7Cit0eXBlZGVmIGNsYXNzIEJNZXNzYWdlKiBEcmFnRGF0YVJl
ZjsKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCmluZGV4IGE5MDM5ZGIuLjkxZThhYTAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnSW1hZ2UuaApAQCAtNDgsNiArNDgsOCBAQCBjbGFzcyB3eERyYWdJbWFnZTsKICNp
bmNsdWRlICJEcmFnSW1hZ2VSZWYuaCIKICNlbGlmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3Ry
dWN0IF9HZGtQaXhidWYgR2RrUGl4YnVmOworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBC
Qml0bWFwOwogI2VuZGlmCiAKIC8vV2UgbmVlZCB0byAjZGVmaW5lIFlPZmZzZXQgYXMgaXQgbmVl
ZHMgdG8gYmUgc2hhcmVkIHdpdGggV2ViS2l0CkBAIC03Miw2ICs3NCw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICB0eXBlZGVmIHd4RHJhZ0ltYWdlKiBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQ
TEFURk9STShHVEspCiAgICAgdHlwZWRlZiBHZGtQaXhidWYqIERyYWdJbWFnZVJlZjsKKyNlbGlm
IFBMQVRGT1JNKEhBSUtVKQorICAgIHR5cGVkZWYgQkJpdG1hcCogRHJhZ0ltYWdlUmVmOwogI2Vu
ZGlmCiAgICAgCiAgICAgSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJbWFnZVJlZik7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAppbmRleCA0YTZiYzllLi40YTA2NzMx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKQEAgLTU5LDYgKzU5
LDEwIEBAIFFUX0VORF9OQU1FU1BBQ0UKIGNsYXNzIHd4S2V5RXZlbnQ7CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQk1lc3NhZ2U7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50IHsKQEAgLTE0OCw2ICsx
NTIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQod3hLZXlFdmVudCYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICAgICAg
UGxhdGZvcm1LZXlib2FyZEV2ZW50KEJNZXNzYWdlKik7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JN
KFdJTikgfHwgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIGJvb2wgaXNTeXN0ZW1LZXkoKSBj
b25zdCB7IHJldHVybiBtX2lzU3lzdGVtS2V5OyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaCBiL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaAppbmRleCA2NTUzN2ViLi4zODBkZWQ0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oCkBAIC00MCw2ICs0MCw4IEBA
IHR5cGVkZWYgc3RydWN0IEhNRU5VX18qIEhNRU5VOwogdHlwZWRlZiBzdHJ1Y3QgX0d0a01lbnUg
R3RrTWVudTsKICNlbGlmIFBMQVRGT1JNKFdYKQogY2xhc3Mgd3hNZW51OworI2VsaWYgUExBVEZP
Uk0oSEFJS1UpCitjbGFzcyBCTWVudTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01NSw2ICs1Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB0eXBlZGVmIEd0a01lbnUq
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uOwogI2VsaWYgUExBVEZPUk0oV1gpCiAgICAgdHlwZWRl
ZiB3eE1lbnUqIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uOworI2VsaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgdHlwZWRlZiBCTWVudSogUGxhdGZvcm1NZW51RGVzY3JpcHRpb247CiAjZWxzZQogICAg
IHR5cGVkZWYgdm9pZCogUGxhdGZvcm1NZW51RGVzY3JpcHRpb247CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmggYi9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCmluZGV4IDI1NDNkNDAuLmY0NzZjNDUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaApAQCAtNTAsNiArNTAsMTAgQEAgdHlwZWRlZiBs
b25nIExQQVJBTTsKIGNsYXNzIHd4TW91c2VFdmVudDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
SEFJS1UpCitjbGFzcyBCTWVzc2FnZTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgCiAgICAgLy8gVGhlc2UgYnV0dG9uIG51bWJlcnMgbWF0Y2ggdGhlIG9uZXMgdXNlZCBpbiB0
aGUgRE9NIEFQSSwgMCB0aHJvdWdoIDIsIGV4Y2VwdCBmb3IgTm9CdXR0b24gd2hpY2ggaXNuJ3Qg
c3BlY2lmaWVkLgpAQCAtMTI4LDYgKzEzMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIFBsYXRmb3JtTW91c2VFdmVudChjb25zdCB3eE1vdXNlRXZlbnQmLCBjb25zdCB3eFBvaW50
JiBnbG9iYWxQb2ludCwgaW50IGNsaWNrQ291bnQpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShI
QUlLVSkKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IEJNZXNzYWdlKiwgQlBvaW50
IHNjcmVlblBvaW50KTsKKyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBJbnRQb2lu
dCBtX3Bvc2l0aW9uOwogICAgICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKaW5kZXggYWU4ZGY0ZS4uMTk3ODQzOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC00OSw2ICs0OSwxMCBAQCBjbGFzcyB3
eE1vdXNlRXZlbnQ7CiBjbGFzcyB3eFBvaW50OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlL
VSkKK2NsYXNzIEJNZXNzYWdlOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEZsb2F0UG9pbnQ7CkBAIC0xMDksNiArMTEzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KGNvbnN0IHd4TW91c2VFdmVudCYsIGNvbnN0
IHd4UG9pbnQmKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgICAgIFBsYXRm
b3JtV2hlZWxFdmVudChCTWVzc2FnZSopOworI2VuZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIEludFBvaW50IG1fcG9zaXRpb247CiAgICAgICAgIEludFBvaW50IG1fZ2xvYmFsUG9zaXRp
b247CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9Qb3B1cE1lbnUuaAppbmRleCBmYzg1ZDYwLi40ODlmOTYyIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBN
ZW51LmgKQEAgLTU5LDYgKzU5LDggQEAgY2xhc3Mgd3hNZW51OwogI2luY2x1ZGUgPHd4L2V2ZW50
Lmg+CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJQb3B1cE1lbnVQcml2YXRl
LmgiCisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJNZW51OwogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTE3Nyw2ICsxNzksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgT25N
ZW51SXRlbVNlbGVjdGVkKHd4Q29tbWFuZEV2ZW50Jik7CiAjZWxpZiBQTEFURk9STShDSFJPTUlV
TSkKICAgICBQb3B1cE1lbnVQcml2YXRlIHA7CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICBC
TWVudSogbV9tZW51OwogI2VuZGlmCiAKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCBi
YTZiNjFjLi41NzRhNjYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKQEAgLTkxMCw3ICs5MTAs
NyBAQCB2b2lkIFNjcm9sbFZpZXc6OnJlbW92ZVBhblNjcm9sbEljb24oKQogICAgIGhvc3RXaW5k
b3coKS0+cmVwYWludChJbnRSZWN0KG1fcGFuU2Nyb2xsSWNvblBvaW50LCBJbnRTaXplKHBhbklj
b25TaXplTGVuZ3RoLCBwYW5JY29uU2l6ZUxlbmd0aCkpLCB0cnVlLCB0cnVlKTsKIH0KIAotI2lm
ICFQTEFURk9STShXWCkgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFFUKQorI2lmICFQ
TEFURk9STShXWCkgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZP
Uk0oSEFJS1UpCiAKIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jbml0KCkKIHsKQEAgLTkyMiw3
ICs5MjIsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCiAKICNlbmRpZgog
Ci0jaWYgIVBMQVRGT1JNKFdYKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oUVQpICYm
ICFQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKFdYKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAh
UExBVEZPUk0oUVQpICYmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShIQUlLVSkKIAogdm9p
ZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKFdpZGdldCopCiB7CkBAIC05NDIsNyArOTQy
LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhcnNTdXBwcmVzc2VkKGJv
b2wgcmVwYWludE9uVW5zdXBwcmVzcykKIAogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oV1gpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFdYKSAmJiAh
UExBVEZPUk0oSEFJS1UpCiAKIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxiYXJN
b2RlcygpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCmluZGV4IGI5NTAzMjcuLjdlNGVkOGYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5oCkBAIC00Nyw2ICs0NywxMSBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrQWRq
dXN0bWVudCBHdGtBZGp1c3RtZW50OwogY2xhc3Mgd3hTY3JvbGxXaW5FdmVudDsKICNlbmRpZgog
CisjaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCVmlldzsKK2NsYXNzIEJTY3JvbGxWaWV3Owor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSG9zdFdpbmRvdzsKQEAgLTMy
NSw2ICszMzAsMTQgQEAgcHJpdmF0ZToKICAgICBTY3JvbGxWaWV3UHJpdmF0ZSogbV9kYXRhOwog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsbG93
c1Njcm9sbGluZyhib29sKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0
ZTsKKyAgICBTY3JvbGxWaWV3UHJpdmF0ZSogbV9kYXRhOworI2VuZGlmCiB9OyAvLyBjbGFzcyBT
Y3JvbGxWaWV3CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vV2lkZ2V0LmggYi9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCmluZGV4IDVmZDE4
ZmEuLjdmMWMyZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaApAQCAtNjUsNiArNjUsMTEgQEAgY2xhc3Mgd3hXaW5k
b3c7CiB0eXBlZGVmIHd4V2luZG93KiBQbGF0Zm9ybVdpZGdldDsKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oSEFJS1UpCitjbGFzcyBCVmlldzsKK3R5cGVkZWYgQlZpZXcqIFBsYXRmb3JtV2lkZ2V0
OworI2VuZGlmCisKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJQbGF0Zm9ybVdp
ZGdldC5oIgogI2VuZGlmCkBAIC0yMTEsNiArMjE2LDggQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRG
T1JNKE1BQykKICAgICBXaWRnZXRQcml2YXRlKiBtX2RhdGE7CisjZWxpZiBQTEFURk9STShIQUlL
VSkKKyAgICBXaWRnZXRQcml2YXRlKiBkYXRhOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggOGI3NzBhMS4uOGRiZGZlZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtNDQsNiArNDQsMTAgQEAgY2xhc3Mg
TlNJbWFnZTsKIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCisj
aWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCQml0bWFwOworI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBzdHJ1Y3QgRnJhbWVEYXRhOwogfQpAQCAtMTYwLDEwICsxNjQsMTYgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXpl
JiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOworCiAjaWYgUExBVEZPUk0oV1gp
CiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFu
c2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7Ci0jZW5k
aWYgICAgCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEhBSUtVKQorICAgIHZpcnR1YWwgQkJpdG1h
cCogZ2V0Qml0bWFwKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHNpemVfdCBjdXJyZW50RnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZTsgfQogICAgIHNpemVfdCBmcmFtZUNvdW50
KCk7CiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmgKaW5kZXggN2FjNDMyZi4uNGZhMTUxMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuaApAQCAtNDcsNiArNDcsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dka0NvbG9yIEdk
a0NvbG9yOwogY2xhc3Mgd3hDb2xvdXI7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQor
c3RydWN0IHJnYl9jb2xvcjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFN0cmluZzsKQEAgLTEyMSw2ICsxMjUsMTEgQEAgcHVibGljOgogICAgIENvbG9yKENHQ29sb3JS
ZWYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBDb2xvcihjb25zdCByZ2Jf
Y29sb3ImKTsKKyAgICBvcGVyYXRvciByZ2JfY29sb3IoKSBjb25zdDsKKyNlbmRpZgorCiAgICAg
c3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUsIFJHQkEzMiYgcmdi
KTsKIAogICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgYmxhY2sgPSAweEZGMDAwMDAwOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAppbmRleCAxNTdjMWU3Li5kOTUzYjNiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaApAQCAtNTEsNiArNTEsMTAgQEAgY2xh
c3MgUVBvaW50RjsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJ
S1UpCitjbGFzcyBCUG9pbnQ7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFNLSUEpCiBzdHJ1Y3Qg
U2tQb2ludDsKICNlbmRpZgpAQCAtOTAsNiArOTQsMTEgQEAgcHVibGljOgogICAgIG9wZXJhdG9y
IFFQb2ludEYoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgRmxv
YXRQb2ludChjb25zdCBCUG9pbnQmKTsKKyAgICBvcGVyYXRvciBCUG9pbnQoKSBjb25zdDsKKyNl
bmRpZgorCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICBvcGVyYXRvciBTa1BvaW50KCkgY29uc3Q7
CiAgICAgRmxvYXRQb2ludChjb25zdCBTa1BvaW50Jik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAppbmRleCAwNzIzZWI3Li5jNmE4NmJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmgKQEAgLTUxLDYgKzUxLDEwIEBAIFFUX0VORF9OQU1FU1BBQ0UKIGNsYXNz
IHd4UmVjdDJERG91YmxlOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJS
ZWN0OworI2VuZGlmCisKICNpZiBQTEFURk9STShTS0lBKQogc3RydWN0IFNrUmVjdDsKICNlbmRp
ZgpAQCAtMTM4LDYgKzE0MiwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3Igd3hSZWN0MkREb3Vi
bGUoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgRmxvYXRSZWN0
KGNvbnN0IEJSZWN0Jik7CisgICAgb3BlcmF0b3IgQlJlY3QoKSBjb25zdDsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oU0tJQSkKICAgICBGbG9hdFJlY3QoY29uc3QgU2tSZWN0Jik7CiAgICAgb3Bl
cmF0b3IgU2tSZWN0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAKaW5kZXggNGRhZTNkMi4uMTkwOWY5NCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNTE2LDcgKzUxNiw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShpbnQgbW9kZSkK
IH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oQ0FJUk8pICYmICFQ
TEFURk9STShTS0lBKQorI2lmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKENBSVJPKSAmJiAh
UExBVEZPUk0oU0tJQSkgJiYgIVBMQVRGT1JNKEhBSUtVKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmKQogewogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggNWYyZjdhMy4uNWVl
N2ZjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBA
IC02NSw2ICs2NSwxMCBAQCBjbGFzcyB3eFdpbmRvd0RDOwogI2VuZGlmCiAjZWxpZiBQTEFURk9S
TShTS0lBKQogdHlwZWRlZiBjbGFzcyBQbGF0Zm9ybUNvbnRleHRTa2lhIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0OworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCVmlldzsKK3R5cGVkZWYg
QlZpZXcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CitzdHJ1Y3QgcGF0dGVybjsKICNlbHNlCiB0
eXBlZGVmIHZvaWQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZW5kaWYKQEAgLTM1NCw2ICsz
NTgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBHZGtFdmVudEV4cG9zZSogZ2Rr
RXhwb3NlRXZlbnQoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAg
ICAgIHBhdHRlcm4gZ2V0SGFpa3VTdHJva2VTdHlsZSgpOworI2VuZGlmCisKICAgICBwcml2YXRl
OgogICAgICAgICB2b2lkIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CiAgICAgICAgIHZvaWQgcmVzdG9y
ZVBsYXRmb3JtU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SWNvbi5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKaW5kZXggNDQ0YzY3Yy4u
ODY1MDEzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKQEAgLTc4LDYgKzc4LDggQEAgcHJp
dmF0ZToKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIEljb24oY29uc3QgUGxhdGZvcm1J
Y29uJik7CiAgICAgUGxhdGZvcm1JY29uIG1faWNvbjsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQor
ICAgIEljb24oKTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCmluZGV4IGFjYjY0ZGUuLjdlNzNhNTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgKQEAgLTQ2LDYgKzQ2LDggQEAgc3RydWN0IF9jYWlyb19zdXJmYWNlOwog
dHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwogI2VsaWYgUExB
VEZPUk0oU0tJQSkKIGNsYXNzIE5hdGl2ZUltYWdlU2tpYTsKKyNlbGlmIFBMQVRGT1JNKEhBSUtV
KQorY2xhc3MgQkJpdG1hcDsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OCw2
ICs4MCwxMCBAQCB0eXBlZGVmIGNhaXJvX3N1cmZhY2VfdCogTmF0aXZlSW1hZ2VQdHI7CiBjbGFz
cyBJbWFnZURlY29kZXI7CiB0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQ
dHI7CiB0eXBlZGVmIE5hdGl2ZUltYWdlU2tpYSogTmF0aXZlSW1hZ2VQdHI7CisjZWxpZiBQTEFU
Rk9STShIQUlLVSkKK2NsYXNzIEltYWdlRGVjb2RlcjsKK3R5cGVkZWYgSW1hZ2VEZWNvZGVyKiBO
YXRpdmVJbWFnZVNvdXJjZVB0cjsKK3R5cGVkZWYgQkJpdG1hcCogTmF0aXZlSW1hZ2VQdHI7CiAj
ZW5kaWYKIAogY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IC0xOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRQb2ludC5oCmluZGV4IDIxYWY2N2IuLjZhZDFhNTMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFBvaW50LmgKQEAgLTU1LDYgKzU1LDggQEAgY2xhc3MgUVBvaW50OwogUVRf
RU5EX05BTUVTUEFDRQogI2VsaWYgUExBVEZPUk0oR1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0dka1Bv
aW50IEdka1BvaW50OworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCUG9pbnQ7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKFdYKQpAQCAtMTIxLDYgKzEyMyw5IEBAIHB1YmxpYzoKICNlbGlm
IFBMQVRGT1JNKEdUSykKICAgICBJbnRQb2ludChjb25zdCBHZGtQb2ludCYpOwogICAgIG9wZXJh
dG9yIEdka1BvaW50KCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICBJbnRQb2lu
dChjb25zdCBCUG9pbnQmKTsKKyAgICBvcGVyYXRvciBCUG9pbnQoKSBjb25zdDsKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oV1gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCmluZGV4IDZj
MDJkMjEuLmU0OGM2ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCkBAIC00OSw2
ICs0OSw4IEBAIGNsYXNzIFFSZWN0OwogUVRfRU5EX05BTUVTUEFDRQogI2VsaWYgUExBVEZPUk0o
R1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0dka1JlY3RhbmdsZSBHZGtSZWN0YW5nbGU7CisjZWxpZiBQ
TEFURk9STShIQUlLVSkKK2NsYXNzIEJSZWN0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXWCkK
QEAgLTE0NCw2ICsxNDYsOSBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgSW50
UmVjdChjb25zdCBHZGtSZWN0YW5nbGUmKTsKICAgICBvcGVyYXRvciBHZGtSZWN0YW5nbGUoKSBj
b25zdDsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgIEludFJlY3QoY29uc3QgQlJlY3QmKTsK
KyAgICBvcGVyYXRvciBCUmVjdCgpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShDRykK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKaW5kZXggZGM3YTg1ZC4uYmI3OTEyNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKQEAgLTQ3LDYgKzQ3LDggQEAgdHlwZWRlZiBz
dHJ1Y3QgdGFnU0laRSBTSVpFOwogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRU2l6ZTsKIFFU
X0VORF9OQU1FU1BBQ0UKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlNpemU7CiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEzLDYgKzExNSwxMSBAQCBwdWJsaWM6CiAg
ICAgb3BlcmF0b3IgUVNpemUoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgSW50U2l6ZShjb25zdCBCU2l6ZSYpOworICAgIG9wZXJhdG9yIEJTaXplKCkgY29uc3Q7
CisjZW5kaWYKKwogCiBwcml2YXRlOgogICAgIGludCBtX3dpZHRoLCBtX2hlaWdodDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmgKaW5kZXggMDQ3MTcyNC4uMmQzNjEzOSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmgKQEAgLTQ4LDYgKzQ4LDkgQEAgdHlwZWRlZiBXZWJDb3JlOjpDYWlyb1BhdGgg
UGxhdGZvcm1QYXRoOwogI2VsaWYgUExBVEZPUk0oU0tJQSkKIGNsYXNzIFNrUGF0aDsKIHR5cGVk
ZWYgU2tQYXRoIFBsYXRmb3JtUGF0aDsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlJl
Z2lvbjsKK3R5cGVkZWYgQlJlZ2lvbiBQbGF0Zm9ybVBhdGg7CiAjZWxzZQogdHlwZWRlZiB2b2lk
IFBsYXRmb3JtUGF0aDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXR0ZXJuLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAppbmRl
eCBkNGFhM2I5Li44OWY2MTIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdHRlcm4uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaApAQCAt
NTIsNiArNTIsOSBAQCB0eXBlZGVmIHd4R3JhcGhpY3NCcnVzaCogUGxhdGZvcm1QYXR0ZXJuUHRy
OwogY2xhc3Mgd3hCcnVzaDsKIHR5cGVkZWYgd3hCcnVzaCogUGxhdGZvcm1QYXR0ZXJuUHRyOwog
I2VuZGlmIC8vIFVTRShXWEdDKQorI2VsaWYgUExBVEZPUk0oSEFJS1UpCisjaW5jbHVkZSA8aW50
ZXJmYWNlL0dyYXBoaWNzRGVmcy5oPgordHlwZWRlZiBwYXR0ZXJuKiBQbGF0Zm9ybVBhdHRlcm5Q
dHI7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IGFhYjY0MjkuLjQ4NWRkMzYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKQEAgLTQ1LDYgKzQ1LDEwIEBAIHR5
cGVkZWYgc3RydWN0IE9wYXF1ZUFUU1VTdHlsZSogQVRTVVN0eWxlOwogI2luY2x1ZGUgPFFGb250
PgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyNpbmNsdWRlIDxGb250Lmg+CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250RGVzY3JpcHRpb247CkBAIC0x
NDUsNiArMTQ5LDEwIEBAIHB1YmxpYzoKICAgICB3eEZvbnQqIGdldFd4Rm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShI
QUlLVSkKKyAgICBCRm9udCogZ2V0QkZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0
YS5mb250KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7
CiAgICAgdm9pZCBwbGF0Zm9ybUdseXBoSW5pdCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggOWMyYTlkNy4uMWRjMmVhZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNjAs
NyArMTYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oV1gpCisjaWYgUExBVEZPUk0oQ0FJ
Uk8pIHx8IFBMQVRGT1JNKFdYKSB8fCBQTEFURk9STShIQUlLVSkKICAgICAgICAgVmVjdG9yPFBp
eGVsRGF0YT4gbV9ieXRlczsKICAgICAgICAgSW50U2l6ZSBtX3NpemU7ICAgICAgIC8vIFRoZSBz
aXplIG9mIHRoZSBidWZmZXIuICBUaGlzIHNob3VsZCBiZSB0aGUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHNhbWUgYXMgSW1hZ2VEZWNvZGVyOjptX3NpemUuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCmluZGV4IGYwZTFlOTQuLmY2MTRhNTcgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCkBAIC0xNjYsNyArMTY2
LDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBMUkVTVUxUIF9fc3RkY2FsbCBSZXNvdXJjZUhhbmRs
ZVduZFByb2MoSFdORCwgdW5zaWduZWQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShRVCkgfHwgVVNFKENVUkwpIHx8IFVTRShTT1VQKQorI2lmIFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShIQUlLVSkgfHwgVVNFKENVUkwpIHx8IFVTRShTT1VQKQogICAg
IFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGdldEludGVybmFsKCkgeyByZXR1cm4gZC5nZXQoKTsg
fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0
cmluZy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKaW5kZXggZWUy
YzhjZS4uZTA2Y2E3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3Jt
U3RyaW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKQEAg
LTU2LDYgKzU2LDEwIEBAIFFUX0VORF9OQU1FU1BBQ0UKIGNsYXNzIHd4U3RyaW5nOwogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJTdHJpbmc7CisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU3RyaW5nOwpAQCAtMjI5LDYgKzIzMywxMSBAQCBwdWJs
aWM6CiAgICAgb3BlcmF0b3Igd3hTdHJpbmcoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oSEFJS1UpCisgICAgU3RyaW5nKGNvbnN0IEJTdHJpbmcmKTsKKyAgICBvcGVyYXRvciBCU3Ry
aW5nKCkgY29uc3Q7CisjZW5kaWYKKwogI2lmbmRlZiBOREVCVUcKICAgICBWZWN0b3I8Y2hhcj4g
YXNjaWkoKSBjb25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1VuaWNvZGVSYW5nZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5oCmlu
ZGV4IDdlY2YwM2YuLjIyNzhhMGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9V
bmljb2RlUmFuZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmgK
QEAgLTM1LDYgKzM1LDEwIEBACiAjaWZuZGVmIFVuaWNvZGVSYW5nZV9ICiAjZGVmaW5lIFVuaWNv
ZGVSYW5nZV9ICiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyNpbmNsdWRlICJzdGRpbnQuaCIKKyNl
bmRpZgorCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0tIAoxLjYuMy4yCgo=
</data>
<flag name="review"
          id="17265"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33041</attachid>
            <date>2009-07-19 05:39:46 -0700</date>
            <delta_ts>2009-08-07 17:46:06 -0700</delta_ts>
            <desc>Modifications on WebKit source code to allow Haiku port.</desc>
            <filename>Modifications-on-WebKit-source-code-to-allow-Haiku-p.patch</filename>
            <type>text/plain</type>
            <size>27724</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAyNTYzMzI5M2EwYjU4MDBlMzc0MTZlOTQyNDIwODFhMjFlZWJkYzc4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFN1biwgMTkgSnVsIDIwMDkgMTQ6MzY6MDIgKzAyMDAKU3ViamVjdDogW1BBVENIXSBN
b2RpZmljYXRpb25zIG9uIFdlYktpdCBzb3VyY2UgY29kZSB0byBhbGxvdyBIYWlrdSBwb3J0LgoK
LS0tCiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgIHwgICAx
MSArKysrKysKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcCAgICAgICAgICAg
fCAgIDEwICsrKysrKwogSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggICAgICAgICAgICAg
ICAgICB8ICAgMjAgKysrKysrKysrLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDQyICsrKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUv
cGxhdGZvcm0vQ29udGV4dE1lbnUuaCAgICAgICAgICAgICAgICAgfCAgICA1ICsrKwogV2ViQ29y
ZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCAgICAgICAgICAgICB8ICAgIDQgKysKIFdlYkNv
cmUvcGxhdGZvcm0vQ3Vyc29yLmggICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsrKwogV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKysKIFdl
YkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmggICAgICAgICAgICAgICAgICAgfCAgICA0ICsrCiBX
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oICAgICAgIHwgICAgOCArKysr
CiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmggICAgIHwgICAgNCAr
KwogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCAgICAgICAgICB8ICAgIDgg
KysrKwogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCAgICAgICAgICB8ICAg
IDggKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaCAgICAgICAgICAgICAgICAgICB8
ICAgIDQgKysKIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgICAgICAgICAgICAgICAg
fCAgICA2ICsrLS0KIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oICAgICAgICAgICAgICAg
ICAgfCAgIDEzICsrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmggICAgICAgICAgICAg
ICAgICAgICAgfCAgICA3ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuaCAgICAgICAgfCAgIDEyICsrKysrKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaCAgICAgICAgICAgICAgfCAgICA5ICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaCAgICAgICAgIHwgICAgOSArKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaCAgICAgICAgICB8ICAgIDkgKysrKysKIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCAgfCAgICAyICstCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oICAgIHwgICAgOCArKysrCiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ljb24uaCAgICAgICAgICAgICAgIHwgICAgMiArCiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggICAgICAgIHwgICAgNiArKysKIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCAgICAgICAgICAgfCAgICA1ICsrKwogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmggICAgICAgICAgICB8ICAgIDUgKysrCiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCAgICAgICAgICAgIHwgICAgNyArKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaCAgICAgICAgICAgICAgIHwgICAgMyArKwogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmggICAgICAgICAgICB8ICAgIDMgKysKIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaCAgICAgfCAgICA4ICsrKysK
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggfCAgICAyICst
CiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCAgICAgIHwgICAgMiAr
LQogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmggICAgICAgICB8ICAgIDkg
KysrKysKIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuaCAgICAgICAgICAgfCAg
ICA0ICsrCiAzNiBmaWxlcyBjaGFuZ2VkLCAyNTggaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCmluZGV4IDJjMGY1NGYuLmYwNjU3ZDQgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAwOS0wNy0xOSAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb2Rp
ZmljYXRpb25zIG9uIFdlYktpdCBzb3VyY2UgY29kZSB0byBhbGxvdyBIYWlrdSBwb3J0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY2MjAKKworICAg
ICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y3VycmVudFRocmVh
ZFN0YWNrQmFzZSk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMDktMDctMTYgIEZ1
bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rv
ci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAKaW5kZXggMDdhODg5
OC4uNDYwODVmYiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3Iu
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcApAQCAtNTIsMTAg
KzUyLDE2IEBACiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKKyNlbGlmIFBMQVRGT1JNKEhBSUtV
KQorCisjaW5jbHVkZSA8T1MuaD4KKwogI2VsaWYgUExBVEZPUk0oVU5JWCkKIAogI2luY2x1ZGUg
PHN0ZGxpYi5oPgorI2lmICFQTEFURk9STShIQUlLVSkKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgor
I2VuZGlmCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpZiBQTEFURk9STShTT0xBUklTKQpAQCAt
NDkzLDYgKzQ5OSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQqIGN1cnJlbnRUaHJlYWRTdGFja0Jh
c2UoKQogICAgICAgICBzdGFja0Jhc2UgPSAodm9pZCopaW5mby5pQmFzZTsKICAgICB9CiAgICAg
cmV0dXJuICh2b2lkKilzdGFja0Jhc2U7CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICB0aHJl
YWRfaW5mbyB0aHJlYWRJbmZvOworICAgIGdldF90aHJlYWRfaW5mbyhmaW5kX3RocmVhZChOVUxM
KSwgJnRocmVhZEluZm8pOworICAgIHJldHVybiB0aHJlYWRJbmZvLnN0YWNrX2VuZDsKICNlbGlm
IFBMQVRGT1JNKFVOSVgpCiAgICAgc3RhdGljIHZvaWQqIHN0YWNrQmFzZSA9IDA7CiAgICAgc3Rh
dGljIHNpemVfdCBzdGFja1NpemUgPSAwOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAppbmRleCA1YzU1MmRl
Li5jYjgzYTUwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtMTIwLDcgKzEyMCw4IEBACiAgICB8
fCBkZWZpbmVkKHVuaXgpICAgICAgICBcCiAgICB8fCBkZWZpbmVkKF9fdW5peCkgICAgICBcCiAg
ICB8fCBkZWZpbmVkKF9fdW5peF9fKSAgICBcCi0gICB8fCBkZWZpbmVkKF9BSVgpCisgICB8fCBk
ZWZpbmVkKF9BSVgpICAgICAgICBcCisgICB8fCBkZWZpbmVkKF9fSEFJS1VfXykKICNkZWZpbmUg
V1RGX1BMQVRGT1JNX1VOSVggMQogI2VuZGlmCiAKQEAgLTE0NSw2ICsxNDYsOCBAQAogI2RlZmlu
ZSBXVEZfUExBVEZPUk1fV1ggMQogI2VsaWYgZGVmaW5lZChCVUlMRElOR19HVEtfXykKICNkZWZp
bmUgV1RGX1BMQVRGT1JNX0dUSyAxCisjZWxpZiBkZWZpbmVkKEJVSUxESU5HX0hBSUtVX18pCisj
ZGVmaW5lIFdURl9QTEFURk9STV9IQUlLVSAxCiAjZWxpZiBQTEFURk9STShEQVJXSU4pCiAjZGVm
aW5lIFdURl9QTEFURk9STV9NQUMgMQogI2VsaWYgUExBVEZPUk0oV0lOX09TKQpAQCAtMTkxLDcg
KzE5NCw3IEBACiAKIC8qIE1ha2VzIFBMQVRGT1JNKFdJTikgZGVmYXVsdCB0byBQTEFURk9STShD
QUlSTykgKi8KIC8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIGZyb20gYSBibGFja2xp
c3QgdG8gYSB3aGl0ZWxpc3QgKi8KLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQp
ICYmICFQTEFURk9STShXWCkgJiYgIVBMQVRGT1JNKENIUk9NSVVNKSAmJiAhUExBVEZPUk0oV0lO
Q0UpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oV1gp
ICYmICFQTEFURk9STShDSFJPTUlVTSkgJiYgIVBMQVRGT1JNKFdJTkNFKSAmJiAhUExBVEZPUk0o
SEFJS1UpCiAjZGVmaW5lIFdURl9QTEFURk9STV9DQUlSTyAxCiAjZW5kaWYKIApAQCAtNDIzLDYg
KzQyNiwxNCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorI2RlZmlu
ZSBIQVZFX1BPU0lYX01FTUFMSUdOIDEKKyNkZWZpbmUgV1RGX1VTRV9DVVJMIDEKKyNkZWZpbmUg
V1RGX1VTRV9QVEhSRUFEUyAxCisjZGVmaW5lIFVTRV9TWVNURU1fTUFMTE9DIDEKKyNkZWZpbmUg
RU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgMAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChIQVZF
X0FDQ0VTU0lCSUxJVFkpCiAjaWYgUExBVEZPUk0oSVBIT05FKSB8fCBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShDSFJPTUlVTSkKICNk
ZWZpbmUgSEFWRV9BQ0NFU1NJQklMSVRZIDEKQEAgLTQzMyw3ICs0NDQsNyBAQAogI2RlZmluZSBI
QVZFX1NJR05BTF9IIDEKICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKFdJTl9PUykgJiYgIVBMQVRG
T1JNKFNPTEFSSVMpICYmICFQTEFURk9STShTWU1CSUFOKSAmJiAhQ09NUElMRVIoUlZDVCkKKyNp
ZiAhUExBVEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0oU09MQVJJUykgJiYgIVBMQVRGT1JNKFNZ
TUJJQU4pICYmICFQTEFURk9STShIQUlLVSkgJiYgIUNPTVBJTEVSKFJWQ1QpCiAjZGVmaW5lIEhB
VkVfVE1fR01UT0ZGIDEKICNkZWZpbmUgSEFWRV9UTV9aT05FIDEKICNkZWZpbmUgSEFWRV9USU1F
R00gMQpAQCAtNDg4LDcgKzQ5OSwxMCBAQAogLyogRklYTUU6IGlzIHRoaXMgYWN0dWFsbHkgdXNl
ZCBvciBkbyBvdGhlciBwbGF0Zm9ybXMgZ2VuZXJhdGUgdGhlaXIgb3duIGNvbmZpZy5oPyAqLwog
CiAjZGVmaW5lIEhBVkVfRVJSTk9fSCAxCisvKiBBcyBsb25nIGFzIEhhaWt1IGRvZXNuJ3QgaGF2
ZSBhIGNvbXBsZXRlIHN1cHBvcnQgb2YgbG9jYWxlIHRoaXMgd2lsbCBiZSBkaXNhYmxlZC4gKi8K
KyNpZiAhUExBVEZPUk0oSEFJS1UpCiAjZGVmaW5lIEhBVkVfTEFOR0lORk9fSCAxCisjZW5kaWYK
ICNkZWZpbmUgSEFWRV9NTUFQIDEKICNkZWZpbmUgSEFWRV9TQlJLIDEKICNkZWZpbmUgSEFWRV9T
VFJJTkdTX0ggMQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA5NDIwZTY1Li41Mzk0ODJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDA5LTA3LTE5ICBN
YXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vZGlmaWNhdGlvbnMgb24gV2ViS2l0IHNv
dXJjZSBjb2RlIHRvIGFsbG93IEhhaWt1IHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjYyMAorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51Lmg6CisgICAgICAgICogcGxh
dGZvcm0vQ29udGV4dE1lbnVJdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vQ3Vyc29yLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vRHJhZ0RhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1h
Z2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtTW91c2VFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hl
ZWxFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BvcHVwTWVudS5oOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hl
ZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAqIHBs
YXRmb3JtL1dpZGdldC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2lu
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlRm9udERhdGE6OmdldEJGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmg6CisKIDIwMDktMDctMTYgIEZ1bWl0
b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2
aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDNmMDI5NmUuLmViNjk3NjEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCkBAIC0yMzAyLDcgKzIzMDIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlVGV4dElucHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5kZXJseWlu
Z0V2ZQogfQogICAgIAogICAgIAotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShRVCkK
KyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShIQUlLVSkK
IGJvb2wgRXZlbnRIYW5kbGVyOjppbnZlcnRTZW5zZU9mVGFic1RvTGlua3MoS2V5Ym9hcmRFdmVu
dCopIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZXh0TWVudS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCmluZGV4
IGRjNDg0YjIuLmNiNzM1OGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1l
bnUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgKQEAgLTM2LDYgKzM2LDgg
QEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNs
dWRlIDxRTWVudT4KKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorI2luY2x1ZGUgPFBvaW50Lmg+CiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzgsNiArODAsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbV9wbGF0Zm9ybURl
c2NyaXB0aW9uOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFMaXN0PENvbnRleHRNZW51
SXRlbT4gbV9pdGVtczsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgICAgICBQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbiBtX3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgICAgIEJQb2ludCBtX3Bv
aW50OwogI2Vsc2UKICAgICAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbV9wbGF0Zm9ybURl
c2NyaXB0aW9uOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRN
ZW51SXRlbS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAppbmRleCAyOTEy
NThkLi4xZWM1M2I2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51SXRl
bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmgKQEAgLTQ2LDYgKzQ2
LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX0d0a01lbnVJdGVtIEd0a01lbnVJdGVtOwogI2luY2x1ZGUg
PFFBY3Rpb24+CiAjZWxpZiBQTEFURk9STShXWCkKIGNsYXNzIHd4TWVudUl0ZW07CisjZWxpZiBQ
TEFURk9STShIQUlLVSkKK2NsYXNzIEJNZW51SXRlbTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0yMDIsNiArMjA0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBi
b29sIGNoZWNrZWQ7CiAgICAgICAgIGJvb2wgZW5hYmxlZDsKICAgICB9OworI2VsaWYgUExBVEZP
Uk0oSEFJS1UpCisgICAgdHlwZWRlZiBCTWVudUl0ZW0qIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlw
dGlvbjsKICNlbHNlCiAgICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRp
b247CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmggYi9XZWJD
b3JlL3BsYXRmb3JtL0N1cnNvci5oCmluZGV4IGVhNzUxOTEuLjJkMDQxZDIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3Iu
aApAQCAtNDAsNiArNDAsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrQ3Vyc29yIEdka0N1cnNvcjsK
ICNpbmNsdWRlIDxRQ3Vyc29yPgogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAjaW5jbHVkZSAi
UGxhdGZvcm1DdXJzb3IuaCIKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorI2luY2x1ZGUgPGFwcC9D
dXJzb3IuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtODYsNiArODgsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAvLyBTZWUg
UGxhdGZvcm1DdXJzb3IuaAogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1DdXJzb3JIYW5kbGU7
CisjZWxpZiBQTEFURk9STShIQUlLVSkKKyAgICB0eXBlZGVmIEJDdXJzb3IqIFBsYXRmb3JtQ3Vy
c29yOworICAgIHR5cGVkZWYgQkN1cnNvciogUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxzZQog
ICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1DdXJzb3I7CiAgICAgdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybUN1cnNvckhhbmRsZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAppbmRleCBhMmM1NjI4Li40NjI0MjRiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnRGF0YS5oCkBAIC01Niw2ICs1Niw5IEBAIHR5cGVkZWYgY2xhc3Mgd3hEYXRhT2Jq
ZWN0KiBEcmFnRGF0YVJlZjsKIHR5cGVkZWYgdm9pZCogRHJhZ0RhdGFSZWY7CiAjZWxpZiBQTEFU
Rk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJEcmFnRGF0YVJlZi5oIgorI2VsaWYgUExBVEZPUk0o
SEFJS1UpCitjbGFzcyBCTWVzc2FnZTsKK3R5cGVkZWYgY2xhc3MgQk1lc3NhZ2UqIERyYWdEYXRh
UmVmOwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2Uu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgKaW5kZXggYTkwMzlkYi4uOTFlOGFhMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdJbWFnZS5oCkBAIC00OCw2ICs0OCw4IEBAIGNsYXNzIHd4RHJhZ0ltYWdlOwog
I2luY2x1ZGUgIkRyYWdJbWFnZVJlZi5oIgogI2VsaWYgUExBVEZPUk0oR1RLKQogdHlwZWRlZiBz
dHJ1Y3QgX0dka1BpeGJ1ZiBHZGtQaXhidWY7CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNz
IEJCaXRtYXA7CiAjZW5kaWYKIAogLy9XZSBuZWVkIHRvICNkZWZpbmUgWU9mZnNldCBhcyBpdCBu
ZWVkcyB0byBiZSBzaGFyZWQgd2l0aCBXZWJLaXQKQEAgLTcyLDYgKzc0LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHR5cGVkZWYgd3hEcmFnSW1hZ2UqIERyYWdJbWFnZVJlZjsKICNlbGlm
IFBMQVRGT1JNKEdUSykKICAgICB0eXBlZGVmIEdka1BpeGJ1ZiogRHJhZ0ltYWdlUmVmOworI2Vs
aWYgUExBVEZPUk0oSEFJS1UpCisgICAgdHlwZWRlZiBCQml0bWFwKiBEcmFnSW1hZ2VSZWY7CiAj
ZW5kaWYKICAgICAKICAgICBJbnRTaXplIGRyYWdJbWFnZVNpemUoRHJhZ0ltYWdlUmVmKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggYi9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCmluZGV4IDRhNmJjOWUuLjRhMDY3
MzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaApAQCAtNTksNiAr
NTksMTAgQEAgUVRfRU5EX05BTUVTUEFDRQogY2xhc3Mgd3hLZXlFdmVudDsKICNlbmRpZgogCisj
aWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCTWVzc2FnZTsKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgewpAQCAtMTQ4LDYg
KzE1MiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudCh3eEtleUV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorICAgICAg
ICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoQk1lc3NhZ2UqKTsKKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oV0lOKSB8fCBQTEFURk9STShDSFJPTUlVTSkKICAgICAgICAgYm9vbCBpc1N5c3RlbUtleSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1LZXk7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oCmluZGV4IDY1NTM3ZWIuLjM4MGRlZDQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgKQEAgLTQwLDYgKzQwLDgg
QEAgdHlwZWRlZiBzdHJ1Y3QgSE1FTlVfXyogSE1FTlU7CiB0eXBlZGVmIHN0cnVjdCBfR3RrTWVu
dSBHdGtNZW51OwogI2VsaWYgUExBVEZPUk0oV1gpCiBjbGFzcyB3eE1lbnU7CisjZWxpZiBQTEFU
Rk9STShIQUlLVSkKK2NsYXNzIEJNZW51OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTU1LDYgKzU3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYgR3RrTWVu
dSogUGxhdGZvcm1NZW51RGVzY3JpcHRpb247CiAjZWxpZiBQTEFURk9STShXWCkKICAgICB0eXBl
ZGVmIHd4TWVudSogUGxhdGZvcm1NZW51RGVzY3JpcHRpb247CisjZWxpZiBQTEFURk9STShIQUlL
VSkKKyAgICB0eXBlZGVmIEJNZW51KiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbjsKICNlbHNlCiAg
ICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbjsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKaW5kZXggMjU0M2Q0MC4uZjQ3NmM0NSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCkBAIC01MCw2ICs1MCwxMCBAQCB0eXBlZGVm
IGxvbmcgTFBBUkFNOwogY2xhc3Mgd3hNb3VzZUV2ZW50OwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShIQUlLVSkKK2NsYXNzIEJNZXNzYWdlOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAKICAgICAvLyBUaGVzZSBidXR0b24gbnVtYmVycyBtYXRjaCB0aGUgb25lcyB1c2VkIGlu
IHRoZSBET00gQVBJLCAwIHRocm91Z2ggMiwgZXhjZXB0IGZvciBOb0J1dHRvbiB3aGljaCBpc24n
dCBzcGVjaWZpZWQuCkBAIC0xMjgsNiArMTMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IHd4TW91c2VFdmVudCYsIGNvbnN0IHd4UG9p
bnQmIGdsb2JhbFBvaW50LCBpbnQgY2xpY2tDb3VudCk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KEhBSUtVKQorICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgQk1lc3NhZ2UqLCBCUG9p
bnQgc2NyZWVuUG9pbnQpOworI2VuZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEludFBv
aW50IG1fcG9zaXRpb247CiAgICAgICAgIEludFBvaW50IG1fZ2xvYmFsUG9zaXRpb247CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRleCBhZThkZjRlLi4xOTc4NDM4IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKQEAgLTQ5LDYgKzQ5LDEwIEBAIGNsYXNz
IHd4TW91c2VFdmVudDsKIGNsYXNzIHd4UG9pbnQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhB
SUtVKQorY2xhc3MgQk1lc3NhZ2U7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgRmxvYXRQb2ludDsKQEAgLTEwOSw2ICsxMTMsMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoY29uc3Qgd3hNb3VzZUV2ZW50JiwgY29u
c3Qgd3hQb2ludCYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50KEJNZXNzYWdlKik7CisjZW5kaWYKKwogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgSW50UG9pbnQgbV9wb3NpdGlvbjsKICAgICAgICAgSW50UG9pbnQgbV9nbG9iYWxQb3Np
dGlvbjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmggYi9XZWJDb3Jl
L3BsYXRmb3JtL1BvcHVwTWVudS5oCmluZGV4IGZjODVkNjAuLjQ4OWY5NjIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1
cE1lbnUuaApAQCAtNTksNiArNTksOCBAQCBjbGFzcyB3eE1lbnU7CiAjaW5jbHVkZSA8d3gvZXZl
bnQuaD4KICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgIlBvcHVwTWVudVByaXZh
dGUuaCIKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQk1lbnU7CiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMTc3LDYgKzE3OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBP
bk1lbnVJdGVtU2VsZWN0ZWQod3hDb21tYW5kRXZlbnQmKTsKICNlbGlmIFBMQVRGT1JNKENIUk9N
SVVNKQogICAgIFBvcHVwTWVudVByaXZhdGUgcDsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAg
IEJNZW51KiBtX21lbnU7CiAjZW5kaWYKIAogfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCmluZGV4
IGJhNmI2MWMuLjU3NGE2NjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtOTEwLDcgKzkx
MCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlUGFuU2Nyb2xsSWNvbigpCiAgICAgaG9zdFdp
bmRvdygpLT5yZXBhaW50KEludFJlY3QobV9wYW5TY3JvbGxJY29uUG9pbnQsIEludFNpemUocGFu
SWNvblNpemVMZW5ndGgsIHBhbkljb25TaXplTGVuZ3RoKSksIHRydWUsIHRydWUpOwogfQogCi0j
aWYgIVBMQVRGT1JNKFdYKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oUVQpCisjaWYg
IVBMQVRGT1JNKFdYKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFU
Rk9STShIQUlLVSkKIAogdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUluaXQoKQogewpAQCAtOTIy
LDcgKzkyMiw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKIAogI2VuZGlm
CiAKLSNpZiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShRVCkg
JiYgIVBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oV1gpICYmICFQTEFURk9STShHVEspICYm
ICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEhBSUtVKQogCiB2
b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtQWRkQ2hpbGQoV2lkZ2V0KikKIHsKQEAgLTk0Miw3ICs5
NDIsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFyc1N1cHByZXNzZWQo
Ym9vbCByZXBhaW50T25VbnN1cHByZXNzKQogCiAjZW5kaWYKIAotI2lmICFQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShXWCkKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oV1gpICYm
ICFQTEFURk9STShIQUlLVSkKIAogdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJh
ck1vZGVzKCkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKaW5kZXggYjk1MDMyNy4uN2U0ZWQ4ZiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmgKQEAgLTQ3LDYgKzQ3LDExIEBAIHR5cGVkZWYgc3RydWN0IF9HdGtB
ZGp1c3RtZW50IEd0a0FkanVzdG1lbnQ7CiBjbGFzcyB3eFNjcm9sbFdpbkV2ZW50OwogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJWaWV3OworY2xhc3MgQlNjcm9sbFZpZXc7
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIb3N0V2luZG93OwpAQCAt
MzI1LDYgKzMzMCwxNCBAQCBwcml2YXRlOgogICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorcHVibGljOgorICAgIHZvaWQgc2V0QWxs
b3dzU2Nyb2xsaW5nKGJvb2wpOworCitwcml2YXRlOgorICAgIGNsYXNzIFNjcm9sbFZpZXdQcml2
YXRlOworICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CisjZW5kaWYKIH07IC8vIGNsYXNz
IFNjcm9sbFZpZXcKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9XaWRnZXQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKaW5kZXggNWZk
MThmYS4uN2YxYzJkNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCkBAIC02NSw2ICs2NSwxMSBAQCBjbGFzcyB3eFdp
bmRvdzsKIHR5cGVkZWYgd3hXaW5kb3cqIFBsYXRmb3JtV2lkZ2V0OwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShIQUlLVSkKK2NsYXNzIEJWaWV3OwordHlwZWRlZiBCVmlldyogUGxhdGZvcm1XaWRn
ZXQ7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgIlBsYXRmb3Jt
V2lkZ2V0LmgiCiAjZW5kaWYKQEAgLTIxMSw2ICsyMTYsOCBAQCBwcml2YXRlOgogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIFdpZGdldFByaXZhdGUqIG1fZGF0YTsKKyNlbGlmIFBMQVRGT1JNKEhB
SUtVKQorICAgIFdpZGdldFByaXZhdGUqIGRhdGE7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAppbmRleCA4Yjc3MGExLi44ZGJkZmVlIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC00NCw2ICs0NCwxMCBAQCBjbGFz
cyBOU0ltYWdlOwogdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJCaXRtYXA7CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHN0cnVjdCBGcmFtZURhdGE7CiB9CkBAIC0xNjAsMTAgKzE2NCwxNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6
ZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNp
emUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CisKICNpZiBQTEFURk9STShX
WCkKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRy
YW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKLSNl
bmRpZiAgICAKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgdmlydHVhbCBCQml0
bWFwKiBnZXRCaXRtYXAoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgc2l6ZV90IGN1cnJlbnRGcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1lOyB9CiAgICAgc2l6ZV90IGZyYW1lQ291
bnQoKTsKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90KTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAppbmRleCA3YWM0MzJmLi40ZmExNTEzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCkBAIC00Nyw2ICs0NywxMCBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrQ29sb3Ig
R2RrQ29sb3I7CiBjbGFzcyB3eENvbG91cjsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSEFJS1Up
CitzdHJ1Y3QgcmdiX2NvbG9yOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgU3RyaW5nOwpAQCAtMTIxLDYgKzEyNSwxMSBAQCBwdWJsaWM6CiAgICAgQ29sb3IoQ0dDb2xv
clJlZik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorICAgIENvbG9yKGNvbnN0IHJn
Yl9jb2xvciYpOworICAgIG9wZXJhdG9yIHJnYl9jb2xvcigpIGNvbnN0OworI2VuZGlmCisKICAg
ICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSwgUkdCQTMyJiBy
Z2IpOwogCiAgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBibGFjayA9IDB4RkYwMDAwMDA7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCmluZGV4IDE1N2MxZTcuLmQ5NTNiM2IgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCkBAIC01MSw2ICs1MSwxMCBAQCBj
bGFzcyBRUG9pbnRGOwogUVRfRU5EX05BTUVTUEFDRQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShI
QUlLVSkKK2NsYXNzIEJQb2ludDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oU0tJQSkKIHN0cnVj
dCBTa1BvaW50OwogI2VuZGlmCkBAIC05MCw2ICs5NCwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0
b3IgUVBvaW50RigpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBG
bG9hdFBvaW50KGNvbnN0IEJQb2ludCYpOworICAgIG9wZXJhdG9yIEJQb2ludCgpIGNvbnN0Owor
I2VuZGlmCisKICNpZiBQTEFURk9STShTS0lBKQogICAgIG9wZXJhdG9yIFNrUG9pbnQoKSBjb25z
dDsKICAgICBGbG9hdFBvaW50KGNvbnN0IFNrUG9pbnQmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5oCmluZGV4IDA3MjNlYjcuLmM2YTg2YmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaApAQCAtNTEsNiArNTEsMTAgQEAgUVRfRU5EX05BTUVTUEFDRQogY2xh
c3Mgd3hSZWN0MkREb3VibGU7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3Mg
QlJlY3Q7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFNLSUEpCiBzdHJ1Y3QgU2tSZWN0OwogI2Vu
ZGlmCkBAIC0xMzgsNiArMTQyLDExIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciB3eFJlY3QyRERv
dWJsZSgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBGbG9hdFJl
Y3QoY29uc3QgQlJlY3QmKTsKKyAgICBvcGVyYXRvciBCUmVjdCgpIGNvbnN0OworI2VuZGlmCisK
ICNpZiBQTEFURk9STShTS0lBKQogICAgIEZsb2F0UmVjdChjb25zdCBTa1JlY3QmKTsKICAgICBv
cGVyYXRvciBTa1JlY3QoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAppbmRleCAzZTM2ZjczLi40MTAxZmRlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC01MzgsNyArNTM4LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKGludCBtb2Rl
KQogfQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShDQUlSTykgJiYg
IVBMQVRGT1JNKFNLSUEpCisjaWYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oQ0FJUk8pICYm
ICFQTEFURk9STShTS0lBKSAmJiAhUExBVEZPUk0oSEFJS1UpCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShjb25zdCBTdHJva2VTdHlsZSYpCiB7CiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAwMjM3YWJmLi44
MjZlNjZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTY1LDYgKzY1LDEwIEBAIGNsYXNzIHd4V2luZG93REM7CiAjZW5kaWYKICNlbGlmIFBMQVRG
T1JNKFNLSUEpCiB0eXBlZGVmIGNsYXNzIFBsYXRmb3JtQ29udGV4dFNraWEgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQ7CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJWaWV3OwordHlwZWRl
ZiBCVmlldyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKK3N0cnVjdCBwYXR0ZXJuOwogI2Vsc2UK
IHR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbmRpZgpAQCAtMzU0LDYg
KzM1OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdka0V2ZW50RXhwb3NlKiBn
ZGtFeHBvc2VFdmVudCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlLVSkKKyAg
ICAgICAgcGF0dGVybglnZXRIYWlrdVN0cm9rZVN0eWxlKCk7CisjZW5kaWYKKwogICAgIHByaXZh
dGU6CiAgICAgICAgIHZvaWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKICAgICAgICAgdm9pZCByZXN0
b3JlUGxhdGZvcm1TdGF0ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JY29uLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAppbmRleCA0NDRjNjdj
Li44NjUwMTMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaApAQCAtNzgsNiArNzgsOCBAQCBw
cml2YXRlOgogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgSWNvbihjb25zdCBQbGF0Zm9y
bUljb24mKTsKICAgICBQbGF0Zm9ybUljb24gbV9pY29uOworI2VsaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgSWNvbigpOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgKaW5kZXggYWNiNjRkZS4uN2U3M2E1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaApAQCAtNDYsNiArNDYsOCBAQCBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2U7
CiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7CiAjZWxpZiBQ
TEFURk9STShTS0lBKQogY2xhc3MgTmF0aXZlSW1hZ2VTa2lhOworI2VsaWYgUExBVEZPUk0oSEFJ
S1UpCitjbGFzcyBCQml0bWFwOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc4
LDYgKzgwLDEwIEBAIHR5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBOYXRpdmVJbWFnZVB0cjsKIGNs
YXNzIEltYWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJj
ZVB0cjsKIHR5cGVkZWYgTmF0aXZlSW1hZ2VTa2lhKiBOYXRpdmVJbWFnZVB0cjsKKyNlbGlmIFBM
QVRGT1JNKEhBSUtVKQorY2xhc3MgSW1hZ2VEZWNvZGVyOwordHlwZWRlZiBJbWFnZURlY29kZXIq
IE5hdGl2ZUltYWdlU291cmNlUHRyOwordHlwZWRlZiBCQml0bWFwKiBOYXRpdmVJbWFnZVB0cjsK
ICNlbmRpZgogCiBjb25zdCBpbnQgY0FuaW1hdGlvbkxvb3BPbmNlID0gLTE7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFBvaW50LmgKaW5kZXggMjFhZjY3Yi4uNmFkMWE1MyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UG9pbnQuaApAQCAtNTUsNiArNTUsOCBAQCBjbGFzcyBRUG9pbnQ7CiBR
VF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBfR2Rr
UG9pbnQgR2RrUG9pbnQ7CisjZWxpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJQb2ludDsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oV1gpCkBAIC0xMjEsNiArMTIzLDkgQEAgcHVibGljOgogI2Vs
aWYgUExBVEZPUk0oR1RLKQogICAgIEludFBvaW50KGNvbnN0IEdka1BvaW50Jik7CiAgICAgb3Bl
cmF0b3IgR2RrUG9pbnQoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorICAgIEludFBv
aW50KGNvbnN0IEJQb2ludCYpOworICAgIG9wZXJhdG9yIEJQb2ludCgpIGNvbnN0OwogI2VuZGlm
CiAKICNpZiBQTEFURk9STShXWCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXgg
NmMwMmQyMS4uZTQ4YzY4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKQEAgLTQ5
LDYgKzQ5LDggQEAgY2xhc3MgUVJlY3Q7CiBRVF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBQTEFURk9S
TShHVEspCiB0eXBlZGVmIHN0cnVjdCBfR2RrUmVjdGFuZ2xlIEdka1JlY3RhbmdsZTsKKyNlbGlm
IFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlJlY3Q7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdY
KQpAQCAtMTQ0LDYgKzE0Niw5IEBAIHB1YmxpYzoKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBJ
bnRSZWN0KGNvbnN0IEdka1JlY3RhbmdsZSYpOwogICAgIG9wZXJhdG9yIEdka1JlY3RhbmdsZSgp
IGNvbnN0OworI2VsaWYgUExBVEZPUk0oSEFJS1UpCisgICAgSW50UmVjdChjb25zdCBCUmVjdCYp
OworICAgIG9wZXJhdG9yIEJSZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENH
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRleCBkYzdhODVkLi5iYjc5MTI3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaApAQCAtNDcsNiArNDcsOCBAQCB0eXBlZGVm
IHN0cnVjdCB0YWdTSVpFIFNJWkU7CiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFTaXplOwog
UVRfRU5EX05BTUVTUEFDRQorI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCU2l6ZTsKICNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTMsNiArMTE1LDExIEBAIHB1YmxpYzoK
ICAgICBvcGVyYXRvciBRU2l6ZSgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShIQUlL
VSkKKyAgICBJbnRTaXplKGNvbnN0IEJTaXplJik7CisgICAgb3BlcmF0b3IgQlNpemUoKSBjb25z
dDsKKyNlbmRpZgorCiAKIHByaXZhdGU6CiAgICAgaW50IG1fd2lkdGgsIG1faGVpZ2h0OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGguaAppbmRleCAwNDcxNzI0Li4yZDM2MTM5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaApAQCAtNDgsNiArNDgsOSBAQCB0eXBlZGVmIFdlYkNvcmU6OkNhaXJvUGF0
aCBQbGF0Zm9ybVBhdGg7CiAjZWxpZiBQTEFURk9STShTS0lBKQogY2xhc3MgU2tQYXRoOwogdHlw
ZWRlZiBTa1BhdGggUGxhdGZvcm1QYXRoOworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBC
UmVnaW9uOwordHlwZWRlZiBCUmVnaW9uIFBsYXRmb3JtUGF0aDsKICNlbHNlCiB0eXBlZGVmIHZv
aWQgUGxhdGZvcm1QYXRoOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCmlu
ZGV4IGQ0YWEzYjkuLjg5ZjYxMjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCkBA
IC01Miw2ICs1Miw5IEBAIHR5cGVkZWYgd3hHcmFwaGljc0JydXNoKiBQbGF0Zm9ybVBhdHRlcm5Q
dHI7CiBjbGFzcyB3eEJydXNoOwogdHlwZWRlZiB3eEJydXNoKiBQbGF0Zm9ybVBhdHRlcm5QdHI7
CiAjZW5kaWYgLy8gVVNFKFdYR0MpCisjZWxpZiBQTEFURk9STShIQUlLVSkKKyNpbmNsdWRlIDxp
bnRlcmZhY2UvR3JhcGhpY3NEZWZzLmg+Cit0eXBlZGVmIHBhdHRlcm4qIFBsYXRmb3JtUGF0dGVy
blB0cjsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKaW5kZXggYWFiNjQyOS4uNDg1ZGQzNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtNDUsNiArNDUsMTAgQEAg
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQVRTVVN0eWxlKiBBVFNVU3R5bGU7CiAjaW5jbHVkZSA8UUZv
bnQ+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorI2luY2x1ZGUgPEZvbnQuaD4KKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKQEAg
LTE0NSw2ICsxNDksMTAgQEAgcHVibGljOgogICAgIHd4Rm9udCogZ2V0V3hGb250KCkgY29uc3Qg
eyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KEhBSUtVKQorICAgIEJGb250KiBnZXRCRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1E
YXRhLmZvbnQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXQo
KTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCA5YzJhOWQ3Li4xZGMyZWFkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTE2
MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotI2lmIFBMQVRGT1JNKENBSVJPKSB8fCBQTEFURk9STShXWCkKKyNpZiBQTEFURk9STShD
QUlSTykgfHwgUExBVEZPUk0oV1gpIHx8IFBMQVRGT1JNKEhBSUtVKQogICAgICAgICBWZWN0b3I8
UGl4ZWxEYXRhPiBtX2J5dGVzOwogICAgICAgICBJbnRTaXplIG1fc2l6ZTsgICAgICAgLy8gVGhl
IHNpemUgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgc2hvdWxkIGJlIHRoZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc2FtZSBhcyBJbWFnZURlY29kZXI6Om1fc2l6ZS4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKaW5kZXggZjBlMWU5NC4uZjYxNGE1NyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKQEAgLTE2Niw3ICsx
NjYsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIExSRVNVTFQgX19zdGRjYWxsIFJlc291cmNlSGFu
ZGxlV25kUHJvYyhIV05ELCB1bnNpZ25lZCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKFFUKSB8fCBVU0UoQ1VSTCkgfHwgVVNFKFNPVVApCisjaWYgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEhBSUtVKSB8fCBVU0UoQ1VSTCkgfHwgVVNFKFNPVVApCiAg
ICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZ2V0SW50ZXJuYWwoKSB7IHJldHVybiBkLmdldCgp
OyB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3Jt
U3RyaW5nLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAppbmRleCBl
ZTJjOGNlLi5lMDZjYTc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZv
cm1TdHJpbmcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaApA
QCAtNTYsNiArNTYsMTAgQEAgUVRfRU5EX05BTUVTUEFDRQogY2xhc3Mgd3hTdHJpbmc7CiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQlN0cmluZzsKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTdHJpbmc7CkBAIC0yMjksNiArMjMzLDExIEBAIHB1
YmxpYzoKICAgICBvcGVyYXRvciB3eFN0cmluZygpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShIQUlLVSkKKyAgICBTdHJpbmcoY29uc3QgQlN0cmluZyYpOworICAgIG9wZXJhdG9yIEJT
dHJpbmcoKSBjb25zdDsKKyNlbmRpZgorCiAjaWZuZGVmIE5ERUJVRwogICAgIFZlY3RvcjxjaGFy
PiBhc2NpaSgpIGNvbnN0OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVW5pY29kZVJhbmdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmgK
aW5kZXggN2VjZjAzZi4uMjI3OGEwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1VuaWNvZGVSYW5nZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2Uu
aApAQCAtMzUsNiArMzUsMTAgQEAKICNpZm5kZWYgVW5pY29kZVJhbmdlX0gKICNkZWZpbmUgVW5p
Y29kZVJhbmdlX0gKIAorI2lmIFBMQVRGT1JNKEhBSUtVKQorI2luY2x1ZGUgInN0ZGludC5oIgor
I2VuZGlmCisKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKLS0gCjEuNi4zLjIKCg==
</data>
<flag name="review"
          id="17378"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="18525"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>