<?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>11332</bug_id>
          
          <creation_ts>2006-10-17 15:33:48 -0700</creation_ts>
          <short_desc>SVG support for Linux port</short_desc>
          <delta_ts>2007-09-30 22:12:18 -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>Platform</component>
          <version>420+</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WORKSFORME</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Emmel">mike.emmel</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>mrowe</cc>
    
    <cc>sam</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52372</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-17 15:33:48 -0700</bug_when>
    <thetext>This patch adds SVG support for the gdk port and a framework for SVG widgets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52373</commentid>
    <comment_count>1</comment_count>
      <attachid>11125</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-17 15:34:56 -0700</bug_when>
    <thetext>Created attachment 11125
svg support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52210</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2006-10-17 18:13:33 -0700</bug_when>
    <thetext>Mike, there is a *lot* of code in that patch that doesn&apos;t meet the coding style guidelines (&lt;http://webkit.org/coding/coding-style.html&gt;).  There are commented out blocks of code, mismatching indentation levels, incorrect brace and parenthesis placement, functions with incorrect case in their names, and various other things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52161</commentid>
    <comment_count>3</comment_count>
      <attachid>11129</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-17 20:46:43 -0700</bug_when>
    <thetext>Created attachment 11129
Clean up of affine transform

Cleanup up code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52164</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-17 20:54:49 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Mike, there is a *lot* of code in that patch that doesn&apos;t meet the coding style
&gt; guidelines (&lt;http://webkit.org/coding/coding-style.html&gt;).  There are commented
&gt; out blocks of code, mismatching indentation levels, incorrect brace and
&gt; parenthesis placement, functions with incorrect case in their names, and
&gt; various other things.
&gt; 

AffineTransform was ugly thats obvious.
You will have to give me some more info on where your seening problems.
Its a lot of code so a few pointers would be helpful.

I saw a few others like somehow the patch to RenderSVGContainter has tabs.
But outside of Affine which was junked I&apos;m not seeing huge problems.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52096</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2006-10-17 21:22:24 -0700</bug_when>
    <thetext>AffineTransform has lots of commented out code in it.  Your second patch has changes to the header -- did you intend to include changes to the implementation too?

In GraphicsContextCairo::pathDebugString, and other places, you have inconsistent use of spaces around assignments.  You also have the ()&apos;s placed incorrectly next to if&apos;s in that function, and others.

You have braces around a single-line if inside Path::operator=.  Path::strokeBoundingRect appears to have incorrect indentation, and incorrect spacing in the &quot;if&quot; statement.

The Page constructor in PageGdk.cpp has its member initialization incorrectly laid out.  Page::windowRect has incorrect spacing around if statements.

I could easily go on, but as you say it is a lot of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52089</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-17 21:53:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; AffineTransform has lots of commented out code in it.  Your second patch has
&gt; changes to the header -- did you intend to include changes to the
&gt; implementation too?
&gt; 
&gt; In GraphicsContextCairo::pathDebugString, and other places, you have
&gt; inconsistent use of spaces around assignments.  You also have the ()&apos;s placed
&gt; incorrectly next to if&apos;s in that function, and others.
&gt; 
&gt; You have braces around a single-line if inside Path::operator=. 
&gt; Path::strokeBoundingRect appears to have incorrect indentation, and incorrect
&gt; spacing in the &quot;if&quot; statement.
&gt; 
&gt; The Page constructor in PageGdk.cpp has its member initialization incorrectly
&gt; laid out.  Page::windowRect has incorrect spacing around if statements.
&gt; 
&gt; I could easily go on, but as you say it is a lot of code.
&gt; 

Okay fixed that one its easy once some one points it out. Thanks.
Not sure how to go forward I can keep resubmitting the patch but unless 
I get a few pointers its going to be a long drawing out process.

I actually have dyslexia pretty bad so generally I use automated formatters
since I physically can&apos;t see stuff like this unless some points it out.
I had to stare at the windowRect function for several minutes before I even saw what your saying.

So far with the current coding style the tools I have cause more problems then they cure. I&apos;ve got a mac mini but I did not see that you could set it up for indenting correctly.

I filed a bug a while back about auto formatting and with my condition it really really helps.

In the interim please point these issue out if I know to look for a certain issue I&apos;ll eventually see it.  I did file a bug about auto-formatting and I do try honest and I hate to claim a weakness but on the same had I can&apos;t fix what I can&apos;t see.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52070</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-17 22:13:57 -0700</bug_when>
    <thetext>(In reply to comment #6)

Here is the bug about auto-formatting I received no response on it.

http://bugs.webkit.org/show_bug.cgi?id=9671



&gt; (In reply to comment #5)
&gt; &gt; AffineTransform has lots of commented out code in it.  Your second patch has
&gt; &gt; changes to the header -- did you intend to include changes to the
&gt; &gt; implementation too?
&gt; &gt; 
&gt; &gt; In GraphicsContextCairo::pathDebugString, and other places, you have
&gt; &gt; inconsistent use of spaces around assignments.  You also have the ()&apos;s placed
&gt; &gt; incorrectly next to if&apos;s in that function, and others.
&gt; &gt; 
&gt; &gt; You have braces around a single-line if inside Path::operator=. 
&gt; &gt; Path::strokeBoundingRect appears to have incorrect indentation, and incorrect
&gt; &gt; spacing in the &quot;if&quot; statement.
&gt; &gt; 
&gt; &gt; The Page constructor in PageGdk.cpp has its member initialization incorrectly
&gt; &gt; laid out.  Page::windowRect has incorrect spacing around if statements.
&gt; &gt; 
&gt; &gt; I could easily go on, but as you say it is a lot of code.
&gt; &gt; 
&gt; 
&gt; Okay fixed that one its easy once some one points it out. Thanks.
&gt; Not sure how to go forward I can keep resubmitting the patch but unless 
&gt; I get a few pointers its going to be a long drawing out process.
&gt; 
&gt; I actually have dyslexia pretty bad so generally I use automated formatters
&gt; since I physically can&apos;t see stuff like this unless some points it out.
&gt; I had to stare at the windowRect function for several minutes before I even saw
&gt; what your saying.
&gt; 
&gt; So far with the current coding style the tools I have cause more problems then
&gt; they cure. I&apos;ve got a mac mini but I did not see that you could set it up for
&gt; indenting correctly.
&gt; 
&gt; I filed a bug a while back about auto formatting and with my condition it
&gt; really really helps.
&gt; 
&gt; In the interim please point these issue out if I know to look for a certain
&gt; issue I&apos;ll eventually see it.  I did file a bug about auto-formatting and I do
&gt; try honest and I hate to claim a weakness but on the same had I can&apos;t fix what
&gt; I can&apos;t see.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52007</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-10-18 05:48:11 -0700</bug_when>
    <thetext>Heya Mike!

First of all I really like your interessest regarding a Cairo/gdk based
SVG rendering device! Though I am not sure wheter it should go in, because:
- Since some months, there is following plan floating around:

  KCanvas own RenderingDeviceContext should die, and the functionality
  of it should be merged into GrahpicsContext directly. That will eliminate
  a lot of confusion. The resources (masker, clipper, marker, patterns,
  gradients, filters) etc. of need to be merged into platform/ code as an
  follow-up patch.

We currently only have a Qt-device &amp; Quartz rendering device in kcanvas/device
in WebKit. If the KRenderingDeviceContext kill happens, we already need to change &amp; test two implementations, a third one in SVN is one more to fix.

As stated above, this area is supposed to change a lot. If you want to
commit this SVG rendering device in SVN (to save bitrod), this is no problem (for me) at all, though you are warned, that you&apos;ll probably need to fix
a lot, when this change happens.

For me, new semester started today, and it&apos;ll take some time until I have
sufficient time for SVG hacking in WebKit - though this GraphicsContext
&lt;-&gt; RenderingDeviceContext merge is up on my todo list). If you feel
like working on it, this would be highly appreciated :-)

Greetings,
Nikolas Zimmermann</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51990</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-18 06:06:48 -0700</bug_when>
    <thetext>One way to make this go much smoother would be to beak up you&apos;re patch into to smaller units.  It&apos;s rather hard to give specific comments on so much code, so breaking it up would really help. 

That said, I&apos;m really excited about what you&apos;re trying to accomplish here.  It&apos;s a big undertaking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51979</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-18 06:07:09 -0700</bug_when>
    <thetext>One way to make this go much smoother would be to beak up you&apos;re patch into to smaller units.  It&apos;s rather hard to give specific comments on so much code, so breaking it up would really help. 

That said, I&apos;m really excited about what you&apos;re trying to accomplish here.  It&apos;s a big undertaking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51973</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-18 09:08:49 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Heya Mike!
&gt; 
&gt; First of all I really like your interessest regarding a Cairo/gdk based
&gt; SVG rendering device! Though I am not sure wheter it should go in, because:
&gt; - Since some months, there is following plan floating around:
&gt; 
&gt;   KCanvas own RenderingDeviceContext should die, and the functionality
&gt;   of it should be merged into GrahpicsContext directly. That will eliminate
&gt;   a lot of confusion. The resources (masker, clipper, marker, patterns,
&gt;   gradients, filters) etc. of need to be merged into platform/ code as an
&gt;   follow-up patch.
&gt; 
&gt; We currently only have a Qt-device &amp; Quartz rendering device in kcanvas/device
&gt; in WebKit. If the KRenderingDeviceContext kill happens, we already need to
&gt; change &amp; test two implementations, a third one in SVN is one more to fix.
&gt; 
&gt; As stated above, this area is supposed to change a lot. If you want to
&gt; commit this SVG rendering device in SVN (to save bitrod), this is no problem
&gt; (for me) at all, though you are warned, that you&apos;ll probably need to fix
&gt; a lot, when this change happens.
&gt; 

Not a problem I&apos;m committed to to this SVG is the heart and sould of the Gdk
port otherwise it won&apos;t work.

I&apos;d suggest you take a hard look at my patches there were some serious problems
with affine transforms and the html renderer I have to have foriegnObject working correctly. I&apos;d suggest that before you do major work on svg you consider making the html renderer affine transform aware. It uses m_x,m_y fixed offeset and does not understand translation and there seemed to be a number of bugs with
embedding the html in SVG.  Next if you allow and arbitrary transform for the embedded object then you need to go with my lightweight frame concept which has its own set of problems that need to be worked out since the hitdetection code 
did not work correctly FrameView&apos;s coordinates were put at 0,0.

My patch contains changes that allow all this to work correctly despite the problems but its not the cleanest solution since I did not wan&apos;t to change
a lot of the basic render classes. My suggestion is to incorporate the transform into the basic rending first then look at further changes for svg.

Next as far as cairo goes. I think we must work closely with the cairo team to get a good implementation. And agian if you look at my code you will see that I made GraphicsContext equal to a cairo context and made path a context.

The problem with cairo is that path is not a first class object and probably never will be. This means its easy to take other drawing libraries and create a cairo like api but its really hard to  take cairo and use it to implement a api it was not designed for.

So if their is any intrest in a good cairo port I really think we need to consider cairos unique global context first and make the api compatible with that. Other systems can trivially emulate the behavior with no loss in performance.

What this means is we have to define the destination surface at the very begining 
before we even parse the svg. This will allow us to cache cairo_t&apos;s for the surface and use them later during the rendering process so the performance can be quite good. Once I accepted cairo&apos;s design I realized it was probably the best for high speed complex 2D drawing. The rendering engine should then use the cached cairo_t&apos;s for rendering. So if you go with cairo&apos;s design you can get fast rendering for cairo and its easy to emulate a cairo_t in other api&apos;s. If you don&apos;t then cairo will always be too slow. I think cairo has it right since it allows you to optimize the 2D drawing path for the destination so you don&apos;t have to do a lot of complex math during the rendering phase.

This means the target surface needs to be a global and if you change targets
say go to printing or offscreen we need a way to reset cairo info for the new target.

So cairo is a catch 22 api if you follow its design you can probably get faster 2D rendering then other approaches if you try and force an alternative api on cairo then cairo will be slow.


&gt; For me, new semester started today, and it&apos;ll take some time until I have
&gt; sufficient time for SVG hacking in WebKit - though this GraphicsContext
&gt; &lt;-&gt; RenderingDeviceContext merge is up on my todo list). If you feel
&gt; like working on it, this would be highly appreciated :-)
&gt; 
&gt; Greetings,
&gt; Nikolas Zimmermann
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51963</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-18 09:21:24 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; One way to make this go much smoother would be to beak up you&apos;re patch into to
&gt; smaller units.  It&apos;s rather hard to give specific comments on so much code, so
&gt; breaking it up would really help. 
&gt; 
&gt; That said, I&apos;m really excited about what you&apos;re trying to accomplish here. 
&gt; It&apos;s a big undertaking.
&gt; 

I wish I could its all inter-related the changes are actually a large branch.
The gdk port is based on the concept of implementing WebKit in WebKit with  primitive support from the host system and SVG is the fundamental language for the port not HTML so this patch is laying the foundation for my port.
Believe it or not I did stop as soon as I had a reasonable base.



</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51952</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-18 09:36:46 -0700</bug_when>
    <thetext>
I made resolving the use of a autoformat tool a blocking bug for this patch.

It was suggested that eclipse might have enough formatting options to match the webkit style.  The only request I have is that at least one of the auto format options is available on linux and free.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51701</commentid>
    <comment_count>14</comment_count>
      <attachid>11152</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-19 14:05:24 -0700</bug_when>
    <thetext>Created attachment 11152
Patch to add cairo svg support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51702</commentid>
    <comment_count>15</comment_count>
      <attachid>11153</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-19 14:07:59 -0700</bug_when>
    <thetext>Created attachment 11153
bakefile changes fixed for linux compile and a few misc changes


This patch is mainly changes for build I did make one reasonable change to document there is a comment inline in the patch. Basically proposed moving the flushing out of Frame and into the document itself. The functionality seemed misplaced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51703</commentid>
    <comment_count>16</comment_count>
      <attachid>11154</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-19 14:10:03 -0700</bug_when>
    <thetext>Created attachment 11154
Extensive changes to gdk to compile and support svg compenents


A major rewrite of the gdk port to support svg widgets lightweight frames upgrade of the curl download support etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51704</commentid>
    <comment_count>17</comment_count>
      <attachid>11155</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-19 14:13:25 -0700</bug_when>
    <thetext>Created attachment 11155
Removed use of gtk for closing window added svg web browser demo


Please don&apos;t accept any patches with gtk calls.
If you think they are needed ask me.

A Gtk driver/port would be a different related project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51705</commentid>
    <comment_count>18</comment_count>
      <attachid>11156</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-19 14:16:35 -0700</bug_when>
    <thetext>Created attachment 11156
This patch allows you to get the correct offsets for svg foriegnObjects


This patch corrects problems with offest of a forgien object since  svg uses affine transforms and html uses m_x my.  It may be gdk specific not sure.
The long term fix is to move consistently to a affine transform at least for all containers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51706</commentid>
    <comment_count>19</comment_count>
      <attachid>11157</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-19 14:21:20 -0700</bug_when>
    <thetext>Created attachment 11157
astyle plus sed script for formatting


This is the script I used to format code it gets reasobly close.
astyle version is 1.19

I&apos;d like to see it move into the WebKitTools/Scripts directory if its acceptable.
I&apos;m willing to keep working on it till it can either format correctly or warn
if it detects a possible formatting problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51708</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-19 14:23:05 -0700</bug_when>
    <thetext>
Patch was broken into several conceptual parts. 
The cairo changes
Building
gdk changes

Code was formatted with attached script.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51710</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-19 14:24:59 -0700</bug_when>
    <thetext>
The new split patches probably will not compile if applied individually.
All are probably needed to get a compile on linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48774</commentid>
    <comment_count>22</comment_count>
      <attachid>11268</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-28 13:07:29 -0700</bug_when>
    <thetext>Created attachment 11268
Roll up patch to build gdk and add svg support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48763</commentid>
    <comment_count>23</comment_count>
      <attachid>11269</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-10-28 13:35:44 -0700</bug_when>
    <thetext>Created attachment 11269
Roll up patch with missing cairo files added


Files were   missing from original patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46831</commentid>
    <comment_count>24</comment_count>
      <attachid>11269</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-11-05 19:36:23 -0800</bug_when>
    <thetext>Comment on attachment 11269
Roll up patch with missing cairo files added

This patch is huge and includes a bunch of different unrelated changes. Also I think it has now been outdated by other changes. Please update, and I&apos;d also appreciate if you could break this up into smaller patches for the separate issues like SVG support separate from things like ResourceLoader changes and scrolling changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46832</commentid>
    <comment_count>25</comment_count>
      <attachid>11157</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-11-05 19:57:37 -0800</bug_when>
    <thetext>Comment on attachment 11157
astyle plus sed script for formatting

this script should no longer need to be submitted w/ the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46833</commentid>
    <comment_count>26</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-05 20:30:07 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 11269 [edit])
&gt; This patch is huge and includes a bunch of different unrelated changes. Also I
&gt; think it has now been outdated by other changes. Please update, and I&apos;d also
&gt; appreciate if you could break this up into smaller patches for the separate
&gt; issues like SVG support separate from things like ResourceLoader changes and
&gt; scrolling changes.
&gt; 

I&apos;m working on smaller patches now. The roll up patch was more to allow the port to build.

The plan is to submit two patches that address building the gdk port and resource loader changes. 

Next I&apos;ll submit two more one adding Path support to cairo
and the next adding svg support changes.

I&apos;m going to rework the way I did Path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46643</commentid>
    <comment_count>27</comment_count>
      <attachid>11269</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-07 00:40:45 -0800</bug_when>
    <thetext>Comment on attachment 11269
Roll up patch with missing cairo files added

Partially obsoleted by new gdk patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46644</commentid>
    <comment_count>28</comment_count>
      <attachid>11413</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-07 00:45:17 -0800</bug_when>
    <thetext>Created attachment 11413
Patch to build the gdk port


This patch is only to allow the gdk port to build with the current head.
The changes to common code are minimal the SVG dependencies are removed.
It is not completely functional i.e page are not loading.

But if this patch can be reviewed and applied in a timely manner it will greatly
reduce the size and scope of the SVG patches.

I believe I&apos;ve done as asked and split the patch to a smaller subset but please please review and apply this patch asap.
So I can get the port functioning again.

Additional patches for SVG/Cairo comming over the next few days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46589</commentid>
    <comment_count>29</comment_count>
      <attachid>11419</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-07 19:05:03 -0800</bug_when>
    <thetext>Created attachment 11419
patch to add path support for cairo


This patch overlaps the previous one in TemporaryLinkStubs.cpp and in the changelog with the gdk.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46590</commentid>
    <comment_count>30</comment_count>
      <attachid>11419</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-07 19:08:47 -0800</bug_when>
    <thetext>Comment on attachment 11419
patch to add path support for cairo

To build now with this patch you need to add 

platform/cairo/PathCairo.cpp

to the source bakefile
I did not add this to the patch for a obvious online change

The incoming svg one will include it along with the rest of the changes needed for svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46497</commentid>
    <comment_count>31</comment_count>
      <attachid>11426</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-08 10:42:01 -0800</bug_when>
    <thetext>Created attachment 11426
Cairo svg support patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45823</commentid>
    <comment_count>32</comment_count>
      <attachid>11509</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-13 13:46:04 -0800</bug_when>
    <thetext>Created attachment 11509
Smaller gdk patch to allow it to build and load URLS agian


Attached is a smaller patch to get gdk port working agian.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45770</commentid>
    <comment_count>33</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2006-11-13 16:14:56 -0800</bug_when>
    <thetext>Mike, there are a large number of tabs introduced in your latest patch.  As per the coding style guidelines, tabs should not be used for indentation.  There are a number of other coding style issues:  several commented out blocks of code, incorrect brace placement in class declarations in header files, #include statements in arbitrary order rather than sorted alphabetically, and so on.  While skimming the patch I also noticed a block of code that looks a little suspicious:

+void FrameLoader::checkLoadCompleteForThisFrame()
+{
+    ASSERT(m_client-&gt;hasWebView());
+    notImplemented();
+    
+    switch (m_state) {
+    case FrameStateProvisional: {
+    }
+        
+    case FrameStateCommittedPage: {

Is it intended for the FrameStateProvisional case to fall through to the FrameStateCommittedPage case?  The braces are extraneous either way, but if the intent _is_ to fall through I think it could be made more obvious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45773</commentid>
    <comment_count>34</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-13 16:37:45 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; Mike, there are a large number of tabs introduced in your latest patch.  As per
&gt; the coding style guidelines, tabs should not be used for indentation.  There
&gt; are a number of other coding style issues:  several commented out blocks of
&gt; code, incorrect brace placement in class declarations in header files, #include
&gt; statements in arbitrary order rather than sorted alphabetically, and so on. 
&gt; While skimming the patch I also noticed a block of code that looks a little
&gt; suspicious:
&gt; 
&gt; +void FrameLoader::checkLoadCompleteForThisFrame()
&gt; +{
&gt; +    ASSERT(m_client-&gt;hasWebView());
&gt; +    notImplemented();
&gt; +    
&gt; +    switch (m_state) {
&gt; +    case FrameStateProvisional: {
&gt; +    }
&gt; +        
&gt; +    case FrameStateCommittedPage: {
&gt; 
&gt; Is it intended for the FrameStateProvisional case to fall through to the
&gt; FrameStateCommittedPage case?  The braces are extraneous either way, but if the
&gt; intent _is_ to fall through I think it could be made more obvious.
&gt; 


Bummer.

I forgot to format.

As far as the code goes that was copied from the mac impl dunno if its right or not. I do know I can load www.google.com agian. Note the notImplemented call indicating I did not quite agree with the code either.

Sending a formatting patch.
 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45774</commentid>
    <comment_count>35</comment_count>
      <attachid>11514</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-13 16:38:47 -0800</bug_when>
    <thetext>Created attachment 11514
Formatted smaller patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45569</commentid>
    <comment_count>36</comment_count>
      <attachid>11419</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2006-11-16 12:00:12 -0800</bug_when>
    <thetext>Comment on attachment 11419
patch to add path support for cairo

Patch obsoleted by directory changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34853</commentid>
    <comment_count>37</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-01-15 04:57:33 -0800</bug_when>
    <thetext>Hey Mike - any news on your patches?

Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34777</commentid>
    <comment_count>38</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2007-01-15 09:57:57 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; Hey Mike - any news on your patches?
&gt; 
&gt; Niko
&gt; 

The current ones are pretty much dead now unless someone refactor them for the current head. With that said it should not be too hard to get them to apply.

Since the gdk port itself is broken on the head you would have to test them under the windows port which I have not worked on.

If the qt port was factored to allow cairo it would be really nice since I could submit cairo only patches easily.

On my personal branch I&apos;ve re factored webkit to make it a true platform independent library not dependent on any platform gui toolkit and removed most of the platform support so I&apos;ve since gone in a different direction. Cairo is still required in this version but I&apos;ve not updated to the svg support.
I will soon and I will resubmit the above patches against the head if needed.
I won&apos;t do anything to these patches but get them to work with the current head so if someone else gets them in before I do it would be fantastic.

The gdk port is not dead others will be working on it so hopefully it will come back to life soon.

Sorry for the long reply :)



</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57527</commentid>
    <comment_count>39</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-09-30 22:12:18 -0700</bug_when>
    <thetext>SVG support appears to have made it&apos;s way into both Qt and Gtk+ ports by other means.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11125</attachid>
            <date>2006-10-17 15:34:56 -0700</date>
            <delta_ts>2006-10-19 14:05:24 -0700</delta_ts>
            <desc>svg support</desc>
            <filename>gdksvg.patch</filename>
            <type>text/plain</type>
            <size>316079</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDgyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDYtMTAtMTcgIE1pY2hhZWwg
RW1tZWwgIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT05F
LgorCisgICAgICAgIEZpeGVkIERFQlVHIGNvbXBpbGUgc28gYnVpbHRpbiBhbGxvY2F0b3Igd29y
a3MKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlU291cmNlcy5ia2wKKyAgICAgICAgKiBqc2Nv
cmUuYmtsCisKIDIwMDYtMTAtMTYgIEtldmluIE1jQ3VsbG91Z2ggIDxrbWNjdWxsb3VnaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZi4KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24gMTcwODIpCisrKyBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMyAr
NDMsMTMgQEAKIAkJa2pzL3Rlc3RranMuY3BwCiAJCWtqcy91c3RyaW5nLmNwcAogCQlranMvdmFs
dWUuY3BwCi0KIAk8L3NldD4KIAk8c2V0IGFwcGVuZD0iMSIgdmFyPSJKU0NPUkVfU09VUkNFU19X
VEYiPgogCQkKIAkJd3RmL0Fzc2VydGlvbnMuY3BwCiAJCXd0Zi9GYXN0TWFsbG9jLmNwcAogCQl3
dGYvSGFzaFRhYmxlLmNwcAorCQl3dGYvVENTeXN0ZW1BbGxvYy5jcHAKIAogCTwvc2V0PgogCTxz
ZXQgYXBwZW5kPSIxIiB2YXI9IkpTQ09SRV9TT1VSQ0VTX1BDUkUiPgpJbmRleDogSmF2YVNjcmlw
dENvcmUvanNjb3JlLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qc2NvcmUuYmts
CShyZXZpc2lvbiAxNzA4MikKKysrIEphdmFTY3JpcHRDb3JlL2pzY29yZS5ia2wJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDkgKzU0LDE0IEBACiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9iaW5k
aW5nczwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2JpbmRpbmdzL2M8L2lu
Y2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9iaW5kaW5ncy9qbmk8L2luY2x1ZGU+
CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS93dGY8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNs
dWRlPiQoU1JDRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZTwvaW5jbHVkZT4KIAog
ICAgICAgICA8ZGVmaW5lPkFQUExFX0NIQU5HRVM9MTwvZGVmaW5lPgorICAgICAgICA8IS0tCisg
ICAgICAgIDxkZWZpbmU+TkRFQlVHPTE8L2RlZmluZT4KKyAgICAgICAgLS0+CisgICAgICAgIDxk
ZWZpbmU+V1RGX0NIQU5HRVM9MTwvZGVmaW5lPgogCiAgICAgICAgIDwhLS0gdGhpcyBHQyB2ZXJz
aW9uIHJlcXVpcmVzIE1hY2gncyB0aHJlYWQgc3VzcGVuZC9yZXN1bWU6IC0tPgogICAgICAgICA8
aWYgY29uZD0iUExBVEZPUk1fTUFDT1NYPT0nMSciPgpAQCAtOTYsNiArMTAxLDI2IEBACiAgICAg
ICAgIDxjb21tYW5kPmJhc2ggbWFrZS1nZW5lcmF0ZWQtc291cmNlcy5zaDwvY29tbWFuZD4KICAg
ICA8L2FjdGlvbj4KIAorICAgPGRsbCBpZD0ic2hhcmVkanNjb3JlIiB0ZW1wbGF0ZT0ianNjb3Jl
X2Jhc2UiPgorICAgICAgICA8b2JqZWN0cy1kZXBlbmQ+ZGZ0YWJsZXM8L29iamVjdHMtZGVwZW5k
PgorICAgICAgICA8cHJlLWJ1aWxkLXRhcmdldD5EZXJpdmVkU291cmNlczwvcHJlLWJ1aWxkLXRh
cmdldD4KKyAgICAgICAgPHdhcm5pbmdzPmRlZmF1bHQ8L3dhcm5pbmdzPgorICAgICAgICA8Y3h4
LXJ0dGk+b2ZmPC9jeHgtcnR0aT4KKyAgICAgICAgPGN4eC1leGNlcHRpb25zPm9mZjwvY3h4LWV4
Y2VwdGlvbnM+CisgICAgICAgIDxkZWJ1Zy1pbmZvPm9uPC9kZWJ1Zy1pbmZvPgorICAgICAgICA8
c291cmNlcz4KKyAgICAgICAgICAgICQoSlNDT1JFX1NPVVJDRVNfV1RGKQorICAgICAgICAgICAg
JChKU0NPUkVfU09VUkNFU19QQ1JFKQorICAgICAgICAgICAgJChKU0NPUkVfU09VUkNFU19LSlMp
CisgICAgICAgICAgICAkKEpTQ09SRV9TT1VSQ0VTX0JJTkRJTkdTKQorICAgICAgICA8L3NvdXJj
ZXM+CisgICAgICAgIDxpZiBjb25kPSJQTEFURk9STV9XSU4zMj09JzEnIj4KKyAgICAgICAgICAg
ICQoSlNDT1JFX1NPVVJDRVNfV0lOKQorICAgIDwvaWY+CisgICAgPGluc3RhbGwtdG8+JChCVUlM
RERJUik8L2luc3RhbGwtdG8+CisgICAgPC9kbGw+CisKKwogICAgIDxsaWIgaWQ9ImpzY29yZSIg
dGVtcGxhdGU9ImpzY29yZV9iYXNlIj4KICAgICAgICAgPG9iamVjdHMtZGVwZW5kPmRmdGFibGVz
PC9vYmplY3RzLWRlcGVuZD4KICAgICAgICAgPHByZS1idWlsZC10YXJnZXQ+RGVyaXZlZFNvdXJj
ZXM8L3ByZS1idWlsZC10YXJnZXQ+CkluZGV4OiBCYWtlZmlsZXMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEJha2VmaWxlcy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDY4KQorKysgQmFrZWZpbGVz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBACisyMDA2LTEwLTE3ICBN
aWNoYWVsIEVtbWVsICA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9ORS4KKworICAgICAgICBBZGRlZCBnZGsgb25seSBidWlsZCAgcHJlc2V0IAorCisgICAg
ICAgICogcHJlc2V0cy5ia2w6CisKIDIwMDYtMTAtMDkgIEtyenlzenRvZiBLb3dhbGN6eWsgIDxr
a293YWxjenlrQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZi4KSW5kZXg6
IEJha2VmaWxlcy9wcmVzZXRzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBCYWtlZmlsZXMvcHJlc2V0cy5i
a2wJKHJldmlzaW9uIDE3MDY4KQorKysgQmFrZWZpbGVzL3ByZXNldHMuYmtsCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw2IEBACiAgICAgICAgIDwvaWY+CiAgICAgPC90ZW1wbGF0ZT4KIAot
CiAgICAgPG9wdGlvbiBuYW1lPSJTUUxJVEUzX0xJQlMiPgogICAgICAgICA8ZGVmYXVsdC12YWx1
ZT4kKG9zLnBvcGVuKCJwa2ctY29uZmlnIC0tbGlicyBzcWxpdGUzIikucmVhZCgpKTwvZGVmYXVs
dC12YWx1ZT4KICAgICA8L29wdGlvbj4KQEAgLTEyNyw2ICsxMjYsMTQgQEAKICAgICAgICAgPCEt
LSAgICBUT0RPOiBub24tQ3lnd2luIFdpbmRvd3Mgc3VwcG9ydCBmb3IgdGhpcz8gOikgLS0+IAog
ICAgIDwvdGVtcGxhdGU+CiAKKyAgICA8dGVtcGxhdGUgaWQ9ImdkayI+CisgICAgICAgIDxpZiBj
b25kPSJGT1JNQVQ9PSdnbnUnIj4KKyAgICAJICAgPGxkZmxhZ3M+YHBrZy1jb25maWcgLS1saWJz
IGdkay0yLjBgPC9sZGZsYWdzPgorICAgIAkgICA8Y3h4ZmxhZ3M+YHBrZy1jb25maWcgLS1jZmxh
Z3MgZ2RrLTIuMGA8L2N4eGZsYWdzPgorICAgICAgICA8L2lmPgorICAgICAgICAKKyAgICAgICAg
PCEtLSAgICBUT0RPOiBub24tQ3lnd2luIFdpbmRvd3Mgc3VwcG9ydCBmb3IgdGhpcz8gOikgLS0+
IAorICAgIDwvdGVtcGxhdGU+CiAKICAgICA8b3B0aW9uIG5hbWU9IlhNTDJfTElCUyI+CiAgICAg
ICAgIDxkZWZhdWx0LXZhbHVlPiQob3MucG9wZW4oInhtbDItY29uZmlnIC0tbGlicyIpLnJlYWQo
KSk8L2RlZmF1bHQtdmFsdWU+CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0dyYXBoaWNzQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmgJKHJl
dmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQAogICAgIGNsYXNzIFRleHRSdW47CiAgICAgY2xh
c3MgVGV4dFN0eWxlOwogCisKICNpZmRlZiBTVkdfU1VQUE9SVAogICAgIGNsYXNzIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0OwogI2VuZGlmCkBAIC0xOTEsNiArMTkyLDkgQEAKIAogICAgICAgICBH
cmFwaGljc0NvbnRleHRQcml2YXRlKiBtX2NvbW1vbjsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGE7CisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgIGZy
aWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw3IEBACiAKICNpZiBQTEFU
Rk9STShHREspCiAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudCopOworICAg
ICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBl
dmVudCxib29sIHJlcGVhdCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2
ICsxMTIsNyBAQAogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAKIH0KKyAgICAKIAogdm9pZCBJbWFn
ZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwKICAgICBjb25zdCBGbG9hdFNpemUmIHRp
bGVTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTE1NSw3ICsxNTYsNyBAQAogICAgIAog
ICAgIGZsb2F0IHNyY1ggPSBkc3RSZWN0LngoKSAtIGRzdFRpbGVSZWN0LngoKTsKICAgICBmbG9h
dCBzcmNZID0gZHN0UmVjdC55KCkgLSBkc3RUaWxlUmVjdC55KCk7Ci0KKyAgICB7CiAgICAgLy8g
SWYgdGhlIHNpbmdsZSBpbWFnZSBkcmF3IGNvdmVycyB0aGUgd2hvbGUgYXJlYSwgdGhlbiBqdXN0
IGRyYXcgb25jZS4KICAgICBpZiAoZHN0VGlsZVJlY3QuY29udGFpbnMoZHN0UmVjdCkpIHsKICAg
ICAgICAgZHJhdyhjdHh0LCBkc3RSZWN0LApAQCAtMTgxLDcgKzE4Miw3IEBACiAgICAgY2Fpcm9f
cmVjdGFuZ2xlKGNvbnRleHQsIHNyY1gsIHNyY1ksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5o
ZWlnaHQoKSk7CiAgICAgY2Fpcm9fZmlsbChjb250ZXh0KTsKICAgICBjYWlyb19yZXN0b3JlKGNv
bnRleHQpOwotCisgICAgfQogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vY2Fpcm8vQWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vQWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQWZmaW5lVHJhbnNmb3Jt
OjpBZmZpbmVUcmFuc2Zvcm0oKQoreworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZt
X3RyYW5zZm9ybSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybTo6QWZmaW5lVHJhbnNmb3JtKGRvdWJs
ZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkK
K3sKKyAgICBzZXRNYXRyaXgoYSxiLGMsZCx0eCx0eSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybTo6
QWZmaW5lVHJhbnNmb3JtKGNvbnN0IGNhaXJvX21hdHJpeF90JiBtYXRyaXgpCisgICAgOiBtX3Ry
YW5zZm9ybShtYXRyaXgpCit7Cit9CisKK3ZvaWQgQWZmaW5lVHJhbnNmb3JtOjpzZXRNYXRyaXgo
ZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSB0eCwgZG91Ymxl
IHR5KQoreworICAgIGNhaXJvX21hdHJpeF9pbml0KCZtX3RyYW5zZm9ybSxhLGMsYixkLHR4LHR5
KTsKKyNpZiAwCitwcmludGYoIkFmZmluZVRyYW5zZm9ybTo6c2V0TWF0cml4XG4iKTsKK3ByaW50
ZigiQWZmaW5lVHJhbnNmb3JtIHh4PSVmIHl5PSVmIHh5PSVmIHl4PSVmIHgwPSVmIHkwPSVmIFxu
IiwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS54eCwKKyAgICAgICAgICAgICAgICBtX3Ry
YW5zZm9ybS55eSwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS54eSwKKyAgICAgICAgICAg
ICAgICBtX3RyYW5zZm9ybS55eCwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS54MCwKKyAg
ICAgICAgICAgICAgICBtX3RyYW5zZm9ybS55MCk7CisjZW5kaWYKK30KKwordm9pZCBBZmZpbmVU
cmFuc2Zvcm06Om1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSogeDIsIGRvdWJsZSogeTIp
IGNvbnN0Cit7CisgICAgKngyID0geDsKKyAgICAqeTIgPSB5OworICAgIGNhaXJvX21hdHJpeF90
cmFuc2Zvcm1fcG9pbnQoJm1fdHJhbnNmb3JtLHgyLHkyKTsKK30KKworSW50UmVjdCBBZmZpbmVU
cmFuc2Zvcm06Om1hcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdCggbWFwUmVjdChGbG9hdFJlY3QocmVjdCkpKTsKK30KKworLyoq
CisgICAgYmFzZWQgb24gaW50ZXJuYWwgX2NhaXJvX21hdHJpeF90cmFuc2Zvcm1fYm91bmRpbmdf
Ym94CisqKi8KK0Zsb2F0UmVjdCBBZmZpbmVUcmFuc2Zvcm06Om1hcFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KSBjb25zdAoreworICAgIC8vcHJpbnRmKCIgQWZmaW5lVHJhbnNmb3JtOjptYXBS
ZWN0IFxuIik7CisgICAgaW50IGk7CisgICAgZG91YmxlIHF1YWRfeFs0XSwgcXVhZF95WzRdOwor
ICAgIGRvdWJsZSBkeDEsIGR5MTsKKyAgICBkb3VibGUgZHgyLCBkeTI7CisgICAgZG91YmxlIG1p
bl94LCBtYXhfeDsKKyAgICBkb3VibGUgbWluX3ksIG1heF95OworCisgICAgZG91YmxlIHggPShk
b3VibGUpcmVjdC54KCk7CisgICAgZG91YmxlIHkgPSAoZG91YmxlKXJlY3QueSgpOworICAgIGRv
dWJsZSB3aWR0aCA9KGRvdWJsZSlyZWN0LndpZHRoKCk7CisgICAgZG91YmxlIGhlaWdodCA9IChk
b3VibGUpcmVjdC5oZWlnaHQoKTsKKyAgICBkb3VibGUgeHggPSBtX3RyYW5zZm9ybS54eDsKKyAg
ICBkb3VibGUgeXkgPSBtX3RyYW5zZm9ybS55eTsKKyAgICBkb3VibGUgeHkgPSBtX3RyYW5zZm9y
bS54eTsKKyAgICBkb3VibGUgeXggPSBtX3RyYW5zZm9ybS55eDsKKyAgICBkb3VibGUgdHggPSBt
X3RyYW5zZm9ybS54MDsKKyAgICBkb3VibGUgdHkgPSBtX3RyYW5zZm9ybS55MDsKKworICAgIHF1
YWRfeFswXSA9IHh4ICogeCArIHh5ICp5ICt0eDsKKyAgICBxdWFkX3lbMF0gPSB5eCAqeCArIHl5
ICogeSArdHk7CisKKyAgICBkeDEgPSB4eCp3aWR0aDsKKyAgICBkeTEgPSB5eCp3aWR0aDsKKwor
ICAgIHF1YWRfeFsxXSA9IHF1YWRfeFswXSArIGR4MTsKKyAgICBxdWFkX3lbMV0gPSBxdWFkX3lb
MF0gKyBkeTE7CisKKyAgICBkeDIgPSB4eSAqaGVpZ2h0OworICAgIGR5MiA9IHl5ICogaGVpZ2h0
OworCisgICAgcXVhZF94WzJdID0gcXVhZF94WzBdICsgZHgyOworICAgIHF1YWRfeVsyXSA9IHF1
YWRfeVswXSArIGR5MjsKKworICAgIHF1YWRfeFszXSA9IHF1YWRfeFswXSArIGR4MSArIGR4MjsK
KyAgICBxdWFkX3lbM10gPSBxdWFkX3lbMF0gKyBkeTEgKyBkeTI7CisKKyAgICBtaW5feCA9IG1h
eF94ID0gcXVhZF94WzBdOworICAgIG1pbl95ID0gbWF4X3kgPSBxdWFkX3lbMF07CisKKyAgICBm
b3IgKGk9MTsgaSA8IDQ7IGkrKykgeworICAgIGlmIChxdWFkX3hbaV0gPCBtaW5feCkKKyAgICAg
ICBtaW5feCA9IHF1YWRfeFtpXTsKKyAgICBpZiAocXVhZF94W2ldID4gbWF4X3gpCisgICAgICAg
IG1heF94ID0gcXVhZF94W2ldOworCisgICAgaWYgKHF1YWRfeVtpXSA8IG1pbl95KQorICAgICAg
ICBtaW5feSA9IHF1YWRfeVtpXTsKKyAgICBpZiAocXVhZF95W2ldID4gbWF4X3kpCisgICAgICAg
IG1heF95ID0gcXVhZF95W2ldOworICAgIH0KKyAgICB4ID0gbWluX3g7CisgICAgeSA9IG1pbl95
OworICAgIHdpZHRoID0gbWF4X3ggLSBtaW5feDsKKyAgICBoZWlnaHQgPSBtYXhfeSAtIG1pbl95
OworICAgIHJldHVybiBGbG9hdFJlY3QoeCx5LHdpZHRoLGhlaWdodCk7Cit9CisKKy8qCisgKiBm
cm9tIF9jYWlyb19tYXRyaXhfaXNfaWRlbnRpdHk7CisgKi8KK2Jvb2wgQWZmaW5lVHJhbnNmb3Jt
Ojppc0lkZW50aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fdHJhbnNmb3JtLnh4ID09IDEu
MCAmJiBtX3RyYW5zZm9ybS55eCA9PSAwLjAgJiYKKyAgICAgICAgICAgIG1fdHJhbnNmb3JtLnh5
ID09IDAuMCAmJiBtX3RyYW5zZm9ybS55eSA9PSAxLjAgJiYKKyAgICAgICAgICAgIG1fdHJhbnNm
b3JtLngwID09IDAuMCAmJiBtX3RyYW5zZm9ybS55MCA9PSAwLjApOworfQorCitkb3VibGUgQWZm
aW5lVHJhbnNmb3JtOjptMTEoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS54eDsK
K30KKworZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6bTEyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV90cmFuc2Zvcm0ueHk7Cit9CisKK2RvdWJsZSBBZmZpbmVUcmFuc2Zvcm06Om0yMSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLnl4OworfQorCitkb3VibGUgQWZmaW5lVHJhbnNm
b3JtOjptMjIoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS55eTsKK30KKworZG91
YmxlIEFmZmluZVRyYW5zZm9ybTo6ZHgoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9y
bS54MDsKK30KKworZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6ZHkoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3RyYW5zZm9ybS55MDsKK30KKwordm9pZCBBZmZpbmVUcmFuc2Zvcm06OnJlc2V0KCkK
K3sKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmbV90cmFuc2Zvcm0pOworfQorCitB
ZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUg
c3kpCit7CisgICAgY2Fpcm9fbWF0cml4X3NjYWxlKCZtX3RyYW5zZm9ybSxzeCxzeSk7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6cm90
YXRlKGRvdWJsZSBkZWdyZWVzKQoreworICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGVnMnJhZCA9
IE1fUEkvMTgwLjA7CisgICAgZG91YmxlIHJhZGlhbnMgPSBkZWdyZWVzKmRlZzJyYWQ7CisgICAg
Y2Fpcm9fbWF0cml4X3JvdGF0ZSgmbV90cmFuc2Zvcm0scmFkaWFucyk7CisgICAgcmV0dXJuICp0
aGlzOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6dHJhbnNsYXRlKGRv
dWJsZSB0eCwgZG91YmxlIHR5KQoreworICAgIGNhaXJvX21hdHJpeF90cmFuc2xhdGUoJm1fdHJh
bnNmb3JtLHR4LHR5KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYg
QWZmaW5lVHJhbnNmb3JtOjpzaGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICAvL3By
aW50ZigiQWZmaW5lVHJhbnNmb3JtIHNoZWFyIHN4PSVmIHN5PSVmIFxuIixzeCxzeSk7CisgICAg
Y2Fpcm9fbWF0cml4X3Qgb3RoZXI7CisgICAgY2Fpcm9fbWF0cml4X2luaXQoJm90aGVyLDEsc3gs
c3ksMSwwLDApOworICAgIGNhaXJvX21hdHJpeF9tdWx0aXBseSgmbV90cmFuc2Zvcm0sJm90aGVy
LCZtX3RyYW5zZm9ybSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCisvKioKKyAqIF9jYWlyb19t
YXRyaXhfY29tcHV0ZV9kZXRlcm1pbmFudAorICovCitkb3VibGUgQWZmaW5lVHJhbnNmb3JtOjpk
ZXQoKSBjb25zdAoreworICAgIGRvdWJsZSAgYSwgYiwgYywgZDsKKworICAgIGEgPSBtX3RyYW5z
Zm9ybS54eDsgYiA9IG1fdHJhbnNmb3JtLnl4OworICAgIGMgPSBtX3RyYW5zZm9ybS54eTsgZCA9
IG1fdHJhbnNmb3JtLnl5OworCisgICAgcmV0dXJuKGEqZCAtIGIqYyk7Cit9CisKK2Jvb2wgQWZm
aW5lVHJhbnNmb3JtOjppc0ludmVydGlibGUoKSBjb25zdAoreworICAgIHJldHVybiggZGV0KCkg
PT0gMCApOworfQorCitBZmZpbmVUcmFuc2Zvcm0gQWZmaW5lVHJhbnNmb3JtOjppbnZlcnQoKSBj
b25zdAoreworICAgIC8vcHJpbnRmKCJBZmZpbmVUcmFuc2Zvcm0gaW52ZXJ0XG4iKTsKKyAgICBp
ZighaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZSA9IEFmZmluZVRyYW5zZm9ybShtX3RyYW5zZm9ybSk7
CisgICAgY2Fpcm9fbWF0cml4X2ludmVydCgmaW52ZXJzZS5tX3RyYW5zZm9ybSk7CisvKgorcHJp
bnRmKCIgQWZmaW5lVHJhbnNmb3JtIHh4PSVmIHl5PSVmIHh5PSVmIHl4PSVmIHgwPSVmIHkwPSVm
IFxuIiwKKyAgICAgICAgICAgICAgICBpbnZlcnNlLm1fdHJhbnNmb3JtLnh4LAorICAgICAgICAg
ICAgICAgIGludmVyc2UubV90cmFuc2Zvcm0ueXksCisgICAgICAgICAgICAgICAgaW52ZXJzZS5t
X3RyYW5zZm9ybS54eSwKKyAgICAgICAgICAgICAgICBpbnZlcnNlLm1fdHJhbnNmb3JtLnl4LAor
ICAgICAgICAgICAgICAgIGludmVyc2UubV90cmFuc2Zvcm0ueDAsCisgICAgICAgICAgICAgICAg
aW52ZXJzZS5tX3RyYW5zZm9ybS55MCk7CisqLworICAgIHJldHVybiBpbnZlcnNlOworfQorCitB
ZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIGNhaXJvX21hdHJpeF90KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90cmFuc2Zvcm07Cit9CisKK2Jvb2wgQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvcj09
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuKCBtX3Ry
YW5zZm9ybS54eCA9PSBvdGhlci5tX3RyYW5zZm9ybS54eCAmJgorICAgICAgICAgICAgbV90cmFu
c2Zvcm0ueXggPT0gb3RoZXIubV90cmFuc2Zvcm0ueXggJiYKKyAgICAgICAgICAgIG1fdHJhbnNm
b3JtLnh5ID09IG90aGVyLm1fdHJhbnNmb3JtLnh5ICYmCisgICAgICAgICAgICBtX3RyYW5zZm9y
bS55eSA9PSBvdGhlci5tX3RyYW5zZm9ybS55eSAmJgorICAgICAgICAgICAgbV90cmFuc2Zvcm0u
eDAgPT0gb3RoZXIubV90cmFuc2Zvcm0ueDAgJiYKKyAgICAgICAgICAgIG1fdHJhbnNmb3JtLnkw
ID09IG90aGVyLm1fdHJhbnNmb3JtLnkwICk7CisKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZp
bmVUcmFuc2Zvcm06Om9wZXJhdG9yKj0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBvdGhlcikKK3sK
KyAgICAvL3ByaW50ZigiQWZmaW5lVHJhbnNmb3JtICo9XG4iKTsKKy8qCitwcmludGYoIiBBZmZp
bmVUcmFuc2Zvcm0gb3RoZXIgeHg9JWYgeXk9JWYgeHk9JWYgeXg9JWYgeDA9JWYgeTA9JWYgXG4i
LAorICAgICAgICAgICAgICAgIG90aGVyLm1fdHJhbnNmb3JtLnh4LAorICAgICAgICAgICAgICAg
IG90aGVyLm1fdHJhbnNmb3JtLnl5LAorICAgICAgICAgICAgICAgIG90aGVyLm1fdHJhbnNmb3Jt
Lnh5LAorICAgICAgICAgICAgICAgIG90aGVyLm1fdHJhbnNmb3JtLnl4LAorICAgICAgICAgICAg
ICAgIG90aGVyLm1fdHJhbnNmb3JtLngwLAorICAgICAgICAgICAgICAgIG90aGVyLm1fdHJhbnNm
b3JtLnkwKTsKKyovCisgICAgY2Fpcm9fbWF0cml4X211bHRpcGx5KCZtX3RyYW5zZm9ybSwmbV90
cmFuc2Zvcm0sJm90aGVyLm1fdHJhbnNmb3JtKTsKKyAgICAvKgorcHJpbnRmKCIgQWZmaW5lVHJh
bnNmb3JtIHh4PSVmIHl5PSVmIHh5PSVmIHl4PSVmIHgwPSVmIHkwPSVmIFxuIiwKKyAgICAgICAg
ICAgICAgICBtX3RyYW5zZm9ybS54eCwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS55eSwK
KyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS54eSwKKyAgICAgICAgICAgICAgICBtX3RyYW5z
Zm9ybS55eCwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS54MCwKKyAgICAgICAgICAgICAg
ICBtX3RyYW5zZm9ybS55MCk7CisgICAgICAgICAgICAgICAgKi8KKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKK0FmZmluZVRyYW5zZm9ybSBBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKihjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIG90aGVyKQoreworICAgIC8vcHJpbnRmKCJBZmZpbmVUcmFuc2Zvcm0g
KlxuIik7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRtcDsKKyAgICBjYWlyb19tYXRyaXhfbXVsdGlw
bHkoJnRtcC5tX3RyYW5zZm9ybSwmbV90cmFuc2Zvcm0sJm90aGVyLm1fdHJhbnNmb3JtKTsKKyAg
ICAvKgorcHJpbnRmKCIgQWZmaW5lVHJhbnNmb3JtIHh4PSVmIHl5PSVmIHh5PSVmIHl4PSVmIHgw
PSVmIHkwPSVmIFxuIiwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS54eCwKKyAgICAgICAg
ICAgICAgICBtX3RyYW5zZm9ybS55eSwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS54eSwK
KyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS55eCwKKyAgICAgICAgICAgICAgICBtX3RyYW5z
Zm9ybS54MCwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS55MCk7CisgICAgICAgICAgICAg
ICAgKi8KKyAgICByZXR1cm4gdG1wOworfQorCit2b2lkIEFmZmluZVRyYW5zZm9ybTo6cHJpbnQo
KQoreworcHJpbnRmKCIgQWZmaW5lVHJhbnNmb3JtIHh4PSVmIHl5PSVmIHh5PSVmIHl4PSVmIHgw
PSVmIHkwPSVmIFxuIiwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS54eCwKKyAgICAgICAg
ICAgICAgICBtX3RyYW5zZm9ybS55eSwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS54eSwK
KyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS55eCwKKyAgICAgICAgICAgICAgICBtX3RyYW5z
Zm9ybS54MCwKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS55MCk7CisKK30KKworfQorCisv
LyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIFBMQVRGT1JNKENBSVJPKQogCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMzcsMTEgKzM4LDIwIEBACiAjaWYgV0lOMzIKICNp
bmNsdWRlIDxjYWlyby13aW4zMi5oPgogI2VuZGlmCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNs
dWRlICJLUmVuZGVyaW5nRGV2aWNlQ2Fpcm8uaCIKKyNlbmRpZgogCiAjaWZuZGVmIE1fUEkKICNk
ZWZpbmUgTV9QSSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KEdESykKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklY
TUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVU
VFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIG5vdEltcGxlbWVudGVk
KCkKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSB7CkBAIC01MCw2ICs2MCw4IEBACiAgICAgfkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSgpOwogCiAgICAgY2Fpcm9fdCogY29udGV4dDsKKyAgICBkb3VibGUg
YWxwaGE7CisgICAgVmVjdG9yPGZsb2F0PiBsYXllcnM7ICAKIH07CiAKIHN0YXRpYyBpbmxpbmUg
dm9pZCBzZXRDb2xvcihjYWlyb190KiBjciwgY29uc3QgQ29sb3ImIGNvbCkKQEAgLTk0LDYgKzEw
NiwxMCBAQAogICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUp
CiB7CiAgICAgbV9kYXRhLT5jb250ZXh0ID0gY2Fpcm9fcmVmZXJlbmNlKGNvbnRleHQpOworLy9G
SVhNRTogYSBoYWNrIHRpbGwgdGhlIGZpeCBmb3IgcmVsYXRpdmUgcGF0aHMgaXMgY2hlY2tlZCBp
biAKKyNpZiBQTEFURk9STShHREspCisgICAgICAgIGNhaXJvX21vdmVfdG8oY29udGV4dCwwLDAp
OworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTI1LDYgKzE0MSw3IEBACiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNh
aXJvX3NhdmUoY29udGV4dCk7CiAgICAgaWYgKGZpbGxDb2xvcigpLmFscGhhKCkpCiAgICAgICAg
IGZpbGxSZWN0U291cmNlT3Zlcihjb250ZXh0LCByZWN0LCBmaWxsQ29sb3IoKSk7CiAKQEAgLTEz
Niw2ICsxNTMsNyBAQAogICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjb250ZXh0LCAxLjAp
OwogICAgICAgICBjYWlyb19zdHJva2UoY29udGV4dCk7CiAgICAgfQorICAgIGNhaXJvX3Jlc3Rv
cmUoY29udGV4dCk7CiB9CiAKIC8vIEZJWE1FOiBOb3cgdGhhdCB0aGlzIGlzIHJlZmFjdG9yZWQs
IGl0IHNob3VsZCBiZSBzaGFyZWQgYnkgYWxsIGNvbnRleHRzLgpAQCAtNDY0LDYgKzQ4Miw1NjAg
QEAKIHsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVXaWR0aChmbG9hdCB3aWR0
aCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
Y2Fpcm9fc2V0X2xpbmVfd2lkdGggKG1fZGF0YS0+Y29udGV4dCx3aWR0aCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGMpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fbGluZV9jYXBfdCBj
YXAgPSBDQUlST19MSU5FX0NBUF9CVVRUOworCisgICAgc3dpdGNoIChsYykgeworICAgICAgICBj
YXNlIFJvdW5kQ2FwOgorICAgICAgICAgICAgY2FwID0gQ0FJUk9fTElORV9DQVBfUk9VTkQ7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAgICAgICAgIGNhcCA9
IENBSVJPX0xJTkVfQ0FQX1NRVUFSRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhaXJv
X3NldF9saW5lX2NhcChtX2RhdGEtPmNvbnRleHQsY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxqKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb19saW5lX2pvaW5fdCBqb2luID0gQ0FJ
Uk9fTElORV9KT0lOX01JVEVSOworCisgICAgc3dpdGNoIChsaikgeworICAgICAgICBjYXNlIFJv
dW5kSm9pbjoKKyAgICAgICAgICAgIGpvaW4gPSBDQUlST19MSU5FX0pPSU5fUk9VTkQ7CisgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEJldmVsSm9pbjoKKyAgICAgICAgICAgIGpvaW4gPSBD
QUlST19MSU5FX0pPSU5fUk9VTkQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYWlyb19z
ZXRfbGluZV9qb2luKG1fZGF0YS0+Y29udGV4dCxqb2luKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3NldF9taXRlcl9saW1pdChtX2Rh
dGEtPmNvbnRleHQsbWl0ZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEo
ZmxvYXQgYWxwaGEpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIC8vRklYTUUgbWUgdXNlIHRoaXMgYWxwaGEgaG93ID8KKyAgICBtX2RhdGEtPmFs
cGhhID0gYWxwaGE7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0Owor
ICAgIGNhaXJvX29wZXJhdG9yX3QgY29wID0gQ0FJUk9fT1BFUkFUT1JfQ0xFQVI7CisKKyAgICAv
L25vdCBzdXBwb3J0ZWQgPworICAgIC8vY29wID0gQ0FJUk9fT1BFUkFUT1JfREVTVDsKKyAgICAv
L2NvcCA9IENBSVJPX09QRVJBVE9SX0FERDsKKyAgICAvLyBjb3AgPSBDQUlST19PUEVSQVRPUl9T
QVRVUkFURTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgLy9jYXNlIENvbXBvc2l0ZUNs
ZWFyOgorICAgICAgICBjYXNlIENvbXBvc2l0ZUNvcHk6CisgICAgICAgICAgICBjb3AgPSBDQUlS
T19PUEVSQVRPUl9TT1VSQ0U7CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBvc2l0
ZVNvdXJjZU92ZXI6CisgICAgICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9PVkVSOworICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKKyAgICAgICAgICAg
IGNvcCA9IENBSVJPX09QRVJBVE9SX0lOOworICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
b21wb3NpdGVTb3VyY2VPdXQ6CisgICAgICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9PVVQ7
CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUF0b3A6CisgICAg
ICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9BVE9QOworICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk92ZXI6CisgICAgICAgICAgICBjb3AgPSBDQUlS
T19PUEVSQVRPUl9ERVNUX09WRVI7CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBv
c2l0ZURlc3RpbmF0aW9uSW46CisgICAgICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9ERVNU
X0lOOworICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91
dDoKKyAgICAgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX0RFU1RfT1VUOworICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkF0b3A6CisgICAgICAgICAg
ICBjb3AgPSBDQUlST19PUEVSQVRPUl9ERVNUX0FUT1A7CisgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENvbXBvc2l0ZVhPUjoKKyAgICAgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX1hP
UjsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKKyAg
ICAgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX09WRVI7CisgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENvbXBvc2l0ZUhpZ2hsaWdodDoKKyAgICAgICAgICAgIGNvcCA9IENBSVJPX09Q
RVJBVE9SX09WRVI7CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBvc2l0ZVBsdXNM
aWdodGVyOgorICAgICAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfT1ZFUjsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhaXJvX3NldF9vcGVyYXRvcihjcixjb3ApOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0
YS0+Y29udGV4dDsKKyAgICBjYWlyb19wYXRoX3QgKnAgPSBwYXRoLnBsYXRmb3JtUGF0aCgpOwor
ICAgIGNhaXJvX2FwcGVuZF9wYXRoKGNyLHApOworICAgIGNhaXJvX2NsaXAoY3IpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb19zY2Fs
ZShtX2RhdGEtPmNvbnRleHQsc2l6ZS53aWR0aCgpLHNpemUuaGVpZ2h0KCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb19yb3RhdGUo
bV9kYXRhLT5jb250ZXh0LGFuZ2xlSW5SYWRpYW5zKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIAoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y29udGV4dDsKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3Is
IENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19yZWN0YW5nbGUgKGNyLCByZWN0Lngo
KSxyZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19maWxs
IChjcik7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgZmxvYXQgd2lkdGgpIAoreyAKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3Ig
PSBtX2RhdGEtPmNvbnRleHQ7CisKKyAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVu
KSB7CisgICAgICAgIGNhaXJvX3NhdmUoY3IpOworICAgICAgICBzZXRDb2xvcihjciwgcGVuKCku
Y29sb3IoKSk7CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgci54KCksIHIueSgpLCByLndp
ZHRoKCksIHIuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjcix3aWR0
aCk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgICAgIGNhaXJvX3Jlc3RvcmUoY3Ip
OworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgYWxwaGEpIAoreyAKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9f
cHVzaF9ncm91cCAoY3IpOworICAgIG1fZGF0YS0+bGF5ZXJzLmFwcGVuZChhbHBoYSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7IAorICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9
IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19wb3BfZ3JvdXBfdG9fc291cmNlIChjcik7Cisg
ICAgZmxvYXQgYWxwaGEgPSBtX2RhdGEtPmxheWVycy5sYXN0KCk7CisgICAgbV9kYXRhLT5sYXll
cnMucmVtb3ZlTGFzdCgpOworICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEgKGNyLGFscGhhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHdvcmxkTWF0cml4KQoreworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0Owor
ICAgIGNhaXJvX21hdHJpeF90IGNfbWF0cml4ID0gKGNhaXJvX21hdHJpeF90KXdvcmxkTWF0cml4
OworICAgIGNhaXJvX3RyYW5zZm9ybShjciwmY19tYXRyaXgpOworfQorCisKKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFNoYWRvdyhJbnRTaXplIGNvbnN0JiwgaW50LCBDb2xvciBjb25zdCYp
IAoreyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNo
YWRvdygpCit7IG5vdEltcGxlbWVudGVkKCk7IH0KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFk
ZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BM
ZWZ0LCAKKyAgICAgICAgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsY29uc3QgSW50U2l6ZSYgYm90
dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpCit7CisgICAgLy9GSVhNRTogY2Fs
bGVkIG9mdGVuCisgICAgLy9ub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRo
aWNrbmVzcykKK3sgbm90SW1wbGVtZW50ZWQoKTsgfQorCisjaWZkZWYgU1ZHX1NVUFBPUlQKK0tS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmluZ0Rl
dmljZUNvbnRleHQoKQoreworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBzdGF0aWNf
Y2FzdDxHcmFwaGljc0NvbnRleHRDYWlybyo+KHRoaXMpOworICAgIHJldHVybiBuZXcgS1JlbmRl
cmluZ0RldmljZUNvbnRleHRDYWlybyhjdHgpOworfQorI2VuZGlmCisKK0dyYXBoaWNzQ29udGV4
dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCkKKyAgICA6R3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCit7CisgICAgLy9tYW55IGNhaXJv
IGNhbGxzIGRvIGRvIG5vdCBmdW5jdGlvbiBjb3JyZWN0bHkKKyAgICAvL3dpdGhvdXQgYSBwYXRo
IGZvciBleGFtcGxlIHRyYW5zZm9ybSBub3QgdXNlZCBpbiBkcmF3aW5nIHBvaW50CisgICAgbW92
ZVRvKEZsb2F0UG9pbnQoMC4wLDAuMCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjphcHBlbmQoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICAvL0ZJWE1FOiBjYWlybyBzaG91bGQg
aGF2ZSBhIHdheSB0byBkbyB0aGlzCisgICAgLy93aXRob3V0IGNvcHlpbmcgCisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9k
YXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7
CisgICAgY2Fpcm9fYXBwZW5kX3BhdGgoY3IscCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmNsZWFyQ2xpcCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJv
X3Jlc2V0X2NsaXAoY3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRGaWxs
UnVsZShXaW5kUnVsZSBydWxlKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWly
b19zZXRfZmlsbF9ydWxlKGNyLHJ1bGUgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxF
X0VWRU5fT0REIDoKKyAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXREYXNoZXMoZG91YmxlKiBkYXNo
ZXMsaW50IG51bV9kYXNoZXMsZG91YmxlIG9mZnNldCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRl
eHQ7CisgICAgY2Fpcm9fc2V0X2Rhc2goY3IsZGFzaGVzLG51bV9kYXNoZXMsb2Zmc2V0KTsKKwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiBwKSBjb25zdAoreworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0Owor
ICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGlmIChwZW4oKS5zdHlsZSgpICE9IFBlbjo6Tm9QZW4p
IAorICAgICAgICBzZXRDb2xvcihjciwgcGVuKCkuY29sb3IoKSk7CisgICAgcmV0dXJuIGNhaXJv
X2luX3N0cm9rZShjciwoZG91YmxlKXAueCgpLChkb3VibGUpcC55KCkpOworICAgIGNhaXJvX3Jl
c3RvcmUoY3IpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZUJv
dW5kaW5nUmVjdCgpIGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7
CisgICAgZG91YmxlIHgsIHksIHcsIGg7CisgICAgY2Fpcm9fc3Ryb2tlX2V4dGVudHMoY3IsJngs
JnksJncsJmgpOworICAgIHJldHVybiBGbG9hdFJlY3QoeCx5LHcsaCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9f
dCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwmKChjYWly
b19tYXRyaXhfdCl0cmFuc2Zvcm0pKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpnZXRDVE0oKQoreworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0
OworICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeDsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCZt
YXRyaXgpOworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0obWF0cml4KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7
CisgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZmlsbCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX2ZpbGwoY3IpOwor
fQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0U291cmNlUGF0dGVybihjYWlyb19wYXR0
ZXJuX3QqIHBhdCkgY29uc3QKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9f
c2V0X3NvdXJjZShjcixwYXQpOworCit9CisKK2NhaXJvX3BhdHRlcm5fdCogR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNvdXJjZVBhdHRlcm4oKSBjb25zdAoreworICAgIGNhaXJvX3QqIGNyID0gbV9k
YXRhLT5jb250ZXh0OworICAgIHJldHVybiBjYWlyb19nZXRfc291cmNlKGNyKTsKK30KKworR3Jh
cGhpY3NDb250ZXh0KiBHcmFwaGljc0NvbnRleHRDYWlybzo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCkKK3sKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19zdXJm
YWNlX3QgKnN1cmZhY2UgPSBjYWlyb19nZXRfdGFyZ2V0IChjcik7CisgICAgY2Fpcm9fdCogbmV3
Q3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRl
eHRDYWlybyhuZXdDcik7Cit9CisKK0dyYXBoaWNzQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y3JlYXRlUGF0aEdyYXBoaWNzQ29udGV4dCgpCit7CisgICAgc3RhdGljIGNhaXJv
X3N1cmZhY2VfdCogcGF0aFN1cmZhY2U7CisgICAgaWYoIXBhdGhTdXJmYWNlKQorICAgICAgICAg
ICAgcGF0aFN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRf
QTgsMSwxKTsgCisgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUocGF0aFN1cmZhY2UpOyAK
KyAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dENhaXJvKGNyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6Y2xlYXJQYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7
CisgICAgY2Fpcm9fbmV3X3BhdGgoY3IpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dENhaXJv
Ojppc1BhdGhFbXB0eSgpIGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRl
eHQ7CisgICAgLy9pZi93aGVuIHRoZSBwYXRjaCB0byBnZXQgY3VycmVudCBwdCByZXR1cm4gc3Rh
dHVzIGlzIGFwcGxpZWQKKyAgICAvL3JldHVybiBjYWlyb19nZXRfY3VycmVudF9wb2ludChjciwm
ZHgsJmR5KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4
dDsKKyAgICBjYWlyb19tb3ZlX3RvKGNyLCBwLngoKSwgcC55KCkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3Ig
PSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fbGluZV90byhjciwgcC54KCksIHAueSgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3JlY3RhbmdsZShj
ciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBv
aW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1f
ZGF0YS0+Y29udGV4dDsKKyAgICBkb3VibGUgeCwgeTsKKyAgICBkb3VibGUgeDEgPSBjb250cm9s
UG9pbnQueCgpOworICAgIGRvdWJsZSB5MSA9IGNvbnRyb2xQb2ludC55KCk7CisgICAgZG91Ymxl
IHgyID0gcG9pbnQueCgpOworICAgIGRvdWJsZSB5MiA9IHBvaW50LnkoKTsKKyAgICBjYWlyb19n
ZXRfY3VycmVudF9wb2ludCAoY3IsICZ4LCAmeSk7CisgICAgY2Fpcm9fY3VydmVfdG8gKGNyLAor
ICAgICAgICAgICAgICB4ICArIDIuMC8zLjAgKiAoeDEgLSB4KSwgIHkgICsgMi4wLzMuMCAqICh5
MSAtIHkpLAorICAgICAgICAgICAgICB4MiArIDIuMC8zLjAgKiAoeDEgLSB4MiksIHkyICsgMi4w
LzMuMCAqICh5MSAtIHkyKSwKKyAgICAgICAgICAgICAgeDIsIHkyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250
cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQyLCBjb25zdCBGbG9hdFBv
aW50JiBjb250cm9sUG9pbnQzKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWly
b19jdXJ2ZV90byhjcixjb250cm9sUG9pbnQxLngoKSwgY29udHJvbFBvaW50MS55KCksIAorICAg
ICAgICAgICAgICAgICAgICBjb250cm9sUG9pbnQyLngoKSwgY29udHJvbFBvaW50Mi55KCksY29u
dHJvbFBvaW50My54KCksIGNvbnRyb2xQb2ludDMueSgpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNh
LCBmbG9hdCBlYSwgYm9vbCBjbG9ja3dpc2UpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0Owor
ICAgIGlmKCBjbG9ja3dpc2UpCisgICAgICAgIGNhaXJvX2FyYyhjcixwLngoKSxwLnkoKSxyLHNh
LGVhKTsKKyAgICBlbHNlCisgICAgICAgIGNhaXJvX2FyY19uZWdhdGl2ZShjcixwLngoKSxwLnko
KSxyLHNhLGVhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YWRkQXJjVG8oY29u
c3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJv
X3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIC8vRklYTUU6IGNhaXJvX2FyY190byBub3Qg
eWV0IGluIGNhaXJvIHNlZSBjYWlyby5oCisgICAgLy9jYWlyb19hcmNfdG8oY3IscDEueCgpLHAx
LnkoKSxwMi54KCkscDIueSgpKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9f
dCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgZmxvYXQg
eVJhZGl1cyA9IC41ICogcmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCB4UmFkaXVzID0gLjUgKiBy
ZWN0LndpZHRoKCk7CisgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCByZWN0LngoKSArIHhSYWRpdXMs
IHJlY3QueSgpICsgeVJhZGl1cyk7CisgICAgY2Fpcm9fc2NhbGUoY3IsIHhSYWRpdXMsIHlSYWRp
dXMpOworICAgIGNhaXJvX2FyYyhjciwgMC4sIDAuLCAxLiwgMC4sIDIgKiBNX1BJKTsKKyAgICBj
YWlyb19yZXN0b3JlKGNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xvc2VT
dWJwYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fY2xvc2VfcGF0
aChjcik7Cit9CisKKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpib3VuZGluZ1Jl
Y3QoKSBjb25zdAoreworICAgIGRvdWJsZSB4LCB5LCB3LCBoOworICAgIGNhaXJvX3QqIGNyID0g
bV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX2ZpbGxfZXh0ZW50cyhjciwmeCwmeSwmdywmaCk7
CisgICAgcmV0dXJuIEZsb2F0UmVjdCh4LHksdyxoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUp
IGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9f
ZmlsbF9ydWxlX3QgY3VyID0gY2Fpcm9fZ2V0X2ZpbGxfcnVsZShjcik7CisgICAgY2Fpcm9fc2V0
X2ZpbGxfcnVsZShjcixydWxlID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVO
X09ERCA6IAorICAgICAgICAgICAgICAgICAgICBDQUlST19GSUxMX1JVTEVfV0lORElORyk7Cisg
ICAgYm9vbCBjb250YWlucyA9ICBjYWlyb19pbl9maWxsKGNyLChkb3VibGUpcG9pbnQueCgpLChk
b3VibGUpcG9pbnQueSgpKTsKKyAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLGN1cik7CisgICAg
cmV0dXJuIGNvbnRhaW5zOworfQorCitQbGF0Zm9ybVBhdGgqIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpwbGF0Zm9ybVBhdGgoKSBjb25zdAoreyAKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29u
dGV4dDsKKyAgICByZXR1cm4gY2Fpcm9fY29weV9wYXRoKGNyKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5j
dGlvbikgY29uc3QKK3sKKyAgICBpbnQgaTsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29u
dGV4dDsKKyAgICBjYWlyb19wYXRoX3QgKnBhdGggPSAgY2Fpcm9fY29weV9wYXRoIChjcik7Cisg
ICAgY2Fpcm9fcGF0aF9kYXRhX3QqIGRhdGE7CisgICAgUGF0aEVsZW1lbnQgcGVsZW1lbnQ7Cisg
ICAgRmxvYXRQb2ludCBwb2ludHNbM107CisgICAgcGVsZW1lbnQucG9pbnRzID0gcG9pbnRzOwor
CisgICAgZm9yIChpPTA7IGkgPCBwYXRoLT5udW1fZGF0YTsgaSArPSBwYXRoLT5kYXRhW2ldLmhl
YWRlci5sZW5ndGgpIHsKKyAgICAgICAgZGF0YSA9ICZwYXRoLT5kYXRhW2ldOworICAgICAgICBz
d2l0Y2ggKGRhdGEtPmhlYWRlci50eXBlKSB7CisgICAgICAgICAgICBjYXNlIENBSVJPX1BBVEhf
TU9WRV9UTzoKKyAgICAgICAgICAgICAgICBwZWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRNb3Zl
VG9Qb2ludDsKKyAgICAgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBGbG9hdFBvaW50
KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOworICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKGluZm8sICZwZWxlbWVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQ0FJUk9fUEFUSF9MSU5FX1RPOgorICAgICAgICAgICAgICAgIHBlbGVtZW50LnR5cGUgPSBQ
YXRoRWxlbWVudEFkZExpbmVUb1BvaW50OworICAgICAgICAgICAgICAgIHBlbGVtZW50LnBvaW50
c1swXSA9IEZsb2F0UG9pbnQoZGF0YVsxXS5wb2ludC54LGRhdGFbMV0ucG9pbnQueSk7CisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDQUlST19QQVRIX0NVUlZFX1RPOgorICAgICAgICAgICAgICAg
IHBlbGVtZW50LnR5cGUgPSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludDsKKyAgICAgICAgICAg
ICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBGbG9hdFBvaW50KGRhdGFbMV0ucG9pbnQueCxkYXRh
WzFdLnBvaW50LnkpOworICAgICAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1sxXSA9IEZsb2F0
UG9pbnQoZGF0YVsyXS5wb2ludC54LGRhdGFbMl0ucG9pbnQueSk7CisgICAgICAgICAgICAgICAg
cGVsZW1lbnQucG9pbnRzWzJdID0gRmxvYXRQb2ludChkYXRhWzNdLnBvaW50LngsZGF0YVszXS5w
b2ludC55KTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihpbmZvLCAmcGVsZW1lbnQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENBSVJPX1BBVEhfQ0xPU0VfUEFUSDoK
KyAgICAgICAgICAgICAgICBwZWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg7
CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3BhdGhfZGVzdHJveSAocGF0aCk7
Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRDYWlybzo6cGF0aERlYnVnU3RyaW5nKCkgY29u
c3QKK3sKKyAgICBTdHJpbmcgc3RyaW5nPSIiOworICAgICBpbnQgaTsKKyAgICBjYWlyb190KiBj
ciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19wYXRoX3QgKnBhdGggPSAgY2Fpcm9fY29w
eV9wYXRoIChjcik7CisgICAgY2Fpcm9fcGF0aF9kYXRhX3QqIGRhdGE7CisgICAgaWYoIHBhdGgt
Pm51bV9kYXRhID09IDAgKQorICAgICAgICAgICAgc3RyaW5nID0gIkVNUFRZIjsKKyAgICBmb3Ig
KGk9MDsgaSA8IHBhdGgtPm51bV9kYXRhOyBpICs9IHBhdGgtPmRhdGFbaV0uaGVhZGVyLmxlbmd0
aCkgeworICAgICAgICBkYXRhID0gJnBhdGgtPmRhdGFbaV07CisgICAgICAgIHN3aXRjaCAoZGF0
YS0+aGVhZGVyLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ0FJUk9fUEFUSF9NT1ZFX1RPOgor
ICAgICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmc6OnNwcmludGYoIk0gJS4yZiwlLjJmIiwK
KyAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0ucG9pbnQueCwgZGF0YVsxXS5wb2ludC55KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDQUlST19QQVRIX0xJTkVfVE86
CisgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZzo6c3ByaW50ZigiTCAlLjJmLCUuMmYi
LAorICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXS5wb2ludC54LCBkYXRhWzFdLnBvaW50Lnkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENBSVJPX1BBVEhfQ1VSVkVf
VE86CisgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZzo6c3ByaW50ZigiQyAlLjJmLCUu
MmYsJS4yZiwlLjJmLCUuMmYsJS4yZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFbMV0ucG9pbnQueCwgZGF0YVsxXS5wb2ludC55LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhWzJdLnBvaW50LngsIGRhdGFbMl0ucG9pbnQueSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVszXS5wb2ludC54LCBkYXRhWzNdLnBv
aW50LnkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENBSVJPX1BBVEhf
Q0xPU0VfUEFUSDoKKyAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIlgiOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgY2Fpcm9fcGF0aF9kZXN0cm95IChwYXRoKTsK
KyAgICByZXR1cm4gc3RyaW5nOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBQTEFURk9STShDQUlSTykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0Q2Fpcm9f
aAorI2RlZmluZSBHcmFwaGljc0NvbnRleHRDYWlyb19oCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJQZW4uaCIKKyNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisjaW5jbHVkZSA8dW5p
Y29kZS91bWFjaGluZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0Kik7CisgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IFBhdGgmKTsK
KyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgV2luZFJ1bGUgcnVsZSA9
IFJVTEVfTk9OWkVSTykgY29uc3Q7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QoKSBj
b25zdDsKKyAgICAgICAgYm9vbCBpc1BhdGhFbXB0eSgpIGNvbnN0OworICAgICAgICB2b2lkIG1v
dmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgICAgIHZvaWQgYWRkTGluZVRvKGNvbnN0IEZs
b2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50
JiBjb250cm9sUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KTsKKyAgICAgICAgdm9pZCBh
ZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9p
ZCBhZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHJh
ZGl1cyk7CisKKyAgICAgICAgdm9pZCBhZGRBcmMoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHJh
ZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgY2xvY2t3aXNlKTsK
KyAgICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2b2lkIGFk
ZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgICAgIHZvaWQgY2xvc2VTdWJwYXRoKCk7
CisgICAgICAgIHZvaWQgY2xlYXJDbGlwKCk7CisgICAgICAgIHZvaWQgY2xlYXJQYXRoKCk7Cisg
ICAgICAgIHZvaWQgYXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbikgY29uc3Q7
CisgICAgICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
ICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdSZWN0KCkgY29uc3Q7CisgICAgICAgIHZv
aWQgc2V0Q1RNKEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKTsKKyAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGdldENUTSgpOworICAgICAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsKKyAg
ICAgICAgdm9pZCBzZXREYXNoZXMoZG91YmxlKiBkYXNoZXMsaW50IG51bV9kYXNoZXMsZG91Ymxl
IG9mZnNldCk7CisgICAgICAgIHZvaWQgc3Ryb2tlKCk7CisgICAgICAgIHZvaWQgZmlsbCgpOwor
ICAgICAgICBTdHJpbmcgcGF0aERlYnVnU3RyaW5nKCkgY29uc3Q7CisgICAgICAgIFBsYXRmb3Jt
UGF0aCogcGxhdGZvcm1QYXRoKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0U291cmNlUGF0dGVy
bihjYWlyb19wYXR0ZXJuX3QqIHBhdCkgY29uc3Q7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fdCog
c291cmNlUGF0dGVybigpIGNvbnN0OworICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpOyAKKyAgICAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dENhaXJvKiBj
cmVhdGVQYXRoR3JhcGhpY3NDb250ZXh0KCk7IAorICAgICAgICAKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHcmFwaGljc0NvbnRleHRDYWlyb19oCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1BhdGhDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9jYWlyby9QYXRoQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9jYWlyby9QYXRoQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAy
MDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA1IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2pl
Y3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGF0aDo6UGF0aCgpCit7CisgICAgbV9nYyA9IEdyYXBoaWNz
Q29udGV4dENhaXJvOjpjcmVhdGVQYXRoR3JhcGhpY3NDb250ZXh0KCk7Cit9CitQYXRoOjpQYXRo
KGNvbnN0IFBhdGgmIG90aGVyKQoreworICAgIG1fZ2MgPSBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y3JlYXRlUGF0aEdyYXBoaWNzQ29udGV4dCgpOworICAgIG1fZ2MtPmFwcGVuZChvdGhlcik7Cit9
CisKKworCitQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCit7CisgICAg
aWYgKCZvdGhlciA9PSB0aGlzKSB7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAg
ZGVsZXRlIG1fZ2M7CisgICAgbV9nYyA9IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjcmVhdGVQYXRo
R3JhcGhpY3NDb250ZXh0KCk7CisgICAgbV9nYy0+YXBwZW5kKG90aGVyKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKKworUGF0aDo6flBhdGgoKQoreworICAgIGRlbGV0ZSBtX2djOworfQorCit2
b2lkIFBhdGg6OmNsZWFyKCkKK3sKKyAgICBtX2djLT5jbGVhclBhdGgoKTsKK30KKworYm9vbCBQ
YXRoOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9nYy0+aXNQYXRoRW1wdHkoKTsK
K30KKwordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBwKQoreworICAgIG1f
Z2MtPnRyYW5zbGF0ZShwLndpZHRoKCkscC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgUGF0aDo6bW92
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbV9nYy0+bW92ZVRvKHApOworfQorCit2
b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG1fZ2MtPmFk
ZExpbmVUbyhwKTsKK30KKwordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBtX2djLT5hZGRSZWN0KHJlY3QpOworfQorCisvKgorICogY29waWVkIGZyb20g
bGlic3ZnLWNhaXJvCisgKi8KK3ZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgY29udHJvbFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBtX2dj
LT5hZGRRdWFkQ3VydmVUbyhjb250cm9sUG9pbnQscG9pbnQpOworfQorCit2b2lkIFBhdGg6OmFk
ZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MykK
K3sKKyAgICBtX2djLT5hZGRCZXppZXJDdXJ2ZVRvKGNvbnRyb2xQb2ludDEsY29udHJvbFBvaW50
Mixjb250cm9sUG9pbnQzKTsKK30KKwordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2lu
dCYgcCwgZmxvYXQgciwgZmxvYXQgc2EsIGZsb2F0IGVhLCBib29sIGNsb2Nrd2lzZSkKK3sKKyAg
ICBtX2djLT5hZGRBcmMocCxyLHNhLGVhLGNsb2Nrd2lzZSk7Cit9CisKKy8qCisgKiBjb3BpZWQg
ZnJvbSBsaWJzdmctY2Fpcm8KKyAqLwordm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBv
aW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKK3sKKyAgICBtX2dj
LT5hZGRBcmNUbyhwMSxwMixyYWRpdXMpOworfQorCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fZ2MtPmFkZEVsbGlwc2UocmVjdCk7Cit9CisK
K3ZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBtX2djLT5jbG9zZVN1YnBhdGgoKTsK
K30KKworCitGbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9nYy0+Ym91bmRpbmdSZWN0KCk7Cit9CisKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Z2MtPmNvbnRhaW5zKHBvaW50LHJ1bGUpOworfQorCisjaWYgUExBVEZPUk0oQ0FJUk8pCisKK2Jv
b2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IGxp
bmVXaWR0aCwKKyAgICAgICAgICAgICAgICBMaW5lQ2FwIGNhcCxMaW5lSm9pbiBqb2luLCBmbG9h
dCBtaXRlckxpbWl0KSBjb25zdAoreworICAgIG1fZ2MtPnNhdmUoKTsKKyAgICBtX2djLT5zZXRM
aW5lV2lkdGgobGluZVdpZHRoKTsKKyAgICBtX2djLT5zZXRMaW5lQ2FwKGNhcCk7CisgICAgbV9n
Yy0+c2V0TGluZUpvaW4oam9pbik7CisgICAgaWYoIGpvaW4gPT0gTWl0ZXJKb2luICYmIG1pdGVy
TGltaXQpCisgICAgICAgICAgICBtX2djLT5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQpOworICAg
IGJvb2wgYiA9ICBtX2djLT5zdHJva2VDb250YWlucyhwb2ludCk7CisgICAgbV9nYy0+cmVzdG9y
ZSgpOworICAgIHJldHVybiBiOworfQorCitGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdS
ZWN0KGZsb2F0IGxpbmVXaWR0aCwKKyAgICAgTGluZUNhcCBjYXAsTGluZUpvaW4gam9pbiwgZmxv
YXQgbWl0ZXJMaW1pdCkgY29uc3QKK3sKKyAgICBtX2djLT5zYXZlKCk7CisgICAgbV9nYy0+c2V0
TGluZVdpZHRoKGxpbmVXaWR0aCk7CisgICAgbV9nYy0+c2V0TGluZUNhcChjYXApOworICAgIG1f
Z2MtPnNldExpbmVKb2luKGpvaW4pOworICAgIGlmKCBqb2luID09IE1pdGVySm9pbiAmJiBtaXRl
ckxpbWl0KQorICAgICAgICAgICAgbV9nYy0+c2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAg
ICBGbG9hdFJlY3QgZiAgPSAgbV9nYy0+c3Ryb2tlQm91bmRpbmdSZWN0KCk7CisgICAgbV9nYy0+
cmVzdG9yZSgpOworICAgIHJldHVybiBmOworfQorI2VuZGlmCisKK3ZvaWQgUGF0aDo6YXBwbHko
dm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbikgY29uc3QKK3sKKworfQorCit2b2lkIFBh
dGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zKQoreworICAgIG1fZ2Mt
PmNvbmNhdENUTSh0cmFucyk7ICAKK30KKworUGxhdGZvcm1QYXRoKiBQYXRoOjpwbGF0Zm9ybVBh
dGgoKSBjb25zdAoreyAKKyAgICByZXR1cm4gbV9nYy0+cGxhdGZvcm1QYXRoKCk7Cit9CisKK1N0
cmluZyBQYXRoOjpkZWJ1Z1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2MtPnBhdGhE
ZWJ1Z1N0cmluZygpOworfQorCit9CisvLyB2aW06dHM9NDpldApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUGFnZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
UGFnZUdkay5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGFn
ZUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQog
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIyLDcg
QEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzEsNTEg
KzMxLDQyIEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAiRnJh
bWVHZGsuaCIKKyNpbmNsdWRlICJXaW5kb3dHZGsuaCIKIAorI2RlZmluZSBub3RJbXBsZW1lbnRl
ZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNc
biIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBHZGtEcmF3YWJsZSogcm9vdFdpbmRvd0Zv
ckZyYW1lKEZyYW1lKiBmcmFtZSkKK1BhZ2U6OlBhZ2UoKQorICA6bV9mcmFtZUNvdW50KDApLG1f
ZHJhZ0NhcmV0Q29udHJvbGxlcigwLCB0cnVlKQogewotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiAwOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKLSAg
ICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgR2RrRHJhd2FibGUqIGRy
YXdhYmxlID0gZnJhbWVWaWV3LT5kcmF3YWJsZSgpOwotICAgIGlmICghZHJhd2FibGUpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGlmICghR0RLX1dJTkRPVyhkcmF3YWJsZSkpCi0gICAgICAgIHJl
dHVybiBkcmF3YWJsZTsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJhd2Fi
bGUpOwotICAgIHJldHVybiBnZGtfd2luZG93X2dldF90b3BsZXZlbCh3aW5kb3cpOworICAgaW5p
dCgpOwogfQogCiBGbG9hdFJlY3QgUGFnZTo6d2luZG93UmVjdCgpIGNvbnN0CiB7Ci0gICAgR2Rr
RHJhd2FibGUqIGRyYXdhYmxlID0gcm9vdFdpbmRvd0ZvckZyYW1lKG1haW5GcmFtZSgpKTsKLSAg
ICBpZiAoIWRyYXdhYmxlKQorICAgIEZyYW1lR2RrKiBmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1l
R2RrKj4obWFpbkZyYW1lKCkpOworICAgIGlmKCAhZnJhbWUgKQogICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KCk7CiAKLSAgICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlcHRoOworICAgIElu
dFJlY3QgcmVjdDsKIAotICAgIGlmICghR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpIHsKLSAgICAg
ICAgZ2RrX2RyYXdhYmxlX2dldF9zaXplKGRyYXdhYmxlLCAmd2lkdGgsICZoZWlnaHQpOwotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLQotICAg
IEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRv
d19nZXRfZ2VvbWV0cnkod2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgJmRlcHRoKTsK
LSAgICByZXR1cm4gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmKGZyYW1l
LT53aW5kb3coKSkKKyAgICAgICAgcmVjdCA9IGZyYW1lLT53aW5kb3coKS0+Z2VvbWV0cnkoKTsK
KyAgICBlbHNlCisgICAgICAgIHJlY3QgPSBmcmFtZS0+dmlldygpLT5mcmFtZUdlb21ldHJ5KCk7
CisgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0KTsKIH0KIAogdm9pZCBQYWdlOjpzZXRXaW5kb3dS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBy
b290V2luZG93Rm9yRnJhbWUobWFpbkZyYW1lKCkpOwotICAgIGlmICghZHJhd2FibGUgfHwgIUdE
S19JU19XSU5ET1coZHJhd2FibGUpKQorICAgIEZyYW1lR2RrKiBmcmFtZSA9IHN0YXRpY19jYXN0
PEZyYW1lR2RrKj4obWFpbkZyYW1lKCkpOworICAgIGlmKCAhZnJhbWUgKQogICAgICAgICByZXR1
cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBn
ZGtfd2luZG93X21vdmVfcmVzaXplKHdpbmRvdywgKGludClyLngoKSwgKGludClyLnkoKSwgKGlu
dClyLndpZHRoKCksIChpbnQpci5oZWlnaHQoKSk7CisgICAgSW50UmVjdCByZWN0ID0gZW5jbG9z
aW5nSW50UmVjdChyKTsKKyAgICBpZihmcmFtZS0+d2luZG93KCkpCisgICAgICAgIGZyYW1lLT53
aW5kb3coKS0+c2V0R2VvbWV0cnkocmVjdCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL0N1cnNvckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
Q3Vyc29yR2RrLmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9D
dXJzb3JHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3ICsy
Miw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTMy
LDYgKzMyLDggQEAKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJG
SVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BS
RVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEN1
cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9HbHlwaE1hcEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
R2x5cGhNYXBHZGsuY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0dseXBoTWFwR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOCwx
MyArOCwxMyBAQAogICogYXJlIG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKICAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0lt
YWdlR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9JbWFnZUdkay5j
cHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMSArMjAsMTIgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKIAogI2lmIFBMQVRGT1JNKENBSVJPKQogI2luY2x1ZGUgPGNhaXJvLmg+
CkBAIC0zMiw2ICszMyw4IEBACiAjZXJyb3IgIkdESyBwb3J0IHJlcXVpcmVzIFBMQVRGT1JNKENB
SVJPKSIKICNlbmRpZgogCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0
ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElO
RV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisKIC8vIFRoaXMgZnVuY3Rpb24g
bG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0CiBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50
b0FycmF5KGNvbnN0IGNoYXIqKTsKIApAQCAtNTUsNyArNTgsOCBAQAogCiAgICAgYm9vbCBJbWFn
ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCisgICAgICAgIGlmKCB0eXBlID09ICJpbWFnZS9qcGVnIiB8fCB0eXBl
ID09ICJpbWFnZS9wbmciKQorICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRQcml2YXRl
R2RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdk
ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdk
ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAgICAgCisgICAgY2xh
c3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgV2lkZ2V0OworICAgIGNsYXNzIE5vZGU7CisgICAgY2xh
c3MgV2lkZ2V0Q2xpZW50OworICAgIGNsYXNzIFJlc291cmNlTG9hZGVyOworICAgIGNsYXNzIEZv
cm1EYXRhOworICAgIGNsYXNzIEZyYW1lVmlldzsKKworICAgIAorY2xhc3MgV2lkZ2V0UHJpdmF0
ZSA6IFJlc291cmNlTG9hZGVyQ2xpZW50IHsKKyAgICAKK3B1YmxpYzoKKyAgICBXaWRnZXRQcml2
YXRlKFdpZGdldCopOyAgCisgICAgdmlydHVhbCB+V2lkZ2V0UHJpdmF0ZSgpOworICAgIHZvaWQg
c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgdGhpcy0+bV9uYW1lID0gbmFtZTsgfQorICAg
IFN0cmluZyBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdm9pZCBjcmVhdGVWaWV3KEtV
UkwgdXJsKTsKKyAgICBib29sIG9wZW5VUkwoY29uc3QgS1VSTCYgdXJsKTsKKyAgICB2b2lkIHN1
Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgRm9y
bURhdGEqIHBvc3REYXRhKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZWRpcmVjdChSZXNv
dXJjZUxvYWRlciosIGNvbnN0IEtVUkwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZXNw
b25zZShSZXNvdXJjZUxvYWRlciosIFBsYXRmb3JtUmVzcG9uc2UpOworICAgIHZpcnR1YWwgdm9p
ZCByZWNlaXZlZERhdGEoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlTG9hZGVyKixQbGF0Zm9ybURhdGEp
OworCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcERvY3VtZW50KCk7CisjZW5kaWYgICAg
ICAgIAorcHVibGljOgorICAgIFN0cmluZyBtX25hbWU7CisgICAgS1VSTCBtX3VybDsKKyAgICBi
b29sIHZpc2libGU7CisgICAgYm9vbCBlbmFibGVkOworICAgIGJvb2wgc2VsZWN0ZWQ7CisgICAg
Ym9vbCBoYXNGb2N1czsKKyAgICBJbnRSZWN0IGdlb21ldHJ5OworICAgIEZvbnQgZm9udDsKKyAg
ICBXaWRnZXRDbGllbnQqIGNsaWVudDsKKyAgICBXaWRnZXQqIG1fd2lkZ2V0OworICAgIFdpZGdl
dCogbV9vd25lcjsKKyAgICBXaWRnZXQqIG1fcGFyZW50OworICAgIFJlZlB0cjxGcmFtZVZpZXc+
IG1fdmlldzsKKyAgICBib29sIG1faGFzU2Nyb2xsYmFyczsKKyAgICBib29sIG1fYm91bmQ7Cisg
ICAgYm9vbCBtX2lzRXJyb3I7Cit9OworCit9IAorLy8gdmltOiB0cz00IHN3PTQgZXQKKwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQnJvd3NlckV4dGVuc2lvbkdkay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Jyb3dzZXJFeHRlbnNpb25HZGsuaAkocmV2aXNpb24g
MTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Ccm93c2VyRXh0ZW5zaW9uR2RrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKIGNsYXNzIEJyb3dzZXJFeHRlbnNpb25HZGsg
OiBwdWJsaWMgQnJvd3NlckV4dGVuc2lvbiB7CiBwdWJsaWM6CiAgICAgQnJvd3NlckV4dGVuc2lv
bkdkayhGcmFtZSopOworICAgIHZpcnR1YWwgfkJyb3dzZXJFeHRlbnNpb25HZGsoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVOZXdXaW5kb3coY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVOZXdXaW5kb3coY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYs
IGNvbnN0IFdpbmRvd0FyZ3MmLCBGcmFtZSomKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1Jlc291cmNlTG9hZGVyTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5oCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwyNiArMzEsMjkgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorCiBjbGFz
cyBSZXNvdXJjZUxvYWRlck1hbmFnZXIgewogcHVibGljOgorICAgIHN0YXRpYyBjaGFyKiBnZXRN
aW1lVHlwZShTdHJpbmcmKTsKICAgICBzdGF0aWMgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyKiBnZXQo
KTsKKyAgICB2b2lkIGluaXRKb2IoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICBWZWN0b3I8Y2hhcj4g
cnVuSW1tZWRpYXRlbHkoUmVzb3VyY2VMb2FkZXIqKTsKICAgICB2b2lkIGFkZChSZXNvdXJjZUxv
YWRlciopOwogICAgIHZvaWQgY2FuY2VsKFJlc291cmNlTG9hZGVyKik7CiAKLSAgICAvLyBJZiB0
cnVlLCBkb24ndCBtdWx0aXBsZXggZG93bmxvYWRzOiBkb3dubG9hZCBjb21wbGV0ZWx5IG9uZSBh
dCBhIHRpbWUuCi0gICAgdm9pZCB1c2VTaW1wbGVUcmFuc2Zlcihib29sIHVzZVNpbXBsZSk7Ci0K
IHByaXZhdGU6CiAgICAgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyKCk7CiAgICAgdm9pZCBkb3dubG9h
ZFRpbWVyQ2FsbGJhY2soVGltZXI8UmVzb3VyY2VMb2FkZXJNYW5hZ2VyPiopOwogICAgIHZvaWQg
cmVtb3ZlKFJlc291cmNlTG9hZGVyKik7Ci0KLSAgICBib29sIG1fdXNlU2ltcGxlOwotICAgIEhh
c2hTZXQ8UmVzb3VyY2VMb2FkZXIqPiogam9iczsKKyAgICB2b2lkIHNldHVwUG9zdChSZXNvdXJj
ZUxvYWRlciopOworICAgIHZvaWQgc2V0dXBQdXQoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICBIYXNo
U2V0PFJlc291cmNlTG9hZGVyKj4gam9iczsKKyAgICBIYXNoU2V0PFJlc291cmNlTG9hZGVyKj4g
c2ltcGxlSm9iczsKICAgICBUaW1lcjxSZXNvdXJjZUxvYWRlck1hbmFnZXI+IG1fZG93bmxvYWRU
aW1lcjsKICAgICBDVVJMTSogY3VybE11bHRpSGFuZGxlOyAvLyBub3QgZnJlZWQKIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXaWRn
ZXQuaCIKKyNpbmNsdWRlICJXaWRnZXRQcml2YXRlR2RrLmgiCisjaW5jbHVkZSAiRnJhbWVHZGsu
aCIKKyNpbmNsdWRlICJTY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5o
IgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKworI2RlZmluZSBub3RJ
bXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDog
JXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3
aGlsZSgwKQorCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy9GSVhNRTogaGFjayB0aWxsIHdlIGhhdmUgYSByZWFsIHByaXZhdGUgY29uZmlnICBwYWdl
IGJyb3dzZXJDb25maWcueG1sCitzdGF0aWMgU3RyaW5nIGltcGxVUkwoIFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIGlmKCBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNj
cm9sbGJhciApCisgICAgICAgIHJldHVybiBTdHJpbmcoIi9TY3JvbGxiYXIvU2Nyb2xsYmFyLnN2
Zz92ZXJ0aWNhbCIpOworCisgICAgcmV0dXJuIFN0cmluZygiL1Njcm9sbGJhci9TY3JvbGxiYXIu
c3ZnP2hvcml6b250YWwiKTsKK30KKworCitzdGF0aWMgdm9pZCBkb1Njcm9sbChjb25zdCBSZW5k
ZXJPYmplY3QqIHIsIGJvb2wgaXNIb3Jpem9udGFsLCBpbnQgbXVsdGlwbGllcikKK3sKKyAgICAv
LyBGSVhNRTogVGhlIHNjcm9sbGluZyBkb25lIGhlcmUgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGRl
ZmF1bHQgaGFuZGxlcnMKKyAgICAvLyBvZiB0aGUgZWxlbWVudHMgcmF0aGVyIHRoYW4gaGVyZSBp
biB0aGUgcGFydC4KKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vYnJva2Vu
IHNpbmNlIGl0IGNhbGxzIHNjcm9sbCBvbiBzY3JvbGxiYXJzCisgICAgLy9hbmQgd2UgaGF2ZSBu
b25lIG5vdworICAgIC8vci0+c2Nyb2xsKGRpcmVjdGlvbiwgU2Nyb2xsQnlXaGVlbCwgbXVsdGlw
bGllcik7CisgICAgaWYgKCFyLT5sYXllcigpKQorICAgICAgICByZXR1cm47CisgICAgaW50IHgg
PSByLT5sYXllcigpLT5zY3JvbGxYT2Zmc2V0KCk7CisgICAgaW50IHkgPSByLT5sYXllcigpLT5z
Y3JvbGxZT2Zmc2V0KCk7CisgICAgaWYgKGlzSG9yaXpvbnRhbCkKKyAgICAgICAgeCArPSBtdWx0
aXBsaWVyOworICAgIGVsc2UKKyAgICAgICAgeSArPSBtdWx0aXBsaWVyOworICAgIHItPmxheWVy
KCktPnNjcm9sbFRvT2Zmc2V0KHgsIHksIHRydWUsIHRydWUpOworfQorCisKK1BsYXRmb3JtU2Ny
b2xsYmFyOjpQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwKKyAgICAg
ICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sU2Nyb2xsYmFyQ29udHJvbFNpemUg
Y3NpemUpIDoKKyAgICAgICAgU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sY3NpemUpLFdp
ZGdldCgpCit7CisgICAgICAgIHByaXZhdGVEYXRhKCktPm1faGFzU2Nyb2xsYmFycyA9IGZhbHNl
OworICAgICAgICBTdHJpbmcgdXJsID0gRnJhbWVHZGs6Omluc3RhbGxMb2NhdGlvbigpOworICAg
ICAgICBTdHJpbmcgbm0gPSBpbXBsVVJMKG9yaWVudGF0aW9uKTsKKyAgICAgICAgdXJsICs9IG5t
OworICAgICAgICBwcml2YXRlRGF0YSgpLT5jcmVhdGVWaWV3KEtVUkwodXJsLmRlcHJlY2F0ZWRT
dHJpbmcoKSkpOworfQorCitQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkK
K3sKK30KKworSW50UmVjdCAgUGxhdGZvcm1TY3JvbGxiYXI6OmZyYW1lR2VvbWV0cnkoKQorewor
ICAgIEludFJlY3QgciA9IFdpZGdldDo6ZnJhbWVHZW9tZXRyeSgpOworICAgIGlmKHIuaXNFbXB0
eSgpKQorICAgICAgICByID0gSW50UmVjdCgwLDAsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgp
LGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7CisgICAgcmV0dXJuIHI7Cit9CisKK2ludCBQ
bGF0Zm9ybVNjcm9sbGJhcjo6d2lkdGgoKSBjb25zdAoreworICAgaW50IHdpZHRoID0gV2lkZ2V0
Ojp3aWR0aCgpOworICAgaWYoIHdpZHRoID09IDAgfHwgb3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bFNjcm9sbGJhciApCisgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7
Ly9GSVhNRTogaGFjayBmb3Igbm93CisgICByZXR1cm4gd2lkdGg7CisKK30KKworaW50IFBsYXRm
b3JtU2Nyb2xsYmFyOjpoZWlnaHQoKSBjb25zdAoreworICAgaW50IGhlaWdodCA9IFdpZGdldDo6
aGVpZ2h0KCk7CisgICBpZiggaGVpZ2h0ID09IDAgfHwgb3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKQorICAgICAgICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCgpOy8vaGFjayBmb3Igbm93CisgICByZXR1cm4gaGVpZ2h0OworfQorCit2b2lkIFBsYXRmb3Jt
U2Nyb2xsYmFyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBXaWRnZXQ6OnNldEVu
YWJsZWQoZW5hYmxlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIFdpZGdl
dDo6cGFpbnQoY3R4LGRhbWFnZVJlY3QpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpz
ZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYoIGZyYW1lR2VvbWV0cnkoKSA9
PSByZWN0ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBG
cmFtZVZpZXcqIHYgPSBmcmFtZVZpZXcoKTsKKyAgICAvKgorICAgIGlmKHYpIHsKKyAgICAgICAg
RG9jdW1lbnQqIGRvYyA9IHYtPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgICAgIGlmKCFkb2Mp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRp
Y19jYXN0PFNWR1NWR0VsZW1lbnQqPihkb2MtPmdldEVsZW1lbnRCeUlkKCJtYWluIikpOworICAg
ICAgICBpZighc3ZnKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdmctPnNldEF0dHJp
YnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyLFN0cmluZzo6bnVtYmVyKHJlY3Qud2lkdGgoKSkpOwor
ICAgICAgICBzdmctPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cixTdHJpbmc6Om51
bWJlcihyZWN0LmhlaWdodCgpKSk7CisgICAgICAgIHN2Zy0+d2lkdGhCYXNlVmFsdWUoKS0+c2V0
VmFsdWUocmVjdC53aWR0aCgpKTsKKyAgICAgICAgc3ZnLT5oZWlnaHRCYXNlVmFsdWUoKS0+c2V0
VmFsdWUocmVjdC5oZWlnaHQoKSk7CisgICAgfQorICAgICovCisgICAgV2lkZ2V0OjpzZXRGcmFt
ZUdlb21ldHJ5KHJlY3QpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVt
YlBvc2l0aW9uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3Jt
U2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24oKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK30KKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAJ
KHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEp1c3RpbiBIYXlnb29kIDxq
aGF5Z29vZEBzcHN1LmVkdT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDg4ICsyNiwxMDkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbFZp
ZXcuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVl
bEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiRnJh
bWVHZGsuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIldpZGdldFByaXZhdGVHZGsuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IlR5cGluZ0NvbW1hbmQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJhc3NlcnQuaCIKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWly
by5oIgorI2luY2x1ZGUgImNhaXJvLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUg
PGdkay9nZGsuaD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRl
cnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVf
XyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCisjZGVmaW5lIElOQ1JFTUVOVCAy
MAorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vaGFj
ayB0byBzaW11bGF0ZSBzY3JvbGwgYmFycwotY29uc3QgaW50IHNjcm9sbGJhclNpemUgPSAxMDsK
LQotY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUKLXsKK2NsYXNzIFNjcm9sbFZp
ZXc6OlNjcm9sbFZpZXdQcml2YXRlIDogcHVibGljIFNjcm9sbGJhckNsaWVudCB7CiBwdWJsaWM6
CiAgICAgU2Nyb2xsVmlld1ByaXZhdGUoKQotICAgICAgICA6IGhhc1N0YXRpY0JhY2tncm91bmQo
ZmFsc2UpLCBzdXBwcmVzc1Njcm9sbGJhcnMoZmFsc2UpCi0gICAgICAgICwgdlNjcm9sbGJhck1v
ZGUoU2Nyb2xsYmFyQXV0byksIGhTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCi0gICAgeyB9
CisgICAgICAgIDogaGFzU3RhdGljQmFja2dyb3VuZChmYWxzZSkKKyAgICAgICAgLCBzdXBwcmVz
c1Njcm9sbGJhcnMoZmFsc2UpCisgICAgICAgICwgdlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0
bykKKyAgICAgICAgLCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQorICAgICAgICAsIHZT
Y3JvbGxiYXIoMCkKKyAgICAgICAgLCBoU2Nyb2xsYmFyKDApCisgICAgICAgICwgdmlldygwKQor
ICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQorICAgIHsKKyAg
ICB9CiAKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9CisKICAgICBJbnRTaXplIHNjcm9sbE9m
ZnNldDsKICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKICAgICBib29sIGhhc1N0YXRpY0JhY2tn
cm91bmQ7CiAgICAgYm9vbCBzdXBwcmVzc1Njcm9sbGJhcnM7CiAgICAgU2Nyb2xsYmFyTW9kZSB2
U2Nyb2xsYmFyTW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIGhTY3JvbGxiYXJNb2RlOwotICAgIElu
dFJlY3QgdmlzaWJsZUNvbnRlbnRBcmVhOwotICAgIEludFJlY3Qgdmlld3BvcnRBcmVhOwotICAg
IEludFJlY3Qgc2Nyb2xsVmlld0FyZWE7CisgICAgUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiBo
U2Nyb2xsYmFyOworICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gdlNjcm9sbGJhcjsKKyAg
ICBTY3JvbGxWaWV3KiB2aWV3OwogfTsKIAotCiBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKLSAg
ICA6IG1fZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUpCi17fQorICAgIDogbV9kYXRhKG5ldyBT
Y3JvbGxWaWV3UHJpdmF0ZSgpKQoreworICAgIG1fZGF0YS0+dmlldyA9IHRoaXM7Cit9CiAKIFNj
cm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi12b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZVZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBu
b3cpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVS
ZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpIH07Ci0gICAg
R2RrRHJhd2FibGUqIGdka2RyYXdhYmxlID0gV2lkZ2V0OjpkcmF3YWJsZSgpOwotICAgIGlmIChH
REtfSVNfV0lORE9XKGdka2RyYXdhYmxlKSkgewotICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IEdES19XSU5ET1coZ2RrZHJhd2FibGUpOwotICAgICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKG5vdykKLSAgICAgICAgICAg
IGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7Ci0gICAgfQotfQotCiB2
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3Qs
IGJvb2wgbm93KQogewogICAgIEludFJlY3QgYWRqdXN0ZWREaXJ0eVJlY3QodXBkYXRlUmVjdCk7
CiAgICAgYWRqdXN0ZWREaXJ0eVJlY3QubW92ZSgtbV9kYXRhLT5zY3JvbGxPZmZzZXQpOwotICAg
IHVwZGF0ZVZpZXcoYWRqdXN0ZWREaXJ0eVJlY3QsIG5vdyk7CisgICAgcmVwYWludChhZGp1c3Rl
ZERpcnR5UmVjdCxub3cpOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6dmlzaWJsZVdpZHRoKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT52aWV3cG9ydEFyZWEud2lkdGgoKTsKKyAgICBJbnRS
ZWN0IHIgPSBlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKTsKKyAgICByZXR1
cm4gci53aWR0aCgpOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+dmlld3BvcnRBcmVhLmhlaWdodCgpOworICAgIEludFJl
Y3QgciA9IGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOworICAgIHJldHVy
biByLmhlaWdodCgpOwogfQogCi0vLyBSZWdpb24gb2YgdGhlIGNvbnRlbnQgY3VycmVudGx5IHZp
c2libGUgaW4gdGhlIHZpZXdwb3J0IGluIHRoZSBjb250ZW50IHZpZXcncyBjb29yZGluYXRlIHN5
c3RlbS4KIEZsb2F0UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoKSBjb25zdAog
ewotICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdCA9IEZsb2F0UmVjdChtX2RhdGEtPnZpZXdwb3J0
QXJlYSk7Ci0gICAgY29udGVudFJlY3QubW92ZShtX2RhdGEtPnNjcm9sbE9mZnNldCk7Ci0gICAg
cmV0dXJuIGNvbnRlbnRSZWN0OworICAgIEludFJlY3QgdmlzUmVjdCA9IEludFJlY3QoMCwwLHdp
ZHRoKCksaGVpZ2h0KCkpOyAKKyAgICBpZiggbV9kYXRhLT52U2Nyb2xsYmFyKQorICAgICAgICB2
aXNSZWN0LnNldFdpZHRoKHZpc1JlY3Qud2lkdGgoKSAtIG1fZGF0YS0+dlNjcm9sbGJhci0+d2lk
dGgoKSk7CisgICAgaWYoIG1fZGF0YS0+aFNjcm9sbGJhcikKKyAgICAgICAgdmlzUmVjdC5zZXRI
ZWlnaHQodmlzUmVjdC5oZWlnaHQoKSAtIG1fZGF0YS0+aFNjcm9sbGJhci0+aGVpZ2h0KCkpOwor
ICAgIHZpc1JlY3QubW92ZShtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisKKyAgICByZXR1cm4gRmxv
YXRSZWN0KHZpc1JlY3QpOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldENvbnRlbnRzUG9zKGlu
dCBuZXdYLCBpbnQgbmV3WSkKQEAgLTExOCwxMyArMTM4LDEzIEBACiAgICAgc2Nyb2xsQnkoZHgs
IGR5KTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpyZXNpemVDb250ZW50cyhpbnQgdywgaW50IGgp
Cit2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGludCB3LGludCBoKQogewotICAgIElu
dFNpemUgbmV3U2l6ZSh3LCBoKTsKKyAgICBJbnRTaXplIG5ld1NpemUodyxoKTsKICAgICBpZiAo
bV9kYXRhLT5jb250ZW50c1NpemUgIT0gbmV3U2l6ZSkgewogICAgICAgICBtX2RhdGEtPmNvbnRl
bnRzU2l6ZSA9IG5ld1NpemU7CiAgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLSAgICB9Cisg
ICAgfSAgICAKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzWCgpIGNvbnN0CkBAIC0xNDcs
MjIgKzE2NywzMyBAQAogICAgIHJldHVybiBtX2RhdGEtPmNvbnRlbnRzU2l6ZS5oZWlnaHQoKTsK
IH0KIAorSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyhjb25zdCBJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcmVzdWx0ID0gcG9pbnQ7CisgICAgSW50
UG9pbnQgZ2xvYmFsID0gbG9jYXRpb25JbldpbmRvdygpOworICAgIHJlc3VsdC5tb3ZlKGdsb2Jh
bC54KCksZ2xvYmFsLnkoKSk7CisgICAgcmV0dXJuIHJlc3VsdCArIHNjcm9sbE9mZnNldCgpOwor
fQorCitJbnRQb2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCByZXN1bHQgPSBwb2ludDsKKyAgICBJbnRQ
b2ludCBnbG9iYWwgPSBsb2NhdGlvbkluV2luZG93KCk7CisgICAgcmVzdWx0Lm1vdmUoLWdsb2Jh
bC54KCksLWdsb2JhbC55KCkpOworICAgIHJldHVybiByZXN1bHQgLSBzY3JvbGxPZmZzZXQoKTsK
K30KKwogSW50U2l6ZSBTY3JvbGxWaWV3OjpzY3JvbGxPZmZzZXQoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2RhdGEtPnNjcm9sbE9mZnNldDsKIH0KIAotSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhp
bXVtU2Nyb2xsKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGRlbHRhID0gbV9kYXRhLT5jb250ZW50
c1NpemUgLSBtX2RhdGEtPnNjcm9sbE9mZnNldDsKLSAgICBkZWx0YS5jbGFtcE5lZ2F0aXZlVG9a
ZXJvKCk7Ci0gICAgcmV0dXJuIGRlbHRhOwogCi19CiB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbEJ5
KGludCBkeCwgaW50IGR5KQogewogICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0ID0gbV9kYXRhLT5z
Y3JvbGxPZmZzZXQ7Ci0gICAgSW50U2l6ZSBtYXhTY3JvbGwgPSBtYXhpbXVtU2Nyb2xsKCk7Cisg
ICAgSW50U2l6ZSBtYXhTY3JvbGwgPSBtX2RhdGEtPmNvbnRlbnRzU2l6ZSAtIEludFNpemUodmlz
aWJsZVdpZHRoKCksdmlzaWJsZUhlaWdodCgpKTsKKyAgICBtYXhTY3JvbGwuY2xhbXBOZWdhdGl2
ZVRvWmVybygpOwogICAgIEludFNpemUgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsg
SW50U2l6ZShkeCwgZHkpOwogICAgIG5ld1Njcm9sbE9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJv
KCk7CiAgICAgbmV3U2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0LnNocnVua1RvKG1heFNj
cm9sbCk7CkBAIC0xNzAsMjcgKzIwMSwyMyBAQAogICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0g
c2Nyb2xsT2Zmc2V0KSB7CiAgICAgICAgIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xs
T2Zmc2V0OwogICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci0gICAgICAgIC8vIFNjcm9sbGJh
ciB1cGRhdGVzIGNhbiBmYWlsLCBzbyB3ZSBjaGVjayB0aGUgZmluYWwgZGVsdGEgYmVmb3JlIHNj
cm9sbGluZwotICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gbV9kYXRhLT5zY3JvbGxPZmZz
ZXQgLSBzY3JvbGxPZmZzZXQ7Ci0gICAgICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRTaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChpc0ZyYW1lVmlldygpKSB7Ci0gICAg
ICAgICAgICBGcmFtZVZpZXcqIGYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlzKTsKLSAg
ICAgICAgICAgIGYtPmZyYW1lKCktPnJlbmRlcmVyKCktPmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0
Ci0gICAgICAgICAgICAgICAgKG5ld1Njcm9sbE9mZnNldC53aWR0aCgpLCBuZXdTY3JvbGxPZmZz
ZXQuaGVpZ2h0KCksIHRydWUsIHRydWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cHJpbnRmKCJGSVhNRSBTY3JvbGxWaWV3R2RrIFVuc3VwcG9ydGVkIFNjcm9sbCBvcGVyYXRpb24g
ISEhXG4iKTsKLSAgICAgICAgICAgIHVwZGF0ZVZpZXcobV9kYXRhLT52aWV3cG9ydEFyZWEsIHRy
dWUpOwotICAgICAgICB9CisgICAgICAgIGZyYW1lVmlldygpLT5mcmFtZSgpLT5zZW5kU2Nyb2xs
RXZlbnQoKTsKKyAgICAgICAgcmVwYWludChmYWxzZSk7CiAgICAgfQogfQogCi1TY3JvbGxiYXJN
b2RlIFNjcm9sbFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKK3ZvaWQgU2Nyb2xsVmlldzo6
c2Nyb2xsUG9pbnRSZWN1cnNpdmVseShpbnQgZHgsIGludCBkeSkKIHsKKyAgICBpZihwYXJlbnQo
KSkKKyAgICAgICAgcGFyZW50KCktPmZyYW1lVmlldygpLT5zY3JvbGxCeShkeCxkeSk7Cit9CisK
K1dlYkNvcmU6OlNjcm9sbGJhck1vZGUgU2Nyb2xsVmlldzo6aFNjcm9sbGJhck1vZGUoKSBjb25z
dAorewogICAgIHJldHVybiBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlOwogfQogCi1TY3JvbGxiYXJN
b2RlIFNjcm9sbFZpZXc6OnZTY3JvbGxiYXJNb2RlKCkgY29uc3QKK1dlYkNvcmU6OlNjcm9sbGJh
ck1vZGUgU2Nyb2xsVmlldzo6dlNjcm9sbGJhck1vZGUoKSBjb25zdAogewogICAgIHJldHVybiBt
X2RhdGEtPnZTY3JvbGxiYXJNb2RlOwogfQpAQCAtMjI5LDI1ICsyNTYsMjczIEBACiAgICAgbV9k
YXRhLT5oYXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAordm9pZCBTY3JvbGxWaWV3Ojph
ZGRDaGlsZChXaWRnZXQqIGNoaWxkKQoreworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7Cit9
CisKKwordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQoreworICAg
IGNoaWxkLT5zZXRQYXJlbnQoMCk7CisgICAgcmVwYWludChmYWxzZSk7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit7IAorICAgIGJvb2wgaGFzVmVydGljYWwgPSBm
YWxzZTsgCisgICAgYm9vbCBoYXNIb3Jpem9udGFsID0gZmFsc2U7CisgICAgaW50IHBhc3MgPTA7
CisKKyAgICAvL2xheW91dCBmaXJzdCBpZiBhdXRvIHNjcm9sbGJhcnMgc2Nyb2xsIGJhcnMKKyAg
ICBpZighbV9kYXRhLT5zdXBwcmVzc1Njcm9sbGJhcnMgJiYgCisgICAgICAgIChtX2RhdGEtPmhT
Y3JvbGxiYXJNb2RlID09IFNjcm9sbGJhckF1dG8gfHxtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID09
IFNjcm9sbGJhckF1dG8pICApIHsKKyAgICAgICAgZnJhbWVWaWV3KCktPmxheW91dCgpOworICAg
IH0KKyAgCisgICAgLy9NYWtlIHR3byBwYXNzZXMgdG8gZGVhbCB3aXRoIGludGVyIGJhciBkZXBl
bmRlbmNpZXMKKyAgICBmb3IoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrICkgeworCisg
ICAgICAgIGlmKG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzIHx8IG1fZGF0YS0+dlNjcm9sbGJh
ck1vZGUgPT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKSAKKyAgICAgICAgICAgIGhhc1ZlcnRpY2FsID0g
ZmFsc2U7ICAgICAgICAKKyAgICAgICAgZWxzZSBpZihtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID09
IFNjcm9sbGJhckFsd2F5c09uKQorICAgICAgICAgICAgaGFzVmVydGljYWwgPSB0cnVlOyAgICAg
ICAgCisgICAgICAgIGVsc2UgaWYobV9kYXRhLT52U2Nyb2xsYmFyTW9kZSA9PSBTY3JvbGxiYXJB
dXRvKSB7CisgICAgICAgICAgICBpbnQgaCA9IGhhc0hvcml6b250YWwgPyBoZWlnaHQoKSAtIFBs
YXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk6IGhlaWdodCgpOwor
ICAgICAgICAgICAgaGFzVmVydGljYWwgPSAgKGNvbnRlbnRzSGVpZ2h0KCkgPiBoKTsgICAgICAg
IAorICAgICAgICB9CisKKyAgICAgICAgaWYoIG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzIHx8
IG1fZGF0YS0+aFNjcm9sbGJhck1vZGUgPT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKSAKKyAgICAgICAg
ICAgIGhhc0hvcml6b250YWwgPSBmYWxzZTsKKyAgICAgICAgZWxzZSBpZihtX2RhdGEtPmhTY3Jv
bGxiYXJNb2RlID09IFNjcm9sbGJhckFsd2F5c09uKQorICAgICAgICAgICAgaGFzSG9yaXpvbnRh
bCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYobV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9PSBTY3Jv
bGxiYXJBdXRvKSB7CisgICAgICAgICAgICBpbnQgdyA9IGhhc1ZlcnRpY2FsID8gd2lkdGgoKSAt
IFBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk6IHdpZHRoKCk7Cisg
ICAgICAgICAgICBoYXNIb3Jpem9udGFsPSAoY29udGVudHNXaWR0aCgpID4gdyk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZihoYXNWZXJ0aWNhbCAmJiAhbV9kYXRhLT52U2Nyb2xsYmFyKSB7
CisgICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhciA9IG5ldyBQbGF0Zm9ybVNjcm9sbGJhcihtX2Rh
dGEsVmVydGljYWxTY3JvbGxiYXIsUmVndWxhclNjcm9sbGJhcik7CisgICAgICAgIGFkZENoaWxk
KG1fZGF0YS0+dlNjcm9sbGJhci5nZXQoKSk7CisgICAgfSBlbHNlIGlmKCAhaGFzVmVydGljYWwg
JiYgbV9kYXRhLT52U2Nyb2xsYmFyICkgeyAKKyAgICAgICAgcmVtb3ZlQ2hpbGQobV9kYXRhLT52
U2Nyb2xsYmFyLmdldCgpKTsKKyAgICAgICAgbV9kYXRhLT52U2Nyb2xsYmFyID0gMDsKKyAgICB9
CisKKyAgICBpZihoYXNIb3Jpem9udGFsICYmICFtX2RhdGEtPmhTY3JvbGxiYXIpIHsKKyAgICAg
ICAgbV9kYXRhLT5oU2Nyb2xsYmFyID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKG1fZGF0YSxIb3Jp
em9udGFsU2Nyb2xsYmFyLFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICBhZGRDaGlsZChtX2Rh
dGEtPmhTY3JvbGxiYXIuZ2V0KCkpOworICAgIH0gZWxzZSBpZiggIWhhc0hvcml6b250YWwgJiYg
bV9kYXRhLT5oU2Nyb2xsYmFyICkgeyAKKyAgICAgICAgcmVtb3ZlQ2hpbGQobV9kYXRhLT5oU2Ny
b2xsYmFyLmdldCgpKTsKKyAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyID0gMDsKKyAgICB9CisK
KyAgICAvL2xheW91dCBzY3JvbGxiYXJzCisgICAgaWYobV9kYXRhLT52U2Nyb2xsYmFyKXsKKyAg
ICAgICAgaW50IGggPSBoZWlnaHQoKTsKKyAgICAgICAgaWYobV9kYXRhLT5oU2Nyb2xsYmFyKQor
ICAgICAgICAgICAgaCAtPSBtX2RhdGEtPnZTY3JvbGxiYXItPndpZHRoKCk7IAorICAgICAgICBt
X2RhdGEtPnZTY3JvbGxiYXItPnNldEZyYW1lR2VvbWV0cnkoSW50UmVjdCgKKyAgICAgICAgICAg
IHdpZHRoKCktbV9kYXRhLT52U2Nyb2xsYmFyLT53aWR0aCgpLDAKKyAgICAgICAgICAgLG1fZGF0
YS0+dlNjcm9sbGJhci0+d2lkdGgoKSxoKSk7CisgICAgfQorCisgICAgaWYobV9kYXRhLT5oU2Ny
b2xsYmFyKXsKKyAgICAgICAgaW50IHcgPSB3aWR0aCgpOworICAgICAgICBpZihtX2RhdGEtPnZT
Y3JvbGxiYXIpCisgICAgICAgICAgICB3IC09IG1fZGF0YS0+dlNjcm9sbGJhci0+d2lkdGgoKTsK
KyAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyLT5zZXRGcmFtZUdlb21ldHJ5KEludFJlY3QoMCxo
ZWlnaHQoKSAtIG1fZGF0YS0+aFNjcm9sbGJhci0+aGVpZ2h0KCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICx3LG1fZGF0YS0+aFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsKKyAgICB9Cit9CisKK1Bs
YXRmb3JtU2Nyb2xsYmFyKiBTY3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkgCit7CisgICAgUGxhdGZvcm1TY3JvbGxiYXIq
IGJhciA9IG1fZGF0YS0+aFNjcm9sbGJhci5nZXQoKTsKKyAgICBpZihiYXIpIHsKKyAgICAgICAg
SW50UG9pbnQgcCA9IGJhci0+bG9jYXRpb25JbldpbmRvdygpOworICAgICAgICBJbnRSZWN0IGdl
b20gPSBJbnRSZWN0KHAueCgpLHAueSgpLGJhci0+d2lkdGgoKSxiYXItPmhlaWdodCgpKTsKKyAg
ICAgICAgaWYoZ2VvbS5jb250YWlucyhtb3VzZUV2ZW50LnBvcygpKSApCisgICAgICAgICAgICBy
ZXR1cm4gYmFyOworICAgICAgICAKKyAgICB9CisgICAgYmFyID0gbV9kYXRhLT52U2Nyb2xsYmFy
LmdldCgpOworICAgIGlmKCBiYXIpIHsKKyAgICAgICAgSW50UG9pbnQgcCA9IGJhci0+bG9jYXRp
b25JbldpbmRvdygpOworICAgICAgICBJbnRSZWN0IGdlb20gPSBJbnRSZWN0KHAueCgpLHAueSgp
LGJhci0+d2lkdGgoKSxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgaWYoZ2VvbS5jb250YWlucyht
b3VzZUV2ZW50LnBvcygpKSApCisgICAgICAgICAgICByZXR1cm4gYmFyOworICAgICAgICAKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6aW5XaW5kb3coKSBjb25z
dAoreworICAgIC8vYXJlIHdlIHZpc2libGUgPworICAgIC8vYmFkIG1ldGhvZCBuYW1lIAorICAg
IC8vaGlkZGVuIHRhYiBtaW5pbWl6ZWQgZXRjID8/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpoYW5kbGVL
ZXlib2FyZEV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCit7CisK
KyAgICBpZigga2V5RXZlbnQuaXNLZXlVcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTZWxl
Y3Rpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gZnJhbWVWaWV3KCktPmZyYW1lKCktPnNlbGVj
dGlvbkNvbnRyb2xsZXIoKTsKKyAgICBOb2RlKiBzdGFydCA9IGNvbnRyb2xsZXItPnN0YXJ0KCku
bm9kZSgpOworICAgIGlmIChzdGFydCAmJiBzdGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgewor
ICAgICAgICAKKyAgICAgICAgc3dpdGNoKGtleUV2ZW50LldpbmRvd3NLZXlDb2RlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgVktfQkFDSzoKKyAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKGZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWS19ERUxFVEU6CisgICAgICAgICAgICAg
ICAgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoZnJhbWVWaWV3KCktPmZy
YW1lKCktPmRvY3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFZLX0xFRlQ6CisgICAgICAgICAgICAgICAgY29udHJvbGxlci0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkxFRlQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAgICAgICAgICBjb250cm9s
bGVyLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsIENoYXJhY3RlckdyYW51
bGFyaXR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWS19VUDoKKyAg
ICAgICAgICAgICAgICBjb250cm9sbGVyLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9W
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6
QkFDS1dBUkQsIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBWS19ET1dOOgorICAgICAgICAgICAgICAgIGNvbnRyb2xsZXItPm1vZGlm
eShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKSwga2V5RXZlbnQudGV4dCgpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgY29udHJvbGxl
ci0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0ZXJHcmFudWxh
cml0eSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisKKyAgICBzd2l0Y2ggKGtleUV2ZW50LldpbmRvd3NLZXlDb2RlKCkpIHsKKyAgICAgICAgY2Fz
ZSBWS19MRUZUOgorICAgICAgICAgICAgc2Nyb2xsQnkoLUlOQ1JFTUVOVCwwKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgICAgICBzY3JvbGxCeShJTkNS
RU1FTlQsMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX1VQOgorICAgICAgICAg
ICAgc2Nyb2xsQnkoMCwtSU5DUkVNRU5UKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VktfRE9XTjoKKyAgICAgICAgICAgIHNjcm9sbEJ5KDAsSU5DUkVNRU5UKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVktfUFJJT1I6CisgICAgICAgIC8vcmV0dXJuIFNCX1BBR0VVUDsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfTkVYVDoKKyAgICAgICAgLy9yZXR1cm4g
U0JfUEFHRURPV047CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX0hPTUU6CisgICAg
ICAgICAgICBpZihpc0ZyYW1lVmlldygpICkgeworICAgICAgICAgICAgICAgIHNldENvbnRlbnRz
UG9zKDAsMCk7CisgICAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZL
X0VORDoKKyAgICAgICAgICAgIGlmKGlzRnJhbWVWaWV3KCkgKSB7CisgICAgICAgICAgICAgICAg
c2V0Q29udGVudHNQb3MoMCxjb250ZW50c0hlaWdodCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfU1BBQ0U6CisgICAgICAgIGlmIChrZXlFdmVudC5z
aGlmdEtleSgpKQorICAgICAgICAgICAgICAgIHNjcm9sbEJ5KDAsLUlOQ1JFTUVOVCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2Nyb2xsQnkoMCxJTkNSRU1FTlQpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKK30KKwogdm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZUdlb21l
dHJ5KGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHIp
OwotICAgIG1fZGF0YS0+c2Nyb2xsVmlld0FyZWEgPSBJbnRSZWN0KDAsIDAsIHIud2lkdGgoKSwg
ci5oZWlnaHQoKSk7Ci0gICAgbV9kYXRhLT52aWV3cG9ydEFyZWEgPSBJbnRSZWN0KDAsIDAsIHIu
d2lkdGgoKSAtIHNjcm9sbGJhclNpemUsIHIuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTaXplKTsKKyAg
ICBpZiggcHJpdmF0ZURhdGEoKS0+Z2VvbWV0cnkgPT0gciApCisgICAgICAgIHJldHVybjsKKyAg
ICBwcml2YXRlRGF0YSgpLT5nZW9tZXRyeSA9IHI7CisgICAgdXBkYXRlU2Nyb2xsYmFycygpOwor
ICAgIERvY3VtZW50KiBkb2MgPSBmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAg
ICBpZihkb2MpIHsKKyAgICAgICAgUmVuZGVyVmlldyAqcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRl
clZpZXcqPihkb2MtPnJlbmRlcmVyKCkpOworICAgICAgICBpZihyb290KQorICAgICAgICAgICAg
cm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICB9CisgICAgZnJhbWVW
aWV3KCktPmxheW91dChmYWxzZSk7CisgICAgZnJhbWVWaWV3KCktPmxheW91dCh0cnVlKTsKKyAg
ICBmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+c2VuZFJlc2l6ZUV2ZW50KCk7CisgICAgZnJhbWVWaWV3
KCktPmZyYW1lKCktPnNlbmRTY3JvbGxFdmVudCgpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnNl
dERyYXdhYmxlKEdka0RyYXdhYmxlKiBnZGtkcmF3YWJsZSkKK3ZvaWQgU2Nyb2xsVmlldzo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAg
IFdpZGdldDo6c2V0RHJhd2FibGUoZ2RrZHJhd2FibGUpOwotICAgIGlmICghR0RLX0lTX1dJTkRP
VyhnZGtkcmF3YWJsZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJpbWFnZSBzY3JvbGx2aWV3IG5v
dCBzdXBwb3J0ZWQiKTsKKyAgICAvL3N1YndpZGdldHMgY2FuIGNhdXNlIGEgcGFpbnQgYmVmb3Jl
IHdlIGFyZSBsb2FkZWQKKyAgICBpZiggIWZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgp
IHx8ICFmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAg
ICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPXN0YXRpY19jYXN0PEdy
YXBoaWNzQ29udGV4dENhaXJvKj4oY29udGV4dCk7CisgICAgSW50UmVjdCBnZW9tID0gZnJhbWVH
ZW9tZXRyeSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gbV9kYXRhLT5zY3JvbGxPZmZzZXQ7CisK
KworICAgIC8vZm9yIG5vdyBubyBvdGhlciBzdWJjbGFzc2VzCisgICAgYXNzZXJ0KGZyYW1lVmll
dygpID09IHRoaXMpOworICAgIGN0eC0+c2F2ZSgpOworICAgIEludFJlY3QgZGlydHk9IHJlY3Q7
IAorICAgIEludFBvaW50IHAgPSBsb2NhdGlvbkluV2luZG93KCk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zID0gY3R4LT5nZXRDVE0oKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gSW50
UmVjdCgwLDAsd2lkdGgoKSxoZWlnaHQoKSk7CisgICAgSW50UmVjdCB2Q1JlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKTsKKworICAgIGN0eC0+dHJhbnNsYXRlKC1v
ZmZzZXQud2lkdGgoKSwtb2Zmc2V0LmhlaWdodCgpKTsKKyAgICBJbnRSZWN0IGNsaXAgPSBlbmNs
b3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKTsKKyAgICBjdHgtPmNsZWFyQ2xpcCgp
OworICAgIGN0eC0+Y2xpcChjbGlwKTsKKyAgICBjYWlyb190KiBjciA9IGN0eC0+cGxhdGZvcm1D
b250ZXh0KCk7CisgICAgZnJhbWVWaWV3KCktPmZyYW1lKCktPnBhaW50KGN0eCxjbGlwKTsKKyAg
ICBjdHgtPnJlc3RvcmUoKTsKKworICAgIGlmKG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZihtX2RhdGEtPmhTY3JvbGxiYXIpIHsKKyAgICAgICAg
SW50UmVjdCByID0gbV9kYXRhLT5oU2Nyb2xsYmFyLT5mcmFtZUdlb21ldHJ5KCk7CisgICAgICAg
IGN0eC0+c2F2ZSgpOworICAgICAgICBjdHgtPmNsZWFyQ2xpcCgpOworICAgICAgICBjdHgtPnRy
YW5zbGF0ZShyLngoKSxyLnkoKSk7CisgICAgICAgIGNsaXAgPSBJbnRSZWN0KDAsMCxyLndpZHRo
KCksci5oZWlnaHQoKSk7CisgICAgICAgIGN0eC0+Y2xpcChjbGlwKTsKKyAgICAgICAgdHJhbnMg
PSBjdHgtPmdldENUTSgpOworICAgICAgICBtX2RhdGEtPmhTY3JvbGxiYXItPnBhaW50KGN0eCxj
bGlwKTsKKyAgICAgICAgY3R4LT5yZXN0b3JlKCk7CiAgICAgfQotICAgIEdka1dpbmRvdyogZnJh
bWUgPSBHREtfV0lORE9XKGdka2RyYXdhYmxlKTsKLSAgICBnaW50IHgsIHksIHdpZHRoLCBoZWln
aHQsIGRlcHRoOwotICAgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5KGZyYW1lLCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCwgJmRlcHRoKTsKLSAgICBtX2RhdGEtPnNjcm9sbFZpZXdBcmVhID0gSW50
UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBtX2RhdGEtPnZpZXdwb3J0QXJlYSA9IElu
dFJlY3QoMCwgMCwgd2lkdGggLSBzY3JvbGxiYXJTaXplLCBoZWlnaHQgLSBzY3JvbGxiYXJTaXpl
KTsKKyAgICBpZihtX2RhdGEtPnZTY3JvbGxiYXIpIHsKKyAgICAgICAgSW50UmVjdCByID0gbV9k
YXRhLT52U2Nyb2xsYmFyLT5mcmFtZUdlb21ldHJ5KCk7CisgICAgICAgIGN0eC0+c2F2ZSgpOwor
ICAgICAgICBjdHgtPmNsZWFyQ2xpcCgpOworICAgICAgICBjdHgtPnRyYW5zbGF0ZShyLngoKSxy
LnkoKSk7CisgICAgICAgIGNsaXAgPSBJbnRSZWN0KDAsMCxyLndpZHRoKCksci5oZWlnaHQoKSk7
CisgICAgICAgIGN0eC0+Y2xpcChjbGlwKTsKKyAgICAgICAgdHJhbnMgPSBjdHgtPmdldENUTSgp
OworICAgICAgICBtX2RhdGEtPnZTY3JvbGxiYXItPnBhaW50KGN0eCxjbGlwKTsKKyAgICAgICAg
Y3R4LT5yZXN0b3JlKCk7CisgICAgfQogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9Gb250Q2FjaGVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Zv
bnRDYWNoZUdkay5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
Rm9udENhY2hlR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOCwx
MyArOCwxMyBAQAogICogYXJlIG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKICAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTMzLDYgKzMzLDggQEAKIAogI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNwcAkocmV2aXNpb24gMTcwODIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAorKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTIxLDcgKzIxLDcgQEAKICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAkocmV2aXNpb24gMTcwODIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIktleWJv
YXJkQ29kZXMuaCIKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z2RrL2dka2tleXN5
bXMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
NTAsNiArMzUxLDU0IEBACiAgICAgICAgIGNhc2UgR0RLX3o6CiAgICAgICAgIGNhc2UgR0RLX1o6
CiAgICAgICAgICAgICByZXR1cm4gVktfWjsgLy8gICg1QSkgWiBrZXkgY2FzZSAneic6IGNhc2Ug
J1onOiByZXR1cm4gMHg1QTsKKyAgICAgICAgY2FzZSBHREtfRjE6CisgICAgICAgICAgICByZXR1
cm4gVktfRjE7CisgICAgICAgIGNhc2UgR0RLX0YyOgorICAgICAgICAgICAgcmV0dXJuIFZLX0Yy
OworICAgICAgICBjYXNlIEdES19GMzoKKyAgICAgICAgICAgIHJldHVybiBWS19GMzsKKyAgICAg
ICAgY2FzZSBHREtfRjQ6CisgICAgICAgICAgICByZXR1cm4gVktfRjQ7CisgICAgICAgIGNhc2Ug
R0RLX0Y1OgorICAgICAgICAgICAgcmV0dXJuIFZLX0Y1OworICAgICAgICBjYXNlIEdES19GNjoK
KyAgICAgICAgICAgIHJldHVybiBWS19GNjsKKyAgICAgICAgY2FzZSBHREtfRjc6CisgICAgICAg
ICAgICByZXR1cm4gVktfRjc7CisgICAgICAgIGNhc2UgR0RLX0Y4OgorICAgICAgICAgICAgcmV0
dXJuIFZLX0Y4OworICAgICAgICBjYXNlIEdES19GOToKKyAgICAgICAgICAgIHJldHVybiBWS19G
OTsKKyAgICAgICAgY2FzZSBHREtfRjEwOgorICAgICAgICAgICAgcmV0dXJuIFZLX0YxMDsKKyAg
ICAgICAgY2FzZSBHREtfRjExOgorICAgICAgICAgICAgcmV0dXJuIFZLX0YxMTsKKyAgICAgICAg
Y2FzZSBHREtfRjEyOgorICAgICAgICAgICAgcmV0dXJuIFZLX0YxMjsKKyAgICAgICAgY2FzZSBH
REtfRjEzOgorICAgICAgICAgICAgcmV0dXJuIFZLX0YxMzsKKyAgICAgICAgY2FzZSBHREtfRjE0
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0YxNDsKKyAgICAgICAgY2FzZSBHREtfRjE1OgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0YxNTsKKyAgICAgICAgY2FzZSBHREtfRjE2OgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0YxNjsKKyAgICAgICAgY2FzZSBHREtfRjE3OgorICAgICAgICAgICAgcmV0
dXJuIFZLX0YxNzsKKyAgICAgICAgY2FzZSBHREtfRjE4OgorICAgICAgICAgICAgcmV0dXJuIFZL
X0YxODsKKyAgICAgICAgY2FzZSBHREtfRjE5OgorICAgICAgICAgICAgcmV0dXJuIFZLX0YxOTsK
KyAgICAgICAgY2FzZSBHREtfRjIwOgorICAgICAgICAgICAgcmV0dXJuIFZLX0YyMDsKKyAgICAg
ICAgY2FzZSBHREtfRjIxOgorICAgICAgICAgICAgcmV0dXJuIFZLX0YyMTsKKyAgICAgICAgY2Fz
ZSBHREtfRjIyOgorICAgICAgICAgICAgcmV0dXJuIFZLX0YyMjsKKyAgICAgICAgY2FzZSBHREtf
RjIzOgorICAgICAgICAgICAgcmV0dXJuIFZLX0YyMzsKKyAgICAgICAgY2FzZSBHREtfRjI0Ogor
ICAgICAgICAgICAgcmV0dXJuIFZLX0YyNDsKICAgICAgICAgY2FzZSBHREtfTWV0YV9MOgogICAg
ICAgICAgICAgcmV0dXJuIFZLX0xXSU47IC8vICg1QikgTGVmdCBXaW5kb3dzIGtleSAoTWljcm9z
b2Z0IE5hdHVyYWwga2V5Ym9hcmQpCiAgICAgICAgIGNhc2UgR0RLX01ldGFfUjoKQEAgLTQ1OCw3
ICs1MDcsNyBAQAogCiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVu
dChHZGtFdmVudCogZXZlbnQpCiB7Ci0gICAgbV9pc0tleVVwID0gZXZlbnQtPnR5cGUgPT0gR0RL
X0tFWV9SRUxFQVNFOworICAgIG1faXNLZXlVcCA9IChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JF
TEVBU0UpOwogICAgIG1fc2hpZnRLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX1NISUZUX01B
U0sgIT0gMDsKICAgICBtX2N0cmxLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX0NPTlRST0xf
TUFTSyAhPSAwOwogICAgIG1fYWx0S2V5ID0gZXZlbnQtPmtleS5zdGF0ZSAmIEdES19NT0QxX01B
U0sgIT0gMDsKQEAgLTQ2Nyw2ICs1MTYsOSBAQAogICAgIG1fdW5tb2RpZmllZFRleHQgPSBldmVu
dC0+a2V5LnN0cmluZzsKICAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yR2Rr
S2V5Q29kZShldmVudC0+a2V5LmtleXZhbCk7CiAgICAgbV9XaW5kb3dzS2V5Q29kZSA9IHdpbmRv
d3NLZXlDb2RlRm9yS2V5RXZlbnQoZXZlbnQtPmtleS5rZXl2YWwpOworICAgIGlmKCBtX1dpbmRv
d3NLZXlDb2RlID09IDAgKQorICAgICAgICBwcmludGYoIiBCQUQgS0VZIFBSRVNTICVkIFxuIixl
dmVudC0+a2V5LmtleXZhbCk7CisgICAgYXNzZXJ0KG1fV2luZG93c0tleUNvZGUgIT0gMCk7CiAg
ICAgbV9hdXRvUmVwZWF0ID0gZmFsc2U7CiAgICAgbV9pc0tleXBhZCA9IGZhbHNlOwogCkBAIC00
NzYsNCArNTI4LDIyIEBACiAgICAgfQogfQogCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRm
b3JtS2V5Ym9hcmRFdmVudCggY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBwYXJlbnQsIGJv
b2wgcmVwZWF0KQoreworICAgIG1faXNLZXlVcCA9IHBhcmVudC5tX2lzS2V5VXA7CisgICAgbV9z
aGlmdEtleSA9IHBhcmVudC5tX3NoaWZ0S2V5OworICAgIG1fY3RybEtleSA9IHBhcmVudC5tX2N0
cmxLZXk7CisgICAgbV9hbHRLZXkgPSBwYXJlbnQubV9hbHRLZXk7CisgICAgbV9tZXRhS2V5ID0g
cGFyZW50Lm1fbWV0YUtleTsKKyAgICBtX3RleHQgPSBwYXJlbnQubV90ZXh0OworICAgIG1fdW5t
b2RpZmllZFRleHQgPSBwYXJlbnQubV91bm1vZGlmaWVkVGV4dDsKKyAgICBtX2tleUlkZW50aWZp
ZXIgPSBwYXJlbnQubV9rZXlJZGVudGlmaWVyOworICAgIG1fV2luZG93c0tleUNvZGUgPSBwYXJl
bnQubV9XaW5kb3dzS2V5Q29kZTsKKyAgICBtX2lzS2V5cGFkID0gcGFyZW50Lm1faXNLZXlwYWQ7
CisgICAgbV90ZXh0ID0gcGFyZW50Lm1fdGV4dDsKKyAgICBtX2F1dG9SZXBlYXQgPSByZXBlYXQ7
CiB9CisKK30KKy8vIHZpbTp0cz00OmV0CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0yMiwxNyArMjIsMTcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCisjZGVmaW5lIFdJTjMyX0NPTVBJTEVfSEFDSworCiAjaW5jbHVkZSA8
c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5j
bHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlRleHRGaWVsZC5oIgotI2luY2x1ZGUgIkZpbGVDaG9v
c2VyLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkxpc3RCb3guaCIKICNpbmNsdWRl
ICJJbnRQb2ludC5oIgpAQCAtNDEsMTEgKzQxLDcgQEAKICNpbmNsdWRlICJTbGlkZXIuaCIKICNp
bmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJsb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIK
LSNpbmNsdWRlICJTY3JvbGxCYXIuaCIKLSNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiU2Ny
ZWVuLmgiCkBAIC01NSw0NiArNTEsMTkgQEAKICNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIkZyYW1lR2RrLmgiCi0jaW5jbHVk
ZSAiQnJvd3NlckV4dGVuc2lvbkdkay5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIK
LSNpbmNsdWRlICJSZW5kZXJUaGVtZUdkay5oIgogI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgi
CiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCi0j
aW5jbHVkZSAiSWNvbi5oIgotI2luY2x1ZGUgIkljb25Mb2FkZXIuaCIKLSNpbmNsdWRlICJJY29u
RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nTGlzdC5oIgorI2luY2x1
ZGUgIlNTTEtleUdlbmVyYXRvci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotbmFt
ZXNwYWNlIFdlYkNvcmUgewotc3RydWN0IFBsYXRmb3JtRGF0YVN0cnVjdAotewotfTsKIAotc3Ry
dWN0IFBsYXRmb3JtUmVzcG9uc2VTdHJ1Y3QKLXsKLX07Ci19CisjZGVmaW5lIG5vdEltcGxlbWVu
dGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAl
c1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDAp
CiAKLSNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6
IFVOSU1QTEVNRU5URUQ6ICVzIGluICVzOiVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBf
X0xJTkVfXyk7IH0gd2hpbGUoMCkKK1dpZGdldCogRnJhbWVHZGs6OmNyZWF0ZUphdmFBcHBsZXRX
aWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIAotdm9pZCBGcmFtZVZpZXc6
OnVwZGF0ZUJvcmRlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBGcmFtZVZpZXc6OnBh
c3NNb3VzZVByZXNzRXZlbnRUb1Njcm9sbGJhcihNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRz
JiwgUGxhdGZvcm1TY3JvbGxiYXIqKSB7IHJldHVybiBmYWxzZTsgfQotYm9vbCBGcmFtZVZpZXc6
OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmLCBGcmFtZSopIHsgcmV0dXJuIHRydWU7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VS
ZWxlYXNlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBGcmFt
ZSopIHsgcmV0dXJuIHRydWU7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VNb3ZlRXZlbnRU
b1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBGcmFtZSopIHsgcmV0dXJu
IHRydWU7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzV2hlZWxFdmVudFRvU3ViZnJhbWUoUGxhdGZv
cm1XaGVlbEV2ZW50JiwgRnJhbWUqKSB7IHJldHVybiB0cnVlOyB9Ci0KLXZvaWQgV2lkZ2V0Ojpl
bmFibGVGbHVzaERyYXdpbmcoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgV2lkZ2V0Ojpp
c0VuYWJsZWQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1XaWRnZXQ6
OkZvY3VzUG9saWN5IFdpZGdldDo6Zm9jdXNQb2xpY3koKSBjb25zdCB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiBOb0ZvY3VzOyB9Ci12b2lkIFdpZGdldDo6ZGlzYWJsZUZsdXNoRHJhd2luZygp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQotR3JhcGhpY3NDb250ZXh0KiBXaWRnZXQ6OmxvY2tEcmF3
aW5nRm9jdXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIFdpZGdldDo6
dW5sb2NrRHJhd2luZ0ZvY3VzKEdyYXBoaWNzQ29udGV4dCopIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQotdm9pZCBXaWRnZXQ6OnJlbW92ZUZyb21QYXJlbnQoKSB7IH0KLQogdm9pZCBUZXh0RmllbGQ6
OnNlbGVjdEFsbCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBUZXh0RmllbGQ6OmFkZFNl
YXJjaFJlc3VsdCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogaW50IFRleHRGaWVsZDo6c2VsZWN0
aW9uU3RhcnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CkBAIC0xMjUs
MTAgKzk0LDExIEBACiB2b2lkIExpc3RCb3g6OmNsZWFyKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
CiBib29sIExpc3RCb3g6OmNoZWNrc0Rlc2NlbmRhbnRzRm9yRm9jdXMoKSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiAKLVdpZGdldDo6Rm9jdXNQb2xpY3kgU2xpZGVyOjpm
b2N1c1BvbGljeSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5vRm9jdXM7IH0K
LVdpZGdldDo6Rm9jdXNQb2xpY3kgTGlzdEJveDo6Zm9jdXNQb2xpY3koKSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBOb0ZvY3VzOyB9Ci1XaWRnZXQ6OkZvY3VzUG9saWN5IFRleHRG
aWVsZDo6Zm9jdXNQb2xpY3koKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBOb0Zv
Y3VzOyB9CiAKK1dpZGdldDo6Rm9jdXNQb2xpY3kgU2xpZGVyOjpmb2N1c1BvbGljeSgpIGNvbnN0
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIENsaWNrRm9jdXM7IH0KK1dpZGdldDo6Rm9jdXNQ
b2xpY3kgTGlzdEJveDo6Zm9jdXNQb2xpY3koKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiBDbGlja0ZvY3VzOyB9CitXaWRnZXQ6OkZvY3VzUG9saWN5IFRleHRGaWVsZDo6Zm9jdXNQ
b2xpY3koKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBDbGlja0ZvY3VzOyB9CisK
IEN1cnNvcjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQmKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KIAogUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgQ3Vy
cmVudEV2ZW50VGFnJikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CkBAIC0xMzgsMTIgKzEwOCw3IEBA
CiB2b2lkIFdlYkNvcmU6OmZpbmRTZW50ZW5jZUJvdW5kYXJ5KFVDaGFyIGNvbnN0KiwgaW50LCBp
bnQsIGludCosIGludCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogaW50IFdlYkNvcmU6OmZpbmRO
ZXh0V29yZEZyb21JbmRleChVQ2hhciBjb25zdCosIGludCwgaW50LCBib29sKSB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiAwOyB9CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPGNo
YXI+IFNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KExvYWRlciosRG9jTG9hZGVyKixSZXNvdXJjZUxv
YWRlciosS1VSTCYsRGVwcmVjYXRlZFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IFZlY3RvcjxjaGFyPigpOyB9Ci0KLX0KLQogdm9pZCBGcmFtZUdkazo6Zm9jdXNXaW5kb3coKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgRnJhbWVHZGs6OnVuZm9jdXNXaW5kb3coKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KIGJvb2wgRnJhbWVHZGs6OmxvY2F0aW9uYmFyVmlzaWJsZSgpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KQEAgLTE1MSw3ICsxMTYsNiBAQAogS0pTOjpC
aW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lR2RrOjpnZXRPYmplY3RJbnN0YW5jZUZvcldpZGdldChX
aWRnZXQgKikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogS0pTOjpCaW5kaW5nczo6
SW5zdGFuY2UqIEZyYW1lR2RrOjpnZXRFbWJlZEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCAqKSB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0
KiBGcmFtZUdkazo6YmluZGluZ1Jvb3RPYmplY3QoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biAwOyB9Ci1XaWRnZXQqIEZyYW1lR2RrOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IElu
dFNpemUmLCBFbGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBib29sIEZyYW1lR2RrOjpjYW5SZWRvKCkgY29uc3Qg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogYm9vbCBGcmFtZUdkazo6Y2FuVW5kbygp
IGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIHZvaWQgRnJhbWVHZGs6OnJl
Z2lzdGVyQ29tbWFuZEZvclJlZG8oUGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4pIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQpAQCAtMTU5LDQwICsxMjMsMjMgQEAKIGJvb2wgRnJhbWVHZGs6
OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBm
YWxzZTsgfQogdm9pZCBGcmFtZUdkazo6cHJpbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIEtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRn
ZXQoV2lkZ2V0KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdk
azo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gMDsgfQogdm9pZCBGcmFtZUdkazo6aXNzdWVDdXRDb21tYW5kKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9CiB2b2lkIEZyYW1lR2RrOjppc3N1ZUNvcHlDb21tYW5kKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjpvcGVuVVJMUmVxdWVzdChzdHJ1Y3QgV2ViQ29y
ZTo6RnJhbWVMb2FkUmVxdWVzdCBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBG
cmFtZUdkazo6aXNzdWVVbmRvQ29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotU3RyaW5n
IEZyYW1lR2RrOjptaW1lVHlwZUZvckZpbGVOYW1lKFN0cmluZyBjb25zdCYpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9CiB2b2lkIEZyYW1lR2RrOjppc3N1ZVBh
c3RlQ29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBGcmFtZUdkazo6c2NoZWR1
bGVDbG9zZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUdkazo6bWFya01pc3Nw
ZWxsaW5ncyhXZWJDb3JlOjpTZWxlY3Rpb24gY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
IGJvb2wgRnJhbWVHZGs6Om1lbnViYXJWaXNpYmxlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQogYm9vbCBGcmFtZUdkazo6cGVyc29uYWxiYXJWaXNpYmxlKCkgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMDsgfQogYm9vbCBGcmFtZUdkazo6c3RhdHVzYmFyVmlzaWJsZSgpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIGJvb2wgRnJhbWVHZGs6OnRvb2xiYXJWaXNp
YmxlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogdm9pZCBGcmFtZUdkazo6aXNz
dWVUcmFuc3Bvc2VDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiBib29sIEZyYW1lR2Rr
OjpjYW5QYXN0ZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KKwogZW51
bSBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZSBGcmFtZUdkazo6b2JqZWN0Q29udGVudFR5cGUo
S1VSTCBjb25zdCYsIFN0cmluZyBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIChP
YmplY3RDb250ZW50VHlwZSkwOyB9CiBib29sIEZyYW1lR2RrOjpjYW5Hb0JhY2tPckZvcndhcmQo
aW50KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiB2b2lkIEZyYW1lR2Rr
Ojppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
LWJvb2wgRnJhbWVHZGs6OmlzTG9hZFR5cGVSZWxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiBmYWxzZTsgfQotS1VSTCBGcmFtZUdkazo6b3JpZ2luYWxSZXF1ZXN0VVJMKCkgY29uc3Qg
eyByZXR1cm4gS1VSTCgpOyB9CiBQbHVnaW4qIEZyYW1lR2RrOjpjcmVhdGVQbHVnaW4oRWxlbWVu
dCosIEtVUkwgY29uc3QmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgU3RyaW5nIGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogCi1i
b29sIEJyb3dzZXJFeHRlbnNpb25HZGs6OmNhblJ1bk1vZGFsKCkgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gMDsgfQotdm9pZCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpjcmVhdGVOZXdXaW5kb3co
c3RydWN0IFdlYkNvcmU6OkZyYW1lTG9hZFJlcXVlc3QgY29uc3QmLCBzdHJ1Y3QgV2ViQ29yZTo6
V2luZG93QXJncyBjb25zdCYsIEZyYW1lKiYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBC
cm93c2VyRXh0ZW5zaW9uR2RrOjpjcmVhdGVOZXdXaW5kb3coc3RydWN0IFdlYkNvcmU6OkZyYW1l
TG9hZFJlcXVlc3QgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgQnJvd3NlckV4
dGVuc2lvbkdkazo6Y2FuUnVuTW9kYWxOb3coKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAw
OyB9Ci12b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OnJ1bk1vZGFsKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9Ci12b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OmdvQmFja09yRm9yd2FyZChpbnQpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQotS1VSTCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpoaXN0b3J5VVJM
KGludCBkaXN0YW5jZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gS1VSTCgpOyB9Ci1Ccm93
c2VyRXh0ZW5zaW9uR2RrOjpCcm93c2VyRXh0ZW5zaW9uR2RrKFdlYkNvcmU6OkZyYW1lKikgeyB9
Ci12b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OnNldFR5cGVkSWNvblVSTChLVVJMIGNvbnN0Jiwg
Y29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OnNldEljb25VUkwo
S1VSTCBjb25zdCYpIHsgfQotaW50IEJyb3dzZXJFeHRlbnNpb25HZGs6OmdldEhpc3RvcnlMZW5n
dGgoKSB7IHJldHVybiAwOyB9Ci0KIGludCBXZWJDb3JlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVu
dChjb25zdCBQYWdlKikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogYm9vbCBXZWJD
b3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUoY29uc3QgUGFnZSopIHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIGZhbHNlOyB9CiAKQEAgLTIwOCwxMCArMTU1LDggQEAKIFN0cmluZyBXZWJDb3JlOjpz
dWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKSB7IHJldHVybiAiU3VibWl0IjsgfQogU3RyaW5nIFdl
YkNvcmU6OmlucHV0RWxlbWVudEFsdFRleHQoKSB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7
IH0KIFN0cmluZyBXZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCgpIHsgcmV0dXJuICJS
ZXNldCI7IH0KLVN0cmluZyBXZWJDb3JlOjpmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkgeyBy
ZXR1cm4gIkJyb3dzZS4uLiI7IH0KLVN0cmluZyBXZWJDb3JlOjpmaWxlQnV0dG9uTm9GaWxlU2Vs
ZWN0ZWRMYWJlbCgpIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0KIFN0cmluZyBXZWJDb3JlOjpkZWZh
dWx0TGFuZ3VhZ2UoKSB7IHJldHVybiAiZW4iOyB9CitTdHJpbmcgV2ViQ29yZTo6ZmlsZUJ1dHRv
bkNob29zZUZpbGVMYWJlbCgpIHsgcmV0dXJuICJDaG9vc2UgRmlsZSI7IH0KIAogdm9pZCBXZWJD
b3JlOjpmaW5kV29yZEJvdW5kYXJ5KFVDaGFyIGNvbnN0KiBzdHIsIGludCBsZW4sIGludCBwb3Np
dGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpIHsqc3RhcnQgPSBwb3NpdGlvbjsgKmVuZCA9IHBv
c2l0aW9uOyB9CiAKQEAgLTIyMCw5ICsxNjUsNiBAQAogYm9vbCBXZWJDb3JlOjpQbHVnSW5JbmZv
U3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgeyByZXR1cm4g
ZmFsc2U7IH0KIHZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyB9CiAKLXZvaWQg
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmFzc2VtYmxlUmVzcG9uc2VIZWFkZXJzKCkgY29uc3Qg
eyB9Ci12b2lkIFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpyZXRyaWV2ZUNoYXJzZXQoKSBjb25z
dCB7IH0KLQogdm9pZCBGcmFtZUdkazo6cmVzdG9yZURvY3VtZW50U3RhdGUoKSB7IH0KIHZvaWQg
RnJhbWVHZGs6OnBhcnRDbGVhcmVkSW5CZWdpbigpIHsgfQogdm9pZCBGcmFtZUdkazo6Y3JlYXRl
RW1wdHlEb2N1bWVudCgpIHsgfQpAQCAtMjMxLDg2ICsxNzMsMTQgQEAKIFJhbmdlKiBGcmFtZUdk
azo6bWFya2VkVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4gMDsgfQogYm9vbCBGcmFtZUdkazo6
bGFzdEV2ZW50SXNNb3VzZVVwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIHZvaWQgRnJhbWVH
ZGs6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoU3RyaW5nIGNvbnN0JiwgdW5zaWduZWQgaW50LCBTdHJp
bmcgY29uc3QmKSB7IH0KLWJvb2wgRnJhbWVHZGs6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25z
dCBTZWxlY3Rpb24mLCBjb25zdCBTZWxlY3Rpb24mLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLWJvb2wgRnJhbWVHZGs6OnNob3VsZENoYW5nZVNlbGVj
dGlvbihjb25zdCBTZWxlY3Rpb24mKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci12b2lkIEZyYW1l
R2RrOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKFdlYkNvcmU6OlNlbGVjdGlvbiBjb25zdCYs
IGJvb2wpIHsgfQotRnJhbWUqIEZyYW1lR2RrOjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbmFtZSwgRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcm
IHJlZmVycmVyKSB7IHJldHVybiAwOyB9CiAKIHZvaWQgRnJhbWVHZGs6OnNhdmVEb2N1bWVudFN0
YXRlKCkgeyB9CiB2b2lkIEZyYW1lR2RrOjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+KSB7IH0KIHZvaWQgRnJhbWVHZGs6OmNsZWFyVW5kb1Jl
ZG9PcGVyYXRpb25zKHZvaWQpIHsgfQogU3RyaW5nIEZyYW1lR2RrOjppbmNvbWluZ1JlZmVycmVy
KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KIHZvaWQgRnJhbWVHZGs6Om1hcmtNaXNzcGVs
bGluZ3NJbkFkamFjZW50V29yZHMoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uIGNvbnN0JikgeyB9
Ci12b2lkIEZyYW1lR2RrOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3QgU2VsZWN0aW9u
JikgeyB9CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBDaGVja0lmUmVsb2FkaW5nKERv
Y0xvYWRlciopIHsgcmV0dXJuIGZhbHNlOyB9Ci10aW1lX3QgQ2FjaGVPYmplY3RFeHBpcmVzVGlt
ZShEb2NMb2FkZXIqLCBQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiAwOyB9Ci12b2lkIENoZWNr
Q2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqKSB7IH0KLURlcHJl
Y2F0ZWRTdHJpbmcgUmVzcG9uc2VVUkwoUGxhdGZvcm1SZXNwb25zZSkgeyByZXR1cm4gRGVwcmVj
YXRlZFN0cmluZygpOyB9Ci1ib29sIElzUmVzcG9uc2VVUkxFcXVhbFRvVVJMKFBsYXRmb3JtUmVz
cG9uc2UgLCBjb25zdCBTdHJpbmcmIFVSTCkgeyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgUmVzcG9u
c2VJc011bHRpcGFydChQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiBmYWxzZTsgfQotRGVwcmVj
YXRlZFN0cmluZyBSZXNwb25zZU1JTUVUeXBlKFBsYXRmb3JtUmVzcG9uc2UpIHsgcmV0dXJuIERl
cHJlY2F0ZWRTdHJpbmcoKTsgfQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoUGxh
dGZvcm1SZXNwb25zZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIENhY2hlZFJlc291cmNl
OjpzZXRBbGxEYXRhKFBsYXRmb3JtRGF0YSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLX0KLQot
dm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCkgeyB9Ci12b2lkIFdpZGdldDo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiwgSW50UmVjdCBjb25zdCYpIHsgfQotdm9pZCBXaWRnZXQ6OnNldElzU2Vs
ZWN0ZWQoYm9vbCkgeyB9Ci12b2lkIFdpZGdldDo6aW52YWxpZGF0ZSgpIHsgfQotdm9pZCBXaWRn
ZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgfQotCi12b2lkIFNjcm9sbFZp
ZXc6OmFkZENoaWxkKFdpZGdldCopIHsgfQotdm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChX
aWRnZXQqKSB7IH0KLXZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUG9pbnRSZWN1cnNpdmVseShpbnQg
eCwgaW50IHkpIHsgfQotYm9vbCBTY3JvbGxWaWV3OjppbldpbmRvdygpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLXZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQm
KSB7IH0KLXZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpIHsgfQotaW50IFNjcm9s
bFZpZXc6OnVwZGF0ZVNjcm9sbEluZm8oc2hvcnQgdHlwZSwgaW50IGN1cnJlbnQsIGludCBtYXgs
IGludCBwYWdlU2l6ZSkgeyByZXR1cm4gMDsgfQotSW50UG9pbnQgU2Nyb2xsVmlldzo6d2luZG93
VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIHBvaW50OyB9
Ci1JbnRQb2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFBvaW50JiBw
b2ludCkgY29uc3QgeyByZXR1cm4gcG9pbnQ7IH0KLVBsYXRmb3JtU2Nyb2xsYmFyKiBTY3JvbGxW
aWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VF
dmVudCkgeyByZXR1cm4gMDsgfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJl
Y3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0
IEludFNpemUmIHRvcFJpZ2h0LAotICAgICAgICBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBj
b25zdCBJbnRTaXplJiBib3R0b21SaWdodCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEdy
YXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVj
dCwgaW50IHRoaWNrbmVzcykgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0U2hhZG93KEludFNpemUgY29uc3QmLCBpbnQsIENvbG9yIGNvbnN0JikgeyB9Ci12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSB7IH0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpIHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lV2lkdGgoZmxvYXQpIHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVD
YXAoTGluZUNhcCkgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpv
aW4pIHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQpIHsgfQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0KSB7IH0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IpIHsgfQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYpIHsgfQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnJvdGF0ZShmbG9hdCkgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJikgeyB9Ci0KLVBhdGg6OlBhdGgoKXsgfQotUGF0aDo6flBhdGgoKXsgfQot
UGF0aDo6UGF0aChjb25zdCBQYXRoJil7IH0KLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0eyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgUGF0
aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYpeyB9Ci1GbG9hdFJlY3QgUGF0aDo6Ym91bmRp
bmdSZWN0KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLVBhdGgmIFBhdGg6Om9wZXJh
dG9yPShjb25zdCBQYXRoJil7IHJldHVybiAqIHRoaXM7IH0KLXZvaWQgUGF0aDo6Y2xlYXIoKSB7
IH0KLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KLXZvaWQgUGF0aDo6
YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZl
VG8oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KLXZvaWQgUGF0aDo6
YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSB7IH0KLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCkgeyB9Ci12b2lkIFBhdGg6OmNsb3NlU3VicGF0
aCgpIHsgfQotdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGJvb2wpIHsgfQotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IHsgfQotdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotCiBUZXh0
RmllbGQ6OlRleHRGaWVsZChUZXh0RmllbGQ6OlR5cGUpIHsgfQogVGV4dEZpZWxkOjp+VGV4dEZp
ZWxkKCkgeyB9CiB2b2lkIFRleHRGaWVsZDo6c2V0Rm9udChXZWJDb3JlOjpGb250IGNvbnN0Jikg
eyB9CkBAIC0zMzAsMjkgKzIwMCwxMSBAQAogaW50IFRleHRGaWVsZDo6YmFzZWxpbmVQb3NpdGlv
bihpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIHZvaWQgVGV4dEZpZWxkOjpzZXRMaXZlU2VhcmNo
KGJvb2wpIHsgfQogCi1QbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xs
YmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3Jv
bGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRh
dGlvbiwgY29udHJvbFNpemUpIHsgfQotUGxhdGZvcm1TY3JvbGxiYXI6On5QbGF0Zm9ybVNjcm9s
bGJhcigpIHsgfQotaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KLWludCBQbGF0Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsg
fQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0RW5hYmxlZChib29sKSB7IH0KLXZvaWQgUGxh
dGZvcm1TY3JvbGxiYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QpIHsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlv
bigpIHsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQcm9wb3J0aW9uKCkg
eyB9Ci12b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmKSB7IH0K
LQogTGlzdEJveDo6TGlzdEJveCgpIHsgfQogTGlzdEJveDo6fkxpc3RCb3goKSB7IH0KIHZvaWQg
TGlzdEJveDo6c2V0U2VsZWN0aW9uTW9kZShMaXN0Qm94OjpTZWxlY3Rpb25Nb2RlKSB7IH0KIHZv
aWQgTGlzdEJveDo6c2V0Rm9udChXZWJDb3JlOjpGb250IGNvbnN0JikgeyB9CiAKLUZpbGVDaG9v
c2VyOjpGaWxlQ2hvb3NlcihEb2N1bWVudCosIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKikgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9Ci1GaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9Ci1QYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBGaWxlQ2hvb3Nlcjo6Y3JlYXRl
KERvY3VtZW50KiwgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqKSB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiAwOyB9Ci12b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNob29zZXIoKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KLVN0cmluZyBGaWxlQ2hvb3Nlcjo6YmFzZW5hbWVGb3JXaWR0aChpbnQg
d2lkdGgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lk
IEZpbGVDaG9vc2VyOjpkaXNjb25uZWN0VXBsb2FkQ29udHJvbCgpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1l
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQogQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3Io
KSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9y
Q2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CiAKQEAgLTM2MCwyNiArMjEyLDYgQEAKIAog
dm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIFRpbGVSdWxlLCBUaWxlUnVsZSwgQ29tcG9zaXRlT3BlcmF0b3Ip
IHsgfQogCi12b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUq
KSBjb25zdCB7IH0KLWJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIGZhbHNlOyB9Ci12b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5
bGUqKSBjb25zdCB7IH0KLXZvaWQgUmVuZGVyVGhlbWVHZGs6OmFkanVzdFRleHRGaWVsZFN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqIGUpIGNvbnN0IHt9Ci1i
b29sIFJlbmRlclRoZW1lR2RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiBmYWxzZTsg
fQotCi1JY29uOjpJY29uKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1JY29uOjp+SWNvbigpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQotUGFzc1JlZlB0cjxJY29uPiBJY29uOjpuZXdJY29uRm9yRmls
ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBQYXNz
UmVmUHRyPEljb24+KG5ldyBJY29uKCkpOyB9Ci12b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQotdm9pZCBJY29u
TG9hZGVyOjpzdG9wTG9hZGluZygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfSAKLXZvaWQgSWNvbkxv
YWRlcjo6c3RhcnRMb2FkaW5nKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9IAotSWNvbkxvYWRlciog
SWNvbkxvYWRlcjo6Y3JlYXRlRm9yRnJhbWUoRnJhbWUgKmZyYW1lKSB7IHJldHVybiAwOyB9IAot
Ci1ib29sIEljb25EYXRhYmFzZTo6aXNJY29uRXhwaXJlZEZvckljb25VUkwoY29uc3QgU3RyaW5n
JiB1cmwpIHsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIEljb25EYXRhYmFzZTo6aGFzRW50cnlGb3JJ
Y29uVVJMKGNvbnN0IFN0cmluZyYgdXJsKSB7IHJldHVybiBmYWxzZTsgfQotSWNvbkRhdGFiYXNl
KiBJY29uRGF0YWJhc2U6OnNoYXJlZEljb25EYXRhYmFzZSgpIHsgcmV0dXJuIDA7IH0KLWJvb2wg
SWNvbkRhdGFiYXNlOjpzZXRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIGljb25VUkws
IGNvbnN0IFN0cmluZyYgcGFnZVVSTCkgeyByZXR1cm4gZmFsc2U7IH0KLQogRmxvYXRSZWN0IEZv
bnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4
dFN0eWxlJiwgY29uc3QgSW50UG9pbnQmLCBpbnQpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9CiB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgfQogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiAwOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9TeXN0ZW1UaW1lTGludXgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1N5c3RlbVRpbWVMaW51eC5j
cHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU3lzdGVtVGltZUxp
bnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsOCArMjcsOCBA
QAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotCiAjaW5j
bHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKIHsKICAgc3RydWN0IHRpbWV2YWwgYVRpbWV2YWw7
CiAgIHN0cnVjdCB0aW1lem9uZSBhVGltZXpvbmU7Ci0gCisKICAgZ2V0dGltZW9mZGF5KCAmYVRp
bWV2YWwsICZhVGltZXpvbmUgKTsKICAgcmV0dXJuIChkb3VibGUpYVRpbWV2YWwudHZfc2VjICsg
KGRvdWJsZSkoYVRpbWV2YWwudHZfdXNlYyAvIDEwMDAwMDAuMCApOwogfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvTG9hZGVyRnVuY3Rpb25zR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9Mb2FkZXJGdW5jdGlvbnNHZGsuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvTG9hZGVyRnVuY3Rpb25zR2RrLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVH
ZGsuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5o
IgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRl
ck1hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWZWN0b3I8Y2hhcj4gU2VydmVT
eW5jaHJvbm91c1JlcXVlc3QoTG9hZGVyKiwgRG9jTG9hZGVyKiBkb2NMb2FkZXIsIFJlc291cmNl
TG9hZGVyKiBqb2IsIEtVUkwmIHVybCwgRGVwcmVjYXRlZFN0cmluZyYpCit7CisgICAgUmVzb3Vy
Y2VMb2FkZXJNYW5hZ2VyKiBtZ3IgPSBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmdldCgpOworICAg
IG1nci0+aW5pdEpvYihqb2IpOworICAgIFZlY3RvcjxjaGFyPiByZXN1bHRCdWZmZXIgPSBtZ3It
PnJ1bkltbWVkaWF0ZWx5KGpvYik7IAorICAgIHJldHVybiByZXN1bHRCdWZmZXI7Cit9CisKK2lu
dCBOdW1iZXJPZlBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0cyhEb2NMb2FkZXIqIGRvY0xvYWRlcikK
K3sKKyAgICByZXR1cm4gQ2FjaGU6OmxvYWRlcigpLT5udW1SZXF1ZXN0cyhkb2NMb2FkZXIpOwor
fQorCitib29sIENoZWNrSWZSZWxvYWRpbmcoV2ViQ29yZTo6RG9jTG9hZGVyKiBkb2NMb2FkZXIp
Cit7CisgICAgLy8gRklYTUU6IE5lZWRzIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiEKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hlY2tDYWNoZU9iamVjdFN0YXR1cyhEb2NMb2FkZXIqIGRv
Y0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZE9iamVjdCkKK3sKKyAgICAvLyBSZXR1cm4g
ZnJvbSB0aGUgZnVuY3Rpb24gZm9yIG9iamVjdHMgdGhhdCB3ZSBkaWRuJ3QgbG9hZCBmcm9tIHRo
ZSBjYWNoZS4KKyAgICBpZiAoIWNhY2hlZE9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c3dpdGNoIChjYWNoZWRPYmplY3QtPnN0YXR1cygpKSB7CisgICAgICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OlBlcnNpc3RlbnQ6CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNhY2hlZDoK
KyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VW5jYWNoZWFibGU6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Tm90Q2FjaGVkOgorICAgICAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpVbmtub3duOgorICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpOZXc6CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlBlbmRpbmc6CisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGNhY2hlZE9iamVjdC0+cmVzcG9uc2UoKSk7
CisKKyAgICAvLyBGSVhNRTogTm90aWZ5IHRoZSBjYWxsZXIgdGhhdCB3ZSAibG9hZGVkIi4KK30K
KworYm9vbCBJc1Jlc3BvbnNlVVJMRXF1YWxUb1VSTChQbGF0Zm9ybVJlc3BvbnNlIHJlc3BvbnNl
LCBjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAoIXJlc3BvbnNlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzcG9uc2UtPnVybCA9PSB1cmw7Cit9CisKK0RlcHJl
Y2F0ZWRTdHJpbmcgUmVzcG9uc2VVUkwoUGxhdGZvcm1SZXNwb25zZSByZXNwb25zZSkKK3sKKyAg
ICBpZiAoIXJlc3BvbnNlKQorICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworCisg
ICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcocmVzcG9uc2UtPnVybC5kZXByZWNhdGVkU3RyaW5n
KCkpOworfQorCitEZXByZWNhdGVkU3RyaW5nIFJlc3BvbnNlTUlNRVR5cGUoUGxhdGZvcm1SZXNw
b25zZSByZXNwb25zZSkKK3sKKyAgICBpZiAoIXJlc3BvbnNlKQorICAgICAgICByZXR1cm4gRGVw
cmVjYXRlZFN0cmluZygidGV4dC9odG1sIik7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmco
cmVzcG9uc2UtPm1pbWVUeXBlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cit9CisKK2Jvb2wgUmVzcG9u
c2VJc011bHRpcGFydChQbGF0Zm9ybVJlc3BvbnNlIHJlc3BvbnNlKQoreworICAgIHJldHVybiBS
ZXNwb25zZU1JTUVUeXBlKHJlc3BvbnNlKSA9PSAibXVsdGlwYXJ0L3gtbWl4ZWQtcmVwbGFjZSI7
Cit9CisKK3RpbWVfdCBDYWNoZU9iamVjdEV4cGlyZXNUaW1lKERvY0xvYWRlciosIFBsYXRmb3Jt
UmVzcG9uc2UpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSEKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoUGxhdGZvcm1SZXNwb25zZSBy
ZXNwb25zZSkKK3sKKyAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7Cit9CisKK3ZvaWQgQ2FjaGVk
UmVzb3VyY2U6OnNldEFsbERhdGEoUGxhdGZvcm1EYXRhIGFsbERhdGEpCit7CisgICAgbV9hbGxE
YXRhID0gYWxsRGF0YTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9GcmFtZUdkay5oCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0ZyYW1lR2RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDY1ICsyOSw0MCBAQAogI2RlZmluZSBG
cmFtZUdka19IXwogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJXaW5kb3dHZGsuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4K
KyNpbmNsdWRlICJ3dGYvUmVmUHRyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RWxlbWVudDsKLWNsYXNzIEZyYW1lR2RrOworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHRDYWlybzsKK2NsYXNzIFdpbmRvd0dkazsKK2NsYXNzIFBsYXRmb3JtV2hlZWxFdmVu
dDsKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKK2NsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDsKK2NsYXNzIFBsYXRmb3JtU2Nyb2xsQmFyOwogCi1jbGFzcyBGcmFtZUdka0NsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+RnJhbWVHZGtDbGllbnQoKSB7fTsKIAotICAgIHZpcnR1YWwg
dm9pZCBzZXRGcmFtZShjb25zdCBGcmFtZUdkayopID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBv
cGVuVVJMKGNvbnN0IEtVUkwmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN1Ym1pdEZvcm0oY29u
c3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBjb25zdCBGb3JtRGF0YSopID0gMDsKLX07
Ci0KLWNsYXNzIEZyYW1lR2RrQ2xpZW50RGVmYXVsdCA6IHB1YmxpYyBGcmFtZUdka0NsaWVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyAgUmVzb3VyY2VMb2FkZXJDbGll
bnQgCi17CitjbGFzcyBGcmFtZUdkayA6IHB1YmxpYyBGcmFtZSwgUmVzb3VyY2VMb2FkZXJDbGll
bnQgewogcHVibGljOgotCi0gICAgRnJhbWVHZGtDbGllbnREZWZhdWx0KCk7Ci0gICAgdmlydHVh
bCB+RnJhbWVHZGtDbGllbnREZWZhdWx0KCk7Ci0KLSAgICAvLyBGcmFtZUdka0NsaWVudAotICAg
IHZpcnR1YWwgdm9pZCBzZXRGcmFtZShjb25zdCBGcmFtZUdkayopOwotICAgIHZpcnR1YWwgdm9p
ZCBvcGVuVVJMKGNvbnN0IEtVUkwmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25z
dCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYsIGNvbnN0IEZvcm1EYXRhKik7Ci0KLSAgICAv
LyBSZXNvdXJjZUxvYWRlckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNl
KFJlc291cmNlTG9hZGVyKiwgUGxhdGZvcm1SZXNwb25zZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVkRGF0YShSZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwotICAgIHZpcnR1
YWwgdm9pZCByZWNlaXZlZEFsbERhdGEoUmVzb3VyY2VMb2FkZXIqLCBQbGF0Zm9ybURhdGEpOwot
Ci1wcml2YXRlOgotICAgIEZyYW1lR2RrKiBtX2ZyYW1lOwotICAgIGJvb2wgbV9iZWdpbkNhbGxl
ZCA6IDE7Ci0KLX07Ci0KLWNsYXNzIEZyYW1lR2RrIDogcHVibGljIEZyYW1lIHsKLXB1YmxpYzoK
LSAgICBGcmFtZUdkayhQYWdlKiwgRWxlbWVudCopOwotICAgIEZyYW1lR2RrKEdka0RyYXdhYmxl
Kik7CisgICAgRnJhbWVHZGsoUGFnZSosIEVsZW1lbnQqLCBXaW5kb3dHZGsqIHdpbmRvdyk7CiAg
ICAgdmlydHVhbCB+RnJhbWVHZGsoKTsKLQotICAgIHZvaWQgaGFuZGxlR2RrRXZlbnQoR2RrRXZl
bnQqKTsKICAgICB2aXJ0dWFsIGJvb2wgb3BlblVSTChjb25zdCBLVVJMJik7CiAgICAgdmlydHVh
bCB2b2lkIG9wZW5VUkxSZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jik7CiAgICAgdmlydHVh
bCB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmKTsKLQogICAgIHZpcnR1
YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vy
c29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKTsKIAogICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5
cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
OwogICAgIHZpcnR1YWwgUGx1Z2luKiBjcmVhdGVQbHVnaW4oRWxlbWVudCosIGNvbnN0IEtVUkwm
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3Ry
aW5nJik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkVHlwZVJlbG9hZCgpOworCisgICAgdmly
dHVhbCBLVVJMIG9yaWdpbmFsUmVxdWVzdFVSTCgpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlQ2xvc2UoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB1bmZvY3VzV2luZG93KCk7CkBA
IC0xMTcsMTIgKzkyLDEyIEBACiAgICAgdmlydHVhbCBTdHJpbmcgbWltZVR5cGVGb3JGaWxlTmFt
ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJrTWlzc3BlbGxp
bmdzSW5BZGphY2VudFdvcmRzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotICAgIHZpcnR1YWwg
dm9pZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlvbiYpe30KIAogICAgIHZpcnR1YWwgYm9v
bCBsYXN0RXZlbnRJc01vdXNlVXAoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXNzU3Vi
ZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyAmLCBGcmFt
ZSogc3ViZnJhbWUgPSAwKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFzc1doZWVsRXZlbnRUb0NoaWxk
V2lkZ2V0KE5vZGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFzc01vdXNlRG93bkV2ZW50VG9XaWRn
ZXQoV2lkZ2V0Kik7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNv
bnN0OwogCkBAIC0xNDEsMTAgKzExNiwxMCBAQAogICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVBhc3Rl
Q29tbWFuZCgpOwogICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1h
bmQoKTsKICAgICB2aXJ0dWFsIHZvaWQgaXNzdWVUcmFuc3Bvc2VDb21tYW5kKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBvbGRT
ZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpOwotICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMoY29uc3QgU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBvbGRTZWxl
Y3Rpb24sIGNvbnN0IFNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFNlbGVjdGlvbiYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3Nl
VHlwaW5nKXt9OworICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29u
c3QgU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pe307CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgU2Vs
ZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVj
dGluZykgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07CisKICAgICB2aXJ0dWFsIHZvaWQgcGFydENs
ZWFyZWRJbkJlZ2luKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuR29CYWNrT3JGb3J3YXJkKGlu
dCBkaXN0YW5jZSkgY29uc3Q7CkBAIC0xNTUsMjUgKzEzMCwzOSBAQAogICAgIHZpcnR1YWwgYm9v
bCBjYW5VbmRvKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHByaW50KCk7CiAgICAgdmlydHVh
bCBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZG9U
ZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqLCBjb25zdCBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQqKTsKIAotICAgIGJvb2wga2V5UHJlc3MoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50
Jik7Ci0gICAgdmlydHVhbCBLVVJMIG9yaWdpbmFsUmVxdWVzdFVSTCgpIGNvbnN0OwotCi0gICAg
SW50UmVjdCBmcmFtZUdlb21ldHJ5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGcmFtZUdlb21ldHJ5
KGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIEZyYW1lKiBjcmVhdGVGcmFtZShjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IFN0
cmluZyYgcmVmZXJyZXIpOwogICAgIFdpZGdldCogY3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25z
dCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik7Ci0K
KyAgICAvL0dkayBzcGVjaWZpYworICAgIHN0YXRpYyB2b2lkIHNldEluc3RhbGxMb2NhdGlvbihj
b25zdCBjaGFyICopOworICAgIHN0YXRpYyBTdHJpbmcgaW5zdGFsbExvY2F0aW9uKCk7CisgICAg
Ym9vbCBpc1RvcExldmVsKCkgeyByZXR1cm4gbV93aW5kb3cuZ2V0KCkgIT0gMDsgfQorICAgIHZv
aWQgcHJvY2Vzc1BsYXRmb3JtRm9jdXNDaGFuZ2UoYm9vbCBmb2N1c2VkKTsKKyAgICB2b2lkIHBy
b2Nlc3NQbGF0Zm9ybVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50KTsKKyAgICB2
b2lkIHByb2Nlc3NQbGF0Zm9ybUtleWJvYXJkRXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2
ZW50LCBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlKTsKKyAgICB2b2lkIHByb2Nlc3NQbGF0
Zm9ybU1vdXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50LCBjb25zdCBBdG9taWNTdHJp
bmcgZXZlbnRUeXBlKTsKKyAgICBGcmFtZUdkayogZ2V0Um9vdEZyYW1lKCk7CisgICAgLy92b2lk
IHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmLCBib29sIGZyb21TeXN0ZW0pOworICAgIC8vSW50
UmVjdCBmcmFtZUdlb21ldHJ5KCkgY29uc3Q7CisgICAgLy92b2lkIHNldEZyYW1lR2VvbWV0cnko
Y29uc3QgSW50UmVjdCYpOworICAgIEZyYW1lR2RrKiBwYXJlbnQoKTsKKyAgICB2b2lkIHNldFBh
cmVudChGcmFtZUdkayopOworICAgIHZvaWQgcmVwYWludChib29sIG5vdyk7CisgICAgdm9pZCBy
ZXBhaW50KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KTsKKyAgICAvL0ludFBv
aW50IGdldEFic29sdXRlUG9zaXRpb24oKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyogY3Jl
YXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIGJlZ2luUGFp
bnRpbmcoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgZW5kUGFpbnRpbmcoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8qKTsKKyAgICBXaW5kb3dHZGsqIHdpbmRvdygpIHtyZXR1cm4gIG1fd2luZG93Lmdl
dCgpOyB9CisgICAgdm9pZCAgICBhdHRhY2hXaW5kb3coV2luZG93R2RrKik7CisgICAgdm9pZCAg
ICBkZXRhY2hXaW5kb3coKTsKK3Byb3RlY3RlZDoKKyAgICBBdG9taWNTdHJpbmcgICAgbV9ldmVu
dFR5cGU7CiBwcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRUeXBlUmVsb2FkKCk7Ci0g
ICAgdmlydHVhbCBib29sIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCopOwotCi0g
ICAgRnJhbWVHZGtDbGllbnQqIG1fY2xpZW50OwotICAgIEdka0RyYXdhYmxlKiBtX2RyYXdhYmxl
OworICAgIFJlZlB0cjxXaW5kb3dHZGs+IG1fd2luZG93OwogfTsKIAotaW5saW5lIEZyYW1lR2Rr
KiBXaW4oRnJhbWUqIGZyYW1lKSB7IHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KGZyYW1l
KTsgfQotaW5saW5lIGNvbnN0IEZyYW1lR2RrKiBXaW4oY29uc3QgRnJhbWUqIGZyYW1lKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZUdkayo+KGZyYW1lKTsgfQogCiB9CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1NoYXJlZFRpbWVyTGludXguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1NoYXJlZFRpbWVyTGludXguY3BwCShyZXZpc2lvbiAxNzA4
MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1NoYXJlZFRpbWVyTGludXguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3ICsyMiw3IEBACiAgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0Nvb2tpZUphckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ29v
a2llSmFyR2RrLmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9D
b29raWVKYXJHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3
ICsyMiw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCShyZXZpc2lvbiAxNzA4MikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3ICsyMiw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpbmRv
d0dkay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpbmRvd0dkay5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgV2luZG93R2RrX0hfCisjZGVmaW5lIFdpbmRvd0dka19IXwor
I2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIkJyb3dzZXJFeHRlbnNpb24uaCIKKyNpbmNs
dWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWxlbWVudDsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOworY2xhc3MgV2luZG93QXJnczsKK2NsYXNzIEN1
cnNvcjsKK2NsYXNzIEludFBvaW50OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEludFJlY3Q7Citj
bGFzcyBGcmFtZUdkazsKK2NsYXNzIFN0cmluZzsKKworCitjbGFzcyBXaW5kb3dHZGsgOiAgcHVi
bGljIFNoYXJlZDxXaW5kb3dHZGs+IHsKKyAgICAgICAgCitwdWJsaWM6CisgICAgV2luZG93R2Rr
KCk7CisgICAgV2luZG93R2RrKEdka1dpbmRvdyopOworICAgIFdpbmRvd0dkayhjb25zdCBXaW5k
b3dBcmdzJik7CisgICAgdmlydHVhbCB+V2luZG93R2RrKCk7CisgICAgc3RhdGljIFdpbmRvd0dk
ayogZmluZFdpbmRvdyhHZGtXaW5kb3cqKTsKKyAgICB2b2lkIGhhbmRsZUdka0V2ZW50KEdka0V2
ZW50Kik7CisgICAgdm9pZCBzZXRGcmFtZShGcmFtZUdkayogZnJhbWUpeyBtX2ZyYW1lID0gZnJh
bWU7IH0KKyAgICBGcmFtZUdkayogZnJhbWUoKXsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICB2b2lk
IHNldElzQWN0aXZlKGJvb2wgZmxhZyk7CisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRl
KCk7CisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpOworICAgIHZvaWQg
c2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRGdWxsU2NyZWVuKGJvb2wpOwor
ICAgIHZvaWQgc2V0TWF4aW1pemVkKGJvb2wpOworICAgIFdpbmRvd0dkayogZ2V0UG9pbnRlcklu
Zm8oIEludFBvaW50JiwgLypwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGlzIHdpbmRvdyovCisgICAg
ICAgIGJvb2wmIHNoaWZ0S2V5LGJvb2wmIGN0cmxLZXksIGJvb2wmIGFsdEtleSwgYm9vbCYgbWV0
YUtleSk7CisgICAgV2luZG93R2RrKiB3aW5kb3dBdFBvaW50ZXIoKTsKKyAgICBJbnRSZWN0IGdl
b21ldHJ5KCkgY29uc3Q7CisgICAgSW50UG9pbnQgcG9zaXRpb24oKSBjb25zdDsKKyAgICBJbnRT
aXplIHNpemUoKSBjb25zdDsKKyAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsK
KyAgICB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBub3cpOwor
ICAgIEdka1dpbmRvdyogd2luZG93KCl7IHJldHVybiBtX3dpbmRvdzt9CisgICAgR3JhcGhpY3ND
b250ZXh0Q2Fpcm8qIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4
dENhaXJvKiAgYmVnaW5QYWludGluZyhjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBlbmRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHRDYWlybyopOworICAgIEludFBvaW50IGdldEFic29sdXRlUG9z
aXRpb24oKSBjb25zdDsKKyAgICBXaW5kb3dBcmdzIHdpbmRvd0FyZ3MoKXsgcmV0dXJuIG1fd2lu
ZG93QXJnczt9Citwcml2YXRlOgorICAgIGJvb2wgbV9jcmVhdGVkRHJhd2FibGU7CisgICAgR2Rr
V2luZG93KiBtX3dpbmRvdzsKKyAgICBXaW5kb3dBcmdzIG1fd2luZG93QXJnczsKKyAgICBGcmFt
ZUdkayogbV9mcmFtZTsKK307CisKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1dpZGdldFByaXZhdGVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1dpZGdldFByaXZhdGVHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdldFByaXZhdGVHZGsuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVySW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUxvYWRlck1hbmFnZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNp
bmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRnJhbWVHZGsuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVkZSAiVGV4dFN0
cmVhbS5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKKyNlbmRpZgorCisjZGVmaW5l
IG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVO
VEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18p
OyB9IHdoaWxlKDApCisKKwordXNpbmcgbmFtZXNwYWNlIEtKUzsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisKK1dpZGdldFByaXZhdGU6OldpZGdldFByaXZhdGUoV2lkZ2V0KiB3aWRnZXQpCisg
ICAgOiBSZXNvdXJjZUxvYWRlckNsaWVudCgpIAorICAgICwgbV9uYW1lKCJfYmxhbmsiKQorICAg
ICwgbV91cmwoKQorICAgICwgdmlzaWJsZShmYWxzZSkKKyAgICAsIGVuYWJsZWQoZmFsc2UpCisg
ICAgLCBzZWxlY3RlZChmYWxzZSkKKyAgICAsIGhhc0ZvY3VzKGZhbHNlKQorICAgICwgZ2VvbWV0
cnkoKQorICAgICwgZm9udCgpCisgICAgLCBjbGllbnQoMCkKKyAgICAsIG1fd2lkZ2V0KHdpZGdl
dCkKKyAgICAsIG1fb3duZXIoMCkKKyAgICAsIG1fcGFyZW50KDApCisgICAgLCBtX3ZpZXcoMCkK
KyAgICAsIG1faGFzU2Nyb2xsYmFycyh0cnVlKQorICAgICwgbV9pc0Vycm9yKGZhbHNlKQorewor
fQorCitXaWRnZXRQcml2YXRlOjp+V2lkZ2V0UHJpdmF0ZSgpCit7CisgICAgaWYobV92aWV3Lmdl
dCgpKQorICAgICAgICBtX3ZpZXctPnByaXZhdGVEYXRhKCktPm1fb3duZXIgPSAwOworICAgIG1f
cGFyZW50ID0gMDsKKyAgICBtX3dpZGdldCA9IDA7CisgICAgbV92aWV3ID0gMDsKKyAgICBjbGll
bnQgPSAwOworfQorCit2b2lkIFdpZGdldFByaXZhdGU6OmNyZWF0ZVZpZXcoS1VSTCB1cmwpCit7
CisgICAgbV91cmwgPSB1cmw7CisgICAgbV9uYW1lID0gU3RyaW5nKHVybC51cmwoKSk7CisgICAg
Ly9hIHJlYmluZAorICAgIGlmKG1fdmlldyl7CisgICAgICAgIGRlbGV0ZSBtX3ZpZXctPmZyYW1l
KCk7CisgICAgICAgIG1fdmlldyA9IDA7CisgICAgfQorICAgIEZyYW1lR2RrKiB0bXAgPSBuZXcg
RnJhbWVHZGsobmV3IFBhZ2UoKSwwLDApOworICAgIHRtcC0+dHJlZSgpLT5zZXROYW1lKG1fdXJs
LnVybCgpKTsKKyAgICBtX3ZpZXcgPSB0bXAtPnZpZXcoKTsKKworICAgIC8vaW1wb3J0YW50IG9y
IHdlIGhhdmUgcmVjdXJzaW9uCisgICAgbV92aWV3LT5wcml2YXRlRGF0YSgpLT5tX2hhc1Njcm9s
bGJhcnMgPSBtX2hhc1Njcm9sbGJhcnM7CisgICAgbV92aWV3LT5wcml2YXRlRGF0YSgpLT5tX25h
bWUgPSBtX25hbWUrIlt2aWV3XSI7CisgICAgbV92aWV3LT5zZXRPd25lcih0aGlzLT5tX3dpZGdl
dCk7CisKKyAgICBpZighbV9oYXNTY3JvbGxiYXJzKSB7CisgICAgICAgIG1fdmlldy0+c3VwcHJl
c3NTY3JvbGxiYXJzKHRydWUsZmFsc2UpOworICAgICAgICBtX3ZpZXctPnNldFZTY3JvbGxiYXJN
b2RlKFNjcm9sbGJhckFsd2F5c09mZik7CisgICAgICAgIG1fdmlldy0+c2V0SFNjcm9sbGJhck1v
ZGUoU2Nyb2xsYmFyQWx3YXlzT2ZmKTsKKyAgICB9CisgICAgdG1wLT5vcGVuVVJMKG1fdXJsKTsK
K30KKworYm9vbCBXaWRnZXRQcml2YXRlOjpvcGVuVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAg
ICBpZighbV9vd25lcikKKyAgICAgICAgbV9uYW1lPVN0cmluZyh1cmwudXJsKCkpOworICAgIFJl
ZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSh0aGlz
LCAiR0VUIiwgdXJsKTsKKyAgICBSZXNvdXJjZUxvYWRlckludGVybmFsKiBpbnRlcm5hbCA9IGxv
YWRlci0+Z2V0SW50ZXJuYWwoKTsKKyAgICAvL0ZJWE1FOiB3aHkgaXMgdGhpcyBzZXQgdG8gdHJ1
ZSBieSBkZWZhdWx0ID8KKyAgICBpbnRlcm5hbC0+YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzID0g
ZmFsc2U7CisgICAgbG9hZGVyLT5zdGFydCgwKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBXaWRnZXRQcml2YXRlOjpzdWJtaXRGb3JtKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEZvcm1EYXRhKiBwb3N0RGF0YSkKK3sKKyAgIFJlZlB0cjxSZXNvdXJj
ZUxvYWRlcj4gbG9hZGVyID0gUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSh0aGlzLCBtZXRob2QsIHVy
bCwqcG9zdERhdGEpOworICAgbG9hZGVyLT5zdGFydCgwKTsKK30KKwordm9pZCBXaWRnZXRQcml2
YXRlOjpyZWNlaXZlZFJlZGlyZWN0KFJlc291cmNlTG9hZGVyKiBqb2IsIGNvbnN0IEtVUkwmIHVy
bCkKK3sgICAKKyAgICBqb2ItPmNhbmNlbCgpOworICAgIG9wZW5VUkwodXJsKTsKK30KKworLyoK
KyAqIERhdGEgaXMgdGhlIGZ1bGwgc2V0IG9mIGhlYWRlcnMKKyAqIENhbGxlZCB0aGUgZmlyc3Qg
dGltZSB3ZSBnZXQgcmVjaWV2ZWQgZGF0YSBvciBhbGwgZGF0YQorICovCit2b2lkIFdpZGdldFBy
aXZhdGU6OnJlY2VpdmVkUmVzcG9uc2UoUmVzb3VyY2VMb2FkZXIqIGpvYiwgUGxhdGZvcm1SZXNw
b25zZSBkYXRhKQoreworICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGludGVybmFsID0gam9i
LT5nZXRJbnRlcm5hbCgpOworICAgIGludGVybmFsLT5hc3NlbWJsZWRSZXNwb25zZUhlYWRlcnMg
PSB0cnVlOyAgICAKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fdmlldy0+ZnJhbWUoKTsKKyAgICAg
ICAKKyAgICBTdHJpbmcgbWltZVR5cGUgPSBqb2ItPnF1ZXJ5TWV0YURhdGEoIkNvbnRlbnQtVHlw
ZToiKTsKKworICAgIGlmKCBtaW1lVHlwZS5pc0VtcHR5KCkpeworICAgICAgICBTdHJpbmcgcGF0
aCA9ICBTdHJpbmcoam9iLT51cmwoKS5wYXRoKCkpOworICAgICAgICBtaW1lVHlwZSA9IFJlc291
cmNlTG9hZGVyTWFuYWdlcjo6Z2V0TWltZVR5cGUocGF0aCk7CisgICAgfQorCisgICAgZnJhbWUt
PnNldFJlc3BvbnNlTUlNRVR5cGUobWltZVR5cGUpOworICAgIFN0cmluZyBjaGFyc2V0ID0gam9i
LT5xdWVyeU1ldGFEYXRhKCJjaGFyc2V0Iik7CisKKyAgICBtX3ZpZXctPmZyYW1lKCktPmFkZE1l
dGFEYXRhKCJIVFRQLUhlYWRlcnMiLFN0cmluZyhpbnRlcm5hbC0+cmVzcG9uc2VIZWFkZXJzKSk7
CisKKyAgICAvLyBzZXRFbmNvZGluZyBjYWxscyBiZWdpbigpIGZvciB1cywgZGVzcGl0ZSB0aGUg
bWlzbGVhZGluZyBuYW1lCisgICAgaWYoIWNoYXJzZXQuaXNFbXB0eSgpKQorICAgICAgICBmcmFt
ZS0+c2V0RW5jb2RpbmcoY2hhcnNldCx0cnVlKTsKKyAgICBlbHNlCisgICAgICAgIGZyYW1lLT5z
ZXRFbmNvZGluZyhtX3ZpZXctPmZyYW1lKCktPmVuY29kaW5nKCksZmFsc2UpOworfQorCit2b2lk
IFdpZGdldFByaXZhdGU6OnJlY2VpdmVkRGF0YShSZXNvdXJjZUxvYWRlciogam9iLCBjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIG1fdmlldy0+ZnJhbWUoKS0+YWRkRGF0YShk
YXRhLCBsZW5ndGgpOworfQorCit2b2lkIFdpZGdldFByaXZhdGU6OnJlY2VpdmVkQWxsRGF0YShS
ZXNvdXJjZUxvYWRlciogam9iLCBQbGF0Zm9ybURhdGEgZGF0YSkKK3sKKworICAgIG1faXNFcnJv
ciA9IGpvYi0+aXNFcnJvclBhZ2UoKTsKKyAgICBtX3ZpZXctPmZyYW1lKCktPmVuZCgpOworICAg
IG1fdmlldy0+cmVwYWludChmYWxzZSk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCit2b2lkIFdpZGdl
dFByaXZhdGU6OmR1bXBEb2N1bWVudCgpIHsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHM7CisgICAg
RG9jdW1lbnQgKmRvYyA9IG1fdmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBUZXh0U3Ry
ZWFtIHRzKCZzKTsKKyAgICBkb2MtPmR1bXAoJnRzLERlcHJlY2F0ZWRTdHJpbmcoIiAiKSk7Cisg
ICAgcHJpbnRmKCJXSURHRVQgTk9ERVM6JXNcbiVzXG4iLG1fbmFtZS5kZXByZWNhdGVkU3RyaW5n
KCkuYXNjaWkoKSxzLmFzY2lpKCkpOworICAgIHByaW50ZigiRU5EX05PREVTXG4iKTsKKyAgICBE
ZXByZWNhdGVkU3RyaW5nIHN0ID0gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihkb2MtPnJlbmRlcmVy
KCkpOworICAgIHByaW50ZigiV0lER0VUICVzIFJFTkRFUkVTOlxuJXNcbiIsbV9uYW1lLmRlcHJl
Y2F0ZWRTdHJpbmcoKS5hc2NpaSgpLHN0LmFzY2lpKCkpOworICAgIHByaW50ZigiRU5EX1JFTkRF
UkVTXG4iKTsKK30KKyNlbmRpZgorCit9CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCShyZXZpc2lvbiAxNzA4
MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Jlc291cmNlTG9hZGVyQ3VybC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIy
LDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzEs
MjEgKzMxLDQ5IEBACiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXJJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KIAorCisjZGVmaW5lIG5vdElt
cGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAl
czolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdo
aWxlKDApCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVzb3VyY2VMb2FkZXJJbnRlcm5hbDo6
flJlc291cmNlTG9hZGVySW50ZXJuYWwoKQogeworICAgIGlmIChtX2hhbmRsZSkgCisgICAgICAg
IGN1cmxfZWFzeV9jbGVhbnVwKG1faGFuZGxlKTsKKyAgICBpZiAobV91cmwpIAorICAgICAgICBm
cmVlKG1fdXJsKTsKKworICAgIGlmKG1fY3VzdG9tSGVhZGVyKQorICAgICAgICBjdXJsX3NsaXN0
X2ZyZWVfYWxsKG1fY3VzdG9tSGVhZGVyKTsKKworICAgIGlmKG1fY3VzdG9tUG9zdEhlYWRlcikK
KyAgICAgICAgY3VybF9zbGlzdF9mcmVlX2FsbChtX2N1c3RvbVBvc3RIZWFkZXIpOworCisgICAg
aWYobV9maWxlUG9zdCkKKyAgICAgICAgIGN1cmxfZm9ybWZyZWUobV9maWxlUG9zdCk7CisgICAg
Ly9kb24ndCBkZWxldGUgd2UgcGFzcyB0aGlzIG9mZiBpbiB0aGUgZW5kCisgICAgaWYobV9yZXNw
b25zZSkKKyAgICAgICAgIG1fcmVzcG9uc2UgPSAwOwogfQogCiBSZXNvdXJjZUxvYWRlcjo6flJl
c291cmNlTG9hZGVyKCkKIHsKLSAgICBjYW5jZWwoKTsKKyAgICBkZWxldGUgZDsKIH0KIAogYm9v
bCBSZXNvdXJjZUxvYWRlcjo6c3RhcnQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCiB7CiAgICAgcmVm
KCk7CisgICAgZ2V0SW50ZXJuYWwoKS0+bV9sb2FkaW5nID0gdHJ1ZTsKKyAgICBkLT5yZXRyaWV2
ZWRDaGFyc2V0ID1mYWxzZTsKKyAgICBkLT5hc3NlbWJsZWRSZXNwb25zZUhlYWRlcnMgPWZhbHNl
OworICAgIGQtPm1fcmVzcG9uc2UgPSBuZXcgUGxhdGZvcm1SZXNwb25zZUdkaygpOworICAgIGQt
Pm1fcmVzcG9uc2UtPnVybD1TdHJpbmcodXJsKCkudXJsKCkpOwogICAgIFJlc291cmNlTG9hZGVy
TWFuYWdlcjo6Z2V0KCktPmFkZCh0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTU1LDQg
KzgzLDM3IEBACiAgICAgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpnZXQoKS0+Y2FuY2VsKHRoaXMp
OwogfQogCit2b2lkIFJlc291cmNlTG9hZGVyOjpyZWNlaXZlZFJlc3BvbnNlKFBsYXRmb3JtUmVz
cG9uc2UgcmVzcG9uc2UpCit7CisgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogaW50ZXJuYWwg
PSBnZXRJbnRlcm5hbCgpOworCisgICAgaW50IGluZGV4ID0gcmVzcG9uc2UtPmRhdGEuZmluZCgn
OicpOworICAgIFN0cmluZyBuYW1lID0gcmVzcG9uc2UtPmRhdGEuc3Vic3RyaW5nKDAsaW5kZXgr
MSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgU3RyaW5nIHZhbHVlID0gcmVzcG9uc2UtPmRhdGEu
c3Vic3RyaW5nKGluZGV4KzEpLnN0cmlwV2hpdGVTcGFjZSgpOworCisgICAgaWYoIG5hbWUgPT0g
IkNvbnRlbnQtVHlwZToiKSB7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IHZhbHVlOworICAg
ICAgICBTdHJpbmcgY2hhcnNldDsKKyAgICAgICAgLy90aGUgbWltZSBzdHJpbmcgY2FuIGhhdmUg
dHlwZTsgY2hhcnNldAorICAgICAgICBpbmRleCA9IHZhbHVlLmZpbmQoIjsiKTsKKyAgICAgICAg
aWYoIGluZGV4ICE9IC0xICkgeyAKKyAgICAgICAgICAgIG1pbWVUeXBlID0gdmFsdWUubGVmdChp
bmRleCk7CisgICAgICAgICAgICBjaGFyc2V0ID0gdmFsdWUucmlnaHQoaW5kZXgrMSk7CisgICAg
ICAgICAgICBhZGRNZXRhRGF0YSgiY2hhcnNldCIsY2hhcnNldCk7CisgICAgICAgIH0KKyAgICAg
ICAgaW50ZXJuYWwtPm1fcmVzcG9uc2UtPm1pbWVUeXBlPW1pbWVUeXBlOworICAgIH1lbHNlIHsK
KyAgICAgICAgYWRkTWV0YURhdGEobmFtZSx2YWx1ZSk7CisgICAgfQorICAgIGludGVybmFsLT5y
ZXNwb25zZUhlYWRlcnMgKz0gcmVzcG9uc2UtPmRhdGEuZGVwcmVjYXRlZFN0cmluZygpOworfQor
Cit2b2lkIFJlc291cmNlTG9hZGVyOjphc3NlbWJsZVJlc3BvbnNlSGVhZGVycygpIGNvbnN0Cit7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2hhcnNldCgpIGNvbnN0Cit7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Nj
cmVlbkdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2NyZWVuR2Rr
LmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JlZW5HZGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiwzMCArMjIsNDMgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNj
cmVlbi5oIgotCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJXaWRnZXQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgPGdkay9nZGsuaD4KIAorI2RlZmluZSBub3RJbXBs
ZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6
JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGls
ZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBHZGtEcmF3YWJsZSogZHJhd2Fi
bGVGb3JQYWdlKGNvbnN0IFBhZ2UqIHBhZ2UpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gKHBhZ2Ug
PyBwYWdlLT5tYWluRnJhbWUoKSA6IDApOworICAgIGlmKCAhZnJhbWUgKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBGcmFtZUdkayogaWZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWVHZGsqPihmcmFt
ZSk7CisgICAgRnJhbWVHZGsqIHJvb3QgPSBpZnJhbWUtPmdldFJvb3RGcmFtZSgpOworICAgIGlm
KCAhcm9vdCB8fCAhcm9vdC0+d2luZG93KCkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiByb290LT53aW5kb3coKS0+d2luZG93KCk7Cit9CisKK3N0YXRpYyBXaWRnZXQqIHdpZGdl
dEZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSAocGFnZSA/
IHBhZ2UtPm1haW5GcmFtZSgpIDogMCk7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSAoZnJh
bWUgPyBmcmFtZS0+dmlldygpIDogMCk7Ci0gICAgCiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBmcmFtZVZpZXctPmRyYXdhYmxlKCk7Cisg
ICAgcmV0dXJuIGZyYW1lVmlldzsKIH0KIAogRmxvYXRSZWN0IHNjcmVlblJlY3QoY29uc3QgUGFn
ZSogcGFnZSkKQEAgLTY1LDE1ICs3OCwxNSBAQAogICAgIHJldHVybiBnZGtfZHJhd2FibGVfZ2V0
X2RlcHRoKGRyYXdhYmxlKTsKIH0KIAotRmxvYXRSZWN0IHVzYWJsZVNjcmVlblJlY3QoY29uc3Qg
UGFnZSogcGFnZSkKK2Zsb2F0IHNjYWxlRmFjdG9yKGNvbnN0IFBhZ2UqKQogewotICAgIHJldHVy
biBzY3JlZW5SZWN0KHBhZ2UpOworICAgIHJldHVybiAxLjBmOwogfQogCi1mbG9hdCBzY2FsZUZh
Y3Rvcihjb25zdCBQYWdlKikKK0Zsb2F0UmVjdCB1c2FibGVTY3JlZW5SZWN0KGNvbnN0IFBhZ2Uq
IHBhZ2UpCiB7Ci0gICAgcmV0dXJuIDEuMGY7Ci0KKyAgICByZXR1cm4gc2NyZWVuUmVjdChwYWdl
KTsKIH0KIAogfQorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Jy
b3dzZXJFeHRlbnNpb25HZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0Jyb3dzZXJFeHRlbnNpb25HZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvQnJvd3NlckV4dGVuc2lvbkdkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnJvd3NlckV4dGVuc2lvbkdkay5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJy
LCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18s
X19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
QnJvd3NlckV4dGVuc2lvbkdkazo6QnJvd3NlckV4dGVuc2lvbkdkayhGcmFtZSope30KKworQnJv
d3NlckV4dGVuc2lvbkdkazo6fkJyb3dzZXJFeHRlbnNpb25HZGsoKXt9CisKK3ZvaWQgQnJvd3Nl
ckV4dGVuc2lvbkdkazo6Y3JlYXRlTmV3V2luZG93KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmKXsg
bm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpjcmVhdGVOZXdX
aW5kb3coY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdpbmRvd0FyZ3MmLCBGcmFtZSom
KXsgbm90SW1wbGVtZW50ZWQoKTsgfQorYm9vbCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpjYW5SdW5N
b2RhbCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2Jvb2wgQnJvd3NlckV4dGVu
c2lvbkdkazo6Y2FuUnVuTW9kYWxOb3coKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9
Cit2b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OnJ1bk1vZGFsKCkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9CisKK3ZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6Z29CYWNrT3JGb3J3YXJkKGludCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9CitLVVJMIEJyb3dzZXJFeHRlbnNpb25HZGs6Omhpc3RvcnlVUkwo
aW50IGRpc3RhbmNlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBLVVJMKCk7IH0KK2ludCBC
cm93c2VyRXh0ZW5zaW9uR2RrOjpnZXRIaXN0b3J5TGVuZ3RoKCkgeyByZXR1cm4gMDsgfQorCit2
b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OnNldFR5cGVkSWNvblVSTChLVVJMIGNvbnN0JiwgY29u
c3QgU3RyaW5nJikgeyB9Cit2b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OnNldEljb25VUkwoS1VS
TCBjb25zdCYpIHsgfQorCit9CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdldEdk
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAko
cmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw1MiArMjIsODYgQEAKICAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpZGdldC5o
IgotCisjaW5jbHVkZSAiV2lkZ2V0UHJpdmF0ZUdkay5oIgorI2luY2x1ZGUgIkZyYW1lR2RrLmgi
CiAjaW5jbHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1l
R2RrLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJT
VkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFBvaW50
LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUg
PGdkay9nZGsuaD4KKyNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDxtYXRoLmg+CiAKKyNkZWZpbmUgbm90SW1wbGVtZW50
ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVz
XG4iLFwKKyAgICAgICAgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9
IHdoaWxlKDApCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2lkZ2V0UHJpdmF0ZSB7
Ci1wdWJsaWM6Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlOwotICAgIFdpZGdldENsaWVudCog
Y2xpZW50OwotICAgIEludFJlY3QgZ2VvbWV0cnk7Ci0gICAgRm9udCBmb250OwotfTsKIAorCitz
dGF0aWMgRnJhbWVHZGsqIGlmcmFtZVBhcmVudChjb25zdCBXaWRnZXQqIHdpZGdldCkgeworICAg
IGlmKCF3aWRnZXQtPmlzRnJhbWVWaWV3KCkgKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25z
dCBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih3aWRnZXQp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KHZpZXctPmZyYW1lKCkpOworfQor
CiBXaWRnZXQ6OldpZGdldCgpCi0gICAgOiBkYXRhKG5ldyBXaWRnZXRQcml2YXRlKQorICAgIDog
ZGF0YShuZXcgV2lkZ2V0UHJpdmF0ZSh0aGlzKSkKIHsKLSAgICBkYXRhLT5kcmF3YWJsZSA9IDA7
CiB9CiAKLVdpZGdldDo6V2lkZ2V0KEdka0RyYXdhYmxlKiBkcmF3YWJsZSkKLSAgICA6IGRhdGEo
bmV3IFdpZGdldFByaXZhdGUpCitGcmFtZVZpZXcqIFdpZGdldDo6ZnJhbWVWaWV3KCkgY29uc3QK
IHsKLSAgICBzZXREcmF3YWJsZShkcmF3YWJsZSk7CisgICAgcmV0dXJuIGRhdGEtPm1fdmlldy5n
ZXQoKTsKIH0KIAotR2RrRHJhd2FibGUqIFdpZGdldDo6ZHJhd2FibGUoKSBjb25zdAordm9pZCBX
aWRnZXQ6OnNldEZyYW1lVmlldyhGcmFtZVZpZXcqIHZpZXcpCiB7Ci0gICAgcmV0dXJuIGRhdGEt
PmRyYXdhYmxlOworICAgIGRhdGEtPm1fdmlldyA9IHZpZXc7CisgICAgdmlldy0+ZGF0YS0+Z2Vv
bWV0cnkgPSBkYXRhLT5nZW9tZXRyeTsKKyAgICB2aWV3LT5kYXRhLT5tX3BhcmVudCA9IGRhdGEt
Pm1fcGFyZW50OwogfQogCi12b2lkIFdpZGdldDo6c2V0RHJhd2FibGUoR2RrRHJhd2FibGUqIGRy
YXdhYmxlKQordm9pZCBXaWRnZXQ6OnNldE93bmVyKFdpZGdldCogcCkKIHsKLSAgICBkYXRhLT5k
cmF3YWJsZSA9IGRyYXdhYmxlOworICAgIGRhdGEtPm1fb3duZXIgPSBwOyAgICAKIH0KIAorV2lk
Z2V0KiBXaWRnZXQ6Om93bmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGF0YS0+bV9vd25lcjsK
K30KKworV2lkZ2V0KiBXaWRnZXQ6OnBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEt
Pm1fcGFyZW50OworfQorCit2b2lkIFdpZGdldDo6c2V0UGFyZW50KFdpZGdldCogcCkKK3sKKyAg
ICBkYXRhLT5tX3BhcmVudCA9IHA7CisgICAgaWYocCkKKyAgICAgICAgcmVwYWludChmYWxzZSk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBkYXRhLT5tX3Bh
cmVudD0wOworfQorCiBXaWRnZXQ6On5XaWRnZXQoKQogewogICAgIGRlbGV0ZSBkYXRhOwpAQCAt
ODMsNiArMTE3LDU5IEBACiAgICAgcmV0dXJuIGRhdGEtPmNsaWVudDsKIH0KIAordm9pZCBXaWRn
ZXQ6OmludmFsaWRhdGUoKQoreworICAgIEludFJlY3QgcigwLDAsZGF0YS0+Z2VvbWV0cnkud2lk
dGgoKSxkYXRhLT5nZW9tZXRyeS5oZWlnaHQoKSk7CisgICAgaW52YWxpZGF0ZVJlY3Qocik7Cit9
CisKK3ZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByKQoreworCisg
ICAgcmVwYWludChyLGZhbHNlKTsgCit9CisKK3ZvaWQgV2lkZ2V0OjpyZXBhaW50KGJvb2wgbm93
KQoreworICAgIEludFJlY3QgcigwLDAsZGF0YS0+Z2VvbWV0cnkud2lkdGgoKSxkYXRhLT5nZW9t
ZXRyeS5oZWlnaHQoKSk7CisgICAgcmVwYWludChyLG5vdyk7Cit9CisKK3ZvaWQgV2lkZ2V0Ojpy
ZXBhaW50KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KQoreworICAgIGlmKCB1
cGRhdGVSZWN0LmlzRW1wdHkoKSApCisgICAgICAgIHJldHVybjsKKyAgICAvL2lmIHdlIGFyZSBv
d25lZCBsZXQgb3duZXIgcmVwYWludAorICAgIGlmKG93bmVyKCkgIT0gMCkgeworICAgICAgICBv
d25lcigpLT5yZXBhaW50KHVwZGF0ZVJlY3Qsbm93KTsKKyAgICB9IGVsc2UgaWYoaXNGcmFtZVZp
ZXcoKSkgeworICAgICAgICBGcmFtZVZpZXcqIHYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0
aGlzKTsKKyAgICAgICAgRnJhbWVHZGsqIGZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWVHZGsqPih2
LT5mcmFtZSgpKTsKKyAgICAgICAgSW50UmVjdCBkaXJ0eSA9IHVwZGF0ZVJlY3Q7CisgICAgICAg
IGRpcnR5Lm1vdmUoSW50U2l6ZShkYXRhLT5nZW9tZXRyeS54KCksZGF0YS0+Z2VvbWV0cnkueSgp
KSk7CisgICAgICAgIGZyYW1lLT5yZXBhaW50KGRpcnR5LG5vdyk7CisgICAgfSBlbHNlIGlmKCBw
YXJlbnQoKSAhPSAwICkgeworICAgICAgICBJbnRSZWN0IGRpcnR5ID0gdXBkYXRlUmVjdDsKKyAg
ICAgICAgZGlydHkubW92ZShJbnRTaXplKGRhdGEtPmdlb21ldHJ5LngoKSxkYXRhLT5nZW9tZXRy
eS55KCkpKTsKKyAgICAgICAgcGFyZW50KCktPnJlcGFpbnQoZGlydHksbm93KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBhc3NlcnQoMCk7CisgICAgfQorfQorCisvKgorICogU2luY2Ugd2UgY2Fs
bCByZXBhaW50IG9uIHRoZSByb290IGZyYW1lIHRoZSByZWN0IGNvbWVzCisgKiBiYWNrIHRvIHVz
IGluIHRoZSByb290IGZyYW1lIGNvb3JkaW5hdGUgc3lzdGVtCisgKiBub3QgdGhlIHdpZGdldHMK
KyAqLwordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmKCFmcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGFzc2VydChmcmFtZVZpZXcoKSAhPSB0aGlzKTsKKyAgICBmcmFtZVZpZXcoKS0+cGFpbnQoY3R4
LHJlY3QpOworfQorCiBJbnRSZWN0IFdpZGdldDo6ZnJhbWVHZW9tZXRyeSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGRhdGEtPmdlb21ldHJ5OwpAQCAtOTAsMjAgKzE3NywxNyBAQAogCiBib29sIFdp
ZGdldDo6aGFzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
ZGF0YS0+aGFzRm9jdXM7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCiB7Ci0gICAgR2Rr
RHJhd2FibGUqIGRyYXdhYmxlID0gZGF0YS0+ZHJhd2FibGU7Ci0gICAgaWYgKCFkcmF3YWJsZSB8
fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5k
b3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfZm9jdXMo
d2luZG93LCBHREtfQ1VSUkVOVF9USU1FKTsKKyAgICBkYXRhLT5oYXNGb2N1cz0gdHJ1ZTsKIH0K
IAogdm9pZCBXaWRnZXQ6OmNsZWFyRm9jdXMoKQogeworICAgIGRhdGEtPmhhc0ZvY3VzPSBmYWxz
ZTsKIH0KIAogY29uc3QgRm9udCYgV2lkZ2V0Ojpmb250KCkgY29uc3QKQEAgLTExOCw0NCArMjAy
LDEyNyBAQAogCiB2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQog
ewotICAgIEdka0N1cnNvciogcGN1ciA9IGN1cnNvci5pbXBsKCk7Ci0gICAgaWYgKCFwY3VyKQot
ICAgICAgICByZXR1cm47CiAKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBkYXRhLT5kcmF3
YWJsZTsKLSAgICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJs
ZSk7Ci0gICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKHdpbmRvdywgcGN1cik7CisgICBGcmFtZUdk
ayogZnJhbWUgPSBpZnJhbWVQYXJlbnQodGhpcyk7CiAKKyAgICBpZiggZnJhbWUgKQorICAgICAg
ICBmcmFtZS0+c2V0Q3Vyc29yKGN1cnNvcik7CisgICAgZWxzZSBpZihwYXJlbnQoKSkKKyAgICAg
ICAgcGFyZW50KCktPnNldEN1cnNvcihjdXJzb3IpOwogfQogCiB2b2lkIFdpZGdldDo6c2hvdygp
CiB7Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZGF0YS0+ZHJhd2FibGU7Ci0gICAgaWYg
KCFkcmF3YWJsZSB8fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCi0gICAgICAgIHJldHVybjsK
LSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193
aW5kb3dfc2hvdyh3aW5kb3cpOworICAgIGRhdGEtPnZpc2libGUgPSB0cnVlOwogfQogCisKIHZv
aWQgV2lkZ2V0OjpoaWRlKCkKIHsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBkYXRhLT5k
cmF3YWJsZTsKLSAgICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3
YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19oaWRlKHdpbmRvdyk7CisgICAgZGF0YS0+dmlzaWJsZSA9
IGZhbHNlOwogfQogCitJbnRQb2ludCBXaWRnZXQ6OmxvY2F0aW9uSW5XaW5kb3coKSBjb25zdAor
eworICAgIEludFBvaW50IHAoMCwwKTsKKyAgICBXaWRnZXQqIHdpZGdldCA9IGNvbnN0X2Nhc3Q8
V2lkZ2V0Kj4odGhpcyk7CisKKyAgICB3aGlsZSh3aWRnZXQpCisgICAgeworICAgICAgICBSZW5k
ZXJQYXJ0KiByZW5kZXJlciA9ICB3aWRnZXQtPmZyYW1lVmlldygpLT5mcmFtZSgpLT5vd25lclJl
bmRlcmVyKCk7CisgICAgICAgIGlmKHdpZGdldC0+b3duZXIoKSkgeworICAgICAgICAgICAgd2lk
Z2V0ID0gd2lkZ2V0LT5vd25lcigpOyAKKyAgICAgICAgICAgIEludFJlY3QgciA9IHdpZGdldC0+
ZnJhbWVHZW9tZXRyeSgpOworICAgICAgICB9ZWxzZSBpZiggd2lkZ2V0LT5pc0ZyYW1lVmlldygp
ICYmIHJlbmRlcmVyICl7CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHggPSByZW5kZXJl
ci0+YWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHAubW92ZSgoaW50KXR4LmR4KCks
KGludCl0eC5keSgpKTsKKyAgICAgICAgICAgIHdpZGdldCA9IHdpZGdldC0+cGFyZW50KCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnRSZWN0IHIgPSB3aWRnZXQtPmZyYW1lR2Vv
bWV0cnkoKTsKKyAgICAgICAgICAgIHAubW92ZShyLngoKSxyLnkoKSk7CisgICAgICAgICAgICB3
aWRnZXQgPSB3aWRnZXQtPnBhcmVudCgpOyAKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
cDsKK30KKworCiB2b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBy
KQogewotICAgIGRhdGEtPmdlb21ldHJ5ID0gcjsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUg
PSBkYXRhLT5kcmF3YWJsZTsKLSAgICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRy
YXdhYmxlKSkKKyAgICBpZiggZGF0YS0+Z2VvbWV0cnkgPT0gciApCiAgICAgICAgIHJldHVybjsK
LSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193
aW5kb3dfbW92ZV9yZXNpemUod2luZG93LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWln
aHQoKSk7CisgICAgZGF0YS0+Z2VvbWV0cnk9cjsKKyAgICBpZihmcmFtZVZpZXcoKSAmJiBmcmFt
ZVZpZXcoKSAhPSB0aGlzICkKKyAgICAgICAgZnJhbWVWaWV3KCktPnNldEZyYW1lR2VvbWV0cnko
cik7CiB9CiAKK0ludFBvaW50IFdpZGdldDo6bWFwVG9QYXJlbnQoY29uc3QgSW50UG9pbnQmIHAs
IGNvbnN0IFdpZGdldCogcGFyZW50KSBjb25zdAoreworICAgIGNvbnN0IFdpZGdldCogcHIgPSB0
aGlzOworICAgIEludFBvaW50IHBvaW50ID0gcDsKKyAgICB3aGlsZSggcHIgKSB7CisgICAgICAg
IGlmKHByID09IHBhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICBwb2ludC5t
b3ZlKHByLT5kYXRhLT5nZW9tZXRyeS54KCkscHItPmRhdGEtPmdlb21ldHJ5LnkoKSk7CisgICAg
ICAgIHByID0gcHItPnBhcmVudCgpOworICAgIH0KKyAgICByZXR1cm4gcG9pbnQ7CiB9CisKK3Zv
aWQgV2lkZ2V0OjpzZXRFbmFibGVkKGJvb2wgYikgeworICAgIGRhdGEtPmVuYWJsZWQgPSBiOwor
fQorCitib29sIFdpZGdldDo6aXNFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGF0YS0+
ZW5hYmxlZDsKK30KKwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCBiKQoreworICAg
IGRhdGEtPnNlbGVjdGVkID0gYjsKK30KKworCitXaWRnZXQ6OkZvY3VzUG9saWN5IFdpZGdldDo6
Zm9jdXNQb2xpY3koKSBjb25zdAoreworICAgIHJldHVybiBDbGlja0ZvY3VzOworfQorCit2b2lk
IFdpZGdldDo6ZGlzYWJsZUZsdXNoRHJhd2luZygpCit7Cit9CisKK3ZvaWQgV2lkZ2V0OjplbmFi
bGVGbHVzaERyYXdpbmcoKQoreworfQorCitHcmFwaGljc0NvbnRleHQqIFdpZGdldDo6bG9ja0Ry
YXdpbmdGb2N1cygpCit7CisgICAgV2lkZ2V0KiBwciA9IHRoaXM7CisgICAgSW50UmVjdCByZWN0
KDAsMCxkYXRhLT5nZW9tZXRyeS53aWR0aCgpLGRhdGEtPmdlb21ldHJ5LmhlaWdodCgpKTsKKwor
ICAgIHdoaWxlKCBwciApIHsKKyAgICAgICAgRnJhbWVHZGsqIGlmcmFtZSA9IGlmcmFtZVBhcmVu
dChwcik7CisgICAgICAgIGlmKGlmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpZnJhbWUtPmJl
Z2luUGFpbnRpbmcocmVjdCk7CisgICAgICAgIHJlY3QubW92ZShwci0+ZGF0YS0+Z2VvbWV0cnku
eCgpLHByLT5kYXRhLT5nZW9tZXRyeS55KCkpOworICAgICAgICBwciA9IHByLT5wYXJlbnQoKTsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2lkZ2V0Ojp1bmxvY2tEcmF3aW5nRm9j
dXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIEdyYXBoaWNzQ29udGV4dENhaXJv
KiBjdHggPSBzdGF0aWNfY2FzdDxHcmFwaGljc0NvbnRleHRDYWlybyo+KGNvbnRleHQpOworICAg
IFdpZGdldCogcHIgPSB0aGlzOworICAgIHdoaWxlKCBwciApIHsKKyAgICAgICAgRnJhbWVHZGsq
IGlmcmFtZSA9IGlmcmFtZVBhcmVudChwcik7CisgICAgICAgIGlmKGlmcmFtZSkKKyAgICAgICAg
ICAgIGlmcmFtZS0+ZW5kUGFpbnRpbmcoY3R4KTsKKyAgICAgICAgcHIgPSBwci0+cGFyZW50KCk7
CisgICAgfQorfQorCit9CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9SZXNvdXJjZUxvYWRlck1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNzA4MikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDE0ICsyMiwyMCBAQAogICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkZXJNYW5hZ2VyLmgiCiAKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1
ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oIgorI2luY2x1
ZGUgIkZvcm1EYXRhLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM3LDEwICs0MywxNCBAQAogY29uc3QgZG91YmxlIHBvbGxUaW1l
U2Vjb25kcyA9IDAuMDU7CiAKIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6UmVzb3VyY2VMb2FkZXJN
YW5hZ2VyKCkKLSAgICA6IG1fdXNlU2ltcGxlKGZhbHNlKQotICAgICwgam9icyhuZXcgSGFzaFNl
dDxSZXNvdXJjZUxvYWRlcio+KQorICAgIDogam9icygpCisgICAgLCBzaW1wbGVKb2JzKCkKICAg
ICAsIG1fZG93bmxvYWRUaW1lcih0aGlzLCAmUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpkb3dubG9h
ZFRpbWVyQ2FsbGJhY2spCiB7CisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZm
ZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKyAgICBtYXhmZCA9IDA7CiAgICAgY3Vy
bF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwogICAgIGN1cmxNdWx0aUhhbmRsZSA9IGN1
cmxfbXVsdGlfaW5pdCgpOwogfQpAQCAtNTMsNDcgKzYzLDUzIEBACiAgICAgcmV0dXJuIHNpbmds
ZXRvbjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnVzZVNpbXBsZVRyYW5zZmVy
KGJvb2wgdXNlU2ltcGxlKQotewotICAgIG1fdXNlU2ltcGxlID0gdXNlU2ltcGxlOwotfQotCiBz
dGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJhY2sodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90
IG5tZW1iLCB2b2lkKiBvYmopCiB7CiAgICAgUmVzb3VyY2VMb2FkZXIqIGpvYiA9IHN0YXRpY19j
YXN0PFJlc291cmNlTG9hZGVyKj4ob2JqKTsKKyAgICBpZihqb2ItPmlzRXJyb3JQYWdlKCkpCisg
ICAgICAgIHJldHVybiAtMTsKICAgICBSZXNvdXJjZUxvYWRlckludGVybmFsKiBkID0gam9iLT5n
ZXRJbnRlcm5hbCgpOworICAgIGlmKCFkLT5hc3NlbWJsZWRSZXNwb25zZUhlYWRlcnMpIAorICAg
ICAgICBkLT5jbGllbnQtPnJlY2VpdmVkUmVzcG9uc2Uoam9iLGQtPm1fcmVzcG9uc2UpOwogICAg
IGludCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7CiAgICAgZC0+Y2xpZW50LT5yZWNlaXZlZERh
dGEoam9iLCBzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKKyAgICBpZihkLT5t
X3VzZVNpbXBsZSkgeworICAgICAgICBkLT5yZXN1bHREYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxj
aGFyKj4ocHRyKSwgdG90YWxTaXplKTsKKyAgICB9CiAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKIH0K
IAotc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBz
aXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCitzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNo
YXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogb2JqKQogeworICAgIFJl
c291cmNlTG9hZGVyKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRlcio+KG9iaik7Cisg
ICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKworICAg
IGlmKGpvYi0+aXNFcnJvclBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIGludCB0b3Rh
bFNpemUgPSBzaXplICogbm1lbWI7CisgICAgZC0+bV9yZXNwb25zZS0+ZGF0YSA9IFN0cmluZyhw
dHIsdG90YWxTaXplKTsKKyAgICBqb2ItPnJlY2VpdmVkUmVzcG9uc2UoZC0+bV9yZXNwb25zZSk7
CiAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6
OmRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUxvYWRlck1hbmFnZXI+KiB0aW1l
cikKIHsKLSAgICBpZiAoam9icy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZG93bmxvYWRUaW1l
ci5zdG9wKCk7CisgICAgaWYgKGpvYnMuaXNFbXB0eSgpJiYgc2ltcGxlSm9icy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fdXNlU2ltcGxlKSB7Ci0gICAgICAg
IGZvciAoSGFzaFNldDxSZXNvdXJjZUxvYWRlcio+OjppdGVyYXRvciBpdCA9IGpvYnMtPmJlZ2lu
KCk7IGl0ICE9IGpvYnMtPmVuZCgpOyArK2l0KSB7CisgICAgCisgICAgaWYgKCFzaW1wbGVKb2Jz
LmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKEhhc2hTZXQ8UmVzb3VyY2VMb2FkZXIqPjo6aXRl
cmF0b3IgaXQgPSBzaW1wbGVKb2JzLmJlZ2luKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAg
aXQgIT0gc2ltcGxlSm9icy5lbmQoKTsgKytpdCkgewogICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
ZXIqIGpvYiA9ICppdDsKICAgICAgICAgICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBq
b2ItPmdldEludGVybmFsKCk7CiAgICAgICAgICAgICBDVVJMY29kZSByZXMgPSBjdXJsX2Vhc3lf
cGVyZm9ybShkLT5tX2hhbmRsZSk7CiAgICAgICAgICAgICBpZiAocmVzICE9IENVUkxFX09LKQog
ICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgV0lUSCBKT0IgJWRcbiIsIHJlcyk7Ci0gICAg
ICAgICAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IsIDApOwotICAgICAgICAgICAg
ZC0+Y2xpZW50LT5yZWNlaXZlZEFsbERhdGEoam9iKTsKLSAgICAgICAgICAgIGN1cmxfZWFzeV9j
bGVhbnVwKGQtPm1faGFuZGxlKTsKLSAgICAgICAgICAgIGQtPm1faGFuZGxlID0gMDsKKyAgICAg
ICAgICAgIHJlbW92ZShqb2IpOwogICAgICAgICB9Ci0gICAgICAgIGpvYnMtPmNsZWFyKCk7Ci0g
ICAgICAgIG1fZG93bmxvYWRUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisKKyAg
ICBpZiggIWpvYnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7CiAgICAg
ICAgIEZEX1pFUk8oJmZkd3JpdGUpOwogICAgICAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKQEAgLTEw
NSwxNSArMTIxLDkgQEAKICAgICAgICAgdGltZW91dC50dl91c2VjID0gc2VsZWN0VGltZW91dE1T
ICogMTAwMDsgICAgICAgLy8gc2VsZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcwogICAgICAgICByZXR2
YWwgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRp
bWVvdXQpOwogICAgICAgICBzd2l0Y2ggKHJldHZhbCkgewotICAgICAgICAgICAgY2FzZSAtMTog
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3QgZXJyb3IKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgICAgICAgICAgcHJpbnRmKCIlcywgc2VsZWN0IGVycm9yKCVkKVxuIiwgX19QUkVUVFlf
RlVOQ1RJT05fXyxyZXR2YWwpOwotI2VuZGlmCisgICAgICAgICAgICBjYXNlIC0xOi8vIHNlbGVj
dCBlcnJvcgogICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoKi8KICAgICAgICAgICAgIGNh
c2UgMDogICAgICAgICAgICAgICAgIC8vIHNlbGVjdCB0aW1lb3V0Ci0jaWZuZGVmIE5ERUJVRwot
ICAgICAgICAgICAgICAgIHByaW50ZigiJXMsIHNlbGVjdCB0aW1lb3V0ICVkXG4iLCBfX1BSRVRU
WV9GVU5DVElPTl9fLHJldHZhbCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAvKiBmYWxsdGhy
b3VnaC4gdGhpcyBjYW4gYmUgdGhlIGZpcnN0IHBlcmZvcm0gdG8gYmUgbWFkZSAqLwogICAgICAg
ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAvLyAxKyBkZXNjcmlwdG9ycyBo
YXZlIGRhdGEKICAgICAgICAgICAgICAgICB3aGlsZSAoQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JN
ID09IGN1cmxfbXVsdGlfcGVyZm9ybShjdXJsTXVsdGlIYW5kbGUsICZucnVubmluZykpCkBAIC0x
MjIsNiArMTMyLDcgQEAKIAogICAgICAgICAvLyBjaGVjayB0aGUgY3VybCBtZXNzYWdlcyBpbmRp
Y2F0aW5nIGNvbXBsZXRlZCB0cmFuc2ZlcnMKICAgICAgICAgLy8gYW5kIGZyZWUgdGhlaXIgcmVz
b3VyY2VzCisgICAgICAgIFJlc291cmNlTG9hZGVyKiBqb2I7CiAgICAgICAgIGludCBubXNnczsK
ICAgICAgICAgd2hpbGUgKENVUkxNc2cqIG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGN1cmxN
dWx0aUhhbmRsZSwgJm5tc2dzKSkgewogICAgICAgICAgICAgaWYgKG1zZy0+bXNnID09IENVUkxN
U0dfRE9ORSkgewpAQCAtMTMwLDYwICsxNDEsMTU4IEBACiAgICAgICAgICAgICAgICAgYXNzZXJ0
KGNoYW5kbGUpOwogICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZGVyICpqb2I7CiAgICAgICAg
ICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY2hhbmRsZSwgQ1VSTElORk9fUFJJVkFURSwgJmpv
Yik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGpvYik7IC8vZml4bWU6IGFzc2VydC0+aWYgPwot
ICAgICAgICAgICAgICAgIC8vIGlmIGZvdW5kLCBkZWxldGUgaXQKLSAgICAgICAgICAgICAgICBp
ZiAoam9iKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwgKmQg
PSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobXNnLT5k
YXRhLnJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDVVJMRV9PSzogewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGlzIHRvIGF1dGhlbnRpY2F0ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNwQ29kZSA9IC0xOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGQtPm1faGFuZGxlLCBDVVJMSU5G
T19SRVNQT05TRV9DT0RFLCAmcmVzcENvZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlbW92ZShqb2IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkN1cmwgRVJST1IgJXNcbiIsIGN1cmxf
ZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgam9iLT5zZXRFcnJvcihtc2ctPmRhdGEucmVzdWx0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZW1vdmUoam9iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHByaW50ZigiQ3VybFJlcXVlc3Qgbm90IGZvdW5kLCBldmVudGhvdWdo
IGN1cmwgZC0+bV9oYW5kbGUgZmluaXNoZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICBhc3Nl
cnQoMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGpvYik7IAorICAgICAgICAgICAgICAgIGlm
KCBtc2ctPmRhdGEucmVzdWx0ICE9IENVUkxFX09LKSB7CisgICAgICAgICAgICAgICAgICAgIGNo
YXIgKmhhbmRsZV91cmw9MDsKKyAgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8o
Y2hhbmRsZSxDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmaGFuZGxlX3VybCk7CisgICAgICAgICAg
ICAgICAgICAgIHByaW50ZigiQ3VybCBFUlJPUiB1cmw9JXMgZXJyb3I6JXNcbiIsaGFuZGxlX3Vy
bCwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZnJlZShoYW5kbGVfdXJsKTsKKyAgICAgICAgICAgICAgICAgICAgam9iLT5zZXRFcnJv
cihtc2ctPmRhdGEucmVzdWx0KTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmVtb3ZlKGpvYik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAo
IWpvYnMtPmlzRW1wdHkoKSkKKyAgICBpZighbV9kb3dubG9hZFRpbWVyLmlzQWN0aXZlKCkpCiAg
ICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNvbmRzKTsKIH0K
IAogdm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRlciogam9i
KQogeworICAgIC8vdGFrZSBvdXQgb2YgY3VybCBtdWx0aSBmaXJzdCAhCiAgICAgUmVzb3VyY2VM
b2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoIWQtPm1faGFu
ZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGpvYnMtPmNvbnRhaW5zKGpvYikpCi0gICAg
ICAgIGpvYnMtPnJlbW92ZShqb2IpOwotICAgIGlmIChqb2JzLT5pc0VtcHR5KCkpCi0gICAgICAg
IG1fZG93bmxvYWRUaW1lci5zdG9wKCk7Ci0gICAgZC0+Y2xpZW50LT5yZWNlaXZlZEFsbERhdGEo
am9iLCAwKTsKLSAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IpOwotICAgIGlmIChk
LT5tX2hhbmRsZSkgeworICAgIGlmIChkLT5tX2hhbmRsZSkKICAgICAgICAgY3VybF9tdWx0aV9y
ZW1vdmVfaGFuZGxlKGN1cmxNdWx0aUhhbmRsZSwgZC0+bV9oYW5kbGUpOwotICAgICAgICBjdXJs
X2Vhc3lfY2xlYW51cChkLT5tX2hhbmRsZSk7Ci0gICAgICAgIGQtPm1faGFuZGxlID0gTlVMTDsK
KworICAgIGlmIChqb2JzLmNvbnRhaW5zKGpvYikpCisgICAgICAgIGpvYnMucmVtb3ZlKGpvYik7
CisKKyAgICBpZiAoc2ltcGxlSm9icy5jb250YWlucyhqb2IpKQorICAgICAgICBzaW1wbGVKb2Jz
LnJlbW92ZShqb2IpOworCisgICAgaWYoZC0+Y2xpZW50KXsKKyAgICAgICAgLy9lbXB0eSBwYWdl
IGlmIHRydWUKKyAgICAgICAgaWYoIWQtPmFzc2VtYmxlZFJlc3BvbnNlSGVhZGVycykgCisgICAg
ICAgICAgICBkLT5jbGllbnQtPnJlY2VpdmVkUmVzcG9uc2Uoam9iLGQtPm1fcmVzcG9uc2UpOwor
ICAgICAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IpOworICAgICAgICBkLT5jbGll
bnQtPnJlY2VpdmVkQWxsRGF0YShqb2IsIDApOwogICAgIH0KKyAgICBkZWxldGUgam9iOwogfQog
Ci12b2lkIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6YWRkKFJlc291cmNlTG9hZGVyKiBqb2IpCit2
b2lkICBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnNldHVwUHV0KFJlc291cmNlTG9hZGVyKiBqb2Ip
CiB7Ci0gICAgYm9vbCBzdGFydFRpbWVyID0gam9icy0+aXNFbXB0eSgpOwogICAgIFJlc291cmNl
TG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CisgICAgaWYoZC0+bWV0aG9k
ICE9ICJQVVQiKQorICAgICAgICByZXR1cm47CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSwgQ1VSTE9QVF9VUExPQUQsIFRSVUUpIDsKKworICAgIHsKKyAgICAgICAgc3RydWN0IGN1
cmxfc2xpc3QgKnNsaXN0PU5VTEw7CisgICAgICAgIC8vRklYTUU6IGhtbW0gZGlzYWJsZSBFeHBl
Y3Q6IDEwMC1jb250aW51ZQorICAgICAgICAvL3NsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoc2xp
c3QsIkV4cGVjdDoiKTsKKyAgICAgICAgLy9qdXN0IHN1cHByb3QgSHR0cCAxLjEgY2h1bmNrZWQg
ZW5jb2Rpbmcgbm93CisgICAgICAgIHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QsIlRy
YW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIik7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+
bV9oYW5kbGUsQ1VSTE9QVF9IVFRQSEVBREVSLCBzbGlzdCk7CisgICAgICAgIGQtPm1fY3VzdG9t
UG9zdEhlYWRlciA9IHNsaXN0OworICAgIH0KK30KKwordm9pZCAgUmVzb3VyY2VMb2FkZXJNYW5h
Z2VyOjpzZXR1cFBvc3QoUmVzb3VyY2VMb2FkZXIqIGpvYikKK3sKKyAgICBSZXNvdXJjZUxvYWRl
ckludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOworICAgIGlmKGQtPm1ldGhvZCAhPSAi
UE9TVCIpCisgICAgICAgIHJldHVybjsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX1BPU1QsdHJ1ZSk7CisgICAgLy9kaXNhYmxlIEV4cGVjdDogMTAwLWNvbnRpbnVl
CisgICAgeworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3Q9TlVMTDsKKyAgICAgICAg
c2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwiRXhwZWN0OiIpOworICAgICAgICBjdXJs
X2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAg
ICAgICBkLT5tX2N1c3RvbVBvc3RIZWFkZXIgPSBzbGlzdDsKKyAgICB9CisKKyAgICAvL2ZpcnN0
IGFkZCBhbnkgZGF0YQorICAgIGQtPnBvc3REYXRhLmZsYXR0ZW4oZC0+bV9wb3N0Qnl0ZXMpOwor
ICAgIGlmKGQtPm1fcG9zdEJ5dGVzLnNpemUoKSAhPSAwICkgeworICAgICAgICBjdXJsX2Vhc3lf
c2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFMsZC0+bV9wb3N0Qnl0ZXMuZGF0
YSgpKTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QT1NU
RklFTERTSVpFLGQtPm1fcG9zdEJ5dGVzLnNpemUoKSk7CisgICAgfQorCisgICAgVmVjdG9yPEZv
cm1EYXRhRWxlbWVudD4gZWxlbWVudHMgPSBkLT5wb3N0RGF0YS5lbGVtZW50cygpOworICAgIGlu
dCBzaXplID0gZWxlbWVudHMuc2l6ZSgpOworICAgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpsYXN0
cHRyPU5VTEw7CisgICAgCisgICAgZm9yKGludCBpID0wOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg
ICAgIGlmKCBlbGVtZW50c1tpXS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmls
ZSkgeworICAgICAgICAgICAgQ1N0cmluZyBjc3RyaW5nID0gIGVsZW1lbnRzW2ldLm1fZmlsZW5h
bWUudXRmOCgpOworICAgICAgICAgICAgLy9rZWVwIHJlZiBoZXJlIHNvIGl0cyBub3QgZnJlZWQK
KyAgICAgICAgICAgIGQtPm1fY3N0cmluZ3MuYXBwZW5kKGNzdHJpbmcpOworICAgICAgICAgICAg
Y29uc3QgY2hhciAqZmlsZW5hbWUgPSBjc3RyaW5nLmRhdGEoKTsKKworICAgICAgICAgICAgLyog
RmlsbCBpbiB0aGUgZmlsZSB1cGxvYWQgZmllbGQgKi8KKyAgICAgICAgICAgIGN1cmxfZm9ybWFk
ZCgmZC0+bV9maWxlUG9zdCwKKyAgICAgICAgICAgICAgICAmbGFzdHB0ciwKKyAgICAgICAgICAg
ICAgICBDVVJMRk9STV9DT1BZTkFNRSwgInNlbmRmaWxlIiwKKyAgICAgICAgICAgICAgICBDVVJM
Rk9STV9GSUxFLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworIAor
ICAgICAgICAgICAgLyogRmlsbCBpbiB0aGUgZmlsZW5hbWUgZmllbGQgKi8KKyAgICAgICAgICAg
IGN1cmxfZm9ybWFkZCgmZC0+bV9maWxlUG9zdCwKKyAgICAgICAgICAgICAgICAmbGFzdHB0ciwK
KyAgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgImZpbGVuYW1lIiwKKyAgICAgICAg
ICAgICAgICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAg
IENVUkxGT1JNX0VORCk7CisgCisgICAgICAgICAgICAvKiBGaWxsIGluIHRoZSBzdWJtaXQgZmll
bGQgdG9vLCBldmVuIGlmIHRoaXMgaXMgcmFyZWx5IG5lZWRlZCAqLworICAgICAgICAgICAgY3Vy
bF9mb3JtYWRkKCZkLT5tX2ZpbGVQb3N0LAorICAgICAgICAgICAgICAgICZsYXN0cHRyLAorICAg
ICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAic3VibWl0IiwKKyAgICAgICAgICAgICAg
ICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsICJzZW5kIiwKKyAgICAgICAgICAgICAgICBDVVJMRk9S
TV9FTkQpOworICAgICAgICB9CisgICAgfQorfQorVmVjdG9yPGNoYXI+IFJlc291cmNlTG9hZGVy
TWFuYWdlcjo6cnVuSW1tZWRpYXRlbHkoUmVzb3VyY2VMb2FkZXIqIGpvYikKK3sKKyAgICBpZiAo
am9icy5jb250YWlucyhqb2IpKQorICAgICAgICBqb2JzLnJlbW92ZShqb2IpOworCisgICAgaWYg
KHNpbXBsZUpvYnMuY29udGFpbnMoam9iKSkKKyAgICAgICAgc2ltcGxlSm9icy5yZW1vdmUoam9i
KTsKKworICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7
CisgICAgLy9jYXVzZSBkYXRhIHRvIGJlIGNhY2hlZCBpbiByZXN1bHREYXRhCisgICAgZC0+bV91
c2VTaW1wbGUgPSB0cnVlOworICAgIENVUkxjb2RlIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGQt
Pm1faGFuZGxlKTsKKyAgICBpZiAocmVzICE9IENVUkxFX09LKQorICAgICAgICBwcmludGYoIkVy
cm9yIFdJVEggSk9CICVkXG4iLCByZXMpOworICAgIFZlY3RvcjxjaGFyPiByZXN1bHRzID0gVmVj
dG9yPGNoYXI+KGQtPnJlc3VsdERhdGEpOyAKKyAgICBkLT5yZXN1bHREYXRhLmNsZWFyKCk7Cisg
ICAgcmVtb3ZlKGpvYik7CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkZXJNYW5hZ2VyOjppbml0Sm9iKFJlc291cmNlTG9hZGVyKmpvYikKK3sKKyAgICBSZXNvdXJj
ZUxvYWRlckludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwogICAgIERlcHJlY2F0ZWRT
dHJpbmcgdXJsID0gZC0+VVJMLnVybCgpOworCisvL3ByaW50ZigiUmVzb3VyY2VMb2FkZXJNYW5h
Z2VyOjphZGQgU3RhcnRpbmcgam9iICVzXG4iLGQtPlVSTC51cmwoKS5hc2NpaSgpKTsKKyAgICAv
L3JlbW92ZSBhbnkgcXVlcnkgcGFydCBzZW50IHRvIGEgbG9jYWwgZmlsZQorICAgIC8vYWxsb3dz
IGh0dHAgc3R5bGUgZ2V0IG9wdGlvbnMgdG8gYmUgaGFuZGxlZCBieSBhIGxvY2FsIGZpbGUKKyAg
ICBpZiggZC0+VVJMLmlzTG9jYWxGaWxlKCkgKSB7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcg
cXVlcnkgPSBkLT5VUkwucXVlcnkoKTsKKyAgICAgICAgaWYoICFxdWVyeS5pc0VtcHR5KCkgKSB7
CisgICAgICAgICAgIHVuc2lnbmVkIGludCBpZHggPSB1cmwuZmluZChxdWVyeSk7CisgICAgICAg
ICAgIHVybCA9IHVybC5sZWZ0KGlkeCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgZC0+bV9oYW5k
bGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworICAgIC8vIHVybCBwdHIgbXVzdCByZW1haW4gdmFsaWQg
dGhyb3VnaCB0aGUgcmVxdWVzdAorICAgIGQtPm1fdXJsID0gIHN0cmR1cCh1cmwuYXNjaWkoKSk7
CisKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BSSVZBVEUsIGpv
Yik7CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9FUlJPUkJVRkZF
UiwgZXJyb3JfYnVmZmVyKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlQ2FsbGJhY2spOwpAQCAtMTkzLDMwICszMDIsNzIgQEAK
ICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9O
LCAxKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX01BWFJFRElS
UywgMTApOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEFV
VEgsIENVUkxBVVRIX0FOWSk7Ci0gICAgLy8gdXJsIHB0ciBtdXN0IHJlbWFpbiB2YWxpZCB0aHJv
dWdoIHRoZSByZXF1ZXN0Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9Q
VF9VUkwsIHVybC5hc2NpaSgpKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX1VSTCxkLT5tX3VybCk7CiAKLSAgICBpZiAobV91c2VTaW1wbGUpCi0gICAgICAgIGpv
YnMtPmFkZChqb2IpOwotICAgIGVsc2UgeworICAgIC8veG1sSHR0cFJlcXVlc3Qgc2VlIHhtbC94
bWxodHRwcmVxdWVzdC5jcHAKKyAgICBTdHJpbmcgY3VzdG9tSGVhZGVycyA9IGpvYi0+cXVlcnlN
ZXRhRGF0YSgiY3VzdG9tSFRUUEhlYWRlciIpOworICAgIGlmKCFjdXN0b21IZWFkZXJzLmlzRW1w
dHkoKSl7CisgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpzbGlzdD1OVUxMOworICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBoZWFkZXJzID0gY3VzdG9tSGVhZGVycy5zcGxpdCgiXHJcbiIpOworICAg
ICAgICBpbnQgc2l6ZSA9IGhlYWRlcnMuc2l6ZSgpOworICAgICAgICBmb3IoaW50IGk9MDsgaSA8
IHNpemU7IGkrKykgeworICAgICAgICAgICAgQ1N0cmluZyBjc3RyaW5nID0gaGVhZGVyc1tpXS51
dGY4KCk7CisgICAgICAgICAgICAvL3NhdmUgZm9yIGxhdGVyIGNsZWFudXAKKyAgICAgICAgICAg
IGQtPm1fY3N0cmluZ3MuYXBwZW5kKGNzdHJpbmcpOworICAgICAgICAgICAgY29uc3QgY2hhciAq
IGhlYWRlciA9ICBjc3RyaW5nLmRhdGEoKTsKKyAgICAgICAgICAgIHNsaXN0ID0gY3VybF9zbGlz
dF9hcHBlbmQoc2xpc3QsaGVhZGVyKTsKKyAgICAgICAgfQorICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIsIHNsaXN0KTsKKyAgICAgICAgZC0+
bV9jdXN0b21IZWFkZXIgPSBzbGlzdDsKKyAgICB9CisgICAgLy9kZWZhdWx0IHRvIGdldAorICAg
IGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEdFVCwgVFJVRSk7IAor
CisgICAgaWYoZC0+bWV0aG9kID09ICJQT1NUIikKKyAgICAgICAgc2V0dXBQb3N0KGpvYik7Cisg
ICAgZWxzZSBpZihkLT5tZXRob2QgPT0gIlBVVCIpCisgICAgICAgIHNldHVwUHV0KGpvYik7Cisg
ICAgZWxzZSBpZihkLT5tZXRob2QgPT0gIkhFQUQiKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX05PQk9EWSwgVFJVRSk7IAorfQorCit2b2lkIFJlc291cmNl
TG9hZGVyTWFuYWdlcjo6YWRkKFJlc291cmNlTG9hZGVyKiBqb2IpCit7CisgICAgUmVzb3VyY2VM
b2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBpbml0Sm9iKGpvYik7
CisKKyAgICBqb2JzLmFkZChqb2IpOworCisgICAgaWYoZC0+bV91c2VTaW1wbGUpIHsKKyAgICAg
ICAgc2ltcGxlSm9icy5hZGQoam9iKTsKKyAgICB9ZWxzZSB7CiAgICAgICAgIENVUkxNY29kZSBy
ZXQgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUoY3VybE11bHRpSGFuZGxlLCBkLT5tX2hhbmRsZSk7
Ci0gICAgICAgIC8vIGRvbid0IGNhbGwgcGVyZm9ybSwgYmVjYXVzZSBldmVudHMgbXVzdCBiZSBh
c3luYwotICAgICAgICAvLyB0aW1lb3V0IHdpbGwgb2NjdXIgYW5kIGRvIGN1cmxfbXVsdGlfcGVy
Zm9ybQogICAgICAgICBpZiAocmV0ICYmIHJldCAhPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0p
IHsKICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgJWQgc3RhcnRpbmcgam9iICVzXG4iLCByZXQs
IGQtPlVSTC51cmwoKS5hc2NpaSgpKTsKLSAgICAgICAgICAgIGpvYi0+c2V0RXJyb3IoMSk7Ci0g
ICAgICAgICAgICBzdGFydFRpbWVyID1mYWxzZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBqb2JzLT5hZGQoam9iKTsKKyAgICAgICAgICAgIGNhbmNlbChqb2IpOworICAgICAgICB9IAog
ICAgIH0KLSAgICBpZiAoc3RhcnRUaW1lcikKKyAgICBpZighbV9kb3dubG9hZFRpbWVyLmlzQWN0
aXZlKCkpCiAgICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNv
bmRzKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmNhbmNlbChSZXNvdXJjZUxv
YWRlciogam9iKQogeworICAgIGpvYi0+c2V0RXJyb3IoMSk7CiAgICAgcmVtb3ZlKGpvYik7Ci0g
ICAgam9iLT5zZXRFcnJvcigxKTsKIH0KK2NoYXIqIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0
TWltZVR5cGUoU3RyaW5nJiBpblBhdGgpCit7CisgICAgIERlcHJlY2F0ZWRTdHJpbmcgcGF0aCA9
IGluUGF0aC5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgIGlmKCBwYXRoLmVuZHNXaXRoKCIuc3Zn
IikgKQorICAgICAgICAgIHJldHVybiAiaW1hZ2Uvc3ZnK3htbCI7CisgICAgIGlmKCBwYXRoLmVu
ZHNXaXRoKCIueG1sIikgKQorICAgICAgICAgIHJldHVybiAidGV4dC94bWwiOworICAgICBpZigg
cGF0aC5lbmRzV2l0aCgiLnhzbCIpICkKKyAgICAgICAgICByZXR1cm4gInRleHQveHNsIjsKKyAg
ICAgaWYoIHBhdGguZW5kc1dpdGgoIi5qcyIpICkKKyAgICAgICAgICByZXR1cm4gImFwcGxpY2F0
aW9uL3gtamF2YXNjcmlwdCI7CisgICAgIHJldHVybiAidGV4dC9odG1sIjsKK30KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvSWNvbkdkay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvSWNvbkdkay5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9JY29uR2RrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlICJJY29uLmgiCisjaW5jbHVkZSAiSWNvbkxvYWRlci5oIgorI2lu
Y2x1ZGUgIkljb25EYXRhYmFzZS5oIgorCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7
IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJ
TEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIEljb25Mb2FkZXI6OnJlY2VpdmVkUmVzcG9uc2UoUmVzb3Vy
Y2VMb2FkZXIqLCBQbGF0Zm9ybVJlc3BvbnNlKQoreworICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBJY29uTG9hZGVyOjpub3RpZnlJY29uQ2hhbmdlZChjb25zdCBLVVJMJiBpY29uVVJM
KQoreworICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitJY29uOjpJY29uKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitJY29uOjp+SWNvbigpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworUGFzc1JlZlB0cjxJY29uPiBJY29uOjpuZXdJY29uRm9yRmlsZShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFBh
c3NSZWZQdHI8SWNvbj4oMCk7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQorCisv
LyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAkocmV2
aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDE3ICsyMiwyMyBAQAogICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJhbWVHZGsuaCIK
KyNpbmNsdWRlICJXaW5kb3dHZGsuaCIKKyNpbmNsdWRlICJXaWRnZXRQcml2YXRlR2RrLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFy
LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkJyb3dzZXJFeHRlbnNpb25HZGsu
aCIKQEAgLTQwLDggKzQ2LDEyIEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJQ
bHVnaW4uaCIKICNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIkhU
TUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZGVyTWFuYWdlci5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgpAQCAtNTIsOSArNjIsMTIgQEAKICNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCiAjaW5jbHVk
ZSAiU1NMS2V5R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAi
UGF0aC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgp
IGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIs
IF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQogCiAv
LyBUaGlzIGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBmcm9tIFdlYktpdAogLy8gVGhpcyBkb2Vz
IG5vdCBiZWxvbmcgaGVyZSBhbmQgSSdtIG5vdCBzdXJlIHdoZXJlCkBAIC03MSw5MCArODQsNTYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GcmFtZUdka0NsaWVudERlZmF1bHQ6OkZyYW1l
R2RrQ2xpZW50RGVmYXVsdCgpCi0gICAgOiBSZXNvdXJjZUxvYWRlckNsaWVudCgpCi0gICAgLCBt
X2ZyYW1lKDApCi0gICAgLCBtX2JlZ2luQ2FsbGVkKGZhbHNlKQotewotfQordXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAotRnJhbWVHZGtDbGllbnREZWZhdWx0Ojp+RnJhbWVHZGtDbGllbnRE
ZWZhdWx0KCkKLXsKLX0KK3N0YXRpYyBjaGFyKiBpbnN0YWxsUGF0aDsKK3N0YXRpYyBGcmFtZUdk
ayogZm9jdXNGcmFtZTsKIAotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OnNldEZyYW1lKGNv
bnN0IEZyYW1lR2RrKiBmcmFtZSkKLXsKLSAgICBtX2ZyYW1lID0gY29uc3RfY2FzdDxGcmFtZUdk
ayo+KGZyYW1lKTsKLX0KK3ZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVCb3JkZXIoKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KIAotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6Om9wZW5VUkwoY29uc3Qg
S1VSTCYgdXJsKQotewotICAgIG1fZnJhbWUtPmRpZE9wZW5VUkwodXJsKTsKLSAgICBtX2JlZ2lu
Q2FsbGVkID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFJl
c291cmNlTG9hZGVyOjpjcmVhdGUodGhpcywgIkdFVCIsIHVybCk7Ci0gICAgbG9hZGVyLT5zdGFy
dCgwKTsKK2Jvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VQcmVzc0V2ZW50VG9TY3JvbGxiYXIoTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgaGl0LCBQbGF0Zm9ybVNjcm9sbGJhciogYmFyKSB7
CisgICAgRnJhbWUqIGZyYW1lID0gYmFyLT5mcmFtZVZpZXcoKS0+ZnJhbWUoKTsKKyAgICBpZihm
cmFtZSkgeworICAgICAgICBmcmFtZS0+dmlldygpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoaGl0
LmV2ZW50KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6c3VibWl0Rm9ybShjb25zdCBTdHJp
bmcmIG1ldGhvZCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBGb3JtRGF0YSogcG9zdERhdGEpCiti
b29sIEZyYW1lVmlldzo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgaGl0LCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9iZWdpbkNhbGxl
ZCA9IGZhbHNlOwotCi0gICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBSZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlKHRoaXMsIG1ldGhvZCwgdXJsLCAqcG9zdERhdGEpOwotICAgIGxvYWRl
ci0+c3RhcnQoMCk7CisgICAgaWYoIGZvY3VzRnJhbWUgJiYgZm9jdXNGcmFtZSAhPSB0aGlzLT5m
cmFtZSgpICkgeworICAgICAgICBmb2N1c0ZyYW1lLT5pbnZhbGlkYXRlU2VsZWN0aW9uKCk7Cisg
ICAgICAgIGZvY3VzRnJhbWUtPnNldElzQWN0aXZlKGZhbHNlKTsKKyAgICAgICAgZm9jdXNGcmFt
ZS0+c2V0V2luZG93SGFzRm9jdXMoZmFsc2UpOworICAgIH0gCisgICAgZm9jdXNGcmFtZSA9IHN0
YXRpY19jYXN0PEZyYW1lR2RrKj4oZnJhbWUpOworICAgIGZvY3VzRnJhbWUtPnNldElzQWN0aXZl
KHRydWUpOworICAgIGZvY3VzRnJhbWUtPnNldFdpbmRvd0hhc0ZvY3VzKHRydWUpOworICAgIGZv
Y3VzRnJhbWUtPnZpZXcoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGhpdC5ldmVudCgpKTsKKyAg
ICBmb2N1c0ZyYW1lLT5pbnZhbGlkYXRlU2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHRydWU7CiB9
Ci0KLXZvaWQgRnJhbWVHZGtDbGllbnREZWZhdWx0OjpyZWNlaXZlZFJlc3BvbnNlKFJlc291cmNl
TG9hZGVyKiwgUGxhdGZvcm1SZXNwb25zZSkKLXsKLSAgICAvLyBuby1vcAorYm9vbCBGcmFtZVZp
ZXc6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYgaGl0LCBGcmFtZSogZnJhbWUpIHsKKyAgICBmcmFtZS0+dmlldygpLT5oYW5kbGVN
b3VzZVJlbGVhc2VFdmVudChoaXQuZXZlbnQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgRnJhbWVHZGtDbGllbnREZWZhdWx0OjpyZWNlaXZlZERhdGEoUmVzb3VyY2VMb2FkZXIqIGpv
YiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIW1fYmVnaW5DYWxs
ZWQpIHsKLSAgICAgICAgbV9iZWdpbkNhbGxlZCA9IHRydWU7Ci0KLSNpZiAwICAvLyBGSVhNRTog
VGhpcyBpcyBmcm9tIFF0IHZlcnNpb24sIG5lZWQgdG8gYmUgcmVtb3ZlZCBvciBHZGsgZXF1aXZh
bGVudCB3cml0dGVuCi0gICAgICAgIC8vIEFzc2lnbiBjb3JyZWN0IG1pbWV0eXBlIF9iZWZvcmVf
IGNhbGxpbmcgYmVnaW4oKSEKLSAgICAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpv
Yi0+Z2V0SW50ZXJuYWwoKTsKLSAgICAgICAgaWYgKGQpIHsKLSAgICAgICAgICAgIFJlc291cmNl
UmVxdWVzdCByZXF1ZXN0KG1fZnJhbWUtPnJlc291cmNlUmVxdWVzdCgpKTsKLSAgICAgICAgICAg
IHJlcXVlc3QubV9yZXNwb25zZU1JTUVUeXBlID0gZC0+bV9taW1ldHlwZTsKLSAgICAgICAgICAg
IG1fZnJhbWUtPnNldFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgfQotI2VuZGlm
Ci0gICAgICAgIG1fZnJhbWUtPmJlZ2luKGpvYi0+dXJsKCkpOwotICAgIH0KLQotICAgIG1fZnJh
bWUtPndyaXRlKGRhdGEsIGxlbmd0aCk7Citib29sIEZyYW1lVmlldzo6cGFzc01vdXNlTW92ZUV2
ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBoaXQsIEZyYW1lKiBm
cmFtZSkgeworICAgIGZyYW1lLT52aWV3KCktPmhhbmRsZU1vdXNlTW92ZUV2ZW50KGhpdC5ldmVu
dCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6
OnJlY2VpdmVkQWxsRGF0YShSZXNvdXJjZUxvYWRlciogam9iLCBQbGF0Zm9ybURhdGEgZGF0YSkK
LXsKLSAgICBtX2ZyYW1lLT5lbmQoKTsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7Citib29s
IEZyYW1lVmlldzo6cGFzc1doZWVsRXZlbnRUb1N1YmZyYW1lKFBsYXRmb3JtV2hlZWxFdmVudCYg
d2hlZWxFdmVudCwgRnJhbWUqIGZyYW1lKSB7CisgICAgZnJhbWUtPnZpZXcoKS0+aGFuZGxlV2hl
ZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQg
ZG9TY3JvbGwoY29uc3QgUmVuZGVyT2JqZWN0KiByLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRh
WSkKLXsKLSAgICAvLyBGSVhNRTogVGhlIHNjcm9sbGluZyBkb25lIGhlcmUgc2hvdWxkIGJlIGRv
bmUgaW4gdGhlIGRlZmF1bHQgaGFuZGxlcnMKLSAgICAvLyBvZiB0aGUgZWxlbWVudHMgcmF0aGVy
IHRoYW4gaGVyZSBpbiB0aGUgcGFydC4KLSAgICBpZiAoIXIpCi0gICAgICAgIHJldHVybjsKIAot
ICAgIC8vYnJva2VuIHNpbmNlIGl0IGNhbGxzIHNjcm9sbCBvbiBzY3JvbGxiYXJzCi0gICAgLy9h
bmQgd2UgaGF2ZSBub25lIG5vdwotICAgIC8vci0+c2Nyb2xsKGRpcmVjdGlvbiwgU2Nyb2xsQnlX
aGVlbCwgbXVsdGlwbGllcik7Ci0gICAgaWYgKCFyLT5sYXllcigpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpbnQgeCA9IHItPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKSArIGRlbHRhWDsKLSAg
ICBpbnQgeSA9IHItPmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKSArIGRlbHRhWTsKLSAgICByLT5s
YXllcigpLT5zY3JvbGxUb09mZnNldCh4LCB5LCB0cnVlLCB0cnVlKTsKLX0KLQotRnJhbWVHZGs6
OkZyYW1lR2RrKEdka0RyYXdhYmxlKiBnZGtkcmF3YWJsZSkKLSAgICA6IEZyYW1lKG5ldyBQYWdl
LCAwKSwgbV9kcmF3YWJsZShnZGtkcmF3YWJsZSkKK0ZyYW1lR2RrOjpGcmFtZUdkayhQYWdlKiBw
YWdlLCBFbGVtZW50KiBlbGVtZW50LCBXaW5kb3dHZGsqIHdpbmRvdykKKyAgICA6IEZyYW1lKHBh
Z2UsZWxlbWVudCkKKyAgICAsIG1fZXZlbnRUeXBlKCkKKyAgICAsIG1fd2luZG93KDApCiB7CiAg
ICAgZC0+bV9leHRlbnNpb24gPSBuZXcgQnJvd3NlckV4dGVuc2lvbkdkayh0aGlzKTsKICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3M7CkBAIC0xNjIsNzMgKzE0MSw5NiBAQAog
ICAgIHNldHRpbmdzLT5zZXRNaW5Gb250U2l6ZSg1KTsKICAgICBzZXR0aW5ncy0+c2V0TWluTG9n
aWNhbEZvbnRTaXplKDUpOwogICAgIHNldHRpbmdzLT5zZXRTaG91bGRQcmludEJhY2tncm91bmRz
KHRydWUpOwotCiAgICAgc2V0dGluZ3MtPnNldE1lZGl1bUZpeGVkRm9udFNpemUoMTQpOwogICAg
IHNldHRpbmdzLT5zZXRNZWRpdW1Gb250U2l6ZSgxNCk7CiAgICAgc2V0dGluZ3MtPnNldFNlcmlm
Rm9udE5hbWUoIlRpbWVzIE5ldyBSb21hbiIpOwogICAgIHNldHRpbmdzLT5zZXRTYW5zU2VyaWZG
b250TmFtZSgiQXJpYWwiKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250TmFtZSgiQ291cmll
ciIpOwogICAgIHNldHRpbmdzLT5zZXRTdGRGb250TmFtZSgiQXJpYWwiKTsKKyAgICBzZXR0aW5n
cy0+c2V0SXNKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0SmF2YVNj
cmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSh0cnVlKTsKKyAgICAvL3BpY2sgdXAgdXNl
ciBzdHlsZSBzaGVldAorICAgIFN0cmluZyBsb2NhdGlvbiA9IGluc3RhbGxMb2NhdGlvbigpOwor
ICAgIGlmKCFsb2NhdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RyaW5nIHN0eWxlID0gbG9j
YXRpb24rIi9icm93c2VyLmNzcyI7CisgICAgICAgIEtVUkwgdXNlclN0eWxlU2hlZXQgPSBLVVJM
KHN0eWxlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgIHNldHRpbmdzLT5zZXRVc2VyU3R5
bGVTaGVldExvY2F0aW9uKHVzZXJTdHlsZVNoZWV0KTsKKyAgICB9CiAgICAgc2V0U2V0dGluZ3Mo
c2V0dGluZ3MpOwotICAgIHBhZ2UoKS0+c2V0TWFpbkZyYW1lKHRoaXMpOwogICAgIEZyYW1lVmll
dyogdmlldyA9IG5ldyBGcmFtZVZpZXcodGhpcyk7CisgICAgdmlldy0+c2V0RnJhbWVWaWV3KHZp
ZXcpOwogICAgIHNldFZpZXcodmlldyk7Ci0gICAgSW50UmVjdCBnZW9tID0gZnJhbWVHZW9tZXRy
eSgpOwotICAgIHZpZXctPnJlc2l6ZShnZW9tLndpZHRoKCksIGdlb20uaGVpZ2h0KCkpOwotICAg
IHZpZXctPlNjcm9sbFZpZXc6OnNldERyYXdhYmxlKGdka2RyYXdhYmxlKTsKKyAgICBpZiggIWVs
ZW1lbnQgJiYgIXBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBwYWdlLT5zZXRNYWluRnJhbWUo
dGhpcyk7CisgICAgYXR0YWNoV2luZG93KHdpbmRvdyk7Cit9CiAKLSAgICBtX2NsaWVudCA9IG5l
dyBGcmFtZUdka0NsaWVudERlZmF1bHQoKTsKLSAgICBtX2NsaWVudC0+c2V0RnJhbWUodGhpcyk7
CitGcmFtZUdkazo6fkZyYW1lR2RrKCkKK3sKKyAgICBpZiggZm9jdXNGcmFtZSA9PSB0aGlzKQor
ICAgICAgICBmb2N1c0ZyYW1lID0gMDsKIH0KIAotRnJhbWVHZGs6OkZyYW1lR2RrKFBhZ2UqIHBh
Z2UsIEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBGcmFtZShwYWdlLGVsZW1lbnQpCisKK0ZyYW1l
KiBGcmFtZUdkazo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikKIHsKLSAg
ICBkLT5tX2V4dGVuc2lvbiA9IG5ldyBCcm93c2VyRXh0ZW5zaW9uR2RrKHRoaXMpOwotICAgIFNl
dHRpbmdzKiBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nczsKLSAgICBzZXR0aW5ncy0+c2V0QXV0b0xv
YWRJbWFnZXModHJ1ZSk7Ci0gICAgc2V0U2V0dGluZ3Moc2V0dGluZ3MpOwotICAgIG1fY2xpZW50
ID0gbmV3IEZyYW1lR2RrQ2xpZW50RGVmYXVsdCgpOwotICAgIG1fY2xpZW50LT5zZXRGcmFtZSh0
aGlzKTsKKyAgICBQYWdlKiBwYWdlOworICAgIGlmKG93bmVyRWxlbWVudCkKKyAgICAgICAgcGFn
ZSA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFnZSgpOworICAgIGVsc2UK
KyAgICAgICBwYWdlID0gbmV3IFBhZ2UoKTsKKworICAgIEZyYW1lR2RrKiBmY2hpbGQgPSBuZXcg
RnJhbWVHZGsocGFnZSxvd25lckVsZW1lbnQsMCk7CisgICAgZmNoaWxkLT50cmVlKCktPnNldE5h
bWUobmFtZSk7CisgICAgaWYob3duZXJFbGVtZW50KXsKKyAgICAgICAgRnJhbWVHZGsqIHAgPSBz
dGF0aWNfY2FzdDxGcmFtZUdkayo+KG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7
CisgICAgICAgIGZjaGlsZC0+c2V0UGFyZW50KHApOworICAgIH0KKyAgICBmY2hpbGQtPm9wZW5V
UkwodXJsKTsKKyAgICByZXR1cm4gZmNoaWxkOwogfQogCi1GcmFtZUdkazo6fkZyYW1lR2RrKCkK
K3ZvaWQgRnJhbWVHZGs6Om9wZW5VUkxSZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZy
YW1lTG9hZFJlcXVlc3QpCiB7Ci0gICAgY2FuY2VsQW5kQ2xlYXIoKTsKKyAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdCA9IGZyYW1lTG9hZFJlcXVlc3QubV9yZXF1ZXN0OworICAgIG9wZW5VUkwo
cmVxdWVzdC51cmwoKSk7CiB9CiAKIGJvb2wgRnJhbWVHZGs6Om9wZW5VUkwoY29uc3QgS1VSTCYg
dXJsKQogewotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fY2xpZW50LT5vcGVuVVJMKHVybCk7CisgICAgZGlkT3BlblVSTCh1cmwpOworICAgIHZpZXco
KS0+cHJpdmF0ZURhdGEoKS0+b3BlblVSTCh1cmwpOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2
b2lkIEZyYW1lR2RrOjpzdWJtaXRGb3JtKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9h
ZFJlcXVlc3QpCiB7CiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBmcmFtZUxvYWRSZXF1
ZXN0Lm1fcmVxdWVzdDsKLQogICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgaGFjayBpbmhlcml0ZWQg
ZnJvbSBGcmFtZU1hYywgYW5kIHNob3VsZCBiZSBwdXNoZWQgaW50byBGcmFtZQogICAgIGlmIChk
LT5tX3N1Ym1pdHRlZEZvcm1VUkwgPT0gcmVxdWVzdC51cmwoKSkKICAgICAgICAgcmV0dXJuOwot
CiAgICAgZC0+bV9zdWJtaXR0ZWRGb3JtVVJMID0gcmVxdWVzdC51cmwoKTsKLQotICAgIGlmICht
X2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnN1Ym1pdEZvcm0ocmVxdWVzdC5kb1Bvc3QoKSA/
ICJQT1NUIiA6ICJHRVQiLCByZXF1ZXN0LnVybCgpLCAmcmVxdWVzdC5wb3N0RGF0YSk7CisgICAg
ZGlkT3BlblVSTChyZXF1ZXN0LnVybCgpKTsKKyAgICB2aWV3KCktPnByaXZhdGVEYXRhKCktPnN1
Ym1pdEZvcm0ocmVxdWVzdC5kb1Bvc3QoKSA/ICJQT1NUIiA6ICJHRVQiLCByZXF1ZXN0LnVybCgp
LCAmcmVxdWVzdC5wb3N0RGF0YSk7CiAgICAgY2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKIH0K
IAorS1VSTCBGcmFtZUdkazo6b3JpZ2luYWxSZXF1ZXN0VVJMKCkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBLVVJMKCk7Cit9CisKK2Jvb2wgRnJhbWVHZGs6Omlz
TG9hZFR5cGVSZWxvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB2b2lkIEZyYW1lR2RrOjp1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRSZXF1
ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0KQogewogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0g
ZnJhbWVMb2FkUmVxdWVzdC5tX3JlcXVlc3Q7Ci0KLSAgICBpZiAoIW1fY2xpZW50KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2NsaWVudC0+b3BlblVSTChyZXF1ZXN0LnVybCgpKTsKKyAgICBv
cGVuVVJMKHJlcXVlc3QudXJsKCkpOwogfQogCiBTdHJpbmcgRnJhbWVHZGs6OnVzZXJBZ2VudCgp
IGNvbnN0CkBAIC0yMzgsNiArMjQwLDcgQEAKIAogdm9pZCBGcmFtZUdkazo6cnVuSmF2YVNjcmlw
dEFsZXJ0KFN0cmluZyBjb25zdCYgbWVzc2FnZSkKIHsKKyAgICBwcmludGYoIkphdmFTY3JpcHRB
bGVydDolc1xuOiIsbWVzc2FnZS5kZXByZWNhdGVkU3RyaW5nKCkuYXNjaWkoKSk7CiB9CiAKIGJv
b2wgRnJhbWVHZGs6OnJ1bkphdmFTY3JpcHRDb25maXJtKFN0cmluZyBjb25zdCYgbWVzc2FnZSkK
QEAgLTI0NywxNjQgKzI1MCwxNTAgQEAKIAogdm9pZCBGcmFtZUdkazo6c2V0VGl0bGUoY29uc3Qg
U3RyaW5nICZ0aXRsZSkKIHsKKyAgICBpZihtX3dpbmRvdy5nZXQoKSkKKyAgICAgICAgbV93aW5k
b3ctPnNldFRpdGxlKHRpdGxlKTsKIH0KIAotdm9pZCBGcmFtZUdkazo6aGFuZGxlR2RrRXZlbnQo
R2RrRXZlbnQqIGV2ZW50KQorCitib29sIEZyYW1lR2RrOjpkb1RleHRGaWVsZENvbW1hbmRGcm9t
RXZlbnQoRWxlbWVudCpub2RlLCBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtldmVudCkK
IHsKLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgR0RLX0VYUE9TRTog
ewotICAgICAgICAgICAgR2RrUmVjdGFuZ2xlIGNsaXA7Ci0gICAgICAgICAgICBnZGtfcmVnaW9u
X2dldF9jbGlwYm94KGV2ZW50LT5leHBvc2UucmVnaW9uLCAmY2xpcCk7Ci0gICAgICAgICAgICBn
ZGtfd2luZG93X2JlZ2luX3BhaW50X3JlZ2lvbiAoZXZlbnQtPmFueS53aW5kb3csIGV2ZW50LT5l
eHBvc2UucmVnaW9uKTsKLSAgICAgICAgICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0
ZSAoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjdHgg
PSBuZXcgR3JhcGhpY3NDb250ZXh0KGNyKTsKLSAgICAgICAgICAgIHBhaW50KGN0eCwgSW50UmVj
dChjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpKTsKLSAgICAgICAgICAg
IGRlbGV0ZSBjdHg7Ci0gICAgICAgICAgICBjYWlyb19kZXN0cm95KGNyKTsKLSAgICAgICAgICAg
IGdka193aW5kb3dfZW5kX3BhaW50IChldmVudC0+YW55LndpbmRvdyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdES19TQ1JPTEw6IHsKLSAgICAgICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudCB3aGVlbEV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIHZpZXco
KS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLSAgICAgICAgICAgIGlmICh3aGVlbEV2
ZW50LmlzQWNjZXB0ZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFJlbmRlck9iamVjdDo6Tm9kZUluZm8gbm9kZUluZm8odHJ1ZSwgdHJ1
ZSk7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KG5vZGVJbmZvLCB3
aGVlbEV2ZW50LnBvcygpKTsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2RlSW5mby5pbm5l
ck5vZGUoKTsKLSAgICAgICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAvL0RlZmF1bHQgdG8gc2Nyb2xsaW5nIHRoZSBwYWdlCi0gICAgICAgICAg
ICAvL25vdCBzdXJlIHdoeSBpdHMgbnVsbAotICAgICAgICAgICAgLy9icm9rZSBhbnl3YXkgd2hl
biBpdHMgbm90IG51bGwKLSAgICAgICAgICAgIGRvU2Nyb2xsKHJlbmRlcmVyKCksIHdoZWVsRXZl
bnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfRFJBR19FTlRFUjoKLSAgICAgICAgY2FzZSBHREtf
RFJBR19MRUFWRToKLSAgICAgICAgY2FzZSBHREtfRFJBR19NT1RJT046Ci0gICAgICAgIGNhc2Ug
R0RLX0RSQUdfU1RBVFVTOgotICAgICAgICBjYXNlIEdES19EUk9QX1NUQVJUOgotICAgICAgICBj
YXNlIEdES19EUk9QX0ZJTklTSEVEOiB7Ci0gICAgICAgICAgICAvL2Jvb2wgdXBkYXRlRHJhZ0Fu
ZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7Ci0gICAgICAgICAg
ICAvL3ZvaWQgY2FuY2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xp
cGJvYXJkKik7Ci0gICAgICAgICAgICAvL2Jvb2wgcGVyZm9ybURyYWdBbmREcm9wKGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgICAgIHZpZXco
KS0+aGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVT
UzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKLSAgICAgICAgICAgIHZpZXcoKS0+
aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKLSAgICAgICAgICAgIHZpZXcoKS0+aGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R0RLX0tFWV9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfS0VZX1JFTEVBU0U6IHsKLSAgICAgICAg
ICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgYm9v
bCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWtldmVudC5pc0tleVVwKCkpIHsK
ICAgICAgICAgICAgICAgICBOb2RlKiBzdGFydCA9IHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c3Rh
cnQoKS5ub2RlKCk7CisKICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgJiYgc3RhcnQtPmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGtldmVudC5XaW5k
b3dzS2V5Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChrZXZlbnQtPldpbmRv
d3NLZXlDb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfQkFDSzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KGRvY3VtZW50KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZL
X0RFTEVURToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpmb3J3
YXJkRGVsZXRlS2V5UHJlc3NlZChkb2N1bWVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBWS19MRUZUOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbkNvbnRyb2xsZXIoKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OkxFRlQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250
cm9sbGVyOjpMRUZULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfUklHSFQ6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxlcigpLT5tb2RpZnkoU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShT
ZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVCwgQ2hhcmFjdGVyR3JhbnVs
YXJpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlv
bkNvbnRyb2xsZXIoKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkJBQ0tXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uQ29udHJvbGxlcigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJv
bGxlcjo6QkFDS1dBUkQsIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19ET1dOOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+bW9kaWZ5KFNl
bGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkZPUldBUkQsIFBh
cmFncmFwaEdyYW51bGFyaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlm
eShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELCBQYXJhZ3JhcGhH
cmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVktfUkVUVVJOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChkb2N1bWVudCgp
LCBrZXZlbnQudGV4dCgpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChkb2N1bWVudCgpLCBrZXZlbnQtPnRleHQoKSwgZmFsc2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+bW9k
aWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CiAKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghaGFuZGxlZCkgewotICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGtldmVudC5XaW5kb3dzS2V5Q29kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIFZLX0xFRlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9TY3JvbGwocmVuZGVyZXIoKSwgdHJ1ZSwgLTEyMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX1JJR0hUOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvU2Nyb2xsKHJlbmRlcmVyKCksIHRydWUsIDEyMCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvU2Nyb2xsKHJl
bmRlcmVyKCksIGZhbHNlLCAtMTIwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfUFJJT1I6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy9yZXR1cm4gU0JfUEFHRVVQOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19ORVhUOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIFNCX1BBR0VET1dOOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBW
S19ET1dOOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvU2Nyb2xsKHJlbmRlcmVyKCks
IGZhbHNlLCAxMjApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBWS19IT01FOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KDAsIDAsIHRydWUsIHRydWUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvU2Nyb2xsKHJlbmRlcmVyKCksIGZhbHNl
LCAxMjApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBWS19FTkQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+bGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQoMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5o
ZWlnaHQoKSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX1NQQUNFOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChrZXZlbnQuc2hpZnRLZXkoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgZmFsc2UsIC0xMjApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9TY3JvbGwocmVuZGVyZXIoKSwgZmFsc2UsIDEyMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KK3ZvaWQgRnJhbWVHZGs6OnByb2Nl
c3NQbGF0Zm9ybUZvY3VzQ2hhbmdlKGJvb2wgZm9jdXNlZCkKK3sKKyNpZiAwCisgICAgaWYoIWRv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2V2ZW50VHlwZSA9IGZvY3VzZWQgPyBF
dmVudE5hbWVzOjpmb2N1c0V2ZW50IDogRXZlbnROYW1lczo6Ymx1ckV2ZW50OworICAgIGludmFs
aWRhdGVTZWxlY3Rpb24oKTsKKyAgICBzZXRJc0FjdGl2ZShmb2N1c2VkKTsKKyAgICBzZXRXaW5k
b3dIYXNGb2N1cyhmb2N1c2VkKTsKKyNlbmRpZgorICAgIGZvY3VzRnJhbWUgPSBmb2N1c2VkID8g
dGhpczowOyAKIH0KIAotdm9pZCBGcmFtZUdkazo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRS
ZWN0ICZyKQordm9pZCBGcmFtZUdkazo6cHJvY2Vzc1BsYXRmb3JtV2hlZWxFdmVudChQbGF0Zm9y
bVdoZWVsRXZlbnQgZXZlbnQpCiB7Ci0gICAgaWYgKCFtX2RyYXdhYmxlIHx8ICFHREtfSVNfV0lO
RE9XKG1fZHJhd2FibGUpKQorICAgIGlmKCFkb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKG1fZHJhd2FibGUpOwotICAgIGdka193
aW5kb3dfbW92ZV9yZXNpemUod2luZG93LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWln
aHQoKSk7CisgICAgbV9ldmVudFR5cGUgPSBFdmVudE5hbWVzOjptb3VzZXdoZWVsRXZlbnQ7CisK
KyAgICB2aWV3KCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOworCiB9CiAKLUludFJlY3QgRnJh
bWVHZGs6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAordm9pZCBGcmFtZUdkazo6cHJvY2Vzc1BsYXRm
b3JtS2V5Ym9hcmRFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQsCisgICAgY29uc3Qg
QXRvbWljU3RyaW5nIGV2ZW50VHlwZSkKIHsKLSAgICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQs
IGRlcHRoOwotICAgIGlmICghbV9kcmF3YWJsZSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
KyAgICBpZighZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmKCFmb2N1c0ZyYW1l
KQorICAgICAgICBmb2N1c0ZyYW1lID0gdGhpczsKIAotICAgIGlmICghR0RLX0lTX1dJTkRPVyht
X2RyYXdhYmxlKSkgewotICAgICAgICBnZGtfZHJhd2FibGVfZ2V0X3NpemUobV9kcmF3YWJsZSwg
JndpZHRoLCAmaGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgd2lkdGgsIGhl
aWdodCk7CisgICAgaWYoIGZvY3VzRnJhbWUgIT0gdGhpcyApIHsKKyAgICAgICAgZm9jdXNGcmFt
ZS0+cHJvY2Vzc1BsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCxldmVudFR5cGUpOworICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgICAKKyAgICBtX2V2ZW50VHlwZSA9IGV2ZW50VHlwZTsKIAot
ICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhtX2RyYXdhYmxlKTsKLSAgICBnZGtf
d2luZG93X2dldF9nZW9tZXRyeSh3aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCAmZGVw
dGgpOwotICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIERvY3Vt
ZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm47CisK
KyAgICBOb2RlKiBub2RlID0gZG9jLT5mb2N1c05vZGUoKTsKKyAgICBpZiAoIW5vZGUpIHsKKyAg
ICAgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIG5vZGUgPSBkb2Mt
PmJvZHkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9kZSA9IGRvYy0+ZG9jdW1lbnRF
bGVtZW50KCk7CisKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghZXZlbnQuaXNLZXlVcCgpKQorICAgICAgICBwcmVwYXJlRm9yVXNlckFj
dGlvbigpOworCisgICAgYm9vbCBub3RoYW5kbGVkID0gRXZlbnRUYXJnZXROb2RlQ2FzdChub2Rl
KS0+ZGlzcGF0Y2hLZXlFdmVudChldmVudCk7CisKKyAgICAvL2hhY2sgdG8gY2F1c2UgYSBrZXkg
cHJlc3Mgc2VlIEZyYW1lTWFjLm1tCisgICAgaWYoIGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjpr
ZXlkb3duRXZlbnQgKSB7CisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCByZXBlYXRFdmVu
dChldmVudCx0cnVlKTsKKyAgICAgICAgYm9vbCBwcmVzc05vdGhhbmRsZWQgPSBFdmVudFRhcmdl
dE5vZGVDYXN0KG5vZGUpLT5kaXNwYXRjaEtleUV2ZW50KHJlcGVhdEV2ZW50KTsKKyAgICAgICAg
aWYobm90aGFuZGxlZCkgCisgICAgICAgICAgICBub3RoYW5kbGVkID0gcHJlc3NOb3RoYW5kbGVk
OworICAgIH0KKyAgICBpZiggbm90aGFuZGxlZCkgeworICAgICAgICB2aWV3KCktPmhhbmRsZUtl
eWJvYXJkRXZlbnQoZXZlbnQpOworICAgIH0gCiB9CiAKK3ZvaWQgRnJhbWVHZGs6OnByb2Nlc3NQ
bGF0Zm9ybU1vdXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50LAorICAgIGNvbnN0IEF0
b21pY1N0cmluZyBldmVudFR5cGUpCit7CisgICAgaWYoIWRvY3VtZW50KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2V2ZW50VHlwZSA9IGV2ZW50VHlwZTsKKworICAgIGlmKCBldmVudFR5cGUg
PT0gRXZlbnROYW1lczo6bW91c2Vtb3ZlRXZlbnQgKQorICAgICAgICB2aWV3KCktPmhhbmRsZU1v
dXNlTW92ZUV2ZW50KGV2ZW50KTsKKyAgICBpZiggZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6Om1v
dXNlZG93bkV2ZW50ICl7CisgICAgICAgIGlmKCBmb2N1c0ZyYW1lICYmIGZvY3VzRnJhbWUgIT0g
dGhpcyApIHsKKyAgICAgICAgICAgIGZvY3VzRnJhbWUtPmludmFsaWRhdGVTZWxlY3Rpb24oKTsK
KyAgICAgICAgICAgIGZvY3VzRnJhbWUtPnNldElzQWN0aXZlKGZhbHNlKTsKKyAgICAgICAgICAg
IGZvY3VzRnJhbWUtPnNldFdpbmRvd0hhc0ZvY3VzKGZhbHNlKTsKKyAgICAgICAgfSAKKyAgICAg
ICAgZm9jdXNGcmFtZSA9IHRoaXM7IAorICAgICAgICBmb2N1c0ZyYW1lLT5pbnZhbGlkYXRlU2Vs
ZWN0aW9uKCk7CisgICAgICAgIGZvY3VzRnJhbWUtPnNldElzQWN0aXZlKHRydWUpOworICAgICAg
ICBmb2N1c0ZyYW1lLT5zZXRXaW5kb3dIYXNGb2N1cyh0cnVlKTsKKyAgICAgICAgdmlldygpLT5o
YW5kbGVNb3VzZVByZXNzRXZlbnQoZXZlbnQpOworICAgIH0KKyAgICBpZiggZXZlbnRUeXBlID09
IEV2ZW50TmFtZXM6Om1vdXNldXBFdmVudCApCisgICAgICAgIHZpZXcoKS0+aGFuZGxlTW91c2VS
ZWxlYXNlRXZlbnQoZXZlbnQpOworfQorCiBib29sIEZyYW1lR2RrOjpwYXNzV2hlZWxFdmVudFRv
Q2hpbGRXaWRnZXQoTm9kZSogbm9kZSkKIHsKKyAgICAvL0ZJWE1FOiBkZXRlcm1pbmUgaWYgYSB3
aGVlbCBlbmFibGVzIHdpZGdldCBpcyBhY3RpdmUKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KTsKQEAgLTQxNiwxMSArNDA1LDE5MiBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZy
YW1lR2RrOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYgbWV2LCBGcmFtZSopCisKKworYm9vbCBGcmFtZUdkazo6cGFzc01vdXNlRG93bkV2
ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgaWYgKG1ldi50YXJnZXROb2RlKCkg
PT0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOworICByZXR1cm4g
ZmFsc2U7CiB9CitGcmFtZUdkayogRnJhbWVHZGs6OmdldFJvb3RGcmFtZSgpCit7CisgICAgRnJh
bWVHZGsqIGN1ciA9IHRoaXM7CisgICAgd2hpbGUoIWN1ci0+aXNUb3BMZXZlbCgpKQorICAgIHsK
KyAgICAgICAgY3VyID0gY3VyLT5wYXJlbnQoKTsKKyAgICB9CisgICAgcmV0dXJuICBjdXI7CiAK
IH0KKworCit2b2lkIEZyYW1lR2RrOjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7
CisgICAgaWYobV93aW5kb3cuZ2V0KCkpIHsKKyAgICAgICAgbV93aW5kb3ctPnNldEN1cnNvcihj
dXJzb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZyYW1lR2RrKiBwID0gcGFyZW50
KCk7CisgICAgaWYocCkKKyAgICAgICAgcC0+c2V0Q3Vyc29yKGN1cnNvcik7Cit9CisKKyNpZiAw
CitJbnRSZWN0ICBGcmFtZUdkazo6ZnJhbWVHZW9tZXRyeSgpIGNvbnN0Cit7CisgICAgaWYobV93
aW5kb3cuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX3dpbmRvdy0+Z2VvbWV0cnkoKTsKKyAgICBy
ZXR1cm4gbV9nZW9tZXRyeTsKKworfQorCit2b2lkIEZyYW1lR2RrOjpzZXRHZW9tZXRyeShjb25z
dCBJbnRSZWN0JiByLCBib29sIGZyb21TeXN0ZW0pCit7CisgICAgaWYoIG1fZ2VvbWV0cnkgPT0g
ciApCisgICAgICAgIHJldHVybjsKKyAgICBtX2dlb21ldHJ5ID0gcjsKKyAgICBpZihmcm9tU3lz
dGVtKSB7CisgICAgICAgIHZpZXcoKS0+bGF5b3V0KGZhbHNlKTsKKyAgICAgICAgdmlldygpLT51
cGRhdGVTY3JvbGxCYXJzKCk7CisgICAgICAgIHNlbmRSZXNpemVFdmVudCgpOworICAgIH0KK30K
Kwordm9pZCAgRnJhbWVHZGs6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKK3sK
KyAgICBzZXRHZW9tZXRyeShyLGZhbHNlKTsKK30KKyNlbmRpZgorCit2b2lkIEZyYW1lR2RrOjpy
ZXBhaW50KGJvb2wgbm93KQoreworCisgICAgSW50UmVjdCByID0gdmlldygpLT5mcmFtZUdlb21l
dHJ5KCk7CisgICAgci5zZXRYKDApOworICAgIHIuc2V0WSgwKTsKKyAgICByZXBhaW50KHIsbm93
KTsKK30KKwordm9pZCBGcmFtZUdkazo6cmVwYWludChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
LCBib29sIG5vdykKK3sKKyAgICBpZiggdXBkYXRlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZihtX3dpbmRvdy5nZXQoKSl7CisgICAgICAgIEludFJlY3QgciA9IHZpZXco
KS0+ZnJhbWVHZW9tZXRyeSgpOworICAgICAgICAvL0ZJWE1FIEhBQ0sgc2luY2Ugd2UgZG9uJ3Qg
Z2V0IGNvcnJlY3QgcmVwYWludHMKKyAgICAgICAgbV93aW5kb3ctPnJlcGFpbnQocixub3cpOwor
ICAgICAgICAvL21fd2luZG93LT5yZXBhaW50KHVwZGF0ZVJlY3Qsbm93KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBGcmFtZUdkayogcGFyZW50ID0gc3RhdGljX2Nhc3Q8RnJhbWVHZGsq
Pih0cmVlKCktPnBhcmVudCgpKTsKKyAgICBpZihwYXJlbnQpIHsKKyAgICAgICAgSW50UmVjdCBk
aXJ0eVJlY3QgPSB1cGRhdGVSZWN0OworICAgICAgICBJbnRSZWN0IHIgPSB2aWV3KCktPmZyYW1l
R2VvbWV0cnkoKTsKKyAgICAgICAgZGlydHlSZWN0Lm1vdmUoci54KCksci55KCkpOworICAgICAg
ICBwYXJlbnQtPnJlcGFpbnQoZGlydHlSZWN0LG5vdyk7CisgICAgfQorfQorCitTdHJpbmcgRnJh
bWVHZGs6Om1pbWVUeXBlRm9yRmlsZU5hbWUoU3RyaW5nIGNvbnN0JiBwYXRoKSBjb25zdAorewor
ICAgICBTdHJpbmcgbnBhdGggPSAgU3RyaW5nKHBhdGgpOworICAgICByZXR1cm4gUmVzb3VyY2VM
b2FkZXJNYW5hZ2VyOjpnZXRNaW1lVHlwZShucGF0aCk7Cit9CisKK3ZvaWQgRnJhbWVHZGs6OnNl
dFBhcmVudChGcmFtZUdkayogcCkKK3sKKyAgICBpZiggIXApCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiggcCA9PSBwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHAtPnRyZWUoKS0+YXBw
ZW5kQ2hpbGQodGhpcyk7CisgICAgdmlldygpLT5zZXRQYXJlbnQocC0+dmlldygpKTsKK30KKwor
RnJhbWVHZGsqIEZyYW1lR2RrOjpwYXJlbnQoKQoreworICAgIHJldHVybiAgc3RhdGljX2Nhc3Q8
RnJhbWVHZGsqPih0cmVlKCktPnBhcmVudCgpKTsKK30KKworI2lmIDAKK0ludFBvaW50IEZyYW1l
R2RrOjpnZXRBYnNvbHV0ZVBvc2l0aW9uKCkKK3sKKyAgICBpZihpc1RvcExldmVsKCkpCisgICAg
ICAgIHJldHVybiBJbnRQb2ludCgpOworCisgICAgRnJhbWVHZGsqIHAgPSBwYXJlbnQoKTsKKyAg
ICBhc3NlcnQocCAhPSAwICk7CisgICAgaWYocCkKKyAgICAgICAgcmV0dXJuIHZpZXcoKS0+ZnJh
bWVHZW9tZXRyeSgpLmxvY2F0aW9uKCk7CisgICAgSW50UG9pbnQgcHQgPSBwLT5nZXRBYnNvbHV0
ZVBvc2l0aW9uKCk7CisgICAgcHQubW92ZShtX2dlb21ldHJ5LngoKSxtX2dlb21ldHJ5LnkoKSk7
CisgICAgcmV0dXJuIHB0OworfQorI2VuZGlmCisKK0dyYXBoaWNzQ29udGV4dENhaXJvKiBGcmFt
ZUdkazo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKK3sKKyAgICBpZihtX3dpbmRvdy5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIG1fd2luZG93LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAg
IEZyYW1lR2RrKiBwYXJlbnQgPSBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KHRyZWUoKS0+cGFyZW50
KCkpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBwYXJlbnQtPmNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpOworICAgIEludFBvaW50IHAgPSB2aWV3KCktPmZyYW1lR2VvbWV0cnkoKS5s
b2NhdGlvbigpOworICAgIGN0eC0+dHJhbnNsYXRlKHAueCgpLHAueSgpKTsKKyAgICByZXR1cm4g
Y3R4OworfQorCitHcmFwaGljc0NvbnRleHRDYWlybyogRnJhbWVHZGs6OmJlZ2luUGFpbnRpbmco
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZihtX3dpbmRvdy5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIG1fd2luZG93LT5iZWdpblBhaW50aW5nKHJlY3QpOworICAgIEludFJlY3QgcmVnaW9u
ID0gcmVjdDsKKyAgICBJbnRSZWN0IHIgPSB2aWV3KCktPmZyYW1lR2VvbWV0cnkoKTsKKyAgICBy
ZWdpb24ubW92ZShyLngoKSxyLnkoKSk7CisgICAgRnJhbWVHZGsqIHBhcmVudCA9IHN0YXRpY19j
YXN0PEZyYW1lR2RrKj4odHJlZSgpLT5wYXJlbnQoKSk7CisgICAgcmV0dXJuIHBhcmVudC0+YmVn
aW5QYWludGluZyhyZWdpb24pOworfQorCit2b2lkIEZyYW1lR2RrOjplbmRQYWludGluZyhHcmFw
aGljc0NvbnRleHRDYWlybyogY3R4KQoreworICAgIGlmKG1fd2luZG93LmdldCgpKSB7CisgICAg
ICAgIG1fd2luZG93LT5lbmRQYWludGluZyhjdHgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgRnJhbWVHZGsqIHBhcmVudCA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4odHJlZSgpLT5w
YXJlbnQoKSk7CisgICAgcGFyZW50LT5lbmRQYWludGluZyhjdHgpOworfQorCit2b2lkIEZyYW1l
R2RrOjphdHRhY2hXaW5kb3coV2luZG93R2RrKiB3aW5kb3cpCit7CisgICAgbV93aW5kb3cgPSB3
aW5kb3c7CisgICAgaWYoIW1fd2luZG93KQorICAgICAgICByZXR1cm47CisgICAgbV93aW5kb3ct
PnNldEZyYW1lKHRoaXMpOworICAgIEludFJlY3QgciA9IHdpbmRvdy0+Z2VvbWV0cnkoKTsKKyAg
ICByLnNldFgoMCk7CisgICAgci5zZXRZKDApOworICAgIHZpZXcoKS0+c2V0RnJhbWVHZW9tZXRy
eShyKTsKK30KKwordm9pZCBGcmFtZUdkazo6ZGV0YWNoV2luZG93KCkKK3sKKyAgICBpZighbV93
aW5kb3cpCisgICAgICAgIHJldHVybjsKKyAgICBtX3dpbmRvdy0+c2V0RnJhbWUoMCk7CisgICAg
bV93aW5kb3cucmVsZWFzZSgpOworICAgIG1fd2luZG93ID0gMDsKK30KKwordm9pZCBGcmFtZUdk
azo6c2V0SW5zdGFsbExvY2F0aW9uKGNvbnN0IGNoYXIgKmxvY2F0aW9uKQoreyAKKyAgICBpbnN0
YWxsUGF0aCA9IHN0cmR1cChsb2NhdGlvbik7Cit9CisKK1N0cmluZyBGcmFtZUdkazo6aW5zdGFs
bExvY2F0aW9uKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKGluc3RhbGxQYXRoKTsgCit9CisKK30K
Ky8vIHZpbTp0cz00OmV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250RGF0YUdkay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCShy
ZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOCwxMyArOCwxMyBAQAogICogYXJl
IG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKQEAgLTQxLDYgKzQxLDggQEAKICNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRv
IHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9f
RklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgVVNFX09MRF9DQUlSTyAxCkBAIC01NywxMCArNTks
MTAgQEAKICAgICBtX3hIZWlnaHQgPSAxMzsKICAgICBtX3NwYWNlV2lkdGggPSAxMDsKICNlbHNl
Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fZm9udC5tX3NjYWxlZEZvbnQs
ICJ4IiwgJnRleHRfZXh0ZW50cyk7Ci0gICAgbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhlaWdo
dDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9mb250Lm1fc2NhbGVkRm9u
dCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBtX3NwYWNlV2lkdGggPSAgc3RhdGljX2Nhc3Q8
aW50Pih0ZXh0X2V4dGVudHMueF9hZHZhbmNlKTsKKyAgICAvL2NhaXJvX3NjYWxlZF9mb250X3Rl
eHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAieCIsICZ0ZXh0X2V4dGVudHMpOworICAg
IC8vbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhlaWdodDsKKyAgICAvL2NhaXJvX3NjYWxlZF9m
b250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAiICIsICZ0ZXh0X2V4dGVudHMp
OworICAgIC8vbV9zcGFjZVdpZHRoID0gIHN0YXRpY19jYXN0PGludD4odGV4dF9leHRlbnRzLnhf
YWR2YW5jZSk7CiAjZW5kaWYKICAgICBhc3NlcnQobV9zcGFjZVdpZHRoICE9IDApOwogICAgIG1f
bGluZUdhcCA9IG1fbGluZVNwYWNpbmcgLSBtX2FzY2VudCAtIG1fZGVzY2VudDsKQEAgLTY4LDcg
KzcwLDggQEAKIAogdm9pZCBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBkZWxl
dGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBpZihtX3NtYWxsQ2Fwc0ZvbnREYXRhKQorICAg
ICAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKIH0KIAogRm9udERhdGEqIEZvbnREYXRh
OjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZpbGVDaG9vc2VyR2RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9GaWxlQ2hvb3Nlckdkay5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9GaWxlQ2hvb3Nlckdkay5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgorCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8g
eyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19G
SUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gRmlsZUNob29zZXI6OmNy
ZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKiB1cGxvYWRD
b250cm9sKQoreworICAgICBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBmaWxlQ2hvb3NlcihuZXcg
RmlsZUNob29zZXIoZG9jdW1lbnQsIHVwbG9hZENvbnRyb2wpKTsKKyAgICAgcmV0dXJuIGZpbGVD
aG9vc2VyOworfQorCitGaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRG9jdW1lbnQqLCBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmlsZUNo
b29zZXI6On5GaWxlQ2hvb3NlcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBGaWxlQ2hvb3Nlcjo6b3BlbkZpbGVDaG9vc2VyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoaW50IHdpZHRoKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQor
Cit2b2lkIEZpbGVDaG9vc2VyOjpkaXNjb25uZWN0VXBsb2FkQ29udHJvbCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KKworLy8g
dmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1l
R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdk
ay5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhl
bWVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNCArMTU0LDEwIEBACiAKIH0KIAordm9p
ZCBSZW5kZXJUaGVtZUdkazo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9
Citib29sIFJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiBmYWxzZTsg
fQordm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Qg
eyB9Cit2b2lkIFJlbmRlclRoZW1lR2RrOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KiBlKSBjb25zdCB7fQorYm9vbCBSZW5kZXJU
aGVtZUdkazo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gZmFsc2U7IH0KKwogfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YUdkay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YUdkay5jcHAJKHJldmlz
aW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YUdkay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiBGb250TWFjLmNwcCwgRm9udFdp
bi5jcHAgYW5kIEZvbnQuY3BwLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0z
NCwxMCArMzQsMTIgQEAKICNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KICNpbmNs
dWRlIDxhc3NlcnQuaD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50Zihz
dGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJ
TkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkK
LSAgICA6IG1fZm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikKKyAgICA6IG1fZm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbiksbV9wYXR0ZXJuKDApCiB7CiAgICAgaW5pdCgpOwog
CkBAIC0xNTAsNyArMTUyLDYgQEAKICAgICBjYWlyb19mb250X2ZhY2VfdCoqIHJlc3VsdCA9IChj
YWlyb19mb250X2ZhY2VfdCoqKW1hbGxvYygoZnMtPm5mb250ICsgMSkgKiBzaXplb2YoY2Fpcm9f
Zm9udF9mYWNlX3QqKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcy0+bmZvbnQ7IGkrKykg
ewogICAgICAgICBGY0NoYXI4KiBmb250ID0gRmNOYW1lVW5wYXJzZShmcy0+Zm9udHNbaV0pOwot
ICAgICAgICBwcmludGYoIiVzXG4iLCBmb250KTsKICAgICAgICAgcmVzdWx0W2ldID0gY2Fpcm9f
ZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmcy0+Zm9udHNbaV0pOwogICAgIH0KICAg
ICByZXN1bHRbZnMtPm5mb250XSA9IE5VTEw7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9G
b250R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNw
cAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIsNDIgKzIyLDUzIEBACiAgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250Lmgi
CiAKICNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKIAor
I2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5J
TVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5D
VElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgRm9udDo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udERh
dGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0CiB7Ci0gICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CisgICAgY2Fpcm9fdCogY3IgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjb250ZXh0ID0gc3RhdGljX2Nh
c3Q8R3JhcGhpY3NDb250ZXh0Q2Fpcm8qPihncmFwaGljc0NvbnRleHQpOwogCiAgICAgLy8gU2V0
IHRoZSB0ZXh0IGNvbG9yIHRvIHVzZSBmb3IgZHJhd2luZy4KKyAgICBkb3VibGUgeCx5OwogICAg
IGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwogICAgIENvbG9yIHBlbkNvbG9yID0gZ3Jh
cGhpY3NDb250ZXh0LT5wZW4oKS5jb2xvcigpOwogICAgIHBlbkNvbG9yLmdldFJHQkEocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCBy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAKLSAgICAvLyBTZWxlY3QgdGhlIHNjYWxlZCBmb250
LgotICAgIGZvbnQtPnNldEZvbnQoY29udGV4dCk7CisgICAgY2Fpcm9fc2F2ZShjcik7CiAKLSAg
ICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMgPSAoR2x5cGhCdWZmZXJHbHlwaCopIGdseXBoQnVm
ZmVyLmdseXBocyhmcm9tKTsKKyAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7CisgICAgY2Fpcm9f
Z2V0X21hdHJpeChjciwmbWF0cml4KTsKKyAgICBmb250LT5zZXRGb250KGNyKTsKKyAgICBjYWly
b19zZXRfbWF0cml4KGNyLCZtYXRyaXgpOworICAgIGNhaXJvX25ld19wYXRoKGNyKTsKKyAgICBj
YWlyb19tb3ZlX3RvKGNyLHBvaW50LngoKSxwb2ludC55KCkpOworICAgIGNhaXJvX2dldF9jdXJy
ZW50X3BvaW50KGNyLCZ4LCZ5KTsKKyAgICBmbG9hdCBvZmZzZXQgPSB4OwogCi0gICAgZmxvYXQg
b2Zmc2V0ID0gcG9pbnQueCgpOwogCisgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29u
c3RfY2FzdDxHbHlwaEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKKwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewogICAgICAgICBn
bHlwaHNbaV0ueCA9IG9mZnNldDsKLSAgICAgICAgZ2x5cGhzW2ldLnkgPSBwb2ludC55KCk7Cisg
ICAgICAgIGdseXBoc1tpXS55ID0geTsKICAgICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFk
dmFuY2VBdChmcm9tICsgaSk7CiAgICAgfQotICAgIGNhaXJvX3Nob3dfZ2x5cGhzKGNvbnRleHQs
IGdseXBocywgbnVtR2x5cGhzKTsKKyAgICBjYWlyb19zaG93X2dseXBocyhjciwgZ2x5cGhzLCBu
dW1HbHlwaHMpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCiB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmgJKHJldmlzaW9uIDE3MDgyKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTAgKzQzLDExIEBACiAgICAgdmlydHVhbCB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBw
YWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2
aXJ0dWFsIEludFJlY3QgZnJhbWVHZW9tZXRyeSgpOwogCiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dC4KLSAgICBzdGF0aWMgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSB7IHJldHVybiAx
NTsgfQotICAgIHN0YXRpYyBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIHsgcmV0dXJuIDE1
OyB9CisgICAgc3RhdGljIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgeyByZXR1cm4g
MTc7IH0KKyAgICBzdGF0aWMgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSB7IHJldHVybiAx
NzsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24o
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpbmRvd0dkay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1dpbmRvd0dkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpbmRvd0dkay5oIgorI2luY2x1ZGUgIkZyYW1l
R2RrLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJS
ZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1
ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiQnJvd3NlckV4dGVuc2lvbkdkay5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJQbHVnaW4uaCIKKyNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhU
TUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1l
RWxlbWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyTWFuYWdlci5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIk1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCisjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgorI2luY2x1ZGUgIlNTTEtleUdlbmVy
YXRvci5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisj
aW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIgCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
Z2RrL2dkay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CisKK3N0YXRpYyBIYXNoTWFwPEdka0RyYXdhYmxlKixXaW5kb3dHZGsqPiB3aW5kb3dz
Oworc3RhdGljIFdpbmRvd0dkayogY3VycmVudEFjdGl2ZUZyYW1lOworCisjaWYgMAorZ19pZGxl
X2FkZChHU291cmNlRnVuYyBmdW5jdGlvbixncG9pbnRlciBkYXRhKTsKK2dib29sZWFuICAgICgq
R1NvdXJjZUZ1bmMpKGdwb2ludGVyIGRhdGEpOworCitzdGF0aWMgZ2Jvb2xlYW4gcGFpbnRfY2Fs
bGJhY2soZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnZGtfdGhyZWFkc19lbnRlcigpOworICAgIGdk
a190aHJlYWRzX2xlYXZlKCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZG9TY3JvbGwoY29u
c3QgUmVuZGVyT2JqZWN0KiByLCBib29sIGlzSG9yaXpvbnRhbCwgaW50IG11bHRpcGxpZXIpCit7
CisgICAgLy8gRklYTUU6IFRoZSBzY3JvbGxpbmcgZG9uZSBoZXJlIHNob3VsZCBiZSBkb25lIGlu
IHRoZSBkZWZhdWx0IGhhbmRsZXJzCisgICAgLy8gb2YgdGhlIGVsZW1lbnRzIHJhdGhlciB0aGFu
IGhlcmUgaW4gdGhlIHBhcnQuCisgICAgaWYgKCFyKQorICAgICAgICByZXR1cm47CisKKyAgICAv
L2Jyb2tlbiBzaW5jZSBpdCBjYWxscyBzY3JvbGwgb24gc2Nyb2xsYmFycworICAgIC8vYW5kIHdl
IGhhdmUgbm9uZSBub3cKKyAgICAvL3ItPnNjcm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5V2hlZWws
IG11bHRpcGxpZXIpOworICAgIGlmICghci0+bGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGludCB4ID0gci0+bGF5ZXIoKS0+c2Nyb2xsWE9mZnNldCgpOworICAgIGludCB5ID0gci0+bGF5
ZXIoKS0+c2Nyb2xsWU9mZnNldCgpOworICAgIGlmIChpc0hvcml6b250YWwpCisgICAgICAgIHgg
Kz0gbXVsdGlwbGllcjsKKyAgICBlbHNlCisgICAgICAgIHkgKz0gbXVsdGlwbGllcjsKKyAgICBy
LT5sYXllcigpLT5zY3JvbGxUb09mZnNldCh4LCB5LCB0cnVlLCB0cnVlKTsKK30KKworV2luZG93
R2RrOjpXaW5kb3dHZGsoR2RrV2luZG93KiB3aW5kb3cpCisgICAgOiBtX3dpbmRvdyh3aW5kb3cp
LG1fd2luZG93QXJncygpCit7CisgICAgSW50UmVjdCByID0gZ2VvbWV0cnkoKTsKKyAgICB3aW5k
b3dzLmFkZChtX3dpbmRvdyx0aGlzKTsKKyAgICBzZXRHZW9tZXRyeShyKTsKK30KKworV2luZG93
R2RrOjpXaW5kb3dHZGsoY29uc3QgV2luZG93QXJncyYgYXJncykKKyAgOiBtX3dpbmRvd0FyZ3Mo
YXJncykKK3sKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHI7CisgICAgaW50IGV4dHJhQXR0cnM7CisK
KyAgICBpZiggYXJncy54U2V0ICkgeworICAgICAgICBhdHRyLnggPSAoaW50KWFyZ3MueDsKKyAg
ICAgICAgZXh0cmFBdHRycyB8PUdES19XQV9YOworICAgIH0KKyAgICBpZiggYXJncy55U2V0ICkg
eworICAgICAgICBhdHRyLnkgPSAoaW50KWFyZ3MueDsKKyAgICAgICAgZXh0cmFBdHRycyB8PUdE
S19XQV9ZOworICAgIH0KKyAgICBpZihhcmdzLmhpZGVGcmFtZURlY29yYXRpb25zKSB7CisgICAg
ICAgIGF0dHIub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOworICAgICAgICBleHRyYUF0dHJzIHw9
R0RLX1dBX05PUkVESVI7CisgICAgfQorICAgIGF0dHIud2lkdGggPSBhcmdzLndpZHRoU2V0ID8g
c3RhdGljX2Nhc3Q8Z2ludD4oYXJncy53aWR0aCk6MzAwOworICAgIGF0dHIuaGVpZ2h0ID0gYXJn
cy5oZWlnaHRTZXQgPyBzdGF0aWNfY2FzdDxnaW50PihhcmdzLmhlaWdodCk6MTUwOworICAgIGF0
dHIud2luZG93X3R5cGUgPSBHREtfV0lORE9XX1RPUExFVkVMOworICAgIGF0dHIud2NsYXNzID0g
R0RLX0lOUFVUX09VVFBVVDsKKyAgICBhdHRyLmV2ZW50X21hc2sgPSAoKEdES19BTExfRVZFTlRT
X01BU0teR0RLX1BPSU5URVJfTU9USU9OX0hJTlRfTUFTSykpOworCisgICAgbV93aW5kb3cgPSBn
ZGtfd2luZG93X25ldyhtX3dpbmRvdywmYXR0cixleHRyYUF0dHJzKTsKKyAgICBnZGtfd2luZG93
X3NldF9hY2NlcHRfZm9jdXMobV93aW5kb3csVFJVRSk7CisgICAgaWYoIGFyZ3MuZnVsbHNjcmVl
bikgeworICAgICAgICBzZXRGdWxsU2NyZWVuKHRydWUpOworICAgIH0KK30KKworV2luZG93R2Rr
KiBXaW5kb3dHZGs6OmZpbmRXaW5kb3coR2RrV2luZG93KiB3aW5kb3cpCit7CisgICAgcmV0dXJu
IHdpbmRvd3MuZ2V0KHdpbmRvdyk7Cit9CisKK1dpbmRvd0dkazo6fldpbmRvd0dkaygpCit7Cisg
ICAgd2luZG93cy5yZW1vdmUobV93aW5kb3cpOworICAgIGdka193aW5kb3dfZGVzdHJveShtX3dp
bmRvdyk7CisgICAgbV93aW5kb3cgPSAwOworfQorCit2b2lkIFdpbmRvd0dkazo6c2V0RnVsbFNj
cmVlbihib29sIGZ1bGwpCit7CisgICAgaWYoZnVsbCkKKyAgICAgICAgZ2RrX3dpbmRvd19mdWxs
c2NyZWVuKG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAgIGdka193aW5kb3dfdW5mdWxsc2Ny
ZWVuKG1fd2luZG93KTsKK30KKwordm9pZCBXaW5kb3dHZGs6OnNldE1heGltaXplZChib29sIG1h
eGltaXplZCkKK3sKKyAgICBpZihtYXhpbWl6ZWQpCisgICAgICAgIGdka193aW5kb3dfbWF4aW1p
emUobV93aW5kb3cpOworICAgIGVsc2UKKyAgICAgICAgZ2RrX3dpbmRvd191bm1heGltaXplKG1f
d2luZG93KTsKK30KKworV2luZG93R2RrKiBXaW5kb3dHZGs6OmdldFBvaW50ZXJJbmZvKCBJbnRQ
b2ludCYgcG9zaXRpb24sIC8qcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhpcyB3aW5kb3cqLworICAg
ICAgICBib29sJiBzaGlmdEtleSxib29sJiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJvb2wmIG1l
dGFLZXkpCit7CisgICAgR2RrTW9kaWZpZXJUeXBlIG1hc2s7CisgICAgaW50IHgseTsKKyAgICBH
ZGtXaW5kb3cqIHdpbiA9IGdka193aW5kb3dfZ2V0X3BvaW50ZXIobV93aW5kb3csJngsJnksJm1h
c2spOworICAgIHBvc2l0aW9uLnNldFgoeCk7CisgICAgcG9zaXRpb24uc2V0WSh5KTsKKyAgICBp
ZiggbWFzayAmIEdES19TSElGVF9NQVNLICkKKyAgICAgICAgc2hpZnRLZXk9dHJ1ZTsKKyAgICBp
ZiggbWFzayAmIEdES19DT05UUk9MX01BU0sgKQorICAgICAgICBjdHJsS2V5PXRydWU7CisgICAg
aWYoIG1hc2sgJiBHREtfTU9EMV9NQVNLICkKKyAgICAgICAgYWx0S2V5ID0gdHJ1ZTsKKyAgICBp
ZiggbWFzayAmIEdES19NT0QyX01BU0sgKQorICAgICAgICBtZXRhS2V5ID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gZmluZFdpbmRvdyh3aW4pOworfQorCit2b2lkIFdpbmRvd0dkazo6c2V0VGl0bGUoY29u
c3QgU3RyaW5nICZ0aXRsZSkKK3sKKyAgICBnZGtfd2luZG93X3NldF90aXRsZShtX3dpbmRvdyx0
aXRsZS5kZXByZWNhdGVkU3RyaW5nKCkuYXNjaWkoKSk7Cit9CisKK3ZvaWQgV2luZG93R2RrOjpz
ZXRJc0FjdGl2ZShib29sIGZsYWcpCit7CisgICAgaWYoZmxhZykgeworICAgICAgICBnZGtfd2lu
ZG93X3Nob3cobV93aW5kb3cpOworICAgICAgICBnZGtfd2luZG93X2ZvY3VzKG1fd2luZG93LEdE
S19DVVJSRU5UX1RJTUUpOworICAgICB9Cit9CisKKy8qCisgKiBQb3NpdGlvbiBpbiB0aGUgdG9w
IGxldmVsIG9yIHBhaW50aW5nIFBhcmVudAorICogemVybyBmb3IgdG9wIGxldmVsIGZyYW1lcwor
ICovCitJbnRQb2ludCBXaW5kb3dHZGs6OmdldEFic29sdXRlUG9zaXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBJbnRQb2ludCgpOworfQorCitHcmFwaGljc0NvbnRleHRDYWlybyogV2luZG93
R2RrOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQoreworICAgIGNhaXJvX3QqIGNyID0gZ2RrX2Nh
aXJvX2NyZWF0ZSAobV93aW5kb3cpOworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0Q2Fp
cm8oY3IpOworfQorCitHcmFwaGljc0NvbnRleHRDYWlybyogV2luZG93R2RrOjpiZWdpblBhaW50
aW5nKGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCApCit7CisgICAgR2RrUmVjdGFuZ2xlIHJlY3Qg
PSB7IHBhaW50UmVjdC54KCksIHBhaW50UmVjdC55KCksIHBhaW50UmVjdC53aWR0aCgpLCBwYWlu
dFJlY3QuaGVpZ2h0KCkgfTsKKyAgICBnZGtfd2luZG93X2JlZ2luX3BhaW50X3JlY3QgKG1fd2lu
ZG93LCAmcmVjdCk7CisgICAgcmV0dXJuIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2
b2lkIFdpbmRvd0dkazo6ZW5kUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIGN0eCkKK3sK
KyAgICBpZihjdHgpCisgICAgICAgIGRlbGV0ZSBjdHg7CisgICAgZ2RrX3dpbmRvd19lbmRfcGFp
bnQgKG1fd2luZG93KTsKKyAgICBnZGtfZmx1c2goKTsKK30KKworCit2b2lkIFdpbmRvd0dkazo6
aGFuZGxlR2RrRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQtPnR5
cGUpIHsKKyAgICAgICAgY2FzZSBHREtfREVMRVRFOgorICAgICAgICAgICAgLy9GSVhNRTogc2F2
ZSBjYWxsYmFjayBoZXJlCisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdES19FWFBPU0U6
CisgICAgICAgIHsKKyAgICAgICAgICAgIEdka1JlY3RhbmdsZSBjbGlwOworICAgICAgICAgICAg
Z2RrX3JlZ2lvbl9nZXRfY2xpcGJveChldmVudC0+ZXhwb3NlLnJlZ2lvbiwgJmNsaXApOworICAg
ICAgICAgICAgSW50UmVjdCBkaXJ0eSA9IEludFJlY3QoY2xpcC54LCBjbGlwLnksIGNsaXAud2lk
dGgsIGNsaXAuaGVpZ2h0KTsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHgg
PSBiZWdpblBhaW50aW5nKGRpcnR5KTsKKyAgICAgICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+cGFp
bnQoY3R4LGRpcnR5KTsKKyAgICAgICAgICAgIGVuZFBhaW50aW5nKGN0eCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0RLX0RSQUdfRU5URVI6CisgICAgICAgIGNh
c2UgR0RLX0RSQUdfTEVBVkU6CisgICAgICAgIGNhc2UgR0RLX0RSQUdfTU9USU9OOgorICAgICAg
ICBjYXNlIEdES19EUkFHX1NUQVRVUzoKKyAgICAgICAgY2FzZSBHREtfRFJPUF9TVEFSVDoKKyAg
ICAgICAgY2FzZSBHREtfRFJPUF9GSU5JU0hFRDogeworICAgICAgICAgICAgLy9ib29sIHVwZGF0
ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOworICAg
ICAgICAgICAgLy92b2lkIGNhbmNlbERyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYsIENsaXBib2FyZCopOworICAgICAgICAgICAgLy9ib29sIHBlcmZvcm1EcmFnQW5kRHJvcChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKKyAgICAgICAgICAgIC8vdmll
dygpLT5pbnZhbGlkYXRlQ2xpY2soKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgR0RLX0ZPQ1VTX0NIQU5HRToKKyAgICAgICAgeworICAgICAgICAgICAgbV9m
cmFtZS0+cHJvY2Vzc1BsYXRmb3JtRm9jdXNDaGFuZ2UoZXZlbnQtPmZvY3VzX2NoYW5nZS5pbik7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0RLX1NDUk9MTDoKKyAg
ICAgICAgeworICAgICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQp
OworICAgICAgICAgICAgbV9mcmFtZS0+cHJvY2Vzc1BsYXRmb3JtV2hlZWxFdmVudCh3aGVlbEV2
ZW50KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHREtfTU9USU9O
X05PVElGWToKKyAgICAgICAgeworICAgICAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNl
RXZlbnQoZXZlbnQpOworICAgICAgICAgICAgbV9mcmFtZS0+cHJvY2Vzc1BsYXRmb3JtTW91c2VF
dmVudChtb3VzZUV2ZW50LEV2ZW50TmFtZXM6Om1vdXNlbW92ZUV2ZW50KTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgICAgICBj
YXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgICAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgor
ICAgICAgICB7CisgICAgICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudChldmVu
dCk7CisgICAgICAgICAgICBtX2ZyYW1lLT5wcm9jZXNzUGxhdGZvcm1Nb3VzZUV2ZW50KG1vdXNl
RXZlbnQsRXZlbnROYW1lczo6bW91c2Vkb3duRXZlbnQpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKKyAgICAgICAgeworICAgICAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNlRXZlbnQoZXZlbnQpOworICAgICAgICAgICAg
bV9mcmFtZS0+cHJvY2Vzc1BsYXRmb3JtTW91c2VFdmVudChtb3VzZUV2ZW50LEV2ZW50TmFtZXM6
Om1vdXNldXBFdmVudCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
R0RLX0tFWV9QUkVTUzoKKyAgICAgICAgeworICAgICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQga2V5RXZlbnQoZXZlbnQpOworICAgICAgICAgICBtX2ZyYW1lLT5wcm9jZXNzUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KGtleUV2ZW50LEV2ZW50TmFtZXM6OmtleWRvd25FdmVudCk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0RLX0tFWV9SRUxFQVNFOgorICAgICAg
ICB7CisgICAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlFdmVudChldmVudCk7Cisg
ICAgICAgICAgIG1fZnJhbWUtPnByb2Nlc3NQbGF0Zm9ybUtleWJvYXJkRXZlbnQoa2V5RXZlbnQs
RXZlbnROYW1lczo6a2V5dXBFdmVudCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR0RLX0NPTkZJR1VSRToKKyAgICAgICAgeworICAgICAgICAgICAgSW50UmVjdCBu
ZXdHZW9tKDAsMCxldmVudC0+Y29uZmlndXJlLndpZHRoLGV2ZW50LT5jb25maWd1cmUuaGVpZ2h0
KTsKKyAgICAgICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+c2V0RnJhbWVHZW9tZXRyeShuZXdHZW9t
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworCit2b2lkIFdpbmRvd0dkazo6c2hvdygpCit7CisgICAg
Z2RrX3dpbmRvd19zaG93KG1fd2luZG93KTsKK30KKwordm9pZCBXaW5kb3dHZGs6OmhpZGUoKQor
eworICAgIGdka193aW5kb3dfaGlkZShtX3dpbmRvdyk7Cit9CisKK3ZvaWQgV2luZG93R2RrOjpz
ZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0ICZyKQoreworICAgIGdka193aW5kb3dfbW92ZV9yZXNp
emUobV93aW5kb3csIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKK30KKwor
SW50UmVjdCBXaW5kb3dHZGs6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICBnaW50IHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoOworICAgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5KG1fd2luZG93
LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgJmRlcHRoKTsKKyAgICByZXR1cm4gSW50UmVjdCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworCit2b2lkIFdpbmRvd0dkazo6c2V0Q3Vyc29yKGNv
bnN0IEN1cnNvciYgY3Vyc29yKQoreworICAgIEdka0N1cnNvciogcGN1ciA9IGN1cnNvci5pbXBs
KCk7CisgICAgaWYgKCFwY3VyKQorICAgICAgICByZXR1cm47CisgICAgZ2RrX3dpbmRvd19zZXRf
Y3Vyc29yKG1fd2luZG93LCBwY3VyKTsKK30KKworCitJbnRQb2ludCBXaW5kb3dHZGs6OnBvc2l0
aW9uKCkgY29uc3QKK3sKKyAgICBnaW50IHgsIHk7CisgICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2lu
KG1fd2luZG93LCAmeCwgJnkpOworICAgIHJldHVybiBJbnRQb2ludCh4LHkpOworfQorCitJbnRT
aXplIFdpbmRvd0dkazo6c2l6ZSgpIGNvbnN0Cit7CisgICAgZ2ludCB3LGg7CisgICAgZ2RrX3dp
bmRvd19nZXRfc2l6ZShtX3dpbmRvdywgJncsICZoKTsKKyAgICByZXR1cm4gSW50U2l6ZSh3LGgp
OworfQorCit2b2lkIFdpbmRvd0dkazo6cmVwYWludChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
LCBib29sIG5vdykKK3sKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHt1cGRhdGVSZWN0LngoKSwg
dXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSB9
OworICAgIGdka193aW5kb3dfaW52YWxpZGF0ZV9yZWN0KG1fd2luZG93LCAmcmVjdCwgdHJ1ZSk7
CisKKyAgICBpZiAobm93KXsKKyAgICAgICAgZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMobV93
aW5kb3csIHRydWUpOworICAgIH0KKyAgICBnZGtfZmx1c2goKTsKK30KKworCit9CisvLyB2aW06
IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCw2IEBACiB0
eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdESykK
LXR5cGVkZWYgc3RydWN0IF9HZGtEcmF3YWJsZSBHZGtEcmF3YWJsZTsKLSNlbmRpZgotCiAjaWYg
UExBVEZPUk0oUVQpCiBjbGFzcyBRV2lkZ2V0OwogI2VuZGlmCkBAIC02MCw4ICs1NiwyMCBAQAog
ICAgIGNsYXNzIFNjcm9sbFZpZXc7CiAgICAgY2xhc3MgV2lkZ2V0Q2xpZW50OwogICAgIGNsYXNz
IFdpZGdldFByaXZhdGU7CisjaWYgUExBVEZPUk0oR0RLKQorICAgIGNsYXNzIEludGVybmFsRnJh
bWVHZGs7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBO
b2RlOworICAgIGNsYXNzIFN0cmluZzsKKyAgICBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7
CisgICAgY2xhc3MgRnJhbWVWaWV3OworI2VuZGlmCiAKICAgICBjbGFzcyBXaWRnZXQgeworI2lm
IFBMQVRGT1JNKEdESykKKyAgICAgICAgZnJpZW5kIGNsYXNzIEludGVybmFsRnJhbWVHZGs7Cisj
ZW5kaWYKICAgICBwdWJsaWM6CiAKICAgICAgICAgZW51bSBGb2N1c1BvbGljeSB7CkBAIC0xNzQs
MTUgKzE4MiwyMyBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShHREspCi0gICAgICAgIFdpZGdl
dChHZGtEcmF3YWJsZSogZHJhd2FibGUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd2Fi
bGUoR2RrRHJhd2FibGUqIGRyYXdhYmxlKTsKLSAgICAgICAgR2RrRHJhd2FibGUqIGRyYXdhYmxl
KCkgY29uc3Q7CisgICAgICBXaWRnZXRQcml2YXRlKiBwcml2YXRlRGF0YSgpIGNvbnN0e3JldHVy
biBkYXRhO30KKyAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3KCkgY29uc3Q7CisgICAgICB2b2lk
IHNldEZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKyAgICAgIHZvaWQgc2V0UGFyZW50KFdpZGdldCop
OworICAgICAgV2lkZ2V0KiBwYXJlbnQoKSBjb25zdDsKKyAgICAgIHZvaWQgc2V0T3duZXIoV2lk
Z2V0Kik7CisgICAgICBXaWRnZXQqIG93bmVyKCkgY29uc3Q7CisgICAgICBJbnRQb2ludCBsb2Nh
dGlvbkluV2luZG93KCkgY29uc3Q7CisgICAgICBJbnRQb2ludCBtYXBUb1BhcmVudChjb25zdCBJ
bnRQb2ludCYsIGNvbnN0IFdpZGdldCogcGFyZW50KSBjb25zdDsKKyAgICAgIHZvaWQgcmVwYWlu
dChib29sIG5vdyk7CisgICAgICB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVj
dCwgYm9vbCBub3cpOworICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoY29u
c3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBldnQpe307CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KFFUKQogICAgICAgICBRV2lkZ2V0KiBwYXJlbnRXaWRnZXQoKSBjb25zdDsKICAgICAgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudFdpZGdldChRV2lkZ2V0Kik7Ci0KICAgICAgICAgUVdpZGdldCog
cXdpZGdldCgpOwogICAgICAgICB2b2lkIHNldFFXaWRnZXQoUVdpZGdldCopOwogI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsMTYgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogRm9udERhdGE6OkZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGYpCi0gICAgOiBtX2ZvbnQoZikKKyAgICA6IG1fYXNjZW50KDApCisgICAgLCBtX2Rlc2Nl
bnQoMCkKKyAgICAsIG1fbGluZVNwYWNpbmcoMCkKKyAgICAsIG1fbGluZUdhcCgwKQorICAgICwg
bV94SGVpZ2h0KDApCisgICAgLCBtX2ZvbnQoZikKICAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2go
ZmFsc2UpCisgICAgLCBtX3NwYWNlR2x5cGgoMCkKKyAgICAsIG1fc3BhY2VXaWR0aCgwKQorICAg
ICwgbV9hZGp1c3RlZFNwYWNlV2lkdGgoMCkKICAgICAsIG1fc21hbGxDYXBzRm9udERhdGEoMCkK
IHsgICAgCiAgICAgcGxhdGZvcm1Jbml0KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Jlc291
cmNlTG9hZGVySW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Jlc291
cmNlTG9hZGVySW50ZXJuYWwuaAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1Jlc291cmNlTG9hZGVySW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsOSBA
QAogI2VuZGlmCiAKICNpZiBVU0UoQ1VSTCkKLXR5cGVkZWYgdm9pZCBDVVJMOworI2luY2x1ZGUg
PGN1cmwvY3VybC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDxDU3RyaW5n
Lmg+CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpAQCAtODksNiArOTEsMTEgQEAKICNlbmRp
ZgogI2lmIFVTRShDVVJMKQogICAgICAgICAgICAgLCBtX2hhbmRsZSgwKQorICAgICAgICAgICAg
LCBtX3VybCgwKQorICAgICAgICAgICAgLCBtX3VzZVNpbXBsZShmYWxzZSkKKyAgICAgICAgICAg
ICwgbV9jdXN0b21IZWFkZXIoMCkKKyAgICAgICAgICAgICwgbV9jdXN0b21Qb3N0SGVhZGVyKDAp
CisgICAgICAgICAgICAsIG1fZmlsZVBvc3QoMCkKICNlbmRpZgogICAgICAgICB7CiAgICAgICAg
IH0KQEAgLTEyNSw2ICsxMzIsMTEgQEAKICNlbmRpZgogI2lmIFVTRShDVVJMKQogICAgICAgICAg
ICAgLCBtX2hhbmRsZSgwKQorICAgICAgICAgICAgLCBtX3VybCgwKQorICAgICAgICAgICAgLCBt
X3VzZVNpbXBsZShmYWxzZSkKKyAgICAgICAgICAgICwgbV9jdXN0b21IZWFkZXIoMCkKKyAgICAg
ICAgICAgICwgbV9jdXN0b21Qb3N0SGVhZGVyKDApCisgICAgICAgICAgICAsIG1fZmlsZVBvc3Qo
MCkKICNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTE2OSw2ICsxODEsMjIgQEAKICNl
bmRpZgogI2lmIFVTRShDVVJMKQogICAgICAgICBDVVJMICptX2hhbmRsZTsKKyAgICAgICAgY2hh
ciAqbV91cmw7CisgICAgICAgIC8qCisgICAgICAgICAqIGV4ZWN1dGUgdGhlIGZ1bGwgcmVxdWVz
dCBvbiBjYWxsYmFjaworICAgICAgICAgKiBkb24ndCBtdWx0aXBsZXgKKyAgICAgICAgICovCisg
ICAgICAgIGJvb2wgbV91c2VTaW1wbGU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTdG9yZXMg
ZW50aXJlIHJlc3BvbnNlIGlmIGpvYiBpcyBtX3VzZVNpbXBsZQorICAgICAgICAgKi8KKyAgICAg
ICAgVmVjdG9yPGNoYXI+IHJlc3VsdERhdGE7CisgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBt
X2N1c3RvbUhlYWRlcjsKKyAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QqIG1fY3VzdG9tUG9zdEhl
YWRlcjsKKyAgICAgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKm1fZmlsZVBvc3Q7CisgICAgICAg
IFZlY3RvcjxjaGFyPiBtX3Bvc3RCeXRlczsKKyAgICAgICAgVmVjdG9yPENTdHJpbmc+IG1fY3N0
cmluZ3M7CisgICAgICAgIFBsYXRmb3JtUmVzcG9uc2UgIG1fcmVzcG9uc2U7CiAjZW5kaWYKICNp
ZiBQTEFURk9STShRVCkKICAgICAgICAgUVN0cmluZyBtX2NoYXJzZXQ7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL0FmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vQWZmaW5lVHJhbnNmb3JtLmgJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9BZmZpbmVUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2lu
Y2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2VsaWYg
UExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UU1hdHJpeD4KKyNlbGlmIFBMQVRGT1JNKEdESykKKyNp
bmNsdWRlIDxjYWlyby5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3LDYg
KzQ5LDggQEAKICAgICBBZmZpbmVUcmFuc2Zvcm0oQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
KTsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIEFmZmluZVRyYW5zZm9ybShjb25zdCBRTWF0cml4
ICZtYXRyaXgpOworI2VsaWYgUExBVEZPUk0oR0RLKQorICAgIEFmZmluZVRyYW5zZm9ybShjb25z
dCBjYWlyb19tYXRyaXhfdCAmbWF0cml4KTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRNYXRyaXgo
ZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSB0eCwgZG91Ymxl
IHR5KTsKQEAgLTc4LDE3ICs4MiwyNCBAQAogICAgIG9wZXJhdG9yIENHQWZmaW5lVHJhbnNmb3Jt
KCkgY29uc3Q7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBvcGVyYXRvciBRTWF0cml4KCkgY29u
c3Q7CisjZWxpZiBQTEFURk9STShHREspCisgICAgb3BlcmF0b3IgY2Fpcm9fbWF0cml4X3QoKSBj
b25zdDsKICNlbmRpZgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIGNvbnN0OwogICAgIEFmZmluZVRyYW5zZm9ybSYgb3BlcmF0b3IqPShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gb3BlcmF0b3IqKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgIHZvaWQgcHJpbnQoKTsKKyNlbmRp
ZgogICAgIAogcHJpdmF0ZToKICNpZiBQTEFURk9STShDRykKICAgICBDR0FmZmluZVRyYW5zZm9y
bSBtX3RyYW5zZm9ybTsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIFFNYXRyaXggbV90cmFuc2Zv
cm07CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICBjYWlyb19tYXRyaXhfdCBtX3RyYW5zZm9y
bTsKICNlbmRpZgogfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDE3MDgy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDE1IEBACiB0eXBlZGVmIHN0cnVjdCBIUkdOX18qIEhSR047CiAjZW5kaWYKIAorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgICAgIAorI2lmIFBMQVRGT1JNKEdESykKKyAgICBjbGFz
cyBTY3JvbGxCYXI7CisgICAgY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OworICAgIGNsYXNz
IERvY3VtZW50OworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKKyNlbmRpZgogICAgIGNsYXNz
IEZsb2F0UmVjdDsKICAgICBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiAgICAgY2xhc3MgUGxh
dGZvcm1TY3JvbGxiYXI7CkBAIC0xMzAsMTUgKzEzOCwxMyBAQAogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShHREspCi0gICAgICAgIHZvaWQgdXBkYXRlVmlldyhjb25zdCBJbnRSZWN0JiwgYm9vbCBu
b3cgPSBmYWxzZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3YWJsZShHZGtEcmF3YWJs
ZSogZHJhd2FibGUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25z
dCBJbnRSZWN0Jik7CiAgICAgICAgIFNjcm9sbFZpZXcoKTsKICAgICAgICAgflNjcm9sbFZpZXco
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZv
cm1LZXlib2FyZEV2ZW50JiBldnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9t
ZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCB1
cGRhdGVTY3JvbGxiYXJzKCk7Ci0gICAgICAgIEludFNpemUgbWF4aW11bVNjcm9sbCgpIGNvbnN0
OwotICAgICAgICBpbnQgdXBkYXRlU2Nyb2xsSW5mbyhzaG9ydCB0eXBlLCBpbnQgY3VycmVudCwg
aW50IG1heCwgaW50IHBhZ2VTaXplKTsKICAgICAgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7
CiAgICAgICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CiAjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5o
CShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxNSArMjcsMjEgQEAKICNpZm5kZWYgUGF0aF9oCiAjZGVmaW5lIFBhdGhfaAog
CisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorCiAjaWYgUExBVEZPUk0oQ0cpCiB0eXBlZGVm
IHN0cnVjdCBDR1BhdGggUGxhdGZvcm1QYXRoOwogI2VsaWYgUExBVEZPUk0oUVQpCiBjbGFzcyBR
UGFpbnRlclBhdGg7CiB0eXBlZGVmIFFQYWludGVyUGF0aCBQbGF0Zm9ybVBhdGg7CisjZWxpZiBQ
TEFURk9STShDQUlSTykKK3R5cGVkZWYgc3RydWN0IGNhaXJvX3BhdGggY2Fpcm9fcGF0aF90Owor
dHlwZWRlZiBjYWlyb19wYXRoX3QgUGxhdGZvcm1QYXRoOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCBQ
bGF0Zm9ybVBhdGg7CiAjZW5kaWYKIAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBBZmZpbmVUcmFuc2Zvcm07CkBAIC01Niw2ICs2Miw5IEBACiAgICAgICAgIFBhdGhFbGVtZW50
QWRkQ3VydmVUb1BvaW50LAogICAgICAgICBQYXRoRWxlbWVudENsb3NlU3VicGF0aAogICAgIH07
CisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87Cisj
ZW5kaWYKIAogICAgIHN0cnVjdCBQYXRoRWxlbWVudCB7CiAgICAgICAgIFBhdGhFbGVtZW50VHlw
ZSB0eXBlOwpAQCAtNzQsNyArODMsMTQgQEAKIAogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmLCBXaW5kUnVsZSBydWxlID0gUlVMRV9OT05aRVJPKSBjb25zdDsKICAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworI2lmIFBMQVRGT1JNKENBSVJPKQor
ICAgICAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCBsaW5lX3dpZHRoLAorICAgICAgICAgICAgICAgIExpbmVDYXAgY2FwLExpbmVKb2luIGpvaW4s
IGZsb2F0IG1pdGVyTGltaXQgPSAxMC4wKSBjb25zdDsKIAorICAgICAgICBGbG9hdFJlY3Qgc3Ry
b2tlQm91bmRpbmdSZWN0KGZsb2F0IGxpbmVXaWR0aCwKKyAgICAgICAgICAgICAgICBMaW5lQ2Fw
LExpbmVKb2luLCBmbG9hdCBtaXRlckxpbWl0ID0gMTAuMCkgY29uc3Q7CisjZW5kaWYKKwogICAg
ICAgICB2b2lkIGNsZWFyKCk7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCkBAIC05
Niw3ICsxMTIsMTEgQEAKIAogICAgICAgICBTdHJpbmcgZGVidWdTdHJpbmcoKSBjb25zdDsKIAor
I2lmIFBMQVRGT1JNKENBSVJPKQorICAgICAgICBQbGF0Zm9ybVBhdGgqIHBsYXRmb3JtUGF0aCgp
IGNvbnN0OworI2Vsc2UKICAgICAgICAgUGxhdGZvcm1QYXRoKiBwbGF0Zm9ybVBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGg7IH0KKyNlbmRpZgogCiAgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0
ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiByb3Vu
ZGluZ1JhZGlpKTsKICAgICAgICAgc3RhdGljIFBhdGggY3JlYXRlUmVjdGFuZ2xlKGNvbnN0IEZs
b2F0UmVjdCYpOwpAQCAtMTA4LDEwICsxMjgsMTUgQEAKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAKICAgICBwcml2YXRlOgorI2lmIFBMQVRGT1JNKENB
SVJPKQorICAgICAgICBHcmFwaGljc0NvbnRleHRDYWlybyogbV9nYzsKKyNlbHNlCiAgICAgICAg
IFBsYXRmb3JtUGF0aCogbV9wYXRoOworI2VuZGlmCiAgICAgICAgIFdpbmRSdWxlIG1fcnVsZTsK
ICAgICB9OwogCiB9CisjZW5kaWYKKy8vIHZpbTogdHM9NCBzdz00IGV0CiAKLSNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCShyZXZpc2lvbiAxNzA4MikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNSw2ICsxMDUsNyBAQAogI2VuZGlmCiAjaWYgUExBVEZPUk0oR0RLKSAKICAgICAgICAgUGxh
dGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50Kik7CisgICAgICAgIHZvaWQgc2V0UG9zaXRpb24oY29u
c3QgSW50UG9pbnQgcG9zKSB7IG1fcG9zaXRpb24gPSBwb3M7IH0KICNlbmRpZgogI2lmIFBMQVRG
T1JNKFFUKQogICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQqLCBpbnQgY2xp
Y2tDb3VudCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Jlc291cmNlTG9hZGVyQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9SZXNvdXJjZUxvYWRlckNsaWVudC5oCShy
ZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vUmVzb3VyY2VMb2FkZXJDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsMTMgQEAKICNpZiBQTEFURk9STShRVCkKICNp
bmNsdWRlIDxRU3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJTaGFy
ZWQuaCIKKyNlbmRpZgogCisjaWYgVVNFKENVUkwpCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsNiArNzAsMTUgQEAKIAogICAgIHR5cGVkZWYg
dm9pZCogUGxhdGZvcm1EYXRhOwogICAgIHR5cGVkZWYgUmVmUHRyPFBsYXRmb3JtUmVzcG9uc2VR
dD4gUGxhdGZvcm1SZXNwb25zZTsKKyNlbGlmIFVTRShDVVJMKQorICAgICBjbGFzcyBQbGF0Zm9y
bVJlc3BvbnNlR2RrIDogcHVibGljIFNoYXJlZDxQbGF0Zm9ybVJlc3BvbnNlR2RrPiAgeworICAg
ICBwdWJsaWM6CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZTsK
KyAgICAgICAgU3RyaW5nIGRhdGE7CisgICAgIH07CisgICAgIHR5cGVkZWYgdm9pZCogUGxhdGZv
cm1EYXRhOworICAgICB0eXBlZGVmIFJlZlB0cjxQbGF0Zm9ybVJlc3BvbnNlR2RrPiBQbGF0Zm9y
bVJlc3BvbnNlOwogI2Vsc2UKICAgICAvLyBOb3Qgc3VyZSB3aGF0IHRoZSBzdHJhdGVneSBmb3Ig
dGhpcyB3aWxsIGJlIG9uIG90aGVyIHBsYXRmb3Jtcy4KICAgICB0eXBlZGVmIHN0cnVjdCBQbGF0
Zm9ybURhdGFTdHJ1Y3QqIFBsYXRmb3JtRGF0YTsKSW5kZXg6IFdlYkNvcmUvUHJvamVjdHMvZ2Rr
L3dlYmNvcmUtZ2RrLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1Byb2plY3RzL2dkay93ZWJj
b3JlLWdkay5ia2wJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9Qcm9qZWN0cy9nZGsvd2Vi
Y29yZS1nZGsuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC04LDQyICs4LDU0IEBACiAKIDxtYWtlZmls
ZT4KIAotCQk8b3B0aW9uIG5hbWU9IkVOQ09ESU5HU19GSUxFIj4KLQkJPGRlZmF1bHQtdmFsdWU+
cGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3MudHh0PC9kZWZhdWx0LXZhbHVlPgotCQk8dmFsdWVz
PnBsYXRmb3JtL2dkay9nZGstZW5jb2RpbmdzLnR4dDwvdmFsdWVzPgotCQk8L29wdGlvbj4KKyAg
ICAgPHNldCB2YXI9IlNSQ0RJUiIgYXBwZW5kPSIwIj4uLi8uLjwvc2V0PgogCi0JCTxvcHRpb24g
bmFtZT0iRkVBVFVSRV9ERUZJTkVTIiBuZXZlcl9lbXB0eT0iMSIgPgotCQk8IS0tIFNWR19TVVBQ
T1JUIFhQQVRIX1NVUFBPUlQtLT4KLQkJPGRlZmF1bHQtdmFsdWU+WFBBVEhfU1VQUE9SVDwvZGVm
YXVsdC12YWx1ZT4KLQkJPHZhbHVlcz5YUEFUSF9TVVBQT1JULFNWR19TVVBQT1JUPC92YWx1ZXM+
Ci0JCTwvb3B0aW9uPgotCQk8c2V0IHZhcj0iRkVBVFVSRV9ERUZJTkVTIj5YUEFUSF9TVVBQT1JU
PC9zZXQ+Ci0JCTxzZXQgdmFyPSJFTkNPRElOR1NfRklMRSI+JChTUkNESVIpL3BsYXRmb3JtL2dk
ay9nZGstZW5jb2RpbmdzLnR4dDwvc2V0PgorCTxvcHRpb24gbmFtZT0iRU5DT0RJTkdTX0ZJTEUi
PgorCSAgICAgPGRlZmF1bHQtdmFsdWU+cGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3MudHh0PC9k
ZWZhdWx0LXZhbHVlPgorCSAgICAgPHZhbHVlcz5wbGF0Zm9ybS9nZGsvZ2RrLWVuY29kaW5ncy50
eHQ8L3ZhbHVlcz4KKwk8L29wdGlvbj4KIAorCTxvcHRpb24gbmFtZT0iRkVBVFVSRV9ERUZJTkVT
IiBuZXZlcl9lbXB0eT0iMSIgPgorCTwhLS0gU1ZHX1NVUFBPUlQgWFBBVEhfU1VQUE9SVC0tPgor
CTxkZWZhdWx0LXZhbHVlPlhQQVRIX1NVUFBPUlQ8L2RlZmF1bHQtdmFsdWU+CisJPHZhbHVlcz5Y
UEFUSF9TVVBQT1JULFNWR19TVVBQT1JUPC92YWx1ZXM+CisJPC9vcHRpb24+CisJPHNldCB2YXI9
IkZFQVRVUkVfREVGSU5FUyI+WFBBVEhfU1VQUE9SVCxTVkdfU1VQUE9SVDwvc2V0PgorCTxzZXQg
dmFyPSJFTkNPRElOR1NfRklMRSI+JChTUkNESVIpL3BsYXRmb3JtL2dkay9nZGstZW5jb2Rpbmdz
LnR4dDwvc2V0PgorCiAJPGluY2x1ZGUgZmlsZT0iLi4vLi4vd2ViY29yZS1iYXNlLmJrbCIvPgog
CiAgICA8YWN0aW9uIGlkPSIuRGVyaXZlZFNvdXJjZXMiPgotICAgPCEtLSBUaGlzIGNhdXNlcyBh
IGZ1bGwgcmVidWlsZCBldmVyeXRpbWUKKyAgICAgPCEtLSAKICAgICAgPGlzLXBob255Lz4KLQkg
LS0+Ci0gICAgICAgIDxjb21tYW5kPmJhc2ggLWMgImNkIC4uLy4uOyAuL21vdmUtanMtaGVhZGVy
cy5zaCI8L2NvbW1hbmQ+CisgICAgICAgICAgcHJvdGVjdCB3aXRoIGEgaW50ZXJuYWwgdG91Y2hl
ZCBmaWxlIG90aGVyd2lzZSAKKyAgICAgICAgICBtb3ZlLWpzLWhlYWRlcnMgY2F1c2VzIHJlYnVp
bGQKKyAgICAgICAgICBpcy1waG9ueSBpcyBub3Qgd29ya2luZworICAgICAgICAgIGlmIHlvdSBj
aGFuZ2UgYSBpZGwgZmlsZSB5b3Ugd2lsbCBoYXZlIHRvIG1hbnVhbGx5CisgICAgICAgICAgcnVu
IHRoaXMgcnVsZSBhZnRlciBkZWxldGluZyAuRGVyaXZlZFNvdXJjZXMKKyAgICAgIC0tPgogICAg
ICAgICA8Y29tbWFuZD4KLQkJYmFzaCAtYyAiY2QgLi4vLi47XAorCQliYXNoIC1jICJcCisgICAg
ICAgICAgY2QgLi4vLi47XAorICAgICAgICAgIGlmIFsgISAtZSBQcm9qZWN0cy9nZGsvLkRlcml2
ZWRTb3VyY2VzIF0gO1wKKyAgICAgICAgICB0aGVuIFwKKyAgICAgICAgICAuL21vdmUtanMtaGVh
ZGVycy5zaDsgXAorICAgICAgICAgIHRvdWNoIFByb2plY3RzL2dkay8uRGVyaXZlZFNvdXJjZXM7
XAorICAgICAgICAgIGZpOyBcCisgICAgICAgICAgZXhwb3J0IFBMQVRGT1JNPUdES1wKIAkJZXhw
b3J0IEZFQVRVUkVfREVGSU5FUz0kKEZFQVRVUkVfREVGSU5FUyk7XAotCQkuL21ha2UtZ2VuZXJh
dGVkLXNvdXJjZXMuc2ggJChFTkNPRElOR1NfRklMRSkiCisJCS4vbWFrZS1nZW5lcmF0ZWQtc291
cmNlcy5zaCAkKEVOQ09ESU5HU19GSUxFKTsiCiAJCTwvY29tbWFuZD4KLSAgICAgICAgPGNvbW1h
bmQ+YmFzaCAtYyAidG91Y2ggLkRlcml2ZWRTb3VyY2VzIjwvY29tbWFuZD4KICAgIDwvYWN0aW9u
PgogCi0gICAgPGRsbCBpZD0id2ViY29yZS1nZGsiIHRlbXBsYXRlPSJ3ZWJjb3JlX2Jhc2UsZnJl
ZXR5cGUsZ3RrLGN1cmwsY2Fpcm8sc3FsaXRlMyI+ICAgICAgICAKKyAgICA8ZGxsIGlkPSJ3ZWJj
b3JlLWdkayIgdGVtcGxhdGU9IndlYmNvcmVfYmFzZSxqc2NvcmUsZnJlZXR5cGUsZ2RrLGN1cmws
Y2Fpcm8sc3FsaXRlMyI+ICAgICAgICAKIAk8IS0tIEZJWE1FOiBjcmVhdGUgYSBkZWJ1ZyBvcHRp
b24gYW5kIHNldCB0aGVzZSBhY2NvcmRpbmdseSAtLT4KIAk8IS0tIGNoZWNrIGZvciB1bmRlZmlu
ZWQgc3ltYm9scyBmb3IgZGVidWdnaW5nIHJlYXNvbnMgLS0+CiAJPCEtLQogCTxsZGZsYWdzPlcs
dW5kZWZpbmVkPC9sZGZsYWdzPgogCS0tPgogCi0JCTxwcmUtYnVpbGQtdGFyZ2V0Pi5EZXJpdmVk
U291cmNlczwvcHJlLWJ1aWxkLXRhcmdldD4KKwkgICA8cHJlLWJ1aWxkLXRhcmdldD4uRGVyaXZl
ZFNvdXJjZXM8L3ByZS1idWlsZC10YXJnZXQ+CiAgICAgICAgIDxkaXJuYW1lPi48L2Rpcm5hbWU+
CiAgICAgICAgIDxwaWM+b248L3BpYz4KICAgICAgICAgPHRocmVhZGluZz5tdWx0aTwvdGhyZWFk
aW5nPgpAQCAtNTIsMzUgKzY0LDQyIEBACiAgICAgICAgIDxjeHgtZXhjZXB0aW9ucz5vZmY8L2N4
eC1leGNlcHRpb25zPgogICAgICAgICA8ZGVidWctaW5mbz5vbjwvZGVidWctaW5mbz4KICAgICAg
ICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2dkazwvaW5jbHVkZT4KKyAgICAJPGRlZmlu
ZT5fR05VX1NPVVJDRTwvZGVmaW5lPgogICAgIAk8ZGVmaW5lPkJVSUxESU5HX0dES19fPC9kZWZp
bmU+CiAgICAgCTxkZWZpbmU+QlVJTERJTkdfQ0FJUk9fXzwvZGVmaW5lPgotCQk8aW5jbHVkZT5w
bGF0Zm9ybS9nZGs8L2luY2x1ZGU+Ci0JCTxpbmNsdWRlPnBsYXRmb3JtL2NhaXJvPC9pbmNsdWRl
PgorCQk8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vZ2RrPC9pbmNsdWRlPgorCQk8aW5jbHVk
ZT4kKFNSQ0RJUikvcGxhdGZvcm0vY2Fpcm88L2luY2x1ZGU+CiAJICAgIDxpbmNsdWRlPiQoU1JD
RElSKS9rY2FudmFzL2RldmljZS9jYWlybzwvaW5jbHVkZT4KICAgICAJPGRlZmluZT5YUEFUSF9T
VVBQT1JUPC9kZWZpbmU+CisgICAgCTxkZWZpbmU+U1ZHX1NVUFBPUlQ8L2RlZmluZT4KICAgICAg
ICAgPCEtLSBnZGsgYnVpbGQgYnJva2VuIHdpdGggd2l0aG91dCBOREVCVUcgZGVmaW5lZCAtLT4K
KyAgICAgPCEtLQogICAgIAk8ZGVmaW5lPk5ERUJVRzwvZGVmaW5lPgorICAgICAtLT4KKwogIAog
ICAgICAgICA8c291cmNlcz4JCQotICAgICAgICAgIHBsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCi0g
ICAgICAgICAgcGxhdGZvcm0vY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAKKyAgICAgICAgICBw
bGF0Zm9ybS9nZGsvQnJvd3NlckV4dGVuc2lvbkdkay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9n
ZGsvQ29va2llSmFyR2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9DdXJzb3JHZGsuY3Bw
CiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAKICAgICAgICAgICBwbGF0
Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRHZGsu
Y3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCisgICAg
ICAgICAgcGxhdGZvcm0vZ2RrL0ZpbGVDaG9vc2VyR2RrLmNwcAogICAgICAgICAgIHBsYXRmb3Jt
L2dkay9GcmFtZUdkay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3Bw
Ci0gICAgICAgICAgIHBsYXRmb3JtL2dkay9JbWFnZUdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9y
bS9nZGsvSWNvbkdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3BwCiAg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAorICAgICAgICAgIHBsYXRmb3Jt
L2dkay9Mb2FkZXJGdW5jdGlvbnNHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL01vdXNl
RXZlbnRHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1BhZ2VHZGsuY3BwCiAgICAgICAg
ICAgcGxhdGZvcm0vZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAKICAgICAgICAgICBwbGF0
Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1JlbmRl
clBvcHVwTWVudUdkay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAor
ICAgICAgICAgIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAKICAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsv
U2hhcmVkVGltZXJMaW51eC5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvU3lzdGVtVGltZUxp
bnV4LmNwcApAQCAtODgsNiArMTA3LDEwIEBACiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1Jlc291
cmNlTG9hZGVyQ3VybC5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5j
cHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAorICAgICAgICAgIHBsYXRm
b3JtL2dkay9XaWRnZXRQcml2YXRlR2RrLmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9XaW5k
b3dHZGsuY3BwCisgICAgICAgICAgJChXRUJDT1JFX0JBU0VfU09VUkNFUykKKyAgICAgICAgICAk
KFdFQkNPUkVfU09VUkNFU19DQUlST19CSU5ESU5HUykKIAkJPC9zb3VyY2VzPgogCiAJCTxjbGVh
bi1maWxlcz4KQEAgLTk4LDUgKzEyMSw0NyBAQAogCQk8L2NsZWFuLWZpbGVzPgogCQk8IS0tSEFD
SyBibG9jayBkZXBlbmRlbmNpZXMgb24gdGhlIHBob255IHRhcmdldCAtLT4KICAgICA8L2RsbD4K
KworICAgIDxkbGwgaWQ9IndlYmNvcmUtc3ZnIiB0ZW1wbGF0ZT0id2ViY29yZV9iYXNlLGZyZWV0
eXBlLGdkayxjdXJsLGNhaXJvLHNxbGl0ZTMiPiAgICAgICAgCisJPCEtLQorCTxsZGZsYWdzPlcs
dW5kZWZpbmVkPC9sZGZsYWdzPgorCS0tPgorICAgICA8ZGlybmFtZT4uPC9kaXJuYW1lPgorICAg
ICA8cGljPm9uPC9waWM+CisgICAgIDx0aHJlYWRpbmc+bXVsdGk8L3RocmVhZGluZz4KKyAgICAg
PHdhcm5pbmdzPm5vPC93YXJuaW5ncz4KKwkgPGN4eGZsYWdzPi13PC9jeHhmbGFncz4KKyAgICAg
PGN4eC1ydHRpPm9mZjwvY3h4LXJ0dGk+CisgICAgIDxjeHgtZXhjZXB0aW9ucz5vZmY8L2N4eC1l
eGNlcHRpb25zPgorCisgICAgIDxpbmNsdWRlPiQoU1JDRElSKS8uLi9KYXZhU2NyaXB0Q29yZTwv
aW5jbHVkZT4KKyAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2dkazwvaW5jbHVkZT4K
KyAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2NhaXJvPC9pbmNsdWRlPgorCTxjZmxh
Z3M+LXc8L2NmbGFncz4KKyAgICAJPGRlZmluZT5CVUlMRElOR19HREtfXzwvZGVmaW5lPgorICAg
IAk8ZGVmaW5lPkJVSUxESU5HX0NBSVJPX188L2RlZmluZT4KKwk8aW5jbHVkZT5wbGF0Zm9ybS9n
ZGs8L2luY2x1ZGU+CisJPGluY2x1ZGU+cGxhdGZvcm0vY2Fpcm88L2luY2x1ZGU+CisJPGluY2x1
ZGU+JChTUkNESVIpL2tjYW52YXMvZGV2aWNlL2NhaXJvPC9pbmNsdWRlPgorICAgIAk8ZGVmaW5l
PlhQQVRIX1NVUFBPUlQ8L2RlZmluZT4KKyAgICAJPGRlZmluZT5TVkdfU1VQUE9SVDwvZGVmaW5l
PgorICAgICA8IS0tIGdkayBidWlsZCBicm9rZW4gd2l0aCB3aXRob3V0IE5ERUJVRyBkZWZpbmVk
IC0tPgorICAgICA8IS0tCisgICAgCTxkZWZpbmU+TkRFQlVHPC9kZWZpbmU+CisgICAgIC0tPgor
ICAgICA8c291cmNlcz4JCQorICAgICAgICAgIGtjYW52YXMvZGV2aWNlL2NhaXJvL0tDYW52YXND
bGlwcGVyQ2Fpcm8uY3BwCisgICAgICAgICAga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS0NhbnZhc0lt
YWdlQ2Fpcm8uY3BwCisgICAgICAgICAga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0Rl
dmljZUNhaXJvLmNwcAorICAgICAgICAgIGtjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50Q2Fpcm8uY3BwCisgICAgICAgICAga2NhbnZhcy9kZXZpY2UvY2Fp
cm8vS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcAorICAgICAgICAgIGtjYW52
YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8uY3BwCisgICAg
ICAgICAga2NhbnZhcy9kZXZpY2UvY2Fpcm8vUmVuZGVyUGF0aENhaXJvLmNwcAorCQkkKFdFQkNP
UkVfU09VUkNFU19LQ0FOVkFTKQorCQkkKFdFQkNPUkVfU09VUkNFU19LU1ZHMikKKwkgCSQoV0VC
Q09SRV9TT1VSQ0VTX1NWR19ERVJJVkVEU09VUkNFUykKKyAgIAk8L3NvdXJjZXM+CisgICA8L2Rs
bD4KKwogPC9tYWtlZmlsZT4KIApJbmRleDogV2ViQ29yZS9Qcm9qZWN0cy93eC93ZWJjb3JlLXd4
LmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1Byb2plY3RzL3d4L3dlYmNvcmUtd3guYmtsCShy
ZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvUHJvamVjdHMvd3gvd2ViY29yZS13eC5ia2wJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCwxMyBAQAogICAgICAgICA8Y29tbWFuZD5jZCAkKFNS
Q0RJUik7YmFzaCBtb3ZlLWpzLWhlYWRlcnMuc2g7IGJhc2ggbWFrZS1nZW5lcmF0ZWQtc291cmNl
cy5zaCBwbGF0Zm9ybS93eC93eC1lbmNvZGluZ3MudHh0O2NkIFByb2plY3RzL3d4PC9jb21tYW5k
PgogICAgIDwvYWN0aW9uPgogICAgICAgCi0gICAgPGxpYiBpZD0id2ViY29yZS13eCIgdGVtcGxh
dGU9IndlYmNvcmVfYmFzZSI+CisgICAgPGxpYiBpZD0id2ViY29yZS13eCIgdGVtcGxhdGU9Indl
YmNvcmVfYmFzZSxqc2NvcmUiPgogICAgICAgICA8cHJlLWJ1aWxkLXRhcmdldD5EZXJpdmVkU291
cmNlczwvcHJlLWJ1aWxkLXRhcmdldD4KICAgICAgICAgPGRpcm5hbWU+LjwvZGlybmFtZT4KICAg
ICAgICAgPCEtLSBwbGF0Zm9ybS93eCBzb3VyY2VzIGdvIGhlcmUgd2hlbiB0aGV5IGV4aXN0ISAt
LT4KKyAgICAgICAgPHNvdXJjZXM+CisgICAgICAgICAgJChXRUJDT1JFX0JBU0VfU09VUkNFUykK
KyAgICAgICAgPC9zb3VyY2VzPgogICAgIDwvbGliPgogCiA8L21ha2VmaWxlPgpJbmRleDogV2Vi
Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2NvbmZpZy5oCShyZXZpc2lvbiAx
NzA4MikKKysrIFdlYkNvcmUvY29uZmlnLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEwICs1Niwy
NCBAQAogLy8gV2UgZ2V0IHRoaXMgZnJvbSBzb21lIHN5c3RlbSBwbGFjZSBvbiBPUyBYOyBwcm9i
YWJseSBiZXR0ZXIgbm90IHRvIHVzZSBpdAogLy8gaW4gV2ViQ29yZSBjb2RlLgogI2luY2x1ZGUg
PGFzc2VydC5oPgotCisjZWxzZSAvL3JlcGxpY2F0ZSB0aGUgSEFWRV9YIGZyb20gdGhlIGphdmFz
Y3JpcHQgY29uZmlnLmgKKy8qIEZJWE1FOiBpcyB0aGlzIGFjdHVhbGx5IHVzZWQgb3IgZG8gb3Ro
ZXIgcGxhdGZvcm1zIGdlbmVyYXRlIHRoZWlyIG93biBjb25maWcuaD8gKi8KKy8vI2RlZmluZSBI
QVZFX0VSUk5PX0ggMQorLy8jZGVmaW5lIEhBVkVfRlVOQ19JU0lORiAxCisvLyNkZWZpbmUgSEFW
RV9GVU5DX0lTTkFOIDEKKy8vI2RlZmluZSBIQVZFX01NQVAgMQorLy8jZGVmaW5lIEhBVkVfU0JS
SyAxCisvLyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorLy8jZGVmaW5lIEhBVkVfU1lTX1BBUkFN
X0ggMQorLy8jZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCiAjZW5kaWYgLyogUExBVEZPUk0oV0lO
X09TKSAqLwogCisvKiBGSVhNRTogaWYgYWxsIHBsYXRmb3JtcyBoYXZlIHRoZXNlLCBkbyB0aGV5
IHJlYWxseSBuZWVkICNkZWZpbmVzPyAqLworLy8jZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorLy8j
ZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorLy8jZGVmaW5lIFdURl9DSEFOR0VTIDEKIAorCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIAogLy8gVGhlc2UgdW5kZWZzIG1hdGNoIHVwIHdpdGggZGVmaW5lcyBp
biBXZWJDb3JlUHJlZml4LmggZm9yIE1hYyBPUyBYLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NjUsNiArMTc2NSw5IEBACiBib29sIFJlbmRl
ck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQoY29uc3QgSW50UmVjdCYgb2xkQm91
bmRzLCBjb25zdCBJbnRSZWN0JiBvbGRGdWxsQm91bmRzKQogewogICAgIFJlbmRlclZpZXcqIGMg
PSB2aWV3KCk7CisgICAgaWYoIWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAgICBp
ZiAoYy0+cHJpbnRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRG9uJ3QgcmVw
YWludCBpZiB3ZSdyZSBwcmludGluZy4KICAgICAgICAgICAgIApAQCAtMTgwOSw2ICsxODEyLDgg
QEAKIAogYm9vbCBSZW5kZXJPYmplY3Q6OmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpIGNv
bnN0CiB7CisgICAgaWYoICFkb2N1bWVudCgpLT52aWV3KCkgKQorICAgICAgICByZXR1cm4gZmFs
c2U7ICAgICAgICAKICAgICByZXR1cm4gIWRvY3VtZW50KCktPnZpZXcoKS0+bmVlZHNGdWxsUmVw
YWludCgpICYmICFsYXllcigpOwogfQogCkBAIC0yMjAzLDcgKzIyMDgsNyBAQAogICAgICAgICBt
X2hhc092ZXJmbG93Q2xpcCA9IGZhbHNlOwogICAgIH0KIAotICAgIGlmICh2aWV3KCktPmZyYW1l
VmlldygpKSB7CisgICAgaWYgKHZpZXcoKSAmJiB2aWV3KCktPmZyYW1lVmlldygpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBBIGJldHRlciBzb2x1dGlvbiB3b3VsZCBiZSB0byBvbmx5IGludmFsaWRh
dGUgdGhlIGZpeGVkIHJlZ2lvbnMgd2hlbiBzY3JvbGxpbmcuICBJdCdzIG92ZXJraWxsIHRvCiAg
ICAgICAgIC8vIHByZXZlbnQgdGhlIGVudGlyZSB2aWV3IGZyb20gYmxpdHRpbmcgb24gYSBzY3Jv
bGwuCiAgICAgICAgIGJvb2wgb2xkU3R5bGVTbG93U2Nyb2xsID0gc3R5bGUgJiYgKHN0eWxlLT5w
b3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gfHwgc3R5bGUtPmhhc0ZpeGVkQmFja2dyb3VuZElt
YWdlKCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDE3MDgyKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MCw4ICsxNDAsMTUgQEAKICAgICBpZiAoIGYgJiYgbV9mcmFtZVZpZXcpIHsKICAgICAgICAgeFBv
cyA9IG1fZnJhbWVWaWV3LT5jb250ZW50c1goKTsKICAgICAgICAgeVBvcyA9IG1fZnJhbWVWaWV3
LT5jb250ZW50c1koKTsKKyNpZiBQTEFURk9STShHREspCisgICAgICAgUmVuZGVyQmxvY2s6OmFi
c29sdXRlUG9zaXRpb24oeFBvcyx5UG9zLGYpOworI2VuZGlmCiAgICAgfSBlbHNlCisjaWYgUExB
VEZPUk0oR0RLKQorICAgICAgIFJlbmRlckJsb2NrOjphYnNvbHV0ZVBvc2l0aW9uKHhQb3MseVBv
cyxmKTsKKyNlbHNlCiAgICAgICAgIHhQb3MgPSB5UG9zID0gMDsKKyNlbmRpZgogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAx
NzA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUzMCw4ICsyNTMwLDE0IEBACiB7CiAgICAgYm9vbCBpbmxpbmVGbG93ID0gaXNJbmxp
bmVGbG93KCk7CiAKKyNpZiBQTEFURk9STShHREspCisgICAgLy91c2UgdmlydHVhbCBtZXRob2Rz
IHRvIHN1cHBvcnQgc3ZnIGZvcmdpZW5PYmplY3QKKyAgICBpbnQgdHggPSBfdHggKyB4UG9zKCk7
CisgICAgaW50IHR5ID0gX3R5ICsgeVBvcygpICsgYm9yZGVyVG9wRXh0cmEoKTsKKyNlbHNlCiAg
ICAgaW50IHR4ID0gX3R4ICsgbV94OwogICAgIGludCB0eSA9IF90eSArIG1feSArIGJvcmRlclRv
cEV4dHJhKCk7CisjZW5kaWYKICAgICAKICAgICBpZiAoIWlubGluZUZsb3cgJiYgIWlzUm9vdCgp
KSB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgpJ
bmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw2ICsyNTMsMTIgQEAKICAgICBwTW9kZSA9IFN0cmlj
dDsKICAgICBoTW9kZSA9IFhIdG1sOwogICAgIG1fdGV4dENvbG9yID0gQ29sb3I6OmJsYWNrOwor
ICAgIG1fZG9jVHlwZSA9IDA7CisgICAgbV9mb2N1c05vZGUgPSAwOworICAgIG1faG92ZXJOb2Rl
ID0gMDsKKyAgICBtX2FjdGl2ZU5vZGUgPSAwOworICAgIG1fdGl0bGVFbGVtZW50ID0gMDsKKyAg
ICBtX2RvY3VtZW50RWxlbWVudCA9IDA7CiAgICAgbV9saXN0ZW5lclR5cGVzID0gMDsKICAgICBt
X2luRG9jdW1lbnQgPSB0cnVlOwogICAgIG1fc3R5bGVTZWxlY3RvckRpcnR5ID0gZmFsc2U7CkBA
IC0xMzQ4LDcgKzEzNTQsMTEgQEAKICAgICBpZiAoIW93bmVyRWxlbWVudCgpKQogICAgICAgICBw
cmludGYoIlJlY2VpdmVkIGFsbCBkYXRhIGF0ICVkXG4iLCBlbGFwc2VkVGltZSgpKTsKICNlbmRp
ZgotICAgIAorCisgICAgaWYgKG1fZGVjb2RlciAmJiBtX3Rva2VuaXplciAmJiAhbV90b2tlbml6
ZXItPndhbnRzUmF3RGF0YSgpKSB7CisgICAgICAgIFN0cmluZyBkZWNvZGVkID0gbV9kZWNvZGVy
LT5mbHVzaCgpOworICAgICAgICBtX3Rva2VuaXplci0+d3JpdGUoZGVjb2RlZCx0cnVlKTsKKyAg
ICB9CiAgICAgLy8gTGV0IHRoZSB0b2tlbml6ZXIgZ28gdGhyb3VnaCBhcyBtdWNoIGRhdGEgYXMg
aXQgY2FuLiAgVGhlcmUgd2lsbCBiZSB0aHJlZSBwb3NzaWJsZSBvdXRjb21lcyBhZnRlcgogICAg
IC8vIGZpbmlzaCgpIGlzIGNhbGxlZDoKICAgICAvLyAoMSkgQWxsIHJlbWFpbmluZyBkYXRhIGlz
IHBhcnNlZCwgZG9jdW1lbnQgaXNuJ3QgbG9hZGVkIHlldApJbmRleDogV2ViQ29yZS9rY2FudmFz
L1JlbmRlclNWR0NvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9SZW5k
ZXJTVkdDb250YWluZXIuaAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL2tjYW52YXMvUmVu
ZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBi
b29sIGRyYXdzQ29udGVudHMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0tDYW52YXND
b250YWluZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIktDYW52YXNDb250YWluZXIiOyB9CisgICAg
dmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNW
R0NvbnRhaW5lciI7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkg
Y29uc3Q7CiAgICAgCkBAIC02OCw3ICs2OCwxMiBAQAogICAgIHZpcnR1YWwgdm9pZCBjYWxjTWlu
TWF4V2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyAmcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwot
ICAgIAorICAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zKGludCB4UG9zLCBpbnQgeVBvcyk7
CisgICAgdmlydHVhbCBpbnQgeFBvcygpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHlQb3MoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQb3MsIGludCAm
eVBvcywgYm9vbCBmID0gZmFsc2UpOworCiAgICAgdmlydHVhbCBJbnRSZWN0IGdldEFic29sdXRl
UmVwYWludFJlY3QoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50
UmVjdChJbnRSZWN0JiByLCBib29sIGYpOwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9j
YWlyby9SZW5kZXJQYXRoQ2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL2NhaXJvL1JlbmRlclBhdGhDYWlyby5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljLnNlaWRlbEBrZGVtYWlsLm5ldD4KKwkJCQkgIDIwMDYgTWljaGFlbCBF
bW1lbCA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorKi8KKworI2lmbmRlZiBSZW5kZXJQYXRoQ2Fpcm9fSAorI2RlZmluZSBSZW5kZXJQ
YXRoQ2Fpcm9fSAorCisjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsJCQorY2xhc3MgRmxvYXRQb2ludDsJCQorCitjbGFzcyBS
ZW5kZXJQYXRoQ2Fpcm8gOiBwdWJsaWMgUmVuZGVyUGF0aAoreworcHVibGljOgorICAgIFJlbmRl
clBhdGhDYWlybyhSZW5kZXJTdHlsZSosIFNWR1N0eWxlZEVsZW1lbnQqKTsKKworfTsKKworfQor
CisjZW5kaWYKKworLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rldmlj
ZS9jYWlyby9LQ2FudmFzQ2xpcHBlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tj
YW52YXMvZGV2aWNlL2NhaXJvL0tDYW52YXNDbGlwcGVyQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWlyby9LQ2FudmFzQ2xpcHBlckNhaXJvLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAg
ICAgICAgICAgICAgICAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisJCQkJICAyMDA2IE1pY2hh
ZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLQ2FudmFz
Q2xpcHBlckNhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKKyNpbmNs
dWRlICJLUmVuZGVyaW5nRGV2aWNlQ2Fpcm8uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSA8
YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
b2lkIEtDYW52YXNDbGlwcGVyQ2Fpcm86OmFwcGx5Q2xpcChjb25zdCBGbG9hdFJlY3QmIGJvdW5k
aW5nQm94KSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
cmVuZGVyaW5nRGV2aWNlKCktPmN1cnJlbnRDb250ZXh0KCk7CisgICAgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRDYWlybyAqY2Fpcm9Db250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRDYWlybyAqPihjb250ZXh0KTsKKyAgICBpZiAobV9jbGlwRGF0YS5jb3VudCgpIDwg
MSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9Db250ZXh0LT5yZXNldENsaXAoKTsKKwkK
KyAgIAlBZmZpbmVUcmFuc2Zvcm0gY3VycmVudFRyYW5zZm9ybSA9IGNhaXJvQ29udGV4dC0+Y3Rt
KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IG1fY2xpcERhdGEuY291bnQo
KTsgeCsrKSB7CisgICAgICAgIEtDQ2xpcERhdGEgY2xpcERhdGEgPSBtX2NsaXBEYXRhW3hdOwor
ICAgIAlXaW5kUnVsZSBjbGlwUnVsZSA9IG1fY2xpcERhdGFbeF0ud2luZFJ1bGUoKTsKKyAgICAg
ICAKKyAgICAgICAgUGF0aCBwYXRoID0gY2xpcERhdGEucGF0aDsgCisJCWlmKCBwYXRoLmlzRW1w
dHkoKSApCisJCQkJY29udGludWU7CisJCWNhaXJvQ29udGV4dC0+c2V0RmlsbFJ1bGUoY2xpcFJ1
bGUpOworICAgIAlpZiAoY2xpcERhdGEuYmJveFVuaXRzKSB7CisgICAJCQkvLyBSZXNwZWN0IGNs
aXBwaW5nIHVuaXRzLi4uCisgICAgICAgIAlBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAg
ICAgICAJdHJhbnNmb3JtLnRyYW5zbGF0ZShib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94Lnko
KSk7CisgICAgICAgIAl0cmFuc2Zvcm0uc2NhbGUoYm91bmRpbmdCb3gud2lkdGgoKSwgYm91bmRp
bmdCb3guaGVpZ2h0KCkpOworCQkJY2Fpcm9Db250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsK
KyAgIAkJfQorICAgIAljYWlyb0NvbnRleHQtPmNhaXJvQ29udGV4dCgpLT5jbGVhclBhdGgoKTsK
KyAgICAJY2Fpcm9Db250ZXh0LT5jYWlyb0NvbnRleHQoKS0+Y2xlYXJDbGlwKCk7CisgICAgCWNh
aXJvQ29udGV4dC0+Y2Fpcm9Db250ZXh0KCktPmNsaXAocGF0aCk7CisJCWNhaXJvQ29udGV4dC0+
c2V0VHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zvcm0pOworICAgIH0KKworfQorCit9CisKKy8vIHZp
bTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFz
L2RldmljZS9jYWlyby9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2Vy
dmVyU29saWRDYWlyby5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKwkJCQkgIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlrZS5lbW1lbEBnbWFp
bC5jb20+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2VDYWlyby5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2lu
Y2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdTdHJv
a2VQYWludGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlyby5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJv
OjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvKCkKKyAgICA6IEtSZW5kZXJpbmdQYWlu
dFNlcnZlclNvbGlkKCkKK3sKK30KKworS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlybzo6
fktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8oKQoreworfQorCisvLyAnU29saWQnIGlu
dGVyZmFjZQordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvOjpkcmF3KEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1Bh
aW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
Q2Fpcm8qIGNhaXJvQ29udGV4dCA9IAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S1JlbmRlcmlu
Z0RldmljZUNvbnRleHRDYWlybyo+KGNvbnRleHQpOworCisgICAgLy9jYWlyb0NvbnRleHQtPmNh
aXJvQ29udGV4dCgpLT5maWxsUmVjdChJbnRSZWN0KDAsMCwxMDAwLDEwMDApLENvbG9yOjpkYXJr
R3JheSk7CisgICAgY2Fpcm9Db250ZXh0LT5zYXZlKCk7CisgICAgLy9jYWlyb0NvbnRleHQtPmNh
aXJvQ29udGV4dCgpLT5jbGVhckNsaXAoKTsKKyAgICBjYWlyb0NvbnRleHQtPmFkZFBhdGgocGF0
aC0+cGF0aCgpKTsKKyNpZiAwCisgICAgU3RyaW5nIHN0ciA9IHBhdGgtPnBhdGgoKS5kZWJ1Z1N0
cmluZygpOworICAgIHByaW50ZigiIFBBVEg6OjogJXNcbiIsc3RyLmRlcHJlY2F0ZWRTdHJpbmco
KS5hc2NpaSgpKTsKKyAgICBjYWlyb19tYXRyaXhfdCB0eCA9IGNhaXJvQ29udGV4dC0+Y2Fpcm9D
b250ZXh0KCktPmdldENUTSgpOworcHJpbnRmKCIgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRD
YWlybzo6ZHJhdyBBZmZpbmVUcmFuc2Zvcm0geHg9JWYgeXk9JWYgeHk9JWYgeXg9JWYgeDA9JWYg
eTA9JWYgXG4iLAorICAgICAgICAgICAgICAgIHR4Lnh4LAorICAgICAgICAgICAgICAgIHR4Lnl5
LAorICAgICAgICAgICAgICAgIHR4Lnh5LAorICAgICAgICAgICAgICAgIHR4Lnl4LAorICAgICAg
ICAgICAgICAgIHR4LngwLAorICAgICAgICAgICAgICAgIHR4LnkwKTsKKyNlbmRpZgorICAgIFJl
bmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHBhdGgtPnN0eWxlKCk7CisKKyAgICBpZiAoKHR5cGUg
JiBBUFBMWV9UT19GSUxMKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7
CisgICAgICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciBmaWxsUGFpbnRlciA9IEtTVkdQYWludGVy
RmFjdG9yeTo6ZmlsbFBhaW50ZXIocmVuZGVyU3R5bGUsIHBhdGgpOworICAgICAgICBjYWlyb0Nv
bnRleHQtPnNldEZpbGwoZmlsbFBhaW50ZXIsJmNvbG9yKCkpOworICAgICAgICBjYWlyb0NvbnRl
eHQtPmZpbGxQYXRoKCk7CisgICAgfQorCisgICAgaWYoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0Up
ICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkgeworICAgICAgICBLUmVu
ZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpz
dHJva2VQYWludGVyKHJlbmRlclN0eWxlLCBwYXRoKTsKKyAgICAgICAgY2Fpcm9Db250ZXh0LT5z
ZXRTdHJva2Uoc3Ryb2tlUGFpbnRlciwmY29sb3IoKSk7CisgICAgICAgIGNhaXJvQ29udGV4dC0+
c3Ryb2tlUGF0aCgpOworICAgICAgICAvKiBpZihpc1BhaW50aW5nVGV4dCgpKSAuLi4gKi8KKyAg
ICB9CisKKwljYWlyb0NvbnRleHQtPmRlc3Ryb3lQYXR0ZXJuKCk7CisgICAgY2Fpcm9Db250ZXh0
LT5yZXN0b3JlKCk7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlybzo6
c2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm86OnRlYXJkb3du
KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqLCBL
Q1BhaW50VGFyZ2V0VHlwZSkgY29uc3QKK3sKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJTb2xpZENhaXJvOjpyZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAor
eworfQorCit9CisKKy8vIHZpbTp0cz00OmV0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNl
L2NhaXJvL0tSZW5kZXJpbmdEZXZpY2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9jYWlyby9LUmVuZGVyaW5nRGV2aWNlQ2Fpcm8uY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWlyby9LUmVuZGVyaW5nRGV2aWNlQ2Fpcm8u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisJCQkJICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4K
KyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIktDYW52
YXNSZXNvdXJjZS5oIgorI2luY2x1ZGUgIktDYW52YXNNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJQYXRoQ2Fpcm8uaCIKKyNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlckNhaXJvLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlQ2Fp
cm8uaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
I2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8uaCIKKyNpbmNsdWRlICJL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmgiCisjaW5jbHVkZSAiS1JlbmRlcmlu
Z1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0ZpbGxQYWlu
dGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjpLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dENhaXJvKEdyYXBoaWNzQ29udGV4dENhaXJvKiBnYykKK3sKKyAgICBtX2djID0g
Z2M7Cit9CisKK0tSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm86On5LUmVuZGVyaW5nRGV2aWNl
Q29udGV4dENhaXJvKCkKK3sKK30KKworCitBZmZpbmVUcmFuc2Zvcm0gS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgd29ybGRNYXRy
aXgpCit7CisgICAgbV9nYy0+Y29uY2F0Q1RNKHdvcmxkTWF0cml4KTsKKyAgICByZXR1cm4gbV9n
Yy0+Z2V0Q1RNKCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dENhaXJvOjpjdG0oKSBjb25zdAoreworICAgIHJldHVybiBtX2djLT5nZXRDVE0oKTsKK30KKwor
SW50UmVjdCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjptYXBGcm9tVmlzdWFsKGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UmVjdCBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjptYXBUb1Zpc3VhbChjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRDYWlybzo6Y2xlYXJQYXRoKCkKK3sKKyAgICBtX2djLT5jbGVhclBhdGgoKTsKK30K
Kwordm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjphZGRQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCit7CisgICAgbV9nYy0+YXBwZW5kKHBhdGgpOworfQorCisKK0dyYXBoaWNzQ29udGV4
dCogS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkK
K3sKKyAgICAvL2V2ZXJ5b25lIGVsc2UgaW1wbGVtZW50cyB0aGlzIGFzIGEgd3JhcHBlcgorICAg
IC8vSSB0aGluayB0aGUgY2FsbCBpcyBkdWJpb3MKKyAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29u
dGV4dENhaXJvKG1fZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsgCit9CisKKwordm9pZCBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dENhaXJvOjpzZXRGaWxsUnVsZShXaW5kUnVsZSBydWxlKQoreworICAg
IG1fZ2MtPnNldEZpbGxSdWxlKHJ1bGUpOworfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0Q2Fpcm86OnNhdmUoKQoreworICAgIG1fZ2MtPnNhdmUoKTsKK30KKwordm9pZCBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dENhaXJvOjpyZXN0b3JlKCkKK3sKKyAgICBtX2djLT5yZXN0b3JlKCk7
Cit9CisKKwordm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjpmaWxsUGF0aCgpCit7
CisgICAgbV9nYy0+ZmlsbCgpOworfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fp
cm86OnN0cm9rZVBhdGgoKQoreworICAgIG1fZ2MtPnN0cm9rZSgpOworfQorCisKK3ZvaWQgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6Y2xpcChQYXRoJiBjbGlwKQoreworICAgIG1fZ2Mt
PmNsaXAoY2xpcCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6cmVz
ZXRDbGlwKCkKK3sKKyAgICBtX2djLT5jbGVhckNsaXAoKTsKK30KKwordm9pZCBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dENhaXJvOjpzZXRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCit7CisgICAgbV9nYy0+c2V0Q1RNKHRyYW5zZm9ybSk7Cit9CisKK2Jvb2wgIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0Q2Fpcm86OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQgJnAp
Cit7CisgICAgcmV0dXJuIG1fZ2MtPnN0cm9rZUNvbnRhaW5zKHApOworfQorCitGbG9hdFJlY3Qg
S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6c3Ryb2tlQkJveCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZ2MtPnN0cm9rZUJvdW5kaW5nUmVjdCgpOworfQorCit2b2lkIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0Q2Fpcm86OnNldFN0cm9rZShjb25zdCBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRl
ciYgc3Ryb2tlUGFpbnRlciwgQ29sb3IqIGNvbG9yKQoreworICAgIGRvdWJsZSAgciwgZywgYiwg
YTsKKyAgICBtX2djLT5zZXRMaW5lV2lkdGgoc3Ryb2tlUGFpbnRlci5zdHJva2VXaWR0aCgpKTsK
KyAgICBpZiAoc3Ryb2tlUGFpbnRlci5zdHJva2VDYXBTdHlsZSgpID09IENBUF9CVVRUKSB7Cisg
ICAgICAgICBtX2djLT5zZXRMaW5lQ2FwKEJ1dHRDYXApOworICAgIH0gZWxzZSBpZiAoc3Ryb2tl
UGFpbnRlci5zdHJva2VDYXBTdHlsZSgpID09IENBUF9ST1VORCkgeworICAgICAgICAgbV9nYy0+
c2V0TGluZUNhcChSb3VuZENhcCk7CisgICAgfSBlbHNlIGlmIChzdHJva2VQYWludGVyLnN0cm9r
ZUNhcFN0eWxlKCkgPT0gQ0FQX1NRVUFSRSkgeworICAgICAgICAgbV9nYy0+c2V0TGluZUNhcChT
cXVhcmVDYXApOworICAgIH0KKworICAgIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tlSm9pblN0eWxl
KCkgPT0gSk9JTl9NSVRFUikgeworICAgICAgICAgbV9nYy0+c2V0TGluZUpvaW4oTWl0ZXJKb2lu
KTsKKyAgICAgICAgIG1fZ2MtPnNldE1pdGVyTGltaXQoc3Ryb2tlUGFpbnRlci5zdHJva2VNaXRl
ckxpbWl0KCkpOworICAgIH0gZWxzZSBpZihzdHJva2VQYWludGVyLnN0cm9rZUpvaW5TdHlsZSgp
ID09IEpPSU5fUk9VTkQpIHsKKyAgICAgICAgIG1fZ2MtPnNldExpbmVKb2luKFJvdW5kSm9pbik7
CisgICAgfSBlbHNlIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tlSm9pblN0eWxlKCkgPT0gSk9JTl9C
RVZFTCkgeworICAgICAgICAgbV9nYy0+c2V0TGluZUpvaW4oQmV2ZWxKb2luKTsKKyAgICB9CisK
KyAgICBLQ0Rhc2hBcnJheSBkYXNoZXMgPSBzdHJva2VQYWludGVyLmRhc2hBcnJheSgpOworICAg
IHVuc2lnbmVkIGludCBkYXNoTGVuZ3RoID0gZGFzaGVzLnNpemUoKTsKKyAgICBpZihkYXNoTGVu
Z3RoKSB7CisgICAgICAgIGRvdWJsZSogY2Rhc2hlcyA9IG5ldyBkb3VibGVbZGFzaExlbmd0aF07
CisgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBkYXNoTGVuZ3RoOyBpKyspCisg
ICAgICAgICAgICBjZGFzaGVzW2ldID0gKGRvdWJsZSlkYXNoZXNbZGFzaExlbmd0aF07CisgICAg
ICAgbV9nYy0+c2V0RGFzaGVzKGNkYXNoZXMsIGRhc2hMZW5ndGgsIHN0cm9rZVBhaW50ZXIuZGFz
aE9mZnNldCgpKTsKKyAgICAgICBkZWxldGVbXSBjZGFzaGVzOworICAgIH0KKyAgICBpZiggY29s
b3IgKSB7CisgICAgICAgIGNvbG9yLT5nZXRSR0JBKHIsZyxiLGEpOworICAgICAgICBkb3VibGUg
YWxwaGEgPSAoZG91YmxlKXN0cm9rZVBhaW50ZXIub3BhY2l0eSgpOworICAgICAgICBpZiggYWxw
aGEgIT0gMS4wICkKKyAgICAgICAgICAgIGEgPSBhbHBoYTsKKyAgICAgICAgbV9nYy0+c2V0UGVu
KG1ha2VSR0JBKHIsZyxiLGEpKTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0g
Y2Fpcm9fcGF0dGVybl9jcmVhdGVfcmdiYShyLGcsYixhKTsKKyAgICAgICAgc2V0UGF0dGVybihw
YXR0ZXJuKTsKKyAgICB9Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6
c2V0RmlsbChjb25zdCBLUmVuZGVyaW5nRmlsbFBhaW50ZXImIGZpbGxQYWludGVyLENvbG9yKiBj
b2xvcikKK3sKKyAgICBkb3VibGUgIHIsIGcsIGIsIGE7CisgICAgc2V0RmlsbFJ1bGUoZmlsbFBh
aW50ZXIuZmlsbFJ1bGUoKSk7CisgICAgaWYoIGNvbG9yICE9IDAgKSB7CisgICAgICAgIGNvbG9y
LT5nZXRSR0JBKHIsZyxiLGEpOworICAgICAgICBkb3VibGUgYWxwaGEgPSAoZG91YmxlKWZpbGxQ
YWludGVyLm9wYWNpdHkoKTsKKyAgICAgICAgaWYoIGFscGhhICE9IDEuMCApCisgICAgICAgICAg
ICBhID0gYWxwaGE7CisgICAgICAgIG1fZ2MtPnNldEZpbGxDb2xvcihtYWtlUkdCQShyLGcsYixh
KSk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3Jl
YXRlX3JnYmEocixnLGIsYSk7CisgICAgICAgIHNldFBhdHRlcm4ocGF0dGVybik7CisgICAgfQor
fQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm86OnNldFBhdHRlcm4oIGNhaXJv
X3BhdHRlcm5fdCAqIHBhdHRlcm4pCit7CisgICAgbV9wYXR0ZXJuID0gcGF0dGVybjsKKyAgICBt
X2djLT5zZXRTb3VyY2VQYXR0ZXJuKHBhdHRlcm4pOworICAgIC8vY2Fpcm9fcGF0dGVybl9kZXN0
cm95IChtX3BhdHRlcm4pOworfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm86
OmRlc3Ryb3lQYXR0ZXJuKCkKK3sKKyAvKgorICAgIGlmKG1fcGF0dGVybikgeworICAgICAgICBj
YWlyb19wYXR0ZXJuX2Rlc3Ryb3kobV9wYXR0ZXJuKTsKKyAgICAgICAgbV9wYXR0ZXJuID0gMDsK
KyAgICB9CisqLworfQorCisvLyBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm8KK0tSZW5kZXJpbmdEZXZp
Y2VDYWlybzo6S1JlbmRlcmluZ0RldmljZUNhaXJvKCkgOiBLUmVuZGVyaW5nRGV2aWNlKCkKK3sK
KyAgICAKK30KKworS1JlbmRlcmluZ0RldmljZUNhaXJvOjp+S1JlbmRlcmluZ0RldmljZUNhaXJv
KCkKK3sKK30KKworCitLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogS1JlbmRlcmluZ0RldmljZUNh
aXJvOjpwb3BDb250ZXh0KCkKK3sKKyAgICAvLyBBbnkgc3BlY2lhbCB0aGluZ3MgbmVlZGVkPwor
ICAgIHJldHVybiBLUmVuZGVyaW5nRGV2aWNlOjpwb3BDb250ZXh0KCk7Cit9CisKK3ZvaWQgS1Jl
bmRlcmluZ0RldmljZUNhaXJvOjpwdXNoQ29udGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICAvLyBBbnkgc3BlY2lhbCB0aGluZ3MgbmVlZGVkPworICAgIEtSZW5k
ZXJpbmdEZXZpY2U6OnB1c2hDb250ZXh0KGNvbnRleHQpOworCit9CisKKy8vIGNvbnRleHQgbWFu
YWdlbWVudC4KK0tSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qIEtSZW5kZXJpbmdEZXZpY2VD
YWlybzo6Y2Fpcm9Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S1Jl
bmRlcmluZ0RldmljZUNvbnRleHRDYWlybyo+KGN1cnJlbnRDb250ZXh0KCkpOworfQorCitLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCogS1JlbmRlcmluZ0RldmljZUNhaXJvOjpjb250ZXh0Rm9ySW1h
Z2UoS0NhbnZhc0ltYWdlKiBpbWFnZSkgY29uc3QKK3sKKyAgICBwcmludGYoIktSZW5kZXJpbmdE
ZXZpY2VDYWlybzo6Y29udGV4dEZvckltYWdlKCkgVE9ETyFcbiIpOworICAgIHJldHVybiAwOwor
fQorCisKKy8vIFJlc291cmNlIGNyZWF0aW9uCitLQ2FudmFzUmVzb3VyY2UqIEtSZW5kZXJpbmdE
ZXZpY2VDYWlybzo6Y3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5cGUmIHR5cGUpIGNv
bnN0Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBSU19DTElQUEVS
OgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLQ2FudmFzQ2xpcHBlckNhaXJvKCk7CisgICAgICAg
IGNhc2UgUlNfTUFSS0VSOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLQ2FudmFzTWFya2VyKCk7
IC8vIFVzZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLi4uCisgICAgICAgIGNhc2UgUlNfSU1BR0U6
CisgICAgICAgICAgICAvLyByZXR1cm4gbmV3IEtDYW52YXNJbWFnZUNhaXJvKCk7CisgICAgICAg
IGNhc2UgUlNfRklMVEVSOgorICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBLQ2FudmFzRmlsdGVy
Q2Fpcm8oKTsKKyAgICAgICAgY2FzZSBSU19NQVNLRVI6CisgICAgICAgICAgICAvLyByZXR1cm4g
bmV3IEtDYW52YXNNYXNrZXJDYWlybygpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIEtSZW5kZXJpbmdE
ZXZpY2VDYWlybzo6Y3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWludFNlcnZlclR5cGUmIHR5
cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBQU19T
T0xJRDoKKyAgICAgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRD
YWlybygpOworICAgICAgICBjYXNlIFBTX1BBVFRFUk46CisgICAgICAgICAgICByZXR1cm4gbmV3
IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlybygpOworICAgICAgICBjYXNlIFBTX0xJ
TkVBUl9HUkFESUVOVDoKKyAgICAgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyTGluZWFyR3JhZGllbnRDYWlybygpOworICAgICAgICBjYXNlIFBTX1JBRElBTF9HUkFESUVO
VDoKKyAgICAgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3Jh
ZGllbnRDYWlybygpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorfQorCitLQ2FudmFzRmlsdGVyRWZmZWN0KiBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86OmNy
ZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmIHR5cGUpIGNvbnN0Cit7
CisgICAgcHJpbnRmKCJLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86OmNyZWF0ZUZpbHRlckVmZmVjdCgp
IFRPRE8hXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKworCisvLyBpdGVtIGNyZWF0aW9uCitSZW5k
ZXJQYXRoKiBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86OmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEqIGFy
ZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUsIFNWR1N0eWxlZEVsZW1lbnQqIG5vZGUsIGNvbnN0IFBh
dGgmIHBhdGgpIGNvbnN0Cit7CisgICAgUmVuZGVyUGF0aCogaXRlbSA9IG5ldyAoYXJlbmEpIFJl
bmRlclBhdGhDYWlybyhzdHlsZSwgbm9kZSk7CisgICAgaXRlbS0+c2V0UGF0aChwYXRoKTsKKyAg
ICByZXR1cm4gaXRlbTsKK30KKworS1JlbmRlcmluZ0RldmljZSogcmVuZGVyaW5nRGV2aWNlKCkK
K3sKKyAgICBzdGF0aWMgS1JlbmRlcmluZ0RldmljZSAqc2hhcmVkUmVuZGVyaW5nRGV2aWNlID0g
bmV3IEtSZW5kZXJpbmdEZXZpY2VDYWlybygpOworICAgIHJldHVybiBzaGFyZWRSZW5kZXJpbmdE
ZXZpY2U7Cit9CisKKworfQorCisvLyB2aW06dHM9NDpldApJbmRleDogV2ViQ29yZS9rY2FudmFz
L2RldmljZS9jYWlyby9LQ2FudmFzSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rY2FudmFzL2RldmljZS9jYWlyby9LQ2FudmFzSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tDYW52YXNJbWFnZUNhaXJvLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKwkJCQkgMjAwNiBNaWNo
YWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlICJJbWFnZS5oIgorI2ltcG9ydCAi
S0NhbnZhc0ltYWdlQ2Fpcm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisKK0tDYW52YXNJ
bWFnZUNhaXJvOjp+S0NhbnZhc0ltYWdlQ2Fpcm8oKQoreworICAgICBpZihtX3BhdHRlcm4pCisg
ICAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KG1fcGF0dGVybik7Cit9Cit2b2lkIEtDYW52
YXNJbWFnZUNhaXJvOjppbml0KGNvbnN0IEltYWdlICZpbWFnZSkgCit7IAorICAgICAvL2hhY2sg
Y2FuL3QgYmUgY29uc3QKKyAgICAgSW1hZ2UqIGltZz0gKEltYWdlKikmaW1hZ2U7CisgICAgIGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGltZy0+ZnJhbWVBdEluZGV4KDApOyAKKyAgICAgaWYo
IXN1cmZhY2UpCisgICAgICAgICAgcmV0dXJuOworICAgICBtX3BhdHRlcm4gPSBjYWlyb19wYXR0
ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShzdXJmYWNlKTsKKyAgICAgbV9zaXplID0gaW1hZ2Uuc2l6
ZSgpOworICAgIC8vRklYTUUgIG5vdCBkZWZpbmVkIGZvciBpbWFnZXMgPworICAgICBjYWlyb19w
YXR0ZXJuX3NldF9leHRlbmQobV9wYXR0ZXJuLENBSVJPX0VYVEVORF9SRVBFQVQpOworfQorCit2
b2lkIEtDYW52YXNJbWFnZUNhaXJvOjppbml0KEludFNpemUgc2l6ZSkKK3sgCisgICAgbV9zaXpl
ID0gc2l6ZTsgCisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMixzaXplLndpZHRoKCksc2l6ZS5oZWlnaHQo
KSk7CisgICAgbV9wYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1cmZhY2Uoc3Vy
ZmFjZSk7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworICAgIC8vRklYTUUg
IG5vdCBkZWZpbmVkIGZvciBpbWFnZXMgPworICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZCht
X3BhdHRlcm4sQ0FJUk9fRVhURU5EX1JFUEVBVCk7Cit9CisKK30KKworLy8gdmltOnRzPTQ6ZXQK
SW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVy
R3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9j
YWlyby9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnRDYWlyby5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKwkJCQkgIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlrZS5lbW1lbEBnbWFpbC5j
b20+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRl
ICJLUmVuZGVyaW5nRGV2aWNlQ2Fpcm8uaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5
bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKKyNpbmNsdWRlICJLUmVu
ZGVyaW5nU3Ryb2tlUGFpbnRlci5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50Q2Fpcm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIGZpbGxfY29sb3Jf
YXJyYXkoY2Fpcm9fcGF0dGVybl90ICpwYXR0ZXJuLCBjb25zdCBWZWN0b3I8S0NHcmFkaWVudFN0
b3A+JiBzdG9wcywgZmxvYXQgb3BhY2l0eSkKK3sKKwlkb3VibGUgciwgZywgYiwgYTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91
YmxlIG9mZnNldCA9IChkb3VibGUpc3RvcHNbaV0uZmlyc3Q7CisgICAgICAgIENvbG9yIGNvbG9y
ID0gc3RvcHNbaV0uc2Vjb25kOworCQljb2xvci5nZXRSR0JBKHIsZyxiLGEpOworICAgICAgIAlh
ID0gYSpvcGFjaXR5OyAKKwkJY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKHBhdHRl
cm4sb2Zmc2V0LHIsZyxiLGEpOworICAgIH0KK30KKworS1JlbmRlcmluZ1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnRDYWlybzo6S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRDYWly
bygpCisgICAgOiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCgpCit7Cit9CisK
KworCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Q2Fpcm86OnJlbmRl
clBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgq
IHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgUmVuZGVyU3R5bGUq
IHJlbmRlclN0eWxlID0gcGF0aC0+c3R5bGUoKTsKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dENhaXJvKiBjYWlyb0NvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dENhaXJvKj4oY29udGV4dCk7CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiBy
ZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQorICAgICAgICBjYWlyb0NvbnRleHQt
PmZpbGxQYXRoKCk7CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIHJlbmRl
clN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkKKyAgICAgICAgY2Fpcm9Db250ZXh0LT5z
dHJva2VQYXRoKCk7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGll
bnRDYWlybzo6c2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAg
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qIGNhaXJvQ29udGV4dCA9IHN0YXRpY19jYXN0
PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihjb250ZXh0KTsKKyAgICBhc3NlcnQoY2Fp
cm9Db250ZXh0ICE9IDApOworCisgICAgY2Fpcm9Db250ZXh0LT5zYXZlKCk7CisKKyAgICBpZiAo
bGlzdGVuZXIoKSkKKyAgICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsK
KworICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKworICAg
IGRvdWJsZSB4MSwgeDIsIHkxLCB5MjsKKwkvL0ZJWE1FOiBjb3BpZWQgZnJvbSBxdAorICAgIGlm
IChib3VuZGluZ0JveE1vZGUoKSkgeworICAgICAgICBGbG9hdFJlY3QgYmJveCA9IGNhaXJvQ29u
dGV4dC0+c3Ryb2tlQkJveCgpOworICAgICAgICB4MSA9IGRvdWJsZShiYm94LngoKSkgKyAoZG91
YmxlKGdyYWRpZW50U3RhcnQoKS54KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgpKSk7
CisgICAgICAgIHkxID0gZG91YmxlKGJib3gueSgpKSArIChkb3VibGUoZ3JhZGllbnRTdGFydCgp
LnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7CisgICAgICAgIHgyID0gZG91
YmxlKGJib3gud2lkdGgoKSkgKyAoZG91YmxlKGdyYWRpZW50RW5kKCkueCgpIC8gMTAwLjApICAq
IGRvdWJsZShiYm94LndpZHRoKCkpKTsKKyAgICAgICAgeTIgPSBkb3VibGUoYmJveC5oZWlnaHQo
KSkgKyAoZG91YmxlKGdyYWRpZW50RW5kKCkueSgpIC8gMTAwLjApICogZG91YmxlKGJib3guaGVp
Z2h0KCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB4MSA9IGdyYWRpZW50U3RhcnQoKS54KCk7
CisgICAgICAgIHkxID0gZ3JhZGllbnRTdGFydCgpLnkoKTsKKyAgICAgICAgeDIgPSBncmFkaWVu
dEVuZCgpLngoKTsKKyAgICAgICAgeTIgPSBncmFkaWVudEVuZCgpLnkoKTsKKyAgICB9CisKKwlj
YWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIgKHgx
LHkxLHgyLHkyKTsKKworICAgIGlmIChzcHJlYWRNZXRob2QoKSA9PSBTUFJFQURNRVRIT0RfUkVQ
RUFUKSB7CisJCWNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLENBSVJPX0VYVEVORF9S
RVBFQVQpOworICAgIH0gZWxzZSBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1BSRUFETUVUSE9EX1JF
RkxFQ1QpIHsKKwkJY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sQ0FJUk9fRVhURU5E
X1JFRkxFQ1QpOworICAgIH0gZWxzZSB7CisJCWNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0
ZXJuLENBSVJPX0VYVEVORF9QQUQpOworICAgIH0KKworCisgICAgLy8gVE9ETzogR3JhZGllbnQg
dHJhbnNmb3JtICsgb3BhY2l0eSBmaXhlcyEgCisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19G
SUxMKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7CisgICAgICAgIEtS
ZW5kZXJpbmdGaWxsUGFpbnRlciBmaWxsUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6Zmls
bFBhaW50ZXIocmVuZGVyU3R5bGUsIG9iamVjdCk7CisgICAgICAgIGNhaXJvQ29udGV4dC0+c2V0
RmlsbChmaWxsUGFpbnRlciwwKTsKKyAgICAgICAgZmlsbF9jb2xvcl9hcnJheShwYXR0ZXJuLCBn
cmFkaWVudFN0b3BzKCksIGZpbGxQYWludGVyLm9wYWNpdHkoKSk7CisgICAgfQorCisgICAgaWYg
KCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFz
U3Ryb2tlKCkpIHsKKyAgICAgICAgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgc3Ryb2tlUGFpbnRl
ciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRlcihyZW5kZXJTdHlsZSwgb2JqZWN0
KTsKKyAgICAgICAgY2Fpcm9Db250ZXh0LT5zZXRTdHJva2Uoc3Ryb2tlUGFpbnRlciwwKTsKKyAg
ICAgICAgZmlsbF9jb2xvcl9hcnJheShwYXR0ZXJuLCBncmFkaWVudFN0b3BzKCksIHN0cm9rZVBh
aW50ZXIub3BhY2l0eSgpKTsKKyAgICB9CisJY2Fpcm9Db250ZXh0LT5zZXRQYXR0ZXJuKHBhdHRl
cm4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnRDYWlybzo6dGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqY29u
dGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0Cit7Cisg
ICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyogY2Fpcm9Db250ZXh0ID0gc3RhdGljX2Nh
c3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyo+KGNvbnRleHQpOworCWNhaXJvQ29udGV4
dC0+ZGVzdHJveVBhdHRlcm4oKTsKKyAgICBjYWlyb0NvbnRleHQtPnJlc3RvcmUoKTsKK30KKwor
dm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudENhaXJvOjpkcmF3KEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1Bh
aW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIGlmICghc2V0dXAoY29udGV4dCwgcGF0
aCwgdHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICByZW5kZXJQYXRoKGNvbnRleHQsIHBhdGgs
IHR5cGUpOworICAgIHRlYXJkb3duKGNvbnRleHQsIHBhdGgsIHR5cGUpOworfQorCisvLyBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudENhaXJvCitLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJSYWRpYWxHcmFkaWVudENhaXJvOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVu
dENhaXJvKCkKKyAgICA6IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KCkKK3sK
K30KKworYm9vbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudENhaXJvOjpzZXR1
cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRDYWlybyogY2Fpcm9Db250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRDYWlybyo+KGNvbnRleHQpOworICAgIGFzc2VydChjYWlyb0NvbnRleHQgIT0g
MCk7CisKKyAgICBjYWlyb0NvbnRleHQtPnNhdmUoKTsKKworICAgIGlmIChsaXN0ZW5lcigpKQor
ICAgICAgICBsaXN0ZW5lcigpLT5yZXNvdXJjZU5vdGlmaWNhdGlvbigpOworCisgICAgUmVuZGVy
U3R5bGUqIHJlbmRlclN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOworICAgIEFmZmluZVRyYW5zZm9y
bSBtYXQgPSBjYWlyb0NvbnRleHQtPmN0bSgpOworCisgICAgZG91YmxlIGN4LCBmeCwgY3ksIGZ5
LCByOworCS8vWFhYIEZJWE1FOiB0aGlzIGlzIHByb2JhYmx5IGFsbCB3cm9uZyBjb3BpZWQgZnJv
bSBxdAorICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgeworICAgICAgICBGbG9hdFJlY3QgYmJv
eCA9IGNhaXJvQ29udGV4dC0+c3Ryb2tlQkJveCgpOworICAgICAgICBjeCA9IGRvdWJsZShiYm94
LngoKSkgKyAoZG91YmxlKGdyYWRpZW50Q2VudGVyKCkueCgpIC8gMTAwLjApICogZG91YmxlKGJi
b3gud2lkdGgoKSkpOworICAgICAgICBjeSA9IGRvdWJsZShiYm94LnkoKSkgKyAoZG91YmxlKGdy
YWRpZW50Q2VudGVyKCkueSgpIC8gMTAwLjApICogZG91YmxlKGJib3guaGVpZ2h0KCkpKTsKKyAg
ICAgICAgZnggPSBkb3VibGUoYmJveC53aWR0aCgpKSArIChkb3VibGUoZ3JhZGllbnRGb2NhbCgp
LngoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LndpZHRoKCkpKSAtIGN4OworICAgICAgICBmeSA9
IGRvdWJsZShiYm94LmhlaWdodCgpKSArIChkb3VibGUoZ3JhZGllbnRGb2NhbCgpLnkoKSAvIDEw
MC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSkgLSBjeTsKKyAgICAgICAgciA9IGRvdWJsZShn
cmFkaWVudFJhZGl1cygpIC8gMTAwLjApICogKHNxcnQocG93KGJib3gud2lkdGgoKSwgMikgKyBw
b3coYmJveC5oZWlnaHQoKSwgMikpKTsKKworICAgICAgICBmbG9hdCB3aWR0aCA9IGJib3gud2lk
dGgoKTsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gYmJveC5oZWlnaHQoKTsKKworICAgICAgICBp
bnQgZGlmZiA9IGludCh3aWR0aCAtIGhlaWdodCk7IC8vIGFsbG93IHNsaWdodCB0b2xlcmFuY2UK
KyAgICAgICAgaWYgKCEoZGlmZiA+IC0yICYmIGRpZmYgPCAyKSkgeworICAgICAgICAgICAgLy8g
bWFrZSBlbGxpcHRpY2FsIG9yIGNpcmN1bGFyIGRlcGVuZGluZyBvbiBiYm94IGFzcGVjdCByYXRp
bworICAgICAgICAgICAgZmxvYXQgcmF0aW9YID0gKHdpZHRoIC8gaGVpZ2h0KTsKKyAgICAgICAg
ICAgIGZsb2F0IHJhdGlvWSA9IChoZWlnaHQgLyB3aWR0aCk7CisgICAgICAgICAgICBtYXQuc2Nh
bGUoKHdpZHRoID4gaGVpZ2h0KSA/IDEgOiByYXRpb1gsICh3aWR0aCA+IGhlaWdodCkgPyByYXRp
b1kgOiAxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGN4ID0gZ3JhZGllbnRD
ZW50ZXIoKS54KCk7CisgICAgICAgIGN5ID0gZ3JhZGllbnRDZW50ZXIoKS55KCk7CisKKyAgICAg
ICAgZnggPSBncmFkaWVudEZvY2FsKCkueCgpOworICAgICAgICBmeSA9IGdyYWRpZW50Rm9jYWwo
KS55KCk7CisKKyAgICAgICAgZnggLT0gY3g7CisgICAgICAgIGZ5IC09IGN5OworCisgICAgICAg
IHIgPSBncmFkaWVudFJhZGl1cygpOworICAgIH0KKworICAgIGlmIChzcXJ0KGZ4ICogZnggKyBm
eSAqIGZ5KSA+IHIpIHsKKyAgICAgICAgLy8gU3BlYzogSWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRl
IHRoZSBjaXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5KSBhbmQgciwgc2V0IChmeCwgZnkpCisgICAg
ICAgIC8vIHRvIHRoZSBwb2ludCBvZiBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpbmUgdGhyb3VnaCAo
ZngsIGZ5KSBhbmQgdGhlIGNpcmNsZS4KKyAgICAgICAgZG91YmxlIGFuZ2xlID0gYXRhbjIoZnks
IGZ4KTsKKyAgICAgICAgZnggPSBpbnQoY29zKGFuZ2xlKSAqIHIpIC0gMTsKKyAgICAgICAgZnkg
PSBpbnQoc2luKGFuZ2xlKSAqIHIpIC0gMTsKKyAgICB9CisKKwljYWlyb19wYXR0ZXJuX3QqIHBh
dHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yYWRpYWwgKGN4LGN5LHIsZngsZnkscik7CisK
KyAgICBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1BSRUFETUVUSE9EX1JFUEVBVCkgeworCQljYWly
b19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybixDQUlST19FWFRFTkRfUkVQRUFUKTsKKyAgICB9
IGVsc2UgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRUZMRUNUKSB7CisJCWNh
aXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLENBSVJPX0VYVEVORF9SRUZMRUNUKTsKKyAg
ICB9IGVsc2UgeworCQljYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybixDQUlST19FWFRF
TkRfUEFEKTsKKyAgICB9CisKKworICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIHJl
bmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpIHsKKyAgICAgICAgS1JlbmRlcmluZ0Zp
bGxQYWludGVyIGZpbGxQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRlcihy
ZW5kZXJTdHlsZSwgb2JqZWN0KTsKKyAgICAgICAgY2Fpcm9Db250ZXh0LT5zZXRGaWxsKGZpbGxQ
YWludGVyLDApOworICAgICAgICBmaWxsX2NvbG9yX2FycmF5KHBhdHRlcm4sIGdyYWRpZW50U3Rv
cHMoKSwgZmlsbFBhaW50ZXIub3BhY2l0eSgpKTsKKyAgICB9CisKKyAgICBpZiAoKHR5cGUgJiBB
UFBMWV9UT19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkg
eworICAgICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyID0gS1NWR1Bh
aW50ZXJGYWN0b3J5OjpzdHJva2VQYWludGVyKHJlbmRlclN0eWxlLCBvYmplY3QpOworICAgICAg
ICBjYWlyb0NvbnRleHQtPnNldFN0cm9rZShzdHJva2VQYWludGVyLDApOworICAgICAgICBmaWxs
X2NvbG9yX2FycmF5KHBhdHRlcm4sIGdyYWRpZW50U3RvcHMoKSwgc3Ryb2tlUGFpbnRlci5vcGFj
aXR5KCkpOworICAgIH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRUcmFucyA9IGdyYWRp
ZW50VHJhbnNmb3JtKCk7CisJY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sJigoY2Fp
cm9fbWF0cml4X3QpZ3JhZGllbnRUcmFucykpOworCWNhaXJvQ29udGV4dC0+c2V0UGF0dGVybihw
YXR0ZXJuKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJSYWRpYWxHcmFkaWVudENhaXJvOjpyZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBl
KSBjb25zdAoreworICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHBhdGgtPnN0eWxlKCk7
CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyogY2Fpcm9Db250ZXh0ID0gc3RhdGlj
X2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyo+KGNvbnRleHQpOworCisgICAgaWYg
KCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0Zp
bGwoKSkKKyAgICAgICAgY2Fpcm9Db250ZXh0LT5maWxsUGF0aCgpOworCisgICAgaWYgKCh0eXBl
ICYgQVBQTFlfVE9fU1RST0tFKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tl
KCkpCisgICAgICAgIGNhaXJvQ29udGV4dC0+c3Ryb2tlUGF0aCgpOworfQorCit2b2lkIEtSZW5k
ZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm86OmRyYXcoS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRU
eXBlIHR5cGUpIGNvbnN0Cit7CisgICAgaWYgKCFzZXR1cChjb250ZXh0LCBwYXRoLCB0eXBlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHJlbmRlclBhdGgoY29udGV4dCwgcGF0aCwgdHlwZSk7Cisg
ICAgdGVhcmRvd24oY29udGV4dCwgcGF0aCwgdHlwZSk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1Bh
aW50U2VydmVyUmFkaWFsR3JhZGllbnRDYWlybzo6dGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBj
b25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qIGNhaXJvQ29udGV4dCA9
IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihjb250ZXh0KTsKKwlj
YWlyb0NvbnRleHQtPmRlc3Ryb3lQYXR0ZXJuKCk7CisgICAgY2Fpcm9Db250ZXh0LT5yZXN0b3Jl
KCk7Cit9CisKK30KKworLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9jYWlyby9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVy
UGF0dGVybkNhaXJvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
Y2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisJCQkJICAyMDA2IE1pY2hh
ZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPG1hdGguaD4KKwor
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZUNhaXJv
LmgiCisjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiS1JlbmRl
cmluZ0ZpbGxQYWludGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIK
KyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uaCIKKyNpbmNsdWRl
ICJLQ2FudmFzSW1hZ2VDYWlyby5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlybzo6
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvKCkKKyAgICA6IEtSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm4oKQoreworfQorCitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fp
cm86On5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8oKQoreworfQorCit2b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlybzo6cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdl
dFR5cGUgdHlwZSkgY29uc3QKK3sKK30KKworYm9vbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuQ2Fpcm86OnNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKK30K
Kwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm86OnRlYXJkb3duKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50
VGFyZ2V0VHlwZSkgY29uc3QKK3sKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuQ2Fpcm86OmRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJl
bmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHRDYWlybyogY2Fpcm9Db250ZXh0ID0gCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKj4oY29udGV4dCk7CisgICAg
Y2Fpcm9Db250ZXh0LT5zYXZlKCk7CisgICAgaWYgKGxpc3RlbmVyKCkpIHsKKyAgICAgICAgbGlz
dGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsKKyAgICB9CisKKyAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworICAgIGNhaXJvQ29udGV4dC0+YWRkUGF0
aChwYXRoLT5wYXRoKCkpOworCisJS0NhbnZhc0ltYWdlQ2Fpcm8qIGltYWdlID0gc3RhdGljX2Nh
c3Q8S0NhbnZhc0ltYWdlQ2Fpcm8qPih0aWxlKCkpOwkJCisJY2Fpcm9fcGF0dGVybl90KiBwYXR0
ZXJuID0gaW1hZ2UtPnBhdHRlcm4oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5z
ID0gcGF0dGVyblRyYW5zZm9ybSgpOworCWNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJu
LCYoKGNhaXJvX21hdHJpeF90KXBhdHRlcm5UcmFucykpOworCisJY2Fpcm9Db250ZXh0LT5zZXRQ
YXR0ZXJuKHBhdHRlcm4pOworICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIHJlbmRl
clN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpIHsKKyAgICAgICAgS1JlbmRlcmluZ0ZpbGxQ
YWludGVyIGZpbGxQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRlcihyZW5k
ZXJTdHlsZSwgcGF0aCk7CisgICAgICAgIGNhaXJvQ29udGV4dC0+c2V0RmlsbChmaWxsUGFpbnRl
ciwwKTsKKyAgICAgICAgY2Fpcm9Db250ZXh0LT5maWxsUGF0aCgpOworICAgIH0KKworICAgIGlm
KCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiAgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhh
c1N0cm9rZSgpKSB7CisgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyIHN0cm9rZVBhaW50
ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50ZXIocmVuZGVyU3R5bGUsIHBhdGgp
OworICAgICAgICBjYWlyb0NvbnRleHQtPnNldFN0cm9rZShzdHJva2VQYWludGVyLDApOworICAg
ICAgICBjYWlyb0NvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICAgICAgLyogaWYoaXNQYWludGlu
Z1RleHQoKSkgLi4uICovCisgICAgfQorCisJY2Fpcm9Db250ZXh0LT5kZXN0cm95UGF0dGVybigp
OworICAgIGNhaXJvQ29udGV4dC0+cmVzdG9yZSgpOworfQorCit9CisvLyB2aW06dHM9NDpub2V0
CisKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS0NhbnZhc0NsaXBwZXJDYWly
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS0NhbnZhc0Ns
aXBwZXJDYWlyby5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWly
by9LQ2FudmFzQ2xpcHBlckNhaXJvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNSBBcHBsZSBDb21wdXRl
ciwgSW5jLgorCQkJCSAgMjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4K
KworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaWZuZGVmIEtDYW52
YXNDbGlwcGVyQ2Fpcm9faAorI2RlZmluZSBLQ2FudmFzQ2xpcHBlckNhaXJvX2gKKyNpbmNsdWRl
ICJLQ2FudmFzQ2xpcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtDYW52
YXNDbGlwcGVyQ2Fpcm8gOiBwdWJsaWMgS0NhbnZhc0NsaXBwZXIgeworcHVibGljOgorICAgIEtD
YW52YXNDbGlwcGVyQ2Fpcm8oKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5Q2xpcChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKK307CisKK30K
KworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlyby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRD
YWlyby5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWlyby9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCQkJCSAgMjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtl
LmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlyb19ICisjZGVmaW5lIEtSZW5k
ZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm9fSAorCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgS1JlbmRl
cmluZ1BhaW50U2VydmVyU29saWRDYWlybyA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJT
b2xpZAoreworcHVibGljOgorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8oKTsK
KyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBh
dGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNldHVwKEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdl
dFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsK
K307CisKK30KKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvY2Fpcm8vUmVuZGVyUGF0aENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNSBFcmljIFNlaWRlbCA8ZXJpYy5zZWlkZWxAa2RlbWFpbC5uZXQ+CisJ
CQkJICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgIlJlbmRlclBhdGhDYWlyby5oIgorI2luY2x1ZGUg
IktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZUNh
aXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NU
eXBlcy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
UmVuZGVyUGF0aENhaXJvOjpSZW5kZXJQYXRoQ2Fpcm8oUmVuZGVyU3R5bGUqIHN0eWxlLCBTVkdT
dHlsZWRFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyUGF0aChzdHlsZSwgbm9kZSkKK3sKK30K
KworYm9vbCBSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwLCBi
b29sIHJlcXVpcmVzU3Ryb2tlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVy
IHN0cm9rZVBhaW50ZXIgPSAKKyAgICAgICAgICAgIEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tl
UGFpbnRlcihzdHlsZSgpLCB0aGlzKTsKKworICAgIGZsb2F0IGxpbmVXaWR0aCA9IHN0cm9rZVBh
aW50ZXIuc3Ryb2tlV2lkdGgoKTsKKyAgICBMaW5lQ2FwIGNhcCA9IEJ1dHRDYXA7CisgICAgTGlu
ZUpvaW4gam9pbiA9IE1pdGVySm9pbjsKKyAgICBmbG9hdCBtaXRlckxpbWl0ID0gMTAuMDsKKwor
CisgICAgaWYgKHN0cm9rZVBhaW50ZXIuc3Ryb2tlQ2FwU3R5bGUoKSA9PSBDQVBfUk9VTkQpIHsK
KyAgICAgICAgY2FwID0gUm91bmRDYXA7CisgICAgfSBlbHNlIGlmIChzdHJva2VQYWludGVyLnN0
cm9rZUNhcFN0eWxlKCkgPT0gQ0FQX1NRVUFSRSkgeworICAgICAgICBjYXAgPSBTcXVhcmVDYXA7
CisgICAgfQorCisgICAgaWYoc3Ryb2tlUGFpbnRlci5zdHJva2VKb2luU3R5bGUoKSA9PSBKT0lO
X1JPVU5EKSB7CisgICAgICAgICBqb2luID0gUm91bmRKb2luOworICAgIH0gZWxzZSBpZihzdHJv
a2VQYWludGVyLnN0cm9rZUpvaW5TdHlsZSgpID09IEpPSU5fQkVWRUwpIHsKKyAgICAgICAgIGpv
aW4gPSBCZXZlbEpvaW47CisgICAgfQorICAgIHJldHVybiBwYXRoKCkuc3Ryb2tlQ29udGFpbnMo
cCxsaW5lV2lkdGgsY2FwLGpvaW4sbWl0ZXJMaW1pdCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJQ
YXRoOjpzdHJva2VCQm94KCkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBz
dHJva2VQYWludGVyID0gCisgICAgICAgICAgICBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBh
aW50ZXIoc3R5bGUoKSwgdGhpcyk7CisKKyAgICBmbG9hdCBsaW5lV2lkdGggPSBzdHJva2VQYWlu
dGVyLnN0cm9rZVdpZHRoKCk7CisgICAgTGluZUNhcCBjYXAgPSBCdXR0Q2FwOworICAgIExpbmVK
b2luIGpvaW4gPSBNaXRlckpvaW47CisgICAgZmxvYXQgbWl0ZXJMaW1pdCA9IDEwLjA7CisKKwor
ICAgIGlmIChzdHJva2VQYWludGVyLnN0cm9rZUNhcFN0eWxlKCkgPT0gQ0FQX1JPVU5EKSB7Cisg
ICAgICAgIGNhcCA9IFJvdW5kQ2FwOworICAgIH0gZWxzZSBpZiAoc3Ryb2tlUGFpbnRlci5zdHJv
a2VDYXBTdHlsZSgpID09IENBUF9TUVVBUkUpIHsKKyAgICAgICAgY2FwID0gU3F1YXJlQ2FwOwor
ICAgIH0KKworICAgIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tlSm9pblN0eWxlKCkgPT0gSk9JTl9S
T1VORCkgeworICAgICAgICAgam9pbiA9IFJvdW5kSm9pbjsKKyAgICB9IGVsc2UgaWYoc3Ryb2tl
UGFpbnRlci5zdHJva2VKb2luU3R5bGUoKSA9PSBKT0lOX0JFVkVMKSB7CisgICAgICAgICBqb2lu
ID0gQmV2ZWxKb2luOworICAgIH0KKyAgICByZXR1cm4gcGF0aCgpLnN0cm9rZUJvdW5kaW5nUmVj
dChsaW5lV2lkdGgsY2FwLGpvaW4sbWl0ZXJMaW1pdCk7Cit9CisKKworfQorCisvLyB2aW06dHM9
NDpldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWlyby9LUmVuZGVyaW5nRGV2aWNl
Q2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5k
ZXJpbmdEZXZpY2VDYWlyby5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9rY2FudmFzL2Rldmlj
ZS9jYWlyby9LUmVuZGVyaW5nRGV2aWNlQ2Fpcm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCQkJCSAgMjAwNiBNaWNoYWVsIEVtbWVsIDxt
aWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgS1JlbmRlcmluZ0RldmljZUNhaXJvX0gKKyNkZWZpbmUgS1JlbmRlcmluZ0Rl
dmljZUNhaXJvX0gKKworCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgorI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBSZW5kZXJQYXRoOworY2xhc3MgS1JlbmRlcmluZ1N0cm9rZVBhaW50
ZXI7CitjbGFzcyBLUmVuZGVyaW5nRmlsbFBhaW50ZXI7CitjbGFzcyBQYXRoOworY2xhc3MgQ29s
b3I7CitjbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKK2NsYXNzIEtDYW52YXNSZXNvdXJjZTsK
KworY2xhc3MgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyA6IHB1YmxpYyBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dAoreworcHVibGljOgorICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fp
cm8oR3JhcGhpY3NDb250ZXh0Q2Fpcm8qKTsKKyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nRGV2aWNl
Q29udGV4dENhaXJvKCk7CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gY3Rt
KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEludFJlY3QgbWFwRnJvbVZpc3VhbChjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBJbnRSZWN0IG1hcFRvVmlzdWFsKGNvbnN0IEludFJlY3QmKTsK
KworICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGF0
aChjb25zdCBQYXRoJik7CisKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogY3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCk7CisgICAgCisgICAgLy8gQ2Fpcm8gc3BlY2lmaWMgc3R1ZmYKKyAgICB2
b2lkIHNhdmUoKTsKKyAgICB2b2lkIHJlc3RvcmUoKTsKKyAgICB2b2lkIHNldEZpbGxSdWxlKFdp
bmRSdWxlKTsKKyAgICB2b2lkIGZpbGxQYXRoKCk7CisgICAgdm9pZCBzdHJva2VQYXRoKCk7Cisg
ICAgdm9pZCBjbGlwKFBhdGgmKTsKKyAgICB2b2lkIHJlc2V0Q2xpcCgpOworICAgIHZvaWQgc2V0
VHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSYpOworICAgIHZvaWQgc2V0U3Ryb2tlKGNvbnN0IEtS
ZW5kZXJpbmdTdHJva2VQYWludGVyJixDb2xvciopOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCAmcCk7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJCb3goKSBjb25zdDsK
KyAgICB2b2lkIHNldEZpbGwoY29uc3QgS1JlbmRlcmluZ0ZpbGxQYWludGVyJixDb2xvciopOwor
ICAgIHZvaWQgc2V0UGF0dGVybihjYWlyb19wYXR0ZXJuX3QqKTsKKyAgICB2b2lkIGRlc3Ryb3lQ
YXR0ZXJuKCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIGNhaXJvQ29udGV4dCgpeyByZXR1
cm4gbV9nYzt9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIG1fZ2M7Cisg
ICAgY2Fpcm9fcGF0dGVybl90ICptX3BhdHRlcm47Cit9OworCitjbGFzcyBLUmVuZGVyaW5nRGV2
aWNlQ2Fpcm8gOiBwdWJsaWMgS1JlbmRlcmluZ0RldmljZQoreworcHVibGljOgorICAgIEtSZW5k
ZXJpbmdEZXZpY2VDYWlybygpOworICAgIHZpcnR1YWwgfktSZW5kZXJpbmdEZXZpY2VDYWlybygp
OworCisgICAgdmlydHVhbCBib29sIGlzQnVmZmVyZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBwb3BDb250ZXh0KCk7Cisg
ICAgdmlydHVhbCB2b2lkIHB1c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kik7CisK
KyAgICAvLyBjb250ZXh0IG1hbmFnZW1lbnQuCisgICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dCogY29udGV4dEZvckltYWdlKEtDYW52YXNJbWFnZSopIGNvbnN0OworCisKKyAgICAv
LyBSZXNvdXJjZSBjcmVhdGlvbgorICAgIHZpcnR1YWwgS0NhbnZhc1Jlc291cmNlKiBjcmVhdGVS
ZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSYpIGNvbnN0OworICAgIHZpcnR1YWwgS1JlbmRl
cmluZ1BhaW50U2VydmVyKiBjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1BhaW50U2VydmVyVHlw
ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCogY3JlYXRlRmlsdGVy
RWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSYpIGNvbnN0OworCisgICAgLy8gaXRlbSBj
cmVhdGlvbgorICAgIHZpcnR1YWwgUmVuZGVyUGF0aCogY3JlYXRlSXRlbShSZW5kZXJBcmVuYSos
IFJlbmRlclN0eWxlKiwgU1ZHU3R5bGVkRWxlbWVudCosIGNvbnN0IFBhdGgmKSBjb25zdDsKKwor
ICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qIGNhaXJvQ29udGV4dCgpIGNvbnN0Owor
ICBwcml2YXRlOgorICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qIG1fY29udGV4dDsK
KworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnRDYWlyby5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9jYWlyby9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCQkJCSAgMjAwNiBN
aWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRD
YWlyb19ICisjZGVmaW5lIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm9fSAorCisj
aW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudENhaXJv
IDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Cit7CitwdWJsaWM6
CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRDYWlybygpOworCisgICAg
dmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQ
YXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXR1cChL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJn
ZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqICwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0
OworfTsKKworY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRDYWlybyA6
IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudAoreworcHVibGljOgor
ICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm8oKTsKKworICAgIHZp
cnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0
aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0
VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0Owor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0Owor
fTsKKworfQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9jYWlyby9LQ2FudmFzSW1hZ2VDYWlyby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS0NhbnZhc0ltYWdlQ2Fpcm8uaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS0NhbnZhc0ltYWdlQ2Fpcm8uaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKwkJCQkgMjAwNiBNaWNoYWVs
IEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBLQ2FudmFzUmVz
b3VyY2VzUXVhcnR6X2gKKyNkZWZpbmUgS0NhbnZhc1Jlc291cmNlc1F1YXJ0el9oCisKKyNpbXBv
cnQgIktDYW52YXNJbWFnZS5oIgorCitzdHJ1Y3QgX2NhaXJvX3N1cmZhY2U7Cit0eXBlZGVmIHN0
cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7CitzdHJ1Y3QgX2NhaXJvX3BhdHRl
cm47Cit0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fcGF0dGVybiBjYWlyb19wYXR0ZXJuX3Q7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworCitjbGFzcyBLQ2FudmFzSW1hZ2VDYWlybyA6IHB1YmxpYyBL
Q2FudmFzSW1hZ2UgeworcHVibGljOgorICAgIEtDYW52YXNJbWFnZUNhaXJvKCk6bV9zaXplKDAs
MCksbV9wYXR0ZXJuKDApeyB9CisgICAgfktDYW52YXNJbWFnZUNhaXJvKCk7CisgICAgdm9pZCBp
bml0KGNvbnN0IEltYWdlICYpOyAKKyAgICB2b2lkIGluaXQoSW50U2l6ZSBzaXplKTsgCisKKyAg
ICBJbnRTaXplIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjYWlyb19wYXR0ZXJuX3Qq
IHBhdHRlcm4oKSB7IHJldHVybiBtX3BhdHRlcm47IH0KKyAgICAKK3ByaXZhdGU6CisgICAgSW50
U2l6ZSBtX3NpemU7CisgICAgY2Fpcm9fcGF0dGVybl90KiBtX3BhdHRlcm47Cit9OworCit9CisK
KyNlbmRpZgorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fp
cm8vS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9jYWlyby9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fp
cm8uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRl
cmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCQkJCSAgMjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtl
LmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJv
amVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvX0gKKyNkZWZpbmUgS1Jl
bmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvX0gKKworI2luY2x1ZGUgIktSZW5kZXJpbmdQ
YWludFNlcnZlclBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8gOiBwdWJsaWMgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyUGF0dGVybgoreworcHVibGljOgorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5D
YWlybygpOworICAgIHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlybygp
OworCisgICAgdmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25z
dCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtD
UGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlw
ZSkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlw
ZSkgY29uc3Q7Cit9OworCit9CisKKyNlbmRpZgorCisvLyB2aW06dHM9NDpldApJbmRleDogV2Vi
Q29yZS9rY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5oCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNv
cmUva2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDEyIEBACiAgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gIlJlbmRlckZvcmVpZ25PYmplY3QiOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwogICAgIAotICAg
IHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zKGludCB4UG9zLCBpbnQgeVBv
cyk7CisgICAgdmlydHVhbCBpbnQgeFBvcygpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHlQb3Mo
KSBjb25zdDsKKyAgICBib29sIGFic29sdXRlUG9zaXRpb24oaW50ICZ4UG9zLCBpbnQgJnlQb3Ms
IGJvb2wgZj1mYWxzZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkg
Y29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYWxUcmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07
IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50
UmVjdCYgciwgYm9vbCBmKTsKQEAgLTQ5LDcgKzU0LDcgQEAKICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoTm9kZUluZm8mLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uKTsKIAogIHByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uRm9y
QXR0cmlidXRlcygpOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0
ZXMoKSBjb25zdDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiAgICAgSW50UmVj
dCBtX2Fic29sdXRlQm91bmRzOwogfTsKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdDb250
YWluZXIuY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBACiBib29sIFJlbmRl
clNWR0NvbnRhaW5lcjo6cmVxdWlyZXNMYXllcigpCiB7CiAgICAgLy8gT25seSBhbGxvdyBhbiA8
c3ZnPiBlbGVtZW50IHRvIGdlbmVyYXRlIGEgbGF5ZXIgd2hlbiBpdCdzIHBvc2l0aW9uZWQgaW4g
YSBub24tU1ZHIGNvbnRleHQKLSAgICByZXR1cm4gKGlzUG9zaXRpb25lZCgpIHx8IGlzUmVsUG9z
aXRpb25lZCgpKSAmJiAocGFyZW50KCkgJiYgcGFyZW50KCktPmVsZW1lbnQoKSAmJiAhcGFyZW50
KCktPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpOworICAgCXJldHVybiAoaXNQb3NpdGlvbmVk
KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkpICYmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+ZWxlbWVu
dCgpICYmICFwYXJlbnQoKS0+ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSk7CiB9CiAKIHNob3J0
IFJlbmRlclNWR0NvbnRhaW5lcjo6bGluZUhlaWdodChib29sIGIsIGJvb2wgaXNSb290TGluZUJv
eCkgY29uc3QKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgIH0KICAgICAKICAgICBpZiAoIWxvY2Fs
VHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKQotICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25jYXRD
VE0obG9jYWxUcmFuc2Zvcm0oKSk7CisJICAgIGRldmljZUNvbnRleHQtPmNvbmNhdENUTShsb2Nh
bFRyYW5zZm9ybSgpKTsKICAgICAKICAgICBGbG9hdFJlY3Qgc3Ryb2tlQkJveCA9IHJlbGF0aXZl
QkJveCh0cnVlKTsKICAgICAKQEAgLTE5MSwxMCArMTkxLDkgQEAKICAgICAgICAgZmlsdGVyLT5w
cmVwYXJlRmlsdGVyKHN0cm9rZUJCb3gpOwogICAgIAogICAgIGlmICghdmlld0JveCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgZGV2aWNlQ29udGV4dC0+Y29uY2F0Q1RNKHZpZXdwb3J0VHJhbnNmb3Jt
KCkpOworCQlkZXZpY2VDb250ZXh0LT5jb25jYXRDVE0odmlld3BvcnRUcmFuc2Zvcm0oKSk7CiAg
ICAgCiAgICAgUmVuZGVyQ29udGFpbmVyOjpwYWludChwYWludEluZm8sIDAsIDApOwotICAgIAog
ICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoc3Ryb2tlQkJveCk7
CiAgICAgCkBAIC0yNTYsNyArMjU1LDcgQEAKIHsKICAgICBpZiAoIXZpZXdCb3goKS5pc0VtcHR5
KCkpIHsKICAgICAgICAgRmxvYXRSZWN0IHZpZXdwb3J0UmVjdCA9IHZpZXdwb3J0KCk7Ci0gICAg
ICAgIGlmICghcGFyZW50KCktPmlzS0NhbnZhc0NvbnRhaW5lcigpKQorICAgICAgICBpZiAocGFy
ZW50KCkgJiYgIXBhcmVudCgpLT5pc0tDYW52YXNDb250YWluZXIoKSkKICAgICAgICAgICAgIHZp
ZXdwb3J0UmVjdCA9IEZsb2F0UmVjdCh2aWV3cG9ydCgpLngoKSwgdmlld3BvcnQoKS55KCksIHdp
ZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIGdldEFzcGVjdFJhdGlvKHZpZXdCb3go
KSwgdmlld3BvcnRSZWN0KTsKICAgICB9CkBAIC0yNzYsMTUgKzI3NSwyMyBAQAogICAgICAgICBy
ZXBhaW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci0+ZmlsdGVyQkJveEZvckl0
ZW1CQm94KHJlcGFpbnRSZWN0KSkpOwogCiAgICAgLy8gRklYTUU6IHdoYXQgYWJvdXQgdHJhbnNm
b3JtPwotCisJCiAgICAgcmV0dXJuIHJlcGFpbnRSZWN0OwogfQogCiB2b2lkIFJlbmRlclNWR0Nv
bnRhaW5lcjo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmKQog
ewogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBsb2NhbFRyYW5zZm9ybSgpOworICAg
IGlmICghdmlld3BvcnQoKS5pc0VtcHR5KCkpIHsKKwkJRmxvYXRSZWN0IHZpZXdSZWN0ID0gdmll
d3BvcnQoKTsKKwkJdHJhbnNmb3JtLnRyYW5zbGF0ZSh2aWV3UmVjdC54KCksdmlld1JlY3QueSgp
KTsKKyAgICB9CiAgICAgciA9IHRyYW5zZm9ybS5tYXBSZWN0KHIpOwogICAgIAorCS8vRklYTUU6
IGlzIHRoaXMgdHJ1ZT8gd2l0aG91dCBpdCBjbGlwIGlzIHRvIHNtYWxsCisgICAgaWYgKCFyLmlz
RW1wdHkoKSkKKyAgICAgICAgci5pbmZsYXRlKDEpOyAvLyBpbmZsYXRlIDEgcGl4ZWwgZm9yIGFu
dGlhbGlhc2luZworCiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGZpbHRlcgogCiAgICAgUmVuZGVy
Q29udGFpbmVyOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBmKTsKQEAgLTI5NSw2ICsz
MDIsMzkgQEAKICAgICByZXR1cm4gdmlld3BvcnRUcmFuc2Zvcm0oKSAqIFJlbmRlckNvbnRhaW5l
cjo6YWJzb2x1dGVUcmFuc2Zvcm0oKTsKIH0KIAoraW50ICBSZW5kZXJTVkdDb250YWluZXI6OnhQ
b3MoKSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0eCA9dmlld3BvcnRUcmFuc2Zvcm0o
KSAqIGxvY2FsVHJhbnNmb3JtKCk7CisgICAgcmV0dXJuIHR4LmR4KCk7Cit9CisKK2ludCAgUmVu
ZGVyU1ZHQ29udGFpbmVyOjp5UG9zKCkgY29uc3QgCit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHR4
ID12aWV3cG9ydFRyYW5zZm9ybSgpICogbG9jYWxUcmFuc2Zvcm0oKTsKKyAgICByZXR1cm4gdHgu
ZHkoKTsKK30KKwordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnNldFBvcyhpbnQgeFBvcywgaW50
IHlQb3MpCit7CisJLy9UaGUgU1ZHIGNvbnRhaW5lciBpcyBub3QgbW92ZWQgYnkgYmxvY2sgbGF5
b3V0cyAKKwkvL0ZJWE1FOiA/PworCS8vc2VlIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxk
cmVuIC4uLiBjaGlsZC0+c2V0UG9zKGNoaWxkLT54UG9zKCksIHlQb3NFc3RpbWF0ZSk7Cit9CisK
K2Jvb2wgIFJlbmRlclNWR0NvbnRhaW5lcjo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQb3MsIGlu
dCAmeVBvcywgYm9vbCBmKQoreworCS8vRklYTUU6IGFsd2F5cyBmaXhlZCA/CisgICAgZiA9IHRy
dWU7CisKKyAgICBSZW5kZXJPYmplY3QgKm8gPSBjb250YWluZXIoKTsKKyAgICBpZiAobykKKwkJ
by0+YWJzb2x1dGVQb3NpdGlvbih4UG9zLCB5UG9zLCBmKTsKKworICAgIEFmZmluZVRyYW5zZm9y
bSB0eCA9dmlld3BvcnRUcmFuc2Zvcm0oKSAqIGxvY2FsVHJhbnNmb3JtKCk7CisJeFBvcyArPSB0
eC5keCgpOworCXlQb3MgKz0gdHguZHkoKTsKKwlyZXR1cm4gdHJ1ZTsKK30KIGJvb2wgUmVuZGVy
U1ZHQ29udGFpbmVyOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKIHsK
ICAgICBSZW5kZXJPYmplY3QgKmN1cnJlbnQgPSBmaXJzdENoaWxkKCk7CkluZGV4OiBXZWJDb3Jl
L2tjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
Y2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNv
cmUva2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
MTIgKzM2LDUzIEBACiB7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0
Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQorQWZmaW5lVHJhbnNmb3JtIFJlbmRlckZvcmVp
Z25PYmplY3Q6OnRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgU1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQqIGZvcmVpZ24gPSBzdGF0aWNfY2FzdDxTVkdGb3JlaWduT2JqZWN0
RWxlbWVudCo+KGVsZW1lbnQoKSk7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5z
bGF0ZShmb3JlaWduLT54KCktPnZhbHVlKCksIGZvcmVpZ24tPnkoKS0+dmFsdWUoKSk7CiB9CiAK
K0FmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0OjphYnNvbHV0ZVRyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zPSBSZW5kZXJDb250YWluZXI6OmFi
c29sdXRlVHJhbnNmb3JtKCk7CisgICAgcmV0dXJuIHRyYW5zKnRyYW5zbGF0aW9uRm9yQXR0cmli
dXRlcygpOworfQorCitpbnQgIFJlbmRlckZvcmVpZ25PYmplY3Q6OnhQb3MoKSBjb25zdAorewor
ICAgIEFmZmluZVRyYW5zZm9ybSB0eCA9dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkgKiBsb2Nh
bFRyYW5zZm9ybSgpOworICAgIHJldHVybiB0eC5keCgpOworfQorCitpbnQgIFJlbmRlckZvcmVp
Z25PYmplY3Q6OnlQb3MoKSBjb25zdCAKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHggPXRyYW5z
bGF0aW9uRm9yQXR0cmlidXRlcygpICogbG9jYWxUcmFuc2Zvcm0oKTsKKyAgICByZXR1cm4gdHgu
ZHkoKTsKK30KKwordm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpzZXRQb3MoaW50IHhQb3MsIGlu
dCB5UG9zKQoreworICAgIC8vdGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkCisgICAgQVNTRVJU
KDApOworfQorCitib29sICBSZW5kZXJGb3JlaWduT2JqZWN0OjphYnNvbHV0ZVBvc2l0aW9uKGlu
dCAmeFBvcywgaW50ICZ5UG9zLCBib29sIGYpCit7CisJLy9GSVhNRTogYWx3YXlzIGZpeGVkID8K
KyAgICBmID0gdHJ1ZTsKKyAgICBSZW5kZXJPYmplY3QgKm8gPSBjb250YWluZXIoKTsKKyAgICBp
ZiAobyAmJiBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGYpKSB7CisgICAgICAgIEFm
ZmluZVRyYW5zZm9ybSB0eCA9dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkgKiBsb2NhbFRyYW5z
Zm9ybSgpOworCSAgICB4UG9zICs9IHR4LmR4KCk7CisJICAgIHlQb3MgKz0gdHguZHkoKTsKKwkg
ICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeFBvcz0wOworICAgICAgICB5
UG9zPTA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyRm9y
ZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQg
cGFyZW50WSkKIHsKICAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKQEAg
LTEyMSw3ICsxNjIsNiBAQAogYm9vbCBSZW5kZXJGb3JlaWduT2JqZWN0Ojpub2RlQXRQb2ludChO
b2RlSW5mbyYgaW5mbywgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQogewogICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9
IGFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgdG90YWxUcmFuc2Zvcm0gKj0gdHJhbnNsYXRpb25G
b3JBdHRyaWJ1dGVzKCk7CiAgICAgZG91YmxlIGxvY2FsWCwgbG9jYWxZOwogICAgIHRvdGFsVHJh
bnNmb3JtLmludmVydCgpLm1hcCh4LCB5LCAmbG9jYWxYLCAmbG9jYWxZKTsKICAgICByZXR1cm4g
UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGluZm8sIChpbnQpbG9jYWxYLCAoaW50KWxvY2FsWSwg
dHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTEgQEAKKzIwMDYtMTAtMTcgIE1pY2hh
ZWwgRW1tZWwgIDxtaWtlLmVtbWVAZ21haWwuY29tPgorCisgICAgICAgIEFkZCBTVkcgc3VwcG9y
dCB0byBnZGsgcHJvamVjdCBhZGQgc3VwcG9ydCBmb3Igc3ZnIGNvbXBvbmVudC4KKworICAgICAg
ICAqIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRm
b3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2NhaXJvL0FmZmluZVRyYW5zZm9ybUNhaXJvLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9jYWlyby9QYXRoQ2Fpcm8uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9QYWdl
R2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9J
bWFnZUdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1dpZGdldFByaXZhdGVHZGsuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvQnJvd3NlckV4dGVuc2lvbkdkay5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dkay9SZXNvdXJjZUxvYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9T
Y3JvbGxWaWV3R2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU3lzdGVtVGltZUxp
bnV4LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvTG9hZGVyRnVuY3Rpb25zR2RrLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
ZGsvU2hhcmVkVGltZXJMaW51eC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL0Nvb2tpZUph
ckdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dkay9XaW5kb3dHZGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsv
V2lkZ2V0UHJpdmF0ZUdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1Jlc291cmNlTG9h
ZGVyQ3VybC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1NjcmVlbkdkay5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ2RrL0Jyb3dzZXJFeHRlbnNpb25HZGsuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9SZXNvdXJj
ZUxvYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9JY29uR2RrLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9Gb250RGF0YUdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZpbGVDaG9vc2Vy
R2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9nZGsvRm9udEdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1BsYXRmb3Jt
U2Nyb2xsQmFyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1dpbmRvd0dkay5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vRm9udERhdGEuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL1Jlc291cmNlTG9hZGVySW50ZXJuYWwuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9BZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxW
aWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vUGF0aC5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bs
YXRmb3JtTW91c2VFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1Jlc291cmNlTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgICogUHJvamVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJrbDoKKyAgICAgICAg
KiBQcm9qZWN0cy93eC93ZWJjb3JlLXd4LmJrbDoKKyAgICAgICAgKiBjb25maWcuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVmlldy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAqIGtjYW52YXMvUmVuZGVyU1ZHQ29udGFp
bmVyLmg6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vUmVuZGVyUGF0aENhaXJvLmg6
CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS0NhbnZhc0NsaXBwZXJDYWlyby5jcHA6
CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyU29s
aWRDYWlyby5jcHA6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0Rl
dmljZUNhaXJvLmNwcDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9jYWlyby9LQ2FudmFzSW1h
Z2VDYWlyby5jcHA6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnRDYWlyby5jcHA6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fp
cm8vS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcDoKKyAgICAgICAgKiBrY2Fu
dmFzL2RldmljZS9jYWlyby9LQ2FudmFzQ2xpcHBlckNhaXJvLmg6CisgICAgICAgICoga2NhbnZh
cy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlyby5oOgorICAgICAg
ICAqIGtjYW52YXMvZGV2aWNlL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHA6CisgICAgICAgICog
a2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmg6CisgICAgICAgICog
a2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5o
OgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL2NhaXJvL0tDYW52YXNJbWFnZUNhaXJvLmg6Cisg
ICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVy
bkNhaXJvLmg6CisgICAgICAgICoga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0Lmg6CisgICAg
ICAgICoga2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAgICAqIGtjYW52YXMv
UmVuZGVyRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVk
VGVtcGxhdGUuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTWF0cml4LmNwcDoKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQb2ludHMuaDoKKyAgICAgICAgKiBicmlkZ2UvQnJvd3Nl
ckV4dGVuc2lvbi5oOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiB3
ZWJjb3JlLWJhc2UuYmtsOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHA6
CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKIDIwMDYtMTAtMTcgIERhdmlkIEh5YXR0ICA8aHlh
dHRAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCAiZmxhc2ggdG8gd2hpdGUnIHByb2JsZW0gb24g
eWFob28uY29tIGFzIGl0IGZpbmlzaGVzIGxvYWRpbmcuICBSZWZpbmUgdGhlIEZPVUMgc3VwcHJl
c3Npb24KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVkVGVtcGxhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFRlbXBsYXRlLmgJKHJldmlz
aW9uIDE3MDgyKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRUZW1wbGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAgICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlz
dDsKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIFNW
R1BvaW50TGlzdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhcmVUeXBlPgogICAgIGNsYXNz
IFNWR0FuaW1hdGVkVGVtcGxhdGUgOiBwdWJsaWMgU2hhcmVkPFNWR0FuaW1hdGVkVGVtcGxhdGU8
QmFyZVR5cGU+ID4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hdHJpeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWF0cml4LmNwcAkocmV2aXNpb24gMTcwODIp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdNYXRyaXg6OlNW
R01hdHJpeCgpIDogU2hhcmVkPFNWR01hdHJpeD4oKQorU1ZHTWF0cml4OjpTVkdNYXRyaXgoKSA6
IFNoYXJlZDxTVkdNYXRyaXg+KCksbV9tYXQoKQogewogfQogCkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdBbmltYXRlZFBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0FuaW1hdGVkUG9pbnRzLmgJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHQW5pbWF0ZWRQb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTAgKzI0LDEyIEBA
CiAjZGVmaW5lIEtTVkdfU1ZHQW5pbWF0ZWRQb2ludHNJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9S
VAogCisjaW5jbHVkZSAiU2hhcmVkLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xh
c3MgU1ZHUG9pbnRMaXN0OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkUG9pbnRzCisgICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRQb2ludHMgOnB1YmxpYyBTaGFyZWQ8U1ZHQW5pbWF0ZWRQb2ludHM+CiAgICAg
ewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHQW5pbWF0ZWRQb2ludHMoKTsKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL0Jyb3dzZXJFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRn
ZS9Ccm93c2VyRXh0ZW5zaW9uLmgJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9icmlkZ2Uv
QnJvd3NlckV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw5IEBACiAgICAg
Ym9vbCB0b29sQmFyVmlzaWJsZTsKICAgICBib29sIGxvY2F0aW9uQmFyVmlzaWJsZTsKICAgICBi
b29sIHNjcm9sbGJhcnNWaXNpYmxlOworI2lmIFBMQVRGT1JNKEdESykKKyAgICBib29sIGhpZGVG
cmFtZURlY29yYXRpb25zOworI2VuZGlmCiAgICAgYm9vbCByZXNpemFibGU7CiAKICAgICBib29s
IGZ1bGxzY3JlZW47CkluZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJD
b3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxMzUg
QEAKIAkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YUGF0aEdyYW1tYXIuY3BwCiAKIAk8L3NldD4K
KworCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19TVkdfREVSSVZFRFNPVVJD
RVMiPgorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL1NWR0VsZW1lbnRGYWN0b3J5LmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL1NWR05hbWVzLmNwcAorCisgICAgICAgICAgPCEtLSBpbmNs
dWRlZCBzb3VyY2VzCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQb2ludFRhYmxlLmNw
cAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUmVjdFRhYmxlLmNwcAorICAgICAgICAg
IC0tPgorCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBRWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuZ2xlLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR0FuaW1hdGVkQW5nbGUuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdB
bmltYXRlZEJvb2xlYW4uY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRl
ZEVudW1lcmF0aW9uLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRJ
bnRlZ2VyLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRMZW5ndGgu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZExlbmd0aExpc3QuY3Bw
CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZE51bWJlci5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkTnVtYmVyTGlzdC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkUG9pbnRzLmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRSZWN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdBbmltYXRlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0NpcmNs
ZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdDbGlwUGF0aEVsZW1l
bnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdDb2xvci5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNw
cAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQ3Vyc29yRWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0RlZnNFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHRGVzY0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdEb2N1bWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0VsZW1lbnQu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdFbGxpcHNlRWxlbWVudC5jcHAKKwkJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFQmxlbmRFbGVtZW50LmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCisJCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKKwkJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKKwkJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHRkVGdW5jQUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTVkdGRUZ1bmNCRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR0ZFRnVuY0dFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
RkVGdW5jUkVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUltYWdl
RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFTWVyZ2VFbGVtZW50
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNw
cAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRVRpbGVFbGVtZW50LmNwcAorCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR0ZpbHRlckVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNTVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR0dFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHR3JhZGll
bnRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHSW1hZ2VFbGVtZW50
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHTGVuZ3RoLmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHTGVuZ3RoTGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0xpbmVFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
TWFya2VyRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR01hc2tFbGVt
ZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHTWF0cml4LmNwcAorCQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHTWV0YWRhdGFFbGVtZW50LmNwcAorCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHTnVtYmVyTGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR1BhaW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aEVsZW1l
bnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQXJjQWJzLmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0FyY1JlbC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDbG9zZVBhdGguY3BwCisJCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5jcHAKKwkJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLmNwcAorCQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aEFicy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vb3RoUmVsLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNl
Z0xpbmV0b0Ficy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5l
dG9Ib3Jpem9udGFsQWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQ
YXRoU2VnTGluZXRvUmVsLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNl
Z0xpbmV0b1ZlcnRpY2FsQWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
UGF0aFNlZ0xpc3QuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnTW92
ZXRvQWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ01vdmV0b1Jl
bC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdHRlcm5FbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUG9pbnRMaXN0LmNwcAorCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHUG9seWdvbkVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNTVkdQb2x5bGluZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHUmVjdEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdSZW5kZXJp
bmdJbnRlbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTY3JpcHRFbGVtZW50
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHU2V0RWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1N0b3BFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHU3RyaW5nTGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR1N0eWxlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1NWR0Vs
ZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTd2l0Y2hFbGVtZW50LmNw
cAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHU3ltYm9sRWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1RleHRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1NWR1RpdGxlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR1RyYW5zZm9ybS5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1RyYW5zZm9y
bUxpc3QuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUUmVmRWxlbWVudC5jcHAK
KwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1RTcGFuRWxlbWVudC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1VuaXRUeXBlcy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR1VzZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdW
aWV3RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1pvb21FdmVudC5j
cHAKKworCTwvc2V0PgorCiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0tI
VE1MIj4KIAkJCiAKQEAgLTE2Nyw5ICsyOTYsMTIgQEAKIAkJcGxhdGZvcm0vSW50UmVjdC5jcHAK
IAkJcGxhdGZvcm0vS1VSTC5jcHAKIAkJcGxhdGZvcm0vTG9nZ2luZy5jcHAKKwkJcGxhdGZvcm0v
UGF0aC5jcHAKIAkJcGxhdGZvcm0vUGVuLmNwcAorCQlwbGF0Zm9ybS9Qb3B1cE1lbnUuY3BwCiAJ
CXBsYXRmb3JtL1JlZ3VsYXJFeHByZXNzaW9uLmNwcAogCQlwbGF0Zm9ybS9TZWdtZW50ZWRTdHJp
bmcuY3BwCisJCXBsYXRmb3JtL1Njcm9sbEJhci5jcHAKIAkJcGxhdGZvcm0vU3RyZWFtaW5nVGV4
dERlY29kZXIuY3BwCiAJCXBsYXRmb3JtL1N0cmVhbWluZ1RleHREZWNvZGVySUNVLmNwcAogCQlw
bGF0Zm9ybS9TdHJpbmcuY3BwCkBAIC0zMDUsMTEgKzQzNywxMyBAQAogCQlwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcAogCiAJPC9zZXQ+Ci0JPHNldCBhcHBl
bmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NBSVJPIj4KKwk8c2V0IGFwcGVuZD0iMSIgdmFy
PSJXRUJDT1JFX1NPVVJDRVNfQ0FJUk9fQklORElOR1MiPgogCQkKKwkJcGxhdGZvcm0vY2Fpcm8v
QWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwCiAJCXBsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAogCQlwbGF0Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAogCQlwbGF0Zm9ybS9j
YWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcAorCQlwbGF0Zm9ybS9jYWlyby9QYXRoQ2Fpcm8uY3Bw
CiAKIAk8L3NldD4KIAk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfUElYTUFO
Ij4KQEAgLTQ1OSw3ICs1OTMsNiBAQAogCQlyZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAogCQly
ZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3Bw
Ci0JCXJlbmRlcmluZy9SZW5kZXJQb3B1cE1lbnUuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJSZXBs
YWNlZC5jcHAKIAkJcmVuZGVyaW5nL0RlcHJlY2F0ZWRSZW5kZXJTZWxlY3QuY3BwCiAJCXJlbmRl
cmluZy9EZXByZWNhdGVkU2xpZGVyLmNwcApAQCAtNTU3LDExICs2OTAsMTIgQEAKIAk8L3NldD4K
IAogCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19JQ09OIj4KLQkJaWNvbi9J
Y29uRGF0YWJhc2UuY3BwCi0JCWljb24vSWNvbkxvYWRlci5jcHAKLQkJaWNvbi9TUUxEYXRhYmFz
ZS5jcHAKLQkJaWNvbi9TUUxTdGF0ZW1lbnQuY3BwCi0JCWljb24vU2l0ZUljb24uY3BwCisJCWxv
YWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKwkJbG9hZGVyL2ljb24vSWNvbkRhdGFDYWNoZS5j
cHAKKwkJbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKKwkJbG9hZGVyL2ljb24vU1FMRGF0YWJh
c2UuY3BwCisJCWxvYWRlci9pY29uL1NRTFN0YXRlbWVudC5jcHAKKwkJbG9hZGVyL2ljb24vU1FM
VHJhbnNhY3Rpb24uY3BwCiAJPC9zZXQ+CiAKIAk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JF
X1NPVVJDRVNfQlJJREdFIj4KQEAgLTczMCw0ICs4NjQsMTcwIEBACiAKIAk8L3NldD4KIAorCTxz
ZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19LQ0FOVkFTIj4KKworCQlrY2FudmFz
L0tDYW52YXNDbGlwcGVyLmNwcAorCQlrY2FudmFzL0tDYW52YXNDcmVhdG9yLmNwcAorCQlrY2Fu
dmFzL0tDYW52YXNGaWx0ZXJzLmNwcAorCQlrY2FudmFzL0tDYW52YXNNYXJrZXIuY3BwCisJCWtj
YW52YXMvS0NhbnZhc01hc2tlci5jcHAKKwkJa2NhbnZhcy9LQ2FudmFzUmVzb3VyY2UuY3BwCisJ
CWtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAKKwkJa2NhbnZhcy9SZW5kZXJGb3JlaWduT2Jq
ZWN0LmNwcAorCQlrY2FudmFzL1JlbmRlclBhdGguY3BwCisJCWtjYW52YXMvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcAorCQlrY2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcAorCQlrY2FudmFzL1JlbmRl
clNWR0lubGluZS5jcHAKKwkgCWtjYW52YXMvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKwkJa2Nh
bnZhcy9SZW5kZXJTVkdUZXh0LmNwcAorCQlrY2FudmFzL1JlbmRlclNWR1RTcGFuLmNwcAorCQlr
Y2FudmFzL1NWR0lubGluZUZsb3dCb3guY3BwCisJCWtjYW52YXMvU1ZHUm9vdElubGluZUJveC5j
cHAKKwkJa2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAKKwkJa2NhbnZhcy9kZXZp
Y2UvS1JlbmRlcmluZ0ZpbGxQYWludGVyLmNwcAorCQlrY2FudmFzL2RldmljZS9LUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAKKwkJa2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50
U2VydmVyUGF0dGVybi5jcHAKKwkJa2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVy
U29saWQuY3BwCisJCWtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdTdHJva2VQYWludGVyLmNwcAor
CisJPC9zZXQ+CisKKwk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfS1NWRzIi
PgorCisKKwkJa3N2ZzIvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3Bw
CisJCWtzdmcyL2JpbmRpbmdzL2pzL0pTU1ZHTnVtYmVyLmNwcAorCQlrc3ZnMi9iaW5kaW5ncy9q
cy9KU1NWR1BvaW50LmNwcAorCQlrc3ZnMi9iaW5kaW5ncy9qcy9KU1NWR1JlY3QuY3BwCisJCWtz
dmcyL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCisJCWtzdmcyL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9y
LmNwcAorCQlrc3ZnMi9jc3MvU1ZHUmVuZGVyU3R5bGUuY3BwCisJCWtzdmcyL2Nzcy9TVkdSZW5k
ZXJTdHlsZURlZnMuY3BwCisgICAgICAgICAgPCEtLQorCQlrc3ZnMi9lY21hL0dsb2JhbE9iamVj
dC5jcHAKKyAgICAgICAgICAtLT4KKwkJa3N2ZzIvZXZlbnRzL0pTU1ZHTGF6eUV2ZW50TGlzdGVu
ZXIuY3BwCisJCWtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3BwCisJCWtzdmcyL21pc2MvS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlLmNwcAorCQlrc3ZnMi9taXNjL0tTVkdUaW1lU2NoZWR1bGVyLmNw
cAorCQlrc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKwkJa3N2ZzIvbWlzYy9T
VkdJbWFnZUxvYWRlci5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAorCQlrc3ZnMi9z
dmcvU1ZHQW5nbGUuY3BwCisJCWtzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAor
CQlrc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQYXRoRGF0YS5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0FuaW1h
dGVkUG9pbnRzLmNwcAorCQlrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCisJCWtzdmcy
L3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHQ29sb3IuY3BwCisJ
CWtzdmcyL3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR0Rlc2NFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRG9jdW1l
bnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdET01JbXBsZW1lbnRhdGlvbi5jcHAKKwkJa3N2ZzIvc3Zn
L1NWR0VsZW1lbnQuY3BwCisgICAgICAgICAgPCEtLQorCQlrc3ZnMi9zdmcvU1ZHRWxlbWVudElu
c3RhbmNlLmNwcAorCQlrc3ZnMi9zdmcvU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5jcHAKKyAgICAg
ICAgICAtLT4KKwkJa3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcv
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCisJCWtz
dmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R0ZFRmxvb2RFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVGdW5jQUVsZW1lbnQuY3BwCisJ
CWtzdmcyL3N2Zy9TVkdGRUZ1bmNCRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFRnVuY0dF
bGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVGdW5jUkVsZW1lbnQuY3BwCisJCWtzdmcyL3N2
Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQu
Y3BwCisJCWtzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdG
RVBvaW50TGlnaHRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3Zn
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R0ZpdFRvVmlld0JveC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNw
cAorCQlrc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdHcmFkaWVudEVs
ZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwCisJCWtzdmcyL3N2Zy9TVkdJbWFn
ZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuY3BwCisJCWtzdmcyL3N2Zy9T
VkdMZW5ndGguY3BwCisJCWtzdmcyL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAorCQlrc3ZnMi9zdmcv
U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQu
Y3BwCisJCWtzdmcyL3N2Zy9TVkdMb2NhdGFibGUuY3BwCisJCWtzdmcyL3N2Zy9TVkdNYXJrZXJF
bGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9T
VkdNYXRyaXguY3BwCisJCWtzdmcyL3N2Zy9TVkdNZXRhZGF0YUVsZW1lbnQuY3BwCisJCWtzdmcy
L3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGFpbnQuY3BwCisJCWtzdmcy
L3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL3N2Z3BhdGhwYXJzZXIuY3BwCisJ
CWtzdmcyL3N2Zy9TVkdQYXRoU2VnQXJjLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0Nsb3Nl
UGF0aC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWcuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRo
U2VnQ3VydmV0b0N1YmljLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmNwcAorCQlr
c3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguY3BwCisJCWtzdmcyL3N2
Zy9TVkdQYXRoU2VnTGluZXRvLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWwuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuY3BwCisJCWtz
dmcyL3N2Zy9TVkdQYXRoU2VnTGlzdC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdNb3ZldG8u
Y3BwCisJCWtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1Bv
aW50TGlzdC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcv
U1ZHUG9seWdvbkVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3Bw
CisJCWtzdmcyL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAorCQlrc3ZnMi9zdmcvU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3Bw
CisJCWtzdmcyL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU2V0RWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZH
U3RyaW5nTGlzdC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmNwcAorCQlrc3ZnMi9zdmcv
U1ZHU3R5bGVkRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1l
bnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwCisJCWtzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3lt
Ym9sRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1Rlc3RzLmNwcAorCQlrc3ZnMi9zdmcvU1ZH
VGV4dENvbnRlbnRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCisJ
CWtzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZH
VGl0bGVFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR1RyYW5zZm9ybS5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3Bw
CisJCWtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1RTcGFuRWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdWaWV3RWxlbWVudC5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR1pvb21BbmRQYW4uY3BwCisKKwk8L3NldD4KKwogPC9tYWtlZmlsZT4KSW5kZXg6IFdl
YkNvcmUvd2ViY29yZS1iYXNlLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmNvcmUtYmFz
ZS5ia2wJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS93ZWJjb3JlLWJhc2UuYmtsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSwxMSArMzksMTEgQEAKICAgICA8aW5jbHVkZSBmaWxlPSJXZWJDb3Jl
U291cmNlcy5ia2wiLz4KICAgICAKIAk8c2V0IHZhcj0iV0VCQ09SRV9CQVNFX1NPVVJDRVMiPgkK
LQkJJChXRUJDT1JFX1NPVVJDRVNfREVSSVZFRFNPVVJDRVMpCiAJCSQoV0VCQ09SRV9TT1VSQ0VT
X0tIVE1MKQogCQkkKFdFQkNPUkVfU09VUkNFU19NSVNDKQogCQkkKFdFQkNPUkVfU09VUkNFU19Q
QUdFKQogCQkkKFdFQkNPUkVfU09VUkNFU19MT0FERVIpCisJCSQoV0VCQ09SRV9TT1VSQ0VTX0lD
T04pCiAJCSQoV0VCQ09SRV9TT1VSQ0VTX1BMQVRGT1JNKQogCQkkKFdFQkNPUkVfU09VUkNFU19J
TUFHRS1ERUNPREVSUykKIAkJJChXRUJDT1JFX1NPVVJDRVNfQk1QKQpAQCAtNjIsNiArNjIsNyBA
QAogCQkkKFdFQkNPUkVfU09VUkNFU19IVE1MKQogCQkkKFdFQkNPUkVfU09VUkNFU19CSU5ESU5H
UykKIAkJJChXRUJDT1JFX1NPVVJDRVNfSlMpCisJCSQoV0VCQ09SRV9TT1VSQ0VTX0RFUklWRURT
T1VSQ0VTKQogCTwvc2V0PgogCiAgICAgPHNldCB2YXI9IkJVSUxERElSIj5vYmotJChGT1JNQVQp
PC9zZXQ+CkBAIC03MCwxMiArNzEsMTIgQEAKICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3Bs
YXRmb3JtL2NhaXJvL2NhaXJvL3NyYzwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNE
SVIpL3BsYXRmb3JtL2NhaXJvL3BpeG1hbi9zcmM8L2luY2x1ZGU+CiAgICAgICAgIDxzb3VyY2Vz
PgotICAgICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfQ0FJUk8pIAotCQkgICAgJChXRUJDT1JF
X1NPVVJDRVNfUElYTUFOKSAKKwkJCSQoV0VCQ09SRV9TT1VSQ0VTX0NBSVJPKSAKKwkJCSQoV0VC
Q09SRV9TT1VSQ0VTX1BJWE1BTikgCiAgICAgICAgIDwvc291cmNlcz4KICAgICA8L3RlbXBsYXRl
PgogICAgIAotICAgIDx0ZW1wbGF0ZSBpZD0id2ViY29yZV9iYXNlIiB0ZW1wbGF0ZT0ieG1sMixp
Y29udix4c2x0LGljdSxqc2NvcmUiPgorICAgIDx0ZW1wbGF0ZSBpZD0id2ViY29yZV9iYXNlIiB0
ZW1wbGF0ZT0ieG1sMixpY29udix4c2x0LGljdSI+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElS
KS8uPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvaW5jbHVkZTwvaW5jbHVk
ZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmU8L2lu
Y2x1ZGU+CkBAIC0xMDEsMTAgKzEwMiwxNSBAQAogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikv
eG1sPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikva2NhbnZhczwvaW5jbHVk
ZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tjYW52YXMvZGV2aWNlPC9pbmNsdWRlPgot
ICAgICAgICAKLSAgICAgICAgPHNvdXJjZXM+JChXRUJDT1JFX0JBU0VfU09VUkNFUyk8L3NvdXJj
ZXM+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rc3ZnMjwvaW5jbHVkZT4KKyAgICAgICAg
PGluY2x1ZGU+JChTUkNESVIpL2tzdmcyL2JpbmRpbmdzL2pzPC9pbmNsdWRlPgorICAgICAgICA8
aW5jbHVkZT4kKFNSQ0RJUikva3N2ZzIvY3NzPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4k
KFNSQ0RJUikva3N2ZzIvZWNtYTwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIp
L2tzdmcyL2V2ZW50czwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcy
L21pc2M8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rc3ZnMi9zdmc8L2lu
Y2x1ZGU+CisgICAKIAotCiA8IS0tIEhBQ0sgQUxFUlQhIEZJWCBUSEVTRSBMQVRFUiEhIC0tPgog
ICAgICAgPGlmIGNvbmQ9IlBMQVRGT1JNX01BQ09TWD09JzEnIj4KICAgICAgICAgPGluY2x1ZGU+
JChTUkNESVIpL3BsYXRmb3JtL21hYzwvaW5jbHVkZT4gPCEtLSB3aGVuIGJ1aWxkaW5nIG9uIE1h
YywgRXh0cmFDRkVuY29kaW5ncy5oIGlzIG5lZWRlZCAtLT4gICAgICAKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5IEBA
CiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3aW5i
YXNlLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wYWdlL1Bh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAxNzA4MikK
KysrIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDEwIEBA
CiAgICAgICAgIHN0YXRpYyBISU5TVEFOQ0UgaW5zdGFuY2VIYW5kbGUoKSB7IHJldHVybiBzX2lu
c3RhbmNlSGFuZGxlOyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdESykKKyAgICAgICAgUGFn
ZSgpOworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXQoKTsKIApJbmRl
eDogV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvbWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvR2RrTGF1bmNoZXIvbWFpbi5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViS2l0VG9v
bHMvR2RrTGF1bmNoZXIvbWFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsMTcgKzIsMjQgQEAK
ICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0
ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxw
dGhyZWFkLmg+CiAjaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKKyNp
bmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCisvLyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKIAogI2luY2x1
ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorLy8jaW5jbHVkZSAiaHRtbG5h
bWVzLmgiCiAKICNpZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC0yMCwx
NiArMjcsMjAgQEAKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNlbmRpZgog
CisvL3BhaW50aW5nCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCisjaW5jbHVkZSAiRnJhbWVHZGsu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRpYyBHTWFpbkxvb3AgKmxvb3A7
CisKIGNsYXNzIExhdW5jaGVyRnJhbWVHZGsgOiBwdWJsaWMgRnJhbWVHZGsKIHsKIHB1YmxpYzoK
LSAgICBMYXVuY2hlckZyYW1lR2RrKFBhZ2UqIHBhZ2UsIEVsZW1lbnQqIGVsZW1lbnQpIDogRnJh
bWVHZGsocGFnZSwgZWxlbWVudCksIG1fZXhpdEFmdGVyTG9hZGluZyhmYWxzZSkge30KLSAgICBM
YXVuY2hlckZyYW1lR2RrKEdka0RyYXdhYmxlKiBkcmF3YWJsZSkgOiBGcmFtZUdkayhkcmF3YWJs
ZSksIG1fZXhpdEFmdGVyTG9hZGluZyhmYWxzZSkge30KKyAgICBMYXVuY2hlckZyYW1lR2RrKFBh
Z2UqIHBhZ2UsIEVsZW1lbnQqIGVsZW1lbnQsV2luZG93R2RrKiB3aW5kb3cpIDogRnJhbWVHZGso
cGFnZSxlbGVtZW50LHdpbmRvdyksIG1fZXhpdEFmdGVyTG9hZGluZyhmYWxzZSkge30KICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlZE9ubG9hZEV2ZW50cygpOwogICAgIHZvaWQgc2V0RXhpdEFmdGVy
TG9hZGluZyhib29sIGV4aXRBZnRlckxvYWRpbmcpIHsgbV9leGl0QWZ0ZXJMb2FkaW5nID0gZXhp
dEFmdGVyTG9hZGluZzsgfQogcHJpdmF0ZToKQEAgLTM5LDYxICs1MCw5NyBAQAogdm9pZCBMYXVu
Y2hlckZyYW1lR2RrOjpoYW5kbGVkT25sb2FkRXZlbnRzKCkKIHsKICAgICBpZiAobV9leGl0QWZ0
ZXJMb2FkaW5nKQotICAgICAgICBndGtfbWFpbl9xdWl0KCk7CisgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwogfQogCi1zdGF0aWMgIExhdW5jaGVyRnJhbWVHZGsgKmZyYW1lOwotc3RhdGlj
ICBHZGtXaW5kb3cgKndpbjsKK3N0YXRpYyBMYXVuY2hlckZyYW1lR2RrICpmcmFtZTsKK3N0YXRp
YyBHZGtXaW5kb3cgKndpbjsKK3N0YXRpYyBXaW5kb3dHZGsgKndpbmRvdzsKK3N0YXRpYyBib29s
IGRlYnVnOwogCiBzdGF0aWMgdm9pZCBoYW5kbGVfZXZlbnQoR2RrRXZlbnQgKmV2ZW50KQogewor
ICAgIGdka190aHJlYWRzX2xlYXZlKCk7CisgICAgV2luZG93R2RrKiBlZnJhbWUgPSBXaW5kb3dH
ZGs6OmZpbmRXaW5kb3coZXZlbnQtPmFueS53aW5kb3cpOworICAgIGlmKCBlZnJhbWUgKSB7Cisg
ICAgICAgIGlmKCBkZWJ1ZyApIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIEdES19FWFBPU0U6IAorICAgICAgICAgICAgICAgICAgICBH
ZGtSZWN0YW5nbGUgY2xpcDsKKyAgICAgICAgICAgICAgICAgICAgZ2RrX3JlZ2lvbl9nZXRfY2xp
cGJveChldmVudC0+ZXhwb3NlLnJlZ2lvbiwgJmNsaXApOworICAgICAgICAgICAgICAgICAgICAv
L3ByaW50ZigiIFBBSU5UIEZSQU1FICVwIHg9JWQgeT0lZCB3PSVkIGg9JWQgXG4iLGVmcmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgY2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNs
aXAuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IEdES19LRVlfUFJFU1M6IAorICAgICAgICAgICAgICAgIGlmKCBldmVudC0+a2V5LmtleXZhbCA9
PSBHREtfRjkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRnJhbWVH
ZGsqIGVmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgRGVwcmVj
YXRlZFN0cmluZyBzdCA9IGV4dGVybmFsUmVwcmVzZW50YXRpb24oZWZyYW1lLT5yZW5kZXJlcigp
KTsKKyAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzOworICAgICAgICAgICAg
ICAgICAgICBwcmludGYoIkZSQU1FR0RLIERPQ1VNRU5UOiAlcyBcbiIsc3QuYXNjaWkoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtKCZzKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWZyYW1lLT5kb2N1bWVudCgpLT5kdW1wKCZzdHJlYW0sRGVwcmVjYXRlZFN0cmluZygi
ICIpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGUkFNRUdESyBOT0RFUzogJXMgXG4i
LHMuYXNjaWkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVmcmFtZS0+aGFuZGxlR2RrRXZlbnQo
ZXZlbnQpOworICAgIH0KICAgICBpZiAoR0RLX0RFTEVURSA9PSBldmVudC0+dHlwZSkgewotICAg
ICAgICBndGtfbWFpbl9xdWl0KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7CisgICAgICByZXR1cm47CiAgICAgfQotICAgIGZyYW1lLT5oYW5kbGVHZGtF
dmVudChldmVudCk7CisgICAgZ2RrX3RocmVhZHNfZW50ZXIoKTsKIH0KIAogaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgCiB7Ci0gICAgR2RrV2luZG93QXR0ciBhdHRyOwotICAgIGNo
YXIgKnVybDsKLSAgICBnZGtfaW5pdCgmYXJnYywmYXJndik7Ci0gICAgZ2RrX2V2ZW50X2hhbmRs
ZXJfc2V0ICgoR2RrRXZlbnRGdW5jKWhhbmRsZV9ldmVudCwgTlVMTCwgTlVMTCk7CisgIGRlYnVn
ID0gdHJ1ZTsKKyAgR2RrV2luZG93QXR0ciBhdHRyOworICBnX3RocmVhZF9pbml0KDApOworICBn
ZGtfdGhyZWFkc19pbml0KCk7CisgIGdka19pbml0KCZhcmdjLCZhcmd2KTsKKyAgZ2RrX2V2ZW50
X2hhbmRsZXJfc2V0ICgoR2RrRXZlbnRGdW5jKWhhbmRsZV9ldmVudCwgTlVMTCwgTlVMTCk7Cisg
IGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsVFJVRSk7CisgIFN0cmluZyBzID0gZ2V0ZW52
KCJQV0QiKTsKKyAgcyA9ICJmaWxlOi8vIitzKyIvY29tcG9uZW50cyI7CisgIEZyYW1lR2RrOjpz
ZXRJbnN0YWxsTG9jYXRpb24ocy5kZXByZWNhdGVkU3RyaW5nKCkuYXNjaWkoKSk7CisgIGF0dHIu
d2lkdGggPSA0MDA7CisgIGF0dHIuaGVpZ2h0ID0gMzAwOworICBhdHRyLndpbmRvd190eXBlID0g
R0RLX1dJTkRPV19UT1BMRVZFTDsKKyAgYXR0ci53Y2xhc3MgPSBHREtfSU5QVVRfT1VUUFVUOwor
ICAvL3NlZSBob3cgd2hlcmUgd2UgaGFuZGxlIG1vdGlvbiBoZXJlIG5lZWQgdG8gZG8gdGhlIGhp
bnQgc3R1ZmYKKyAgYXR0ci5ldmVudF9tYXNrID0gKChHREtfQUxMX0VWRU5UU19NQVNLXkdES19Q
T0lOVEVSX01PVElPTl9ISU5UX01BU0spKTsgCisgIHdpbiA9IGdka193aW5kb3dfbmV3KE5VTEws
JmF0dHIsMCk7CisgIHdpbmRvdyA9IG5ldyBXaW5kb3dHZGsod2luKTsKKyAgZnJhbWUgPSBuZXcg
TGF1bmNoZXJGcmFtZUdkayhuZXcgUGFnZSwwLHdpbmRvdyk7CisgIGdka193aW5kb3dfc2hvdyh3
aW4pOwogCi0gICAgYXR0ci53aWR0aCA9IDgwMDsKLSAgICBhdHRyLmhlaWdodCA9IDYwMDsKLSAg
ICBhdHRyLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19UT1BMRVZFTDsKLSAgICBhdHRyLndjbGFz
cyA9IEdES19JTlBVVF9PVVRQVVQ7Ci0gICAgLy9zZWUgaG93IHdoZXJlIHdlIGhhbmRsZSBtb3Rp
b24gaGVyZSBuZWVkIHRvIGRvIHRoZSBoaW50IHN0dWZmCi0gICAgYXR0ci5ldmVudF9tYXNrID0g
KChHREtfQUxMX0VWRU5UU19NQVNLXkdES19QT0lOVEVSX01PVElPTl9ISU5UX01BU0spKTsgCi0g
ICAgd2luID0gZ2RrX3dpbmRvd19uZXcoTlVMTCwmYXR0ciwwKTsKLSAgICBmcmFtZSA9IG5ldyBM
YXVuY2hlckZyYW1lR2RrKHdpbik7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdpbik7Ci0gICAgdXJs
ID0gImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSI7Ci0gICAgYm9vbCBleGl0QWZ0ZXJMb2FkaW5nID0g
ZmFsc2U7Ci0gICAgZm9yIChpbnQgYXJnUG9zID0gMTsgYXJnUG9zIDwgYXJnYzsgKythcmdQb3Mp
IHsKKyAgY2hhciAqdXJsID0iY29tcG9uZW50cy9icm93c2VyLnN2ZyI7CisgIGJvb2wgZXhpdEFm
dGVyTG9hZGluZyA9IGZhbHNlOworCisgIGZvciAoaW50IGFyZ1BvcyA9IDE7IGFyZ1BvcyA8IGFy
Z2M7ICsrYXJnUG9zKSB7CiAgICAgICAgIGlmICgwID09IHN0cmNtcChhcmd2W2FyZ1Bvc10sICIt
ZXhpdC1hZnRlci1sb2FkaW5nIikpCiAgICAgICAgICAgICBleGl0QWZ0ZXJMb2FkaW5nID0gdHJ1
ZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdXJsID0gYXJndlthcmdQb3NdOwotICAgIH0K
LSAgICBmcmFtZS0+c2V0RXhpdEFmdGVyTG9hZGluZyhleGl0QWZ0ZXJMb2FkaW5nKTsKLSAgICBp
ZiAodXJsKSB7Ci0gICAgICAgIHByaW50ZigiT1BFTklORyBVUkwgPT0gJXMgXG4iLCB1cmwpOwot
ICAgICAgICBmcmFtZS0+b3BlblVSTCh1cmwpOwotICAgIH0gZWxzZSB7Ci0jaWYgMAotICAgICAg
ICBjaGFyICpwZyA9ICIgPGh0bWw+PGhlYWQ+PHRpdGxlPkdvb2dsZTwvdGl0bGU+IDxib2R5IGJn
Y29sb3I9I2ZmZmZmZiB0ZXh0PSMwMDAwMDA+IDxwPjxmb250IHNpemU9LTIvPjIwMDYgR29vZ2xl
IEhlbGxvIGJpZ3dvcmxkIGZyb20gbWlrZTwvcD48L2JvZHk+PC9odG1sPiAiOwotICAgICAgICBm
cmFtZS0+Y3JlYXRlRW1wdHlEb2N1bWVudCgpOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+
b3BlbigpOwotICAgICAgICBmcmFtZS0+d3JpdGUocGcsc3RybGVuKHBnKSk7Ci0gICAgICAgIGZy
YW1lLT5kb2N1bWVudCgpLT5jbG9zZSgpOwotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGd0a19t
YWluKCk7Ci0gICAgZGVsZXRlIGZyYW1lOwotICAgIGdka193aW5kb3dfZGVzdHJveSh3aW4pOwot
ICAgIHJldHVybiAwOworICB9CisKKyAgU3RyaW5nIHN1cmw9dXJsOworCisgIGlmKHN0cm5jbXAo
ImZpbGU6Ly8iLHVybCw3KSAmJiBzdHJuY21wKCJodHRwOi8vIix1cmwsNykpIHsKKyAgICBpZigg
KnVybCAhPSAnLycgKSB7CisgICAgICAgIFN0cmluZyBwd2QgPSBnZXRlbnYoIlBXRCIpOworICAg
ICAgICBzdXJsID0gImZpbGU6Ly8iK3B3ZCsiLyIrc3VybDsKKyAgICB9ZWxzZQorICAgICAgIHN1
cmwgPSAiZmlsZTovLyIrc3VybDsgICAgICAgICAgCisgIH0gCisgIAorICBwcmludGYoIk9QRU5J
TkcgVVJMID09ICVzIFxuIiwgc3VybC5kZXByZWNhdGVkU3RyaW5nKCkuYXNjaWkoKSk7CisgIGZy
YW1lLT5vcGVuVVJMKHN1cmwuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgZ19tYWluX2xvb3BfcnVu
IChsb29wKTsKKyAgZGVsZXRlIGZyYW1lOworICBnZGtfd2luZG93X2Rlc3Ryb3kod2luKTsKKyAg
cmV0dXJuIDA7CiB9CkluZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9FTlYKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvRU5WCShyZXZpc2lvbiAxNzA4MikKKysrIFdl
YktpdFRvb2xzL0dka0xhdW5jaGVyL0VOVgkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAK
IGV4cG9ydCBERkJBUkdTPXN5c3RlbT1zZGwsbW9kZT04MDB4NjAwCiBleHBvcnQgREZCQVJHUz1z
eXN0ZW09eDExLG1vZGU9ODAweDYwMAotZXhwb3J0IExEX0xJQlJBUllfUEFUSD0kTERfTElCUkFS
WV9QQVRIOi4uLy4uL1dlYkNvcmUvUHJvamVjdHMvZ2RrOi91c3IvbG9jYWwvbGliCitleHBvcnQg
TERfTElCUkFSWV9QQVRIPSRMRF9MSUJSQVJZX1BBVEg6YHJlYWxwYXRoIC1zIC4uLy4uL1dlYkNv
cmUvUHJvamVjdHMvZ2RrYDpgcmVhbHBhdGggLXMgLi4vLi4vSmF2YVNjcmlwdENvcmVgOi91c3Iv
bG9jYWwvbGliCiAKSW5kZXg6IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2dka2xhdW5jaGVyLmJr
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9nZGtsYXVuY2hlci5ia2wJ
KHJldmlzaW9uIDE3MDgyKQorKysgV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvZ2RrbGF1bmNoZXIu
YmtsCSh3b3JraW5nIGNvcHkpCkBAIC04LDcgKzgsNyBAQAogPG1ha2VmaWxlPgogCTxpbmNsdWRl
IGZpbGU9Ii4uLy4uL0Jha2VmaWxlcy9wcmVzZXRzLmJrbCIvPgogCi0gICA8dGVtcGxhdGUgaWQ9
IndlYmNvcmVfZ2RrX2xpbmsiIHRlbXBsYXRlPSJndGssZnJlZXR5cGUiPgorICAgPHRlbXBsYXRl
IGlkPSJ3ZWJjb3JlX2dka19saW5rIiB0ZW1wbGF0ZT0iZ2RrLGZyZWV0eXBlIj4KICAgIAkJCiAg
ICAgICAgIDxkZWZpbmU+QVBQTEVfQ0hBTkdFUz0xPC9kZWZpbmU+CiAgICAgICAgIDwhLS0gdGhp
cyBHQyB2ZXJzaW9uIHJlcXVpcmVzIE1hY2gncyB0aHJlYWQgc3VzcGVuZC9yZXN1bWU6IC0tPgpA
QCAtNzEsNyArNzEsMTMgQEAKIAogCTxzZXQgdmFyPSJUT1BESVIiPi4uLy4uPC9zZXQ+CiAgICAg
PGV4ZSBpZD0iZ2RrbGF1bmNoZXIiIHRlbXBsYXRlPSJ3ZWJjb3JlX2dka19saW5rIj4gICAgICAg
IAotCQk8bGRmbGFncz4tTCQoVE9QRElSKS9XZWJDb3JlL1Byb2plY3RzL2dkayAtbHdlYmNvcmUt
Z2RrPC9sZGZsYWdzPgorCQk8bGRmbGFncz4tTCQoVE9QRElSKS9KYXZhU2NyaXB0Q29yZSAgLWxz
aGFyZWRqc2NvcmU8L2xkZmxhZ3M+CisJCTxsZGZsYWdzPi1MJChUT1BESVIpL1dlYkNvcmUvUHJv
amVjdHMvZ2RrICAtbHdlYmNvcmUtZ2RrPC9sZGZsYWdzPgorCQk8bGRmbGFncz4tTCQoVE9QRElS
KS9XZWJDb3JlL1Byb2plY3RzL2dkayAtbHdlYmNvcmUtc3ZnPC9sZGZsYWdzPgorCQk8bGRmbGFn
cz4tTCQoVE9QRElSKS9KYXZhU2NyaXB0Q29yZSAgLWxzaGFyZWRqc2NvcmU8L2xkZmxhZ3M+Cisg
ICAgICAgIDxsZGZsYWdzPmBwa2ctY29uZmlnIC0tbGlicyBndGhyZWFkLTIuMGA8L2xkZmxhZ3M+
CisgICAgICAgIDxjeHhmbGFncz5gcGtnLWNvbmZpZyAtLWNmbGFncyBndGhyZWFkLTIuMGA8L2N4
eGZsYWdzPgorCiAgICAgICAgIDx3YXJuaW5ncz5kZWZhdWx0PC93YXJuaW5ncz4KICAgICAgICAg
PGN4eC1ydHRpPm9mZjwvY3h4LXJ0dGk+CiAgICAgICAgIDxjeHgtZXhjZXB0aW9ucz5vZmY8L2N4
eC1leGNlcHRpb25zPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11129</attachid>
            <date>2006-10-17 20:46:43 -0700</date>
            <delta_ts>2006-10-19 14:05:24 -0700</delta_ts>
            <desc>Clean up of affine transform</desc>
            <filename>affine.patch</filename>
            <type>text/plain</type>
            <size>1054</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IEFmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFmZmluZVRyYW5zZm9ybS5o
CShyZXZpc2lvbiAxNzA4MikKKysrIEFmZmluZVRyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlv
blNlcnZpY2VzLmg+CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRTWF0cml4PgorI2Vs
aWYgUExBVEZPUk0oR0RLKQorI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDcsNiArNDksOCBAQAogICAgIEFmZmluZVRyYW5zZm9ybShDR0FmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0pOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgQWZmaW5lVHJh
bnNmb3JtKGNvbnN0IFFNYXRyaXggJm1hdHJpeCk7CisjZWxpZiBQTEFURk9STShHREspCisgICAg
QWZmaW5lVHJhbnNmb3JtKGNvbnN0IGNhaXJvX21hdHJpeF90ICZtYXRyaXgpOwogI2VuZGlmCiAK
ICAgICB2b2lkIHNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUg
ZCwgZG91YmxlIHR4LCBkb3VibGUgdHkpOwpAQCAtNzgsNiArODIsOCBAQAogICAgIG9wZXJhdG9y
IENHQWZmaW5lVHJhbnNmb3JtKCkgY29uc3Q7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBvcGVy
YXRvciBRTWF0cml4KCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShHREspCisgICAgb3BlcmF0b3Ig
Y2Fpcm9fbWF0cml4X3QoKSBjb25zdDsKICNlbmRpZgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OwpAQCAtODksNiArOTUsOCBAQAogICAgIENHQWZm
aW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgUU1hdHJp
eCBtX3RyYW5zZm9ybTsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgIGNhaXJvX21hdHJpeF90
IG1fdHJhbnNmb3JtOwogI2VuZGlmCiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11152</attachid>
            <date>2006-10-19 14:05:24 -0700</date>
            <delta_ts>2006-10-28 13:07:29 -0700</delta_ts>
            <desc>Patch to add cairo svg support</desc>
            <filename>cairosvg.patch</filename>
            <type>text/plain</type>
            <size>98942</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMTcwODIpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2
ICs3MCwxMSBAQAogI2VuZGlmCiAKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQgOiBOb25jb3B5
YWJsZSB7CisjaWYgUExBVEZPUk0oQ0FJUk8pCisKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdyYXBo
aWNzQ29udGV4dENhaXJvOworCisjZW5kaWYKICAgICBwdWJsaWM6CiAgICAgICAgIEdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwogICAgICAgICB+R3JhcGhpY3NDb250
ZXh0KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9u
IDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCkBAIC03NywxMiArNzcsMTIgQEAKIAogICAgIGlmICghbV9zb3VyY2UuaW5p
dGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgY2Fpcm9fc3VyZmFjZV90
KiBpbWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgaWYgKCFpbWFnZSkg
Ly8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAg
IHJldHVybjsKIAotICAgIEludFNpemUgc2VsZlNpemUgPSBzaXplKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICBJbnRTaXplIHNlbGZTaXplID0gc2l6ZSgpOwogICAgIEZsb2F0UmVjdCBz
cmNSZWN0KHNyYyk7CiAgICAgRmxvYXRSZWN0IGRzdFJlY3QoZHN0KTsKIApAQCAtOTAsNyArOTAs
NyBAQAogCiAgICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCiAgICAgc2V0Q29t
cG9zaXRpbmdPcGVyYXRpb24oY29udGV4dCwgb3AsIGZyYW1lSGFzQWxwaGFBdEluZGV4KG1fY3Vy
cmVudEZyYW1lKSk7Ci0gICAgCisKICAgICAvLyBJZiB3ZSdyZSBkcmF3aW5nIGEgc3ViIHBvcnRp
b24gb2YgdGhlIGltYWdlIG9yIHNjYWxpbmcgdGhlbiBjcmVhdGUKICAgICAvLyBhIHBhdHRlcm4g
dHJhbnNmb3JtYXRpb24gb24gdGhlIGltYWdlIGFuZCBkcmF3IHRoZSB0cmFuc2Zvcm1lZCBwYXR0
ZXJuLgogICAgIC8vIFRlc3QgdXNpbmcgZXhhbXBsZSBzaXRlIGF0IGh0dHA6Ly93d3cubWV5ZXJ3
ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29tcGxleHNwaXJhbC9kZW1vLmh0bWwKQEAgLTExMyw4ICsx
MTMsOSBAQAogCiB9CiAKKwogdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2lu
dCwKLSAgICBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
KyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBDb21wb3Np
dGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEyMywxNyArMTI0LDE3IEBACiAgICAgaWYgKCFpbWFnZSkgLy8gSWYg
aXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEludFNpemUgaW50cmluc2ljSW1hZ2VTaXplID0gc2l6ZSgpOyAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgSW50U2l6ZSBpbnRyaW5zaWNJbWFnZVNpemUgPSBzaXplKCk7CiAg
ICAgRmxvYXRSZWN0IHNyY1JlY3Qoc3JjUG9pbnQsIGludHJpbnNpY0ltYWdlU2l6ZSk7CiAgICAg
RmxvYXRQb2ludCBwb2ludCA9IHNyY1BvaW50OwogCiAgICAgLy8gQ2hlY2sgYW5kIHNlZSBpZiBh
IHNpbmdsZSBkcmF3IG9mIHRoZSBpbWFnZSBjYW4gY292ZXIgdGhlIGVudGlyZSBhcmVhIHdlIGFy
ZSBzdXBwb3NlZCB0byB0aWxlLgogICAgIGZsb2F0IHRpbGVXaWR0aCA9IHNpemUoKS53aWR0aCgp
OwogICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBzaXplKCkuaGVpZ2h0KCk7Ci0gICAgCisKICAgICAv
LyBJZiB0aGUgc2NhbGUgaXMgbm90IGVxdWFsIHRvIHRoZSBpbnRyaW5zaWMgc2l6ZSBvZiB0aGUg
aW1hZ2UsIHNldCB0cmFuc2Zvcm0gbWF0cml4CiAgICAgLy8gdG8gdGhlIGFwcHJvcHJpYXRlIHNj
YWxhciBtYXRyaXgsIHNjYWxlIHRoZSBzb3VyY2UgcG9pbnQsIGFuZCBzZXQgdGhlIHNpemUgb2Yg
dGhlCi0gICAgLy8gc2NhbGVkIHRpbGUuIAorICAgIC8vIHNjYWxlZCB0aWxlLgogICAgIGZsb2F0
IHNjYWxlWCA9IDEuMDsKICAgICBmbG9hdCBzY2FsZVkgPSAxLjA7CiAgICAgY2Fpcm9fbWF0cml4
X3QgbWF0OwpAQCAtMTQyLDQ2ICsxNDMsNDYgQEAKICAgICAgICAgc2NhbGVYID0gaW50cmluc2lj
SW1hZ2VTaXplLndpZHRoKCkgLyB0aWxlU2l6ZS53aWR0aCgpOwogICAgICAgICBzY2FsZVkgPSBp
bnRyaW5zaWNJbWFnZVNpemUuaGVpZ2h0KCkgLyB0aWxlU2l6ZS5oZWlnaHQoKTsKICAgICAgICAg
Y2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJm1hdCwgc2NhbGVYLCBzY2FsZVkpOwotICAgICAgICAK
KwogICAgICAgICB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwogICAgICAgICB0aWxlSGVp
Z2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7CiAgICAgfQotICAgCisKICAgICAvLyBXZSBjb3VsZCBn
ZXQgaW50ZXJlc3Rpbmcgc291cmNlIG9mZnNldHMgKG5lZ2F0aXZlIG9uZXMgb3IgcG9zaXRpdmUg
b25lcy4gIERlYWwgd2l0aCBib3RoCiAgICAgLy8gb3V0IG9mIGJvdW5kcyBjYXNlcy4KICAgICBm
bG9hdCBkc3RUaWxlWCA9IGRzdFJlY3QueCgpICsgZm1vZGYoZm1vZGYoLXBvaW50LngoKSwgdGls
ZVdpZHRoKSAtIHRpbGVXaWR0aCwgdGlsZVdpZHRoKTsKICAgICBmbG9hdCBkc3RUaWxlWSA9IGRz
dFJlY3QueSgpICsgZm1vZGYoZm1vZGYoLXBvaW50LnkoKSwgdGlsZUhlaWdodCkgLSB0aWxlSGVp
Z2h0LCB0aWxlSGVpZ2h0KTsKICAgICBGbG9hdFJlY3QgZHN0VGlsZVJlY3QoZHN0VGlsZVgsIGRz
dFRpbGVZLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwotICAgIAorCiAgICAgZmxvYXQgc3JjWCA9
IGRzdFJlY3QueCgpIC0gZHN0VGlsZVJlY3QueCgpOwogICAgIGZsb2F0IHNyY1kgPSBkc3RSZWN0
LnkoKSAtIGRzdFRpbGVSZWN0LnkoKTsKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSBzaW5nbGUg
aW1hZ2UgZHJhdyBjb3ZlcnMgdGhlIHdob2xlIGFyZWEsIHRoZW4ganVzdCBkcmF3IG9uY2UuCisg
ICAgICAgIGlmIChkc3RUaWxlUmVjdC5jb250YWlucyhkc3RSZWN0KSkgeworICAgICAgICAgICAg
ZHJhdyhjdHh0LCBkc3RSZWN0LAorICAgICAgICAgICAgICAgICBGbG9hdFJlY3Qoc3JjWCAqIHNj
YWxlWCwgc3JjWSAqIHNjYWxlWSwgZHN0UmVjdC53aWR0aCgpICogc2NhbGVYLCBkc3RSZWN0Lmhl
aWdodCgpICogc2NhbGVZKSwgb3ApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICAvLyBJZiB0aGUgc2luZ2xlIGltYWdlIGRyYXcgY292ZXJzIHRoZSB3aG9sZSBhcmVhLCB0
aGVuIGp1c3QgZHJhdyBvbmNlLgotICAgIGlmIChkc3RUaWxlUmVjdC5jb250YWlucyhkc3RSZWN0
KSkgewotICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsCi0gICAgICAgICAgICAgRmxvYXRSZWN0
KHNyY1ggKiBzY2FsZVgsIHNyY1kgKiBzY2FsZVksIGRzdFJlY3Qud2lkdGgoKSAqIHNjYWxlWCwg
ZHN0UmVjdC5oZWlnaHQoKSAqIHNjYWxlWSksIG9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICAgICAgLy8gV2UgaGF2ZSB0byB0aWxlLgorICAgICAgICBjYWlyb190KiBjb250ZXh0ID0g
Y3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICAvLyBXZSBoYXZlIHRvIHRpbGUuCi0gICAg
Y2Fpcm9fdCogY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBjYWly
b19zYXZlKGNvbnRleHQpOwogCi0gICAgY2Fpcm9fc2F2ZShjb250ZXh0KTsKKyAgICAgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgICAgIHNldENvbXBvc2l0aW5nT3Bl
cmF0aW9uKGNvbnRleHQsIG9wLCBmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkp
OwogCi0gICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgc2V0Q29tcG9z
aXRpbmdPcGVyYXRpb24oY29udGV4dCwgb3AsIGZyYW1lSGFzQWxwaGFBdEluZGV4KG1fY3VycmVu
dEZyYW1lKSk7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCBkc3RUaWxlUmVjdC54
KCksIGRzdFRpbGVSZWN0LnkoKSk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9
IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9zdXJmYWNlKGltYWdlKTsKKyAgICAgICAgY2Fpcm9f
cGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZtYXQpOworICAgICAgICBjYWlyb19wYXR0ZXJu
X3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7CiAKLSAgICBjYWlyb190
cmFuc2xhdGUoY29udGV4dCwgZHN0VGlsZVJlY3QueCgpLCBkc3RUaWxlUmVjdC55KCkpOwotICAg
IGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9zdXJm
YWNlKGltYWdlKTsKLSAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwgJm1hdCk7
Ci0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRVBF
QVQpOwotCi0gICAgLy8gRHJhdyB0aGUgaW1hZ2UuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZShjb250
ZXh0LCBwYXR0ZXJuKTsKLSAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwgc3JjWCwgc3JjWSwg
ZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKLSAgICBjYWlyb19maWxsKGNvbnRl
eHQpOwotICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7Ci0KKyAgICAgICAgLy8gRHJhdyB0aGUg
aW1hZ2UuCisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY29udGV4dCwgcGF0dGVybik7CisgICAg
ICAgIGNhaXJvX3JlY3RhbmdsZShjb250ZXh0LCBzcmNYLCBzcmNZLCBkc3RSZWN0LndpZHRoKCks
IGRzdFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19maWxsKGNvbnRleHQpOworICAgICAg
ICBjYWlyb19yZXN0b3JlKGNvbnRleHQpOworICAgIH0KICAgICBzdGFydEFuaW1hdGlvbigpOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0FmZmluZVRyYW5zZm9ybUNhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0FmZmluZVRyYW5zZm9ybUNh
aXJvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vQWZmaW5lVHJh
bnNmb3JtQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl
IDxtYXRoLmg+CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
QWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVUcmFuc2Zvcm0oKQoreworICAgIGNhaXJvX21hdHJpeF9p
bml0X2lkZW50aXR5KCZtX3RyYW5zZm9ybSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybTo6QWZmaW5l
VHJhbnNmb3JtKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUg
dHgsIGRvdWJsZSB0eSkKK3sKKyAgICBzZXRNYXRyaXgoYSxiLGMsZCx0eCx0eSk7Cit9CisKK0Fm
ZmluZVRyYW5zZm9ybTo6QWZmaW5lVHJhbnNmb3JtKGNvbnN0IGNhaXJvX21hdHJpeF90JiBtYXRy
aXgpCisgICAgICAgIDogbV90cmFuc2Zvcm0obWF0cml4KQore30KKwordm9pZCBBZmZpbmVUcmFu
c2Zvcm06OnNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwg
ZG91YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgY2Fpcm9fbWF0cml4X2luaXQoJm1fdHJhbnNm
b3JtLGEsYyxiLGQsdHgsdHkpOworfQorCit2b2lkIEFmZmluZVRyYW5zZm9ybTo6bWFwKGRvdWJs
ZSB4LCBkb3VibGUgeSwgZG91YmxlKiB4MiwgZG91YmxlKiB5MikgY29uc3QKK3sKKyAgICAqeDIg
PSB4OworICAgICp5MiA9IHk7CisgICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9wb2ludCgmbV90
cmFuc2Zvcm0seDIseTIpOworfQorCitJbnRSZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KG1hcFJlY3QoRmxvYXRSZWN0KHJlY3QpKSk7Cit9CisKKy8qKgorICAgIGJhc2VkIG9uIGludGVy
bmFsIF9jYWlyb19tYXRyaXhfdHJhbnNmb3JtX2JvdW5kaW5nX2JveAorKiovCitGbG9hdFJlY3Qg
QWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sK
KyAgICBpbnQgaTsKKyAgICBkb3VibGUgcXVhZF94WzRdLCBxdWFkX3lbNF07CisgICAgZG91Ymxl
IGR4MSwgZHkxOworICAgIGRvdWJsZSBkeDIsIGR5MjsKKyAgICBkb3VibGUgbWluX3gsIG1heF94
OworICAgIGRvdWJsZSBtaW5feSwgbWF4X3k7CisKKyAgICBkb3VibGUgeCA9KGRvdWJsZSlyZWN0
LngoKTsKKyAgICBkb3VibGUgeSA9IChkb3VibGUpcmVjdC55KCk7CisgICAgZG91YmxlIHdpZHRo
ID0oZG91YmxlKXJlY3Qud2lkdGgoKTsKKyAgICBkb3VibGUgaGVpZ2h0ID0gKGRvdWJsZSlyZWN0
LmhlaWdodCgpOworICAgIGRvdWJsZSB4eCA9IG1fdHJhbnNmb3JtLnh4OworICAgIGRvdWJsZSB5
eSA9IG1fdHJhbnNmb3JtLnl5OworICAgIGRvdWJsZSB4eSA9IG1fdHJhbnNmb3JtLnh5OworICAg
IGRvdWJsZSB5eCA9IG1fdHJhbnNmb3JtLnl4OworICAgIGRvdWJsZSB0eCA9IG1fdHJhbnNmb3Jt
LngwOworICAgIGRvdWJsZSB0eSA9IG1fdHJhbnNmb3JtLnkwOworCisgICAgcXVhZF94WzBdID0g
eHggKiB4ICsgeHkgKnkgK3R4OworICAgIHF1YWRfeVswXSA9IHl4ICp4ICsgeXkgKiB5ICt0eTsK
KworICAgIGR4MSA9IHh4KndpZHRoOworICAgIGR5MSA9IHl4KndpZHRoOworCisgICAgcXVhZF94
WzFdID0gcXVhZF94WzBdICsgZHgxOworICAgIHF1YWRfeVsxXSA9IHF1YWRfeVswXSArIGR5MTsK
KworICAgIGR4MiA9IHh5ICpoZWlnaHQ7CisgICAgZHkyID0geXkgKiBoZWlnaHQ7CisKKyAgICBx
dWFkX3hbMl0gPSBxdWFkX3hbMF0gKyBkeDI7CisgICAgcXVhZF95WzJdID0gcXVhZF95WzBdICsg
ZHkyOworCisgICAgcXVhZF94WzNdID0gcXVhZF94WzBdICsgZHgxICsgZHgyOworICAgIHF1YWRf
eVszXSA9IHF1YWRfeVswXSArIGR5MSArIGR5MjsKKworICAgIG1pbl94ID0gbWF4X3ggPSBxdWFk
X3hbMF07CisgICAgbWluX3kgPSBtYXhfeSA9IHF1YWRfeVswXTsKKworICAgIGZvciAoaT0xOyBp
IDwgNDsgaSsrKSB7CisgICAgICAgIGlmIChxdWFkX3hbaV0gPCBtaW5feCkKKyAgICAgICAgICAg
IG1pbl94ID0gcXVhZF94W2ldOworICAgICAgICBpZiAocXVhZF94W2ldID4gbWF4X3gpCisgICAg
ICAgICAgICBtYXhfeCA9IHF1YWRfeFtpXTsKKworICAgICAgICBpZiAocXVhZF95W2ldIDwgbWlu
X3kpCisgICAgICAgICAgICBtaW5feSA9IHF1YWRfeVtpXTsKKyAgICAgICAgaWYgKHF1YWRfeVtp
XSA+IG1heF95KQorICAgICAgICAgICAgbWF4X3kgPSBxdWFkX3lbaV07CisgICAgfQorICAgIHgg
PSBtaW5feDsKKyAgICB5ID0gbWluX3k7CisgICAgd2lkdGggPSBtYXhfeCAtIG1pbl94OworICAg
IGhlaWdodCA9IG1heF95IC0gbWluX3k7CisgICAgcmV0dXJuIEZsb2F0UmVjdCh4LHksd2lkdGgs
aGVpZ2h0KTsKK30KKworLyoKKyAqIGZyb20gX2NhaXJvX21hdHJpeF9pc19pZGVudGl0eTsKKyAq
LworYm9vbCBBZmZpbmVUcmFuc2Zvcm06OmlzSWRlbnRpdHkoKSBjb25zdAoreworICAgIHJldHVy
biAobV90cmFuc2Zvcm0ueHggPT0gMS4wICYmIG1fdHJhbnNmb3JtLnl4ID09IDAuMCAmJgorICAg
ICAgICAgICAgbV90cmFuc2Zvcm0ueHkgPT0gMC4wICYmIG1fdHJhbnNmb3JtLnl5ID09IDEuMCAm
JgorICAgICAgICAgICAgbV90cmFuc2Zvcm0ueDAgPT0gMC4wICYmIG1fdHJhbnNmb3JtLnkwID09
IDAuMCk7Cit9CisKK2RvdWJsZSBBZmZpbmVUcmFuc2Zvcm06Om0xMSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fdHJhbnNmb3JtLnh4OworfQorCitkb3VibGUgQWZmaW5lVHJhbnNmb3JtOjptMTIo
KSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS54eTsKK30KKworZG91YmxlIEFmZmlu
ZVRyYW5zZm9ybTo6bTIxKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0ueXg7Cit9
CisKK2RvdWJsZSBBZmZpbmVUcmFuc2Zvcm06Om0yMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dHJhbnNmb3JtLnl5OworfQorCitkb3VibGUgQWZmaW5lVHJhbnNmb3JtOjpkeCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLngwOworfQorCitkb3VibGUgQWZmaW5lVHJhbnNmb3Jt
OjpkeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLnkwOworfQorCit2b2lkIEFm
ZmluZVRyYW5zZm9ybTo6cmVzZXQoKQoreworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5
KCZtX3RyYW5zZm9ybSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpz
Y2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICBjYWlyb19tYXRyaXhfc2NhbGUoJm1f
dHJhbnNmb3JtLHN4LHN5KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0FmZmluZVRyYW5zZm9y
bSYgQWZmaW5lVHJhbnNmb3JtOjpyb3RhdGUoZG91YmxlIGRlZ3JlZXMpCit7CisgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBkZWcycmFkID0gTV9QSS8xODAuMDsKKyAgICBkb3VibGUgcmFkaWFucyA9
IGRlZ3JlZXMqZGVnMnJhZDsKKyAgICBjYWlyb19tYXRyaXhfcm90YXRlKCZtX3RyYW5zZm9ybSxy
YWRpYW5zKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5l
VHJhbnNmb3JtOjp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgY2Fpcm9f
bWF0cml4X3RyYW5zbGF0ZSgmbV90cmFuc2Zvcm0sdHgsdHkpOworICAgIHJldHVybiAqdGhpczsK
K30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNoZWFyKGRvdWJsZSBzeCwg
ZG91YmxlIHN5KQoreworICAgIGNhaXJvX21hdHJpeF90IG90aGVyOworICAgIGNhaXJvX21hdHJp
eF9pbml0KCZvdGhlciwxLHN4LHN5LDEsMCwwKTsKKyAgICBjYWlyb19tYXRyaXhfbXVsdGlwbHko
Jm1fdHJhbnNmb3JtLCZvdGhlciwmbV90cmFuc2Zvcm0pOworICAgIHJldHVybiAqdGhpczsKK30K
KworLyoqCisgKiBfY2Fpcm9fbWF0cml4X2NvbXB1dGVfZGV0ZXJtaW5hbnQKKyAqLworZG91Ymxl
IEFmZmluZVRyYW5zZm9ybTo6ZGV0KCkgY29uc3QKK3sKKyAgICBkb3VibGUgIGEsIGIsIGMsIGQ7
CisKKyAgICBhID0gbV90cmFuc2Zvcm0ueHg7CisgICAgYiA9IG1fdHJhbnNmb3JtLnl4OworICAg
IGMgPSBtX3RyYW5zZm9ybS54eTsKKyAgICBkID0gbV90cmFuc2Zvcm0ueXk7CisKKyAgICByZXR1
cm4oYSpkIC0gYipjKTsKK30KKworYm9vbCBBZmZpbmVUcmFuc2Zvcm06OmlzSW52ZXJ0aWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuKGRldCgpID09IDApOworfQorCitBZmZpbmVUcmFuc2Zvcm0g
QWZmaW5lVHJhbnNmb3JtOjppbnZlcnQoKSBjb25zdAoreworICAgIGlmICghaXNJbnZlcnRpYmxl
KCkpCisgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gaW52ZXJzZSA9IEFmZmluZVRyYW5zZm9ybShtX3RyYW5zZm9ybSk7CisgICAgY2Fpcm9fbWF0
cml4X2ludmVydCgmaW52ZXJzZS5tX3RyYW5zZm9ybSk7CisgICAgcmV0dXJuIGludmVyc2U7Cit9
CisKK0FmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IgY2Fpcm9fbWF0cml4X3QoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3RyYW5zZm9ybTsKK30KKworYm9vbCBBZmZpbmVUcmFuc2Zvcm06Om9wZXJh
dG9yPT0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4o
bV90cmFuc2Zvcm0ueHggPT0gb3RoZXIubV90cmFuc2Zvcm0ueHggJiYKKyAgICAgICAgICAgIG1f
dHJhbnNmb3JtLnl4ID09IG90aGVyLm1fdHJhbnNmb3JtLnl4ICYmCisgICAgICAgICAgICBtX3Ry
YW5zZm9ybS54eSA9PSBvdGhlci5tX3RyYW5zZm9ybS54eSAmJgorICAgICAgICAgICAgbV90cmFu
c2Zvcm0ueXkgPT0gb3RoZXIubV90cmFuc2Zvcm0ueXkgJiYKKyAgICAgICAgICAgIG1fdHJhbnNm
b3JtLngwID09IG90aGVyLm1fdHJhbnNmb3JtLngwICYmCisgICAgICAgICAgICBtX3RyYW5zZm9y
bS55MCA9PSBvdGhlci5tX3RyYW5zZm9ybS55MCk7CisKK30KKworQWZmaW5lVHJhbnNmb3JtJiBB
ZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKj0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBvdGhlcikK
K3sKKyAgICBjYWlyb19tYXRyaXhfbXVsdGlwbHkoJm1fdHJhbnNmb3JtLCZtX3RyYW5zZm9ybSwm
b3RoZXIubV90cmFuc2Zvcm0pOworICAgIHJldHVybiAqdGhpczsKK30KKworQWZmaW5lVHJhbnNm
b3JtIEFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3IqKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgb3Ro
ZXIpCit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRtcDsKKyAgICBjYWlyb19tYXRyaXhfbXVsdGlw
bHkoJnRtcC5tX3RyYW5zZm9ybSwmbV90cmFuc2Zvcm0sJm90aGVyLm1fdHJhbnNmb3JtKTsKKyAg
ICByZXR1cm4gdG1wOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNp
b24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBQTEFURk9S
TShDQUlSTykKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAg
LTM3LDE5ICszOCwzMSBAQAogI2lmIFdJTjMyCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KICNl
bmRpZgorI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZUNhaXJv
LmgiCisjZW5kaWYKIAogI2lmbmRlZiBNX1BJCiAjZGVmaW5lIE1fUEkgMy4xNDE1OTI2NTM1ODk3
OTMyMzg0NgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHREspCisjZGVmaW5lIG5vdEltcGxlbWVu
dGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAl
c1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDAp
CisjZWxzZQorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgeworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlCit7CiBwdWJsaWM6CiAgICAgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CiAgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSgpOwogCiAgICAgY2Fpcm9fdCogY29udGV4dDsKKyAgICBkb3VibGUgYWxwaGE7CisgICAg
VmVjdG9yPGZsb2F0PiBsYXllcnM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0Q29sb3Io
Y2Fpcm9fdCogY3IsIGNvbnN0IENvbG9yJiBjb2wpCkBAIC02OSw5ICs4Miw4IEBACiB9CiAKIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKCkKLSAgICA6ICBjb250ZXh0KDApCi17Ci19CisgICAgICAgIDogIGNvbnRleHQoMCkKK3t9
CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSgpCiB7CkBAIC04MCw4ICs5Miw4IEBACiAKICNpZiBXSU4zMgogR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGRjKQotICAgIDogbV9jb21tb24oY3JlYXRlR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUpCisgICAgICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0
UHJpdmF0ZSgpKQorICAgICAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKQogewogICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1
cmZhY2VfY3JlYXRlKGRjKTsKICAgICBtX2RhdGEtPmNvbnRleHQgPSBjYWlyb19jcmVhdGUoc3Vy
ZmFjZSk7CkBAIC05MCwxMCArMTAyLDE0IEBACiAKICNpZiBQTEFURk9STShHREspIHx8IFdJTjMy
CiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKLSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUo
KSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQorICAg
ICAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAgICAgICAg
LCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKIHsKICAgICBtX2Rh
dGEtPmNvbnRleHQgPSBjYWlyb19yZWZlcmVuY2UoY29udGV4dCk7CisvL0ZJWE1FOiBhIGhhY2sg
dGlsbCB0aGUgZml4IGZvciByZWxhdGl2ZSBwYXRocyBpcyBjaGVja2VkIGluCisjaWYgUExBVEZP
Uk0oR0RLKQorICAgIGNhaXJvX21vdmVfdG8oY29udGV4dCwwLDApOworI2VuZGlmCiB9CiAjZW5k
aWYKIApAQCAtMTIzLDggKzEzOSw5IEBACiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgY2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+
Y29udGV4dDsKKyAgICBjYWlyb19zYXZlKGNvbnRleHQpOwogICAgIGlmIChmaWxsQ29sb3IoKS5h
bHBoYSgpKQogICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIoY29udGV4dCwgcmVjdCwgZmlsbENv
bG9yKCkpOwogCkBAIC0xMzYsNiArMTUzLDcgQEAKICAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lk
dGgoY29udGV4dCwgMS4wKTsKICAgICAgICAgY2Fpcm9fc3Ryb2tlKGNvbnRleHQpOwogICAgIH0K
KyAgICBjYWlyb19yZXN0b3JlKGNvbnRleHQpOwogfQogCiAvLyBGSVhNRTogTm93IHRoYXQgdGhp
cyBpcyByZWZhY3RvcmVkLCBpdCBzaG91bGQgYmUgc2hhcmVkIGJ5IGFsbCBjb250ZXh0cy4KQEAg
LTE0OSwyMCArMTY3LDE4IEBACiAgICAgICAgIGlmIChwMS54KCkgPT0gcDIueCgpKSB7CiAgICAg
ICAgICAgICBwMS5zZXRZKHAxLnkoKSArIHN0cm9rZVdpZHRoKTsKICAgICAgICAgICAgIHAyLnNl
dFkocDIueSgpIC0gc3Ryb2tlV2lkdGgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgcDEuc2V0WChwMS54KCkgKyBzdHJva2VXaWR0aCk7
CiAgICAgICAgICAgICBwMi5zZXRYKHAyLngoKSAtIHN0cm9rZVdpZHRoKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKKwogICAgIGlmICgoKGludClzdHJva2VXaWR0aCklMikgewogICAgICAgICBp
ZiAocDEueCgpID09IHAyLngoKSkgewogICAgICAgICAgICAgLy8gV2UncmUgYSB2ZXJ0aWNhbCBs
aW5lLiAgQWRqdXN0IG91ciB4LgogICAgICAgICAgICAgcDEuc2V0WChwMS54KCkgKyAwLjUpOwog
ICAgICAgICAgICAgcDIuc2V0WChwMi54KCkgKyAwLjUpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2UncmUgYSBob3Jpem9udGFs
IGxpbmUuIEFkanVzdCBvdXIgeS4KICAgICAgICAgICAgIHAxLnNldFkocDEueSgpICsgMC41KTsK
ICAgICAgICAgICAgIHAyLnNldFkocDIueSgpICsgMC41KTsKQEAgLTE4OSw3ICsyMDUsNyBAQAog
ICAgIEZsb2F0UG9pbnQgcDEgPSBwb2ludDE7CiAgICAgRmxvYXRQb2ludCBwMiA9IHBvaW50MjsK
ICAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHAxLngoKSA9PSBwMi54KCkpOwotICAgIAorCiAg
ICAgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGVyaWVzKHAxLCBwMiwgd2lkdGgsIHBlblN0eWxlKTsK
ICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjb250ZXh0LCB3aWR0aCk7CiAKQEAgLTIwNyw5ICsy
MjMsOSBAQAogICAgIH0KIAogICAgIHNldENvbG9yKGNvbnRleHQsIHBlbigpLmNvbG9yKCkpOwot
ICAgIAorCiAgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhjb250ZXh0LCBDQUlST19BTlRJQUxJQVNf
Tk9ORSk7Ci0gICAgCisKICAgICBpZiAocGF0V2lkdGgpIHsKICAgICAgICAgLy8gRG8gYSByZWN0
IGZpbGwgb2Ygb3VyIGVuZHBvaW50cy4gIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSB0aGUK
ICAgICAgICAgLy8gYXBwZWFyYW5jZSBvZiBiZWluZyBhIGJvcmRlci4gIFdlIHRoZW4gZHJhdyB0
aGUgYWN0dWFsIGRvdHRlZC9kYXNoZWQgbGluZS4KQEAgLTIyMCw3ICsyMzYsNyBAQAogICAgICAg
ICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKGNvbnRleHQsIEZsb2F0UmVjdChwMS54KCktd2lkdGgs
IHAxLnkoKS13aWR0aC8yLCB3aWR0aCwgd2lkdGgpLCBwZW4oKS5jb2xvcigpKTsKICAgICAgICAg
ICAgIGZpbGxSZWN0U291cmNlT3Zlcihjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpLCBwMi55KCkt
d2lkdGgvMiwgd2lkdGgsIHdpZHRoKSwgcGVuKCkuY29sb3IoKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgCisKICAgICAgICAgLy8gRXhhbXBsZTogODAgcGl4ZWxzIHdpdGggYSB3aWR0aCBvZiAzMCBw
aXhlbHMuCiAgICAgICAgIC8vIFJlbWFpbmRlciBpcyAyMC4gIFRoZSBtYXhpbXVtIHBpeGVscyBv
ZiBsaW5lIHdlIGNvdWxkIHBhaW50CiAgICAgICAgIC8vIHdpbGwgYmUgNTAgcGl4ZWxzLgpAQCAt
MjQxLDE2ICsyNTcsMTQgQEAKICAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcGF0V2lkdGggLSByZW1haW5kZXI7CiAg
ICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcmVtYWluZGVyLzI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9mZnNldCA9IHBhdFdpZHRoLzI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghZXZlbk51bWJlck9mU2VnbWVudHMpIHsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIWV2ZW5OdW1iZXJPZlNlZ21lbnRzKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKHJlbWFpbmRlcikKICAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9mZnNldCA9
IChwYXRXaWR0aCAtIHJlbWFpbmRlcikvMjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBkb3VibGUgZGFzaCA9IHBhdFdpZHRoOwogICAgICAgICBjYWlyb19z
ZXRfZGFzaChjb250ZXh0LCAmZGFzaCwgMSwgcGF0dGVybk9mZnNldCk7CiAgICAgfQpAQCAtMjY3
LDcgKzI4MSw3IEBACiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIAorCiAgICAgY2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKICAg
ICBjYWlyb19zYXZlKGNvbnRleHQpOwogICAgIGZsb2F0IHlSYWRpdXMgPSAuNSAqIHJlY3QuaGVp
Z2h0KCk7CkBAIC0yODQsNyArMjk4LDcgQEAKICAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46
Ok5vUGVuKSB7CiAgICAgICAgIHNldENvbG9yKGNvbnRleHQsIHBlbigpLmNvbG9yKCkpOwogICAg
ICAgICB1bnNpZ25lZCBwZW5XaWR0aCA9IHBlbigpLndpZHRoKCk7Ci0gICAgICAgIGlmIChwZW5X
aWR0aCA9PSAwKSAKKyAgICAgICAgaWYgKHBlbldpZHRoID09IDApCiAgICAgICAgICAgICBwZW5X
aWR0aCsrOwogICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjb250ZXh0LCBwZW5XaWR0aCk7
CiAgICAgICAgIGNhaXJvX3N0cm9rZShjb250ZXh0KTsKQEAgLTI5NiwyMSArMzEwLDIxIEBACiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAg
ICAgaW50IHggPSByZWN0LngoKTsKICAgICBpbnQgeSA9IHJlY3QueSgpOwogICAgIGZsb2F0IHcg
PSAoZmxvYXQpcmVjdC53aWR0aCgpOwogICAgIGZsb2F0IGggPSAoZmxvYXQpcmVjdC5oZWlnaHQo
KTsKICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGggLyB3OwogICAgIGZsb2F0IHJldmVyc2VTY2Fs
ZUZhY3RvciA9IHcgLyBoOwotICAgIAorCiAgICAgY2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+
Y29udGV4dDsKLSAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7ICAgICAgICAK
KyAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgIGZsb2F0IHIg
PSB3IC8gMjsKICAgICAgICAgZmxvYXQgZmEgPSBzdGFydEFuZ2xlOwogICAgICAgICBmbG9hdCBm
YWxlbiA9ICBmYSArIGFuZ2xlU3BhbjsKICAgICAgICAgY2Fpcm9fYXJjKGNvbnRleHQsIHggKyBy
LCB5ICsgciwgciwgLWZhICogTV9QSS8xODAsIC1mYWxlbiAqIE1fUEkvMTgwKTsKLSAgICAgICAg
CisKICAgICAgICAgc2V0Q29sb3IoY29udGV4dCwgcGVuKCkuY29sb3IoKSk7CiAgICAgICAgIGNh
aXJvX3NldF9saW5lX3dpZHRoKGNvbnRleHQsIHBlbigpLndpZHRoKCkpOwogICAgICAgICBjYWly
b19zdHJva2UoY29udGV4dCk7CkBAIC0zODIsNyArMzk2LDcgQEAKICAgICAgICAgcmV0dXJuOwog
ICAgIGludCByYWRpdXMgPSAoZm9jdXNSaW5nV2lkdGgoKSAtIDEpIC8gMjsKICAgICBpbnQgb2Zm
c2V0ID0gcmFkaXVzICsgZm9jdXNSaW5nT2Zmc2V0KCk7Ci0gICAgCisKICAgICBjb25zdCBWZWN0
b3I8SW50UmVjdD4mIHJlY3RzID0gZm9jdXNSaW5nUmVjdHMoKTsKICAgICB1bnNpZ25lZCByZWN0
Q291bnQgPSByZWN0cy5zaXplKCk7CiAgICAgSW50UmVjdCBmaW5hbEZvY3VzUmVjdDsKQEAgLTM5
Myw3ICs0MDcsNyBAQAogICAgIH0KICAgICAvLyBGSVhNRTogVGhlc2UgcmVjdHMgc2hvdWxkIGJl
IHJvdW5kZWQKICAgICBjYWlyb19yZWN0YW5nbGUobV9kYXRhLT5jb250ZXh0LCBmaW5hbEZvY3Vz
UmVjdC54KCksIGZpbmFsRm9jdXNSZWN0LnkoKSwgZmluYWxGb2N1c1JlY3Qud2lkdGgoKSwgZmlu
YWxGb2N1c1JlY3QuaGVpZ2h0KCkpOwotICAgIAorCiAgICAgLy8gRm9yY2UgdGhlIGFscGhhIHRv
IDUwJS4gIFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSBNYWMgZG9lcyB3aXRoIG91dGxpbmUgcmluZ3Mu
CiAgICAgQ29sb3IgcmluZ0NvbG9yKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5i
bHVlKCksIDEyNyk7CiAgICAgc2V0Q29sb3IobV9kYXRhLT5jb250ZXh0LCByaW5nQ29sb3IpOwpA
QCAtNDAxLDEyICs0MTUsMTAgQEAKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZvY3Vz
UmluZ0NsaXAoY29uc3QgSW50UmVjdCYpCi17Ci19Cit7fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJGb2N1c1JpbmdDbGlwKCkKLXsKLX0KK3t9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgeU9mZnNldCwgaW50
IHdpZHRoLCBib29sIHByaW50aW5nKQogewpAQCAtNDQzLDcgKzQ1NSw3IEBACiAgICAgY2Fpcm9f
ZGV2aWNlX3RvX3VzZXJfZGlzdGFuY2UoY29udGV4dCwmeCwmeSk7CiAgICAgcmVzdWx0LnNldFdp
ZHRoKChmbG9hdCl4KTsKICAgICByZXN1bHQuc2V0SGVpZ2h0KChmbG9hdCl5KTsKLSAgICByZXR1
cm4gcmVzdWx0OyAKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCkBAIC00NjEsOSArNDczLDU2OSBAQAogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiBsaW5rLCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3t9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lV2lkdGgoZmxvYXQgd2lkdGgpCiB7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoIChtX2RhdGEtPmNvbnRleHQs
d2lkdGgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxj
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGNhaXJvX2xpbmVfY2FwX3QgY2FwID0gQ0FJUk9fTElORV9DQVBfQlVUVDsKKworICAgIHN3aXRj
aCAobGMpIHsKKyAgICBjYXNlIFJvdW5kQ2FwOgorICAgICAgICBjYXAgPSBDQUlST19MSU5FX0NB
UF9ST1VORDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgIGNh
cCA9IENBSVJPX0xJTkVfQ0FQX1NRVUFSRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
aXJvX3NldF9saW5lX2NhcChtX2RhdGEtPmNvbnRleHQsY2FwKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxqKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb19saW5lX2pvaW5fdCBqb2luID0g
Q0FJUk9fTElORV9KT0lOX01JVEVSOworCisgICAgc3dpdGNoIChsaikgeworICAgIGNhc2UgUm91
bmRKb2luOgorICAgICAgICBqb2luID0gQ0FJUk9fTElORV9KT0lOX1JPVU5EOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEJldmVsSm9pbjoKKyAgICAgICAgam9pbiA9IENBSVJPX0xJTkVfSk9J
Tl9ST1VORDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhaXJvX3NldF9saW5lX2pvaW4o
bV9kYXRhLT5jb250ZXh0LGpvaW4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBtaXRlcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgY2Fpcm9fc2V0X21pdGVyX2xpbWl0KG1fZGF0YS0+Y29udGV4dCxt
aXRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgLy9G
SVhNRSBtZSB1c2UgdGhpcyBhbHBoYSBob3cgPworICAgIG1fZGF0YS0+YWxwaGEgPSBhbHBoYTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRvciBvcCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fb3Bl
cmF0b3JfdCBjb3AgPSBDQUlST19PUEVSQVRPUl9DTEVBUjsKKworICAgIC8vbm90IHN1cHBvcnRl
ZCA/CisgICAgLy9jb3AgPSBDQUlST19PUEVSQVRPUl9ERVNUOworICAgIC8vY29wID0gQ0FJUk9f
T1BFUkFUT1JfQUREOworICAgIC8vIGNvcCA9IENBSVJPX09QRVJBVE9SX1NBVFVSQVRFOworCisg
ICAgc3dpdGNoIChvcCkgeworICAgICAgICAvL2Nhc2UgQ29tcG9zaXRlQ2xlYXI6CisgICAgY2Fz
ZSBDb21wb3NpdGVDb3B5OgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9TT1VSQ0U7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3ZlcjoKKyAgICAgICAgY29w
ID0gQ0FJUk9fT1BFUkFUT1JfT1ZFUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3Np
dGVTb3VyY2VJbjoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfSU47CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3V0OgorICAgICAgICBjb3AgPSBDQUlST19P
UEVSQVRPUl9PVVQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlQXRv
cDoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfQVRPUDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk92ZXI6CisgICAgICAgIGNvcCA9IENBSVJPX09Q
RVJBVE9SX0RFU1RfT1ZFUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0
aW5hdGlvbkluOgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9ERVNUX0lOOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0OgorICAgICAgICBjb3Ag
PSBDQUlST19PUEVSQVRPUl9ERVNUX09VVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21w
b3NpdGVEZXN0aW5hdGlvbkF0b3A6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX0RFU1Rf
QVRPUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVYT1I6CisgICAgICAgIGNv
cCA9IENBSVJPX09QRVJBVE9SX1hPUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3Np
dGVQbHVzRGFya2VyOgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9PVkVSOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZUhpZ2hsaWdodDoKKyAgICAgICAgY29wID0gQ0FJ
Uk9fT1BFUkFUT1JfT1ZFUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVQbHVz
TGlnaHRlcjoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfT1ZFUjsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhaXJvX3NldF9vcGVyYXRvcihjcixjb3ApOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y29udGV4dDsKKyAgICBjYWlyb19wYXRoX3QgKnAgPSBwYXRoLnBsYXRmb3JtUGF0aCgpOworICAg
IGNhaXJvX2FwcGVuZF9wYXRoKGNyLHApOworICAgIGNhaXJvX2NsaXAoY3IpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb19zY2FsZSht
X2RhdGEtPmNvbnRleHQsc2l6ZS53aWR0aCgpLHNpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb19yb3RhdGUobV9k
YXRhLT5jb250ZXh0LGFuZ2xlSW5SYWRpYW5zKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250
ZXh0OworICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJ
Uk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3JlY3RhbmdsZSAoY3IsIHJlY3QueCgpLHJl
Y3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGwgKGNy
KTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2Rh
dGEtPmNvbnRleHQ7CisKKyAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7Cisg
ICAgICAgIGNhaXJvX3NhdmUoY3IpOworICAgICAgICBzZXRDb2xvcihjciwgcGVuKCkuY29sb3Io
KSk7CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgci54KCksIHIueSgpLCByLndpZHRoKCks
IHIuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjcix3aWR0aCk7Cisg
ICAgICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworICAg
IH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgYWxwaGEpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3B1c2hfZ3Jv
dXAgKGNyKTsKKyAgICBtX2RhdGEtPmxheWVycy5hcHBlbmQoYWxwaGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y29udGV4dDsKKyAgICBjYWlyb19wb3BfZ3JvdXBfdG9fc291cmNlIChjcik7CisgICAgZmxvYXQg
YWxwaGEgPSBtX2RhdGEtPmxheWVycy5sYXN0KCk7CisgICAgbV9kYXRhLT5sYXllcnMucmVtb3Zl
TGFzdCgpOworICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEgKGNyLGFscGhhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHdvcmxk
TWF0cml4KQoreworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJv
X21hdHJpeF90IGNfbWF0cml4ID0gKGNhaXJvX21hdHJpeF90KXdvcmxkTWF0cml4OworICAgIGNh
aXJvX3RyYW5zZm9ybShjciwmY19tYXRyaXgpOworfQorCisKKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFNoYWRvdyhJbnRTaXplIGNvbnN0JiwgaW50LCBDb2xvciBjb25zdCYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRv
cExlZnQsCisgICAgICAgIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LGNvbnN0IEludFNpemUmIGJv
dHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KQoreworICAgIC8vRklYTUU6IGNh
bGxlZCBvZnRlbgorICAgIC8vbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCB0
aGlja25lc3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmZGVmIFNWR19TVVBQ
T1JUCitLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyogY3R4ID0g
c3RhdGljX2Nhc3Q8R3JhcGhpY3NDb250ZXh0Q2Fpcm8qPih0aGlzKTsKKyAgICByZXR1cm4gbmV3
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8oY3R4KTsKK30KKyNlbmRpZgorCitHcmFwaGlj
c0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCisgICAgICAgIDpHcmFwaGljc0NvbnRleHQoY29udGV4dCkKK3sKKyAgICAv
L21hbnkgY2Fpcm8gY2FsbHMgZG8gZG8gbm90IGZ1bmN0aW9uIGNvcnJlY3RseQorICAgIC8vd2l0
aG91dCBhIHBhdGggZm9yIGV4YW1wbGUgdHJhbnNmb3JtIG5vdCB1c2VkIGluIGRyYXdpbmcgcG9p
bnQKKyAgICBtb3ZlVG8oRmxvYXRQb2ludCgwLjAsMC4wKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmFwcGVuZChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIC8vRklYTUU6IGNh
aXJvIHNob3VsZCBoYXZlIGEgd2F5IHRvIGRvIHRoaXMKKyAgICAvL3dpdGhvdXQgY29weWluZwor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190
KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19wYXRoX3QgKnAgPSBwYXRoLnBsYXRm
b3JtUGF0aCgpOworICAgIGNhaXJvX2FwcGVuZF9wYXRoKGNyLHApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGVhckNsaXAoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsK
KyAgICBjYWlyb19yZXNldF9jbGlwKGNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0RmlsbFJ1bGUoV2luZFJ1bGUgcnVsZSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7
CisgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjcixydWxlID09IFJVTEVfRVZFTk9ERCA/IENBSVJP
X0ZJTExfUlVMRV9FVkVOX09ERCA6CisgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GSUxM
X1JVTEVfV0lORElORyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldERhc2hl
cyhkb3VibGUqIGRhc2hlcyxpbnQgbnVtX2Rhc2hlcyxkb3VibGUgb2Zmc2V0KQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9
IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19zZXRfZGFzaChjcixkYXNoZXMsbnVtX2Rhc2hl
cyxvZmZzZXQpOworCit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2Rh
dGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgaWYgKHBlbigpLnN0eWxlKCkg
IT0gUGVuOjpOb1BlbikKKyAgICAgICAgc2V0Q29sb3IoY3IsIHBlbigpLmNvbG9yKCkpOworICAg
IHJldHVybiBjYWlyb19pbl9zdHJva2UoY3IsKGRvdWJsZSlwLngoKSwoZG91YmxlKXAueSgpKTsK
KyAgICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENh
aXJvOjpzdHJva2VCb3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIGNhaXJvX3QqIGNyID0gbV9k
YXRhLT5jb250ZXh0OworICAgIGRvdWJsZSB4LCB5LCB3LCBoOworICAgIGNhaXJvX3N0cm9rZV9l
eHRlbnRzKGNyLCZ4LCZ5LCZ3LCZoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KHgseSx3LGgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRDVE0oQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3NldF9tYXRy
aXgoY3IsJigoY2Fpcm9fbWF0cml4X3QpdHJhbnNmb3JtKSk7Cit9CisKK0FmZmluZVRyYW5zZm9y
bSBHcmFwaGljc0NvbnRleHRDYWlybzo6Z2V0Q1RNKCkKK3sKKyAgICBjYWlyb190KiBjciA9IG1f
ZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7CisgICAgY2Fpcm9fZ2V0
X21hdHJpeChjciwmbWF0cml4KTsKKyAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKG1hdHJpeCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZSgpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9k
YXRhLT5jb250ZXh0OworICAgIGNhaXJvX3N0cm9rZShjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGwoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWly
b19maWxsKGNyKTsKK30KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldFNvdXJjZVBhdHRl
cm4oY2Fpcm9fcGF0dGVybl90KiBwYXQpIGNvbnN0Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0
OworICAgIGNhaXJvX3NldF9zb3VyY2UoY3IscGF0KTsKKworfQorCitjYWlyb19wYXR0ZXJuX3Qq
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpzb3VyY2VQYXR0ZXJuKCkgY29uc3QKK3sKKyAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICByZXR1cm4gY2Fpcm9fZ2V0X3NvdXJjZShj
cik7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpCit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7Cisg
ICAgY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldCAoY3IpOworICAg
IGNhaXJvX3QqIG5ld0NyID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOworICAgIHJldHVybiBuZXcg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8obmV3Q3IpOworfQorCitHcmFwaGljc0NvbnRleHRDYWlybyog
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNyZWF0ZVBhdGhHcmFwaGljc0NvbnRleHQoKQoreworICAg
IHN0YXRpYyBjYWlyb19zdXJmYWNlX3QqIHBhdGhTdXJmYWNlOworICAgIGlmICghcGF0aFN1cmZh
Y2UpCisgICAgICAgIHBhdGhTdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJ
Uk9fRk9STUFUX0E4LDEsMSk7CisgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUocGF0aFN1
cmZhY2UpOworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oY3IpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclBhdGgoKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y29udGV4dDsKKyAgICBjYWlyb19uZXdfcGF0aChjcik7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmlzUGF0aEVtcHR5KCkgY29uc3QKK3sKKyAgICBjYWlyb190KiBjciA9IG1fZGF0
YS0+Y29udGV4dDsKKyAgICAvL2lmL3doZW4gdGhlIHBhdGNoIHRvIGdldCBjdXJyZW50IHB0IHJl
dHVybiBzdGF0dXMgaXMgYXBwbGllZAorICAgIC8vcmV0dXJuIGNhaXJvX2dldF9jdXJyZW50X3Bv
aW50KGNyLCZkeCwmZHkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRh
LT5jb250ZXh0OworICAgIGNhaXJvX21vdmVfdG8oY3IsIHAueCgpLCBwLnkoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19saW5lX3RvKGNyLCBwLngoKSwg
cC55KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3Qq
IGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGRvdWJsZSB4LCB5OworICAgIGRvdWJsZSB4MSA9
IGNvbnRyb2xQb2ludC54KCk7CisgICAgZG91YmxlIHkxID0gY29udHJvbFBvaW50LnkoKTsKKyAg
ICBkb3VibGUgeDIgPSBwb2ludC54KCk7CisgICAgZG91YmxlIHkyID0gcG9pbnQueSgpOworICAg
IGNhaXJvX2dldF9jdXJyZW50X3BvaW50IChjciwgJngsICZ5KTsKKyAgICBjYWlyb19jdXJ2ZV90
byAoY3IsCisgICAgICAgICAgICAgICAgICAgIHggICsgMi4wLzMuMCAqICh4MSAtIHgpLCAgeSAg
KyAyLjAvMy4wICogKHkxIC0geSksCisgICAgICAgICAgICAgICAgICAgIHgyICsgMi4wLzMuMCAq
ICh4MSAtIHgyKSwgeTIgKyAyLjAvMy4wICogKHkxIC0geTIpLAorICAgICAgICAgICAgICAgICAg
ICB4MiwgeTIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRCZXppZXJDdXJ2
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNv
bnRyb2xQb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDMpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0g
bV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX2N1cnZlX3RvKGNyLGNvbnRyb2xQb2ludDEueCgp
LCBjb250cm9sUG9pbnQxLnkoKSwKKyAgICAgICAgICAgICAgICAgICBjb250cm9sUG9pbnQyLngo
KSwgY29udHJvbFBvaW50Mi55KCksY29udHJvbFBvaW50My54KCksIGNvbnRyb2xQb2ludDMueSgp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YWRkQXJjKGNvbnN0IEZsb2F0UG9p
bnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhLCBmbG9hdCBlYSwgYm9vbCBjbG9ja3dpc2UpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3Qq
IGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGlmIChjbG9ja3dpc2UpCisgICAgICAgIGNhaXJv
X2FyYyhjcixwLngoKSxwLnkoKSxyLHNhLGVhKTsKKyAgICBlbHNlCisgICAgICAgIGNhaXJvX2Fy
Y19uZWdhdGl2ZShjcixwLngoKSxwLnkoKSxyLHNhLGVhKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCByYWRpdXMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIC8v
RklYTUU6IGNhaXJvX2FyY190byBub3QgeWV0IGluIGNhaXJvIHNlZSBjYWlyby5oCisgICAgLy9j
YWlyb19hcmNfdG8oY3IscDEueCgpLHAxLnkoKSxwMi54KCkscDIueSgpKTsKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fp
cm9fc2F2ZShjcik7CisgICAgZmxvYXQgeVJhZGl1cyA9IC41ICogcmVjdC5oZWlnaHQoKTsKKyAg
ICBmbG9hdCB4UmFkaXVzID0gLjUgKiByZWN0LndpZHRoKCk7CisgICAgY2Fpcm9fdHJhbnNsYXRl
KGNyLCByZWN0LngoKSArIHhSYWRpdXMsIHJlY3QueSgpICsgeVJhZGl1cyk7CisgICAgY2Fpcm9f
c2NhbGUoY3IsIHhSYWRpdXMsIHlSYWRpdXMpOworICAgIGNhaXJvX2FyYyhjciwgMC4sIDAuLCAx
LiwgMC4sIDIgKiBNX1BJKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRl
eHQ7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjcik7Cit9CisKKworRmxvYXRSZWN0IEdyYXBoaWNz
Q29udGV4dENhaXJvOjpib3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIGRvdWJsZSB4LCB5LCB3
LCBoOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX2ZpbGxf
ZXh0ZW50cyhjciwmeCwmeSwmdywmaCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCh4LHksdyxoKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2Rh
dGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fZmlsbF9ydWxlX3QgY3VyID0gY2Fpcm9fZ2V0X2ZpbGxf
cnVsZShjcik7CisgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjcixydWxlID09IFJVTEVfRVZFTk9E
RCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6CisgICAgICAgICAgICAgICAgICAgICAgICBD
QUlST19GSUxMX1JVTEVfV0lORElORyk7CisgICAgYm9vbCBjb250YWlucyA9ICBjYWlyb19pbl9m
aWxsKGNyLChkb3VibGUpcG9pbnQueCgpLChkb3VibGUpcG9pbnQueSgpKTsKKyAgICBjYWlyb19z
ZXRfZmlsbF9ydWxlKGNyLGN1cik7CisgICAgcmV0dXJuIGNvbnRhaW5zOworfQorCitQbGF0Zm9y
bVBhdGgqIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybVBhdGgoKSBjb25zdAoreworICAg
IGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIHJldHVybiBjYWlyb19jb3B5X3Bh
dGgoY3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseSh2b2lkKiBpbmZv
LCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdAoreworICAgIGludCBpOworICAg
IGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcGF0aCA9
ICBjYWlyb19jb3B5X3BhdGggKGNyKTsKKyAgICBjYWlyb19wYXRoX2RhdGFfdCogZGF0YTsKKyAg
ICBQYXRoRWxlbWVudCBwZWxlbWVudDsKKyAgICBGbG9hdFBvaW50IHBvaW50c1szXTsKKyAgICBw
ZWxlbWVudC5wb2ludHMgPSBwb2ludHM7CisKKyAgICBmb3IgKGk9MDsgaSA8IHBhdGgtPm51bV9k
YXRhOyBpICs9IHBhdGgtPmRhdGFbaV0uaGVhZGVyLmxlbmd0aCkgeworICAgICAgICBkYXRhID0g
JnBhdGgtPmRhdGFbaV07CisgICAgICAgIHN3aXRjaCAoZGF0YS0+aGVhZGVyLnR5cGUpIHsKKyAg
ICAgICAgY2FzZSBDQUlST19QQVRIX01PVkVfVE86CisgICAgICAgICAgICBwZWxlbWVudC50eXBl
ID0gUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1sw
XSA9IEZsb2F0UG9pbnQoZGF0YVsxXS5wb2ludC54LGRhdGFbMV0ucG9pbnQueSk7CisgICAgICAg
ICAgICBmdW5jdGlvbihpbmZvLCAmcGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ0FJUk9fUEFUSF9MSU5FX1RPOgorICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9
IFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ7CisgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNb
MF0gPSBGbG9hdFBvaW50KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOworICAgICAg
ICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENBSVJPX1BBVEhfQ1VSVkVfVE86CisgICAgICAgICAgICBwZWxlbWVudC50eXBl
ID0gUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ7CisgICAgICAgICAgICBwZWxlbWVudC5wb2lu
dHNbMF0gPSBGbG9hdFBvaW50KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOworICAg
ICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzFdID0gRmxvYXRQb2ludChkYXRhWzJdLnBvaW50Lngs
ZGF0YVsyXS5wb2ludC55KTsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1syXSA9IEZsb2F0
UG9pbnQoZGF0YVszXS5wb2ludC54LGRhdGFbM10ucG9pbnQueSk7CisgICAgICAgICAgICBmdW5j
dGlvbihpbmZvLCAmcGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q0FJUk9fUEFUSF9DTE9TRV9QQVRIOgorICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhF
bGVtZW50Q2xvc2VTdWJwYXRoOworICAgICAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3BhdGhf
ZGVzdHJveSAocGF0aCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRDYWlybzo6cGF0aERl
YnVnU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgc3RyaW5nPSIiOworICAgIGludCBpOwor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcGF0
aCA9ICBjYWlyb19jb3B5X3BhdGggKGNyKTsKKyAgICBjYWlyb19wYXRoX2RhdGFfdCogZGF0YTsK
KyAgICBpZiAocGF0aC0+bnVtX2RhdGEgPT0gMCkKKyAgICAgICAgc3RyaW5nID0gIkVNUFRZIjsK
KyAgICBmb3IgKGk9MDsgaSA8IHBhdGgtPm51bV9kYXRhOyBpICs9IHBhdGgtPmRhdGFbaV0uaGVh
ZGVyLmxlbmd0aCkgeworICAgICAgICBkYXRhID0gJnBhdGgtPmRhdGFbaV07CisgICAgICAgIHN3
aXRjaCAoZGF0YS0+aGVhZGVyLnR5cGUpIHsKKyAgICAgICAgY2FzZSBDQUlST19QQVRIX01PVkVf
VE86CisgICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nOjpzcHJpbnRmKCJNICUuMmYsJS4yZiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0ucG9pbnQueCwg
ZGF0YVsxXS5wb2ludC55KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENBSVJP
X1BBVEhfTElORV9UTzoKKyAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmc6OnNwcmludGYoIkwg
JS4yZiwlLjJmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsx
XS5wb2ludC54LCBkYXRhWzFdLnBvaW50LnkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ0FJUk9fUEFUSF9DVVJWRV9UTzoKKyAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmc6
OnNwcmludGYoIkMgJS4yZiwlLjJmLCUuMmYsJS4yZiwlLjJmLCUuMmYiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdLnBvaW50LngsIGRhdGFbMV0ucG9pbnQu
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXS5wb2ludC54
LCBkYXRhWzJdLnBvaW50LnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFbM10ucG9pbnQueCwgZGF0YVszXS5wb2ludC55KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENBSVJPX1BBVEhfQ0xPU0VfUEFUSDoKKyAgICAgICAgICAgIHN0cmluZyAr
PSAiWCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYWlyb19w
YXRoX2Rlc3Ryb3kgKHBhdGgpOworICAgIHJldHVybiBzdHJpbmc7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JNKENBSVJPKQorLy8gdmltOiB0cz00IHN3
PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBHcmFwaGljc0NvbnRleHRDYWlyb19oCisjZGVmaW5lIEdyYXBo
aWNzQ29udGV4dENhaXJvX2gKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJQYXRoLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBlbi5oIgor
I2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDx1bmljb2RlL3VtYWNoaW5lLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dENhaXJvIDogcHVibGljIEdyYXBoaWNzQ29udGV4dAoreworcHVibGljOgor
ICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CisgICAg
dm9pZCBhcHBlbmQoY29uc3QgUGF0aCYpOworICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQ
b2ludCYsIFdpbmRSdWxlIHJ1bGUgPSBSVUxFX05PTlpFUk8pIGNvbnN0OworICAgIEZsb2F0UmVj
dCBib3VuZGluZ1JlY3QoKSBjb25zdDsKKyAgICBib29sIGlzUGF0aEVtcHR5KCkgY29uc3Q7Cisg
ICAgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgYWRkTGluZVRvKGNv
bnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOworICAgIHZvaWQgYWRk
QmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBjb250cm9sUG9pbnQyLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBhZGRB
cmNUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHJhZGl1cyk7
CisKKyAgICB2b2lkIGFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcmFkaXVzLCBmbG9h
dCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBjbG9ja3dpc2UpOworICAgIHZvaWQg
YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdm9pZCBjbG9zZVN1YnBhdGgoKTsKKyAgICB2b2lkIGNsZWFyQ2xpcCgp
OworICAgIHZvaWQgY2xlYXJQYXRoKCk7CisgICAgdm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRo
QXBwbGllckZ1bmN0aW9uKSBjb25zdDsKKyAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdSZWN0KCkgY29u
c3Q7CisgICAgdm9pZCBzZXRDVE0oQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pOworICAgIEFm
ZmluZVRyYW5zZm9ybSBnZXRDVE0oKTsKKyAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsK
KyAgICB2b2lkIHNldERhc2hlcyhkb3VibGUqIGRhc2hlcyxpbnQgbnVtX2Rhc2hlcyxkb3VibGUg
b2Zmc2V0KTsKKyAgICB2b2lkIHN0cm9rZSgpOworICAgIHZvaWQgZmlsbCgpOworICAgIFN0cmlu
ZyBwYXRoRGVidWdTdHJpbmcoKSBjb25zdDsKKyAgICBQbGF0Zm9ybVBhdGgqIHBsYXRmb3JtUGF0
aCgpIGNvbnN0OworICAgIHZvaWQgc2V0U291cmNlUGF0dGVybihjYWlyb19wYXR0ZXJuX3QqIHBh
dCkgY29uc3Q7CisgICAgY2Fpcm9fcGF0dGVybl90KiBzb3VyY2VQYXR0ZXJuKCkgY29uc3Q7Cisg
ICAgR3JhcGhpY3NDb250ZXh0KiBjcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBzdGF0aWMg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8qIGNyZWF0ZVBhdGhHcmFwaGljc0NvbnRleHQoKTsKKworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR3JhcGhpY3NDb250ZXh0Q2Fp
cm9faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9QYXRoQ2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vUGF0aENhaXJvLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vUGF0aENhaXJvLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxOTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+
CisKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhdGg6OlBhdGgoKQoreworICAgIG1fZ2Mg
PSBHcmFwaGljc0NvbnRleHRDYWlybzo6Y3JlYXRlUGF0aEdyYXBoaWNzQ29udGV4dCgpOworfQor
UGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKK3sKKyAgICBtX2djID0gR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNyZWF0ZVBhdGhHcmFwaGljc0NvbnRleHQoKTsKKyAgICBtX2djLT5hcHBlbmQo
b3RoZXIpOworfQorCisKKworUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVy
KQoreworICAgIGlmICgmb3RoZXIgPT0gdGhpcykgeworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorICAgIGRlbGV0ZSBtX2djOworICAgIG1fZ2MgPSBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y3JlYXRlUGF0aEdyYXBoaWNzQ29udGV4dCgpOworICAgIG1fZ2MtPmFwcGVuZChvdGhlcik7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCisKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBkZWxldGUgbV9n
YzsKK30KKwordm9pZCBQYXRoOjpjbGVhcigpCit7CisgICAgbV9nYy0+Y2xlYXJQYXRoKCk7Cit9
CisKK2Jvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2MtPmlzUGF0
aEVtcHR5KCk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgcCkK
K3sKKyAgICBtX2djLT50cmFuc2xhdGUocC53aWR0aCgpLHAuaGVpZ2h0KCkpOworfQorCit2b2lk
IFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG1fZ2MtPm1vdmVUbyhw
KTsKK30KKwordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAg
ICBtX2djLT5hZGRMaW5lVG8ocCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgbV9nYy0+YWRkUmVjdChyZWN0KTsKK30KKworLyoKKyAqIGNv
cGllZCBmcm9tIGxpYnN2Zy1jYWlybworICovCit2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7
CisgICAgbV9nYy0+YWRkUXVhZEN1cnZlVG8oY29udHJvbFBvaW50LHBvaW50KTsKK30KKwordm9p
ZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRy
b2xQb2ludDMpCit7CisgICAgbV9nYy0+YWRkQmV6aWVyQ3VydmVUbyhjb250cm9sUG9pbnQxLGNv
bnRyb2xQb2ludDIsY29udHJvbFBvaW50Myk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0
IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhLCBmbG9hdCBlYSwgYm9vbCBjbG9ja3dp
c2UpCit7CisgICAgbV9nYy0+YWRkQXJjKHAscixzYSxlYSxjbG9ja3dpc2UpOworfQorCisvKgor
ICogY29waWVkIGZyb20gbGlic3ZnLWNhaXJvCisgKi8KK3ZvaWQgUGF0aDo6YWRkQXJjVG8oY29u
c3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit7
CisgICAgbV9nYy0+YWRkQXJjVG8ocDEscDIscmFkaXVzKTsKK30KKwordm9pZCBQYXRoOjphZGRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX2djLT5hZGRFbGxpcHNlKHJl
Y3QpOworfQorCit2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCit7CisgICAgbV9nYy0+Y2xvc2VT
dWJwYXRoKCk7Cit9CisKKworRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZ2MtPmJvdW5kaW5nUmVjdCgpOworfQorCitib29sIFBhdGg6OmNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAoreworICAg
IHJldHVybiBtX2djLT5jb250YWlucyhwb2ludCxydWxlKTsKK30KKworI2lmIFBMQVRGT1JNKENB
SVJPKQorCitib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCBsaW5lV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVDYXAgY2Fw
LExpbmVKb2luIGpvaW4sIGZsb2F0IG1pdGVyTGltaXQpIGNvbnN0Cit7CisgICAgbV9nYy0+c2F2
ZSgpOworICAgIG1fZ2MtPnNldExpbmVXaWR0aChsaW5lV2lkdGgpOworICAgIG1fZ2MtPnNldExp
bmVDYXAoY2FwKTsKKyAgICBtX2djLT5zZXRMaW5lSm9pbihqb2luKTsKKyAgICBpZiAoam9pbiA9
PSBNaXRlckpvaW4gJiYgbWl0ZXJMaW1pdCkKKyAgICAgICAgbV9nYy0+c2V0TWl0ZXJMaW1pdCht
aXRlckxpbWl0KTsKKyAgICBib29sIGIgPSAgbV9nYy0+c3Ryb2tlQ29udGFpbnMocG9pbnQpOwor
ICAgIG1fZ2MtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gYjsKK30KKworRmxvYXRSZWN0IFBhdGg6
OnN0cm9rZUJvdW5kaW5nUmVjdChmbG9hdCBsaW5lV2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExpbmVDYXAgY2FwLExpbmVKb2luIGpvaW4sIGZsb2F0IG1pdGVyTGlt
aXQpIGNvbnN0Cit7CisgICAgbV9nYy0+c2F2ZSgpOworICAgIG1fZ2MtPnNldExpbmVXaWR0aChs
aW5lV2lkdGgpOworICAgIG1fZ2MtPnNldExpbmVDYXAoY2FwKTsKKyAgICBtX2djLT5zZXRMaW5l
Sm9pbihqb2luKTsKKyAgICBpZiAoam9pbiA9PSBNaXRlckpvaW4gJiYgbWl0ZXJMaW1pdCkKKyAg
ICAgICAgbV9nYy0+c2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBGbG9hdFJlY3QgZiAg
PSAgbV9nYy0+c3Ryb2tlQm91bmRpbmdSZWN0KCk7CisgICAgbV9nYy0+cmVzdG9yZSgpOworICAg
IHJldHVybiBmOworfQorI2VuZGlmCisKK3ZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0
aEFwcGxpZXJGdW5jdGlvbikgY29uc3QKK3sKK30KKwordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFucykKK3sKKyAgICBtX2djLT5jb25jYXRDVE0odHJhbnMp
OworfQorCitQbGF0Zm9ybVBhdGgqIFBhdGg6OnBsYXRmb3JtUGF0aCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZ2MtPnBsYXRmb3JtUGF0aCgpOworfQorCitTdHJpbmcgUGF0aDo6ZGVidWdTdHJp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2djLT5wYXRoRGVidWdTdHJpbmcoKTsKK30KKwor
fQorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vUmVu
ZGVyUGF0aENhaXJvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWly
by9SZW5kZXJQYXRoQ2Fpcm8uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvY2Fpcm8vUmVuZGVyUGF0aENhaXJvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFu
biA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpYy5zZWlkZWxAa2RlbWFpbC5uZXQ+CisJCQkJICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1p
a2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
KyovCisKKyNpZm5kZWYgUmVuZGVyUGF0aENhaXJvX0gKKyNkZWZpbmUgUmVuZGVyUGF0aENhaXJv
X0gKKworI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBGbG9hdFJlY3Q7CQkKK2NsYXNzIEZsb2F0UG9pbnQ7CQkKKworY2xhc3MgUmVuZGVyUGF0
aENhaXJvIDogcHVibGljIFJlbmRlclBhdGgKK3sKK3B1YmxpYzoKKyAgICBSZW5kZXJQYXRoQ2Fp
cm8oUmVuZGVyU3R5bGUqLCBTVkdTdHlsZWRFbGVtZW50Kik7CisKK307CisKK30KKworI2VuZGlm
CisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8v
S0NhbnZhc0NsaXBwZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9jYWlyby9LQ2FudmFzQ2xpcHBlckNhaXJvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS0NhbnZhc0NsaXBwZXJDYWlyby5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAg
ICAgICAgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorCQkJCSAgMjAwNiBNaWNoYWVsIEVtbWVs
IDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXJD
YWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiS1Jl
bmRlcmluZ0RldmljZUNhaXJvLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgPGFzc2VydC5o
PgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBLQ2Fu
dmFzQ2xpcHBlckNhaXJvOjphcHBseUNsaXAoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkg
Y29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IHJlbmRlcmlu
Z0RldmljZSgpLT5jdXJyZW50Q29udGV4dCgpOworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
Q2Fpcm8gKmNhaXJvQ29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
Q2Fpcm8gKj4oY29udGV4dCk7CisgICAgaWYgKG1fY2xpcERhdGEuY291bnQoKSA8IDEpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNhaXJvQ29udGV4dC0+cmVzZXRDbGlwKCk7CisJCisgICAJQWZm
aW5lVHJhbnNmb3JtIGN1cnJlbnRUcmFuc2Zvcm0gPSBjYWlyb0NvbnRleHQtPmN0bSgpOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBtX2NsaXBEYXRhLmNvdW50KCk7IHgrKykg
eworICAgICAgICBLQ0NsaXBEYXRhIGNsaXBEYXRhID0gbV9jbGlwRGF0YVt4XTsKKyAgICAJV2lu
ZFJ1bGUgY2xpcFJ1bGUgPSBtX2NsaXBEYXRhW3hdLndpbmRSdWxlKCk7CisgICAgICAgCisgICAg
ICAgIFBhdGggcGF0aCA9IGNsaXBEYXRhLnBhdGg7IAorCQlpZiggcGF0aC5pc0VtcHR5KCkgKQor
CQkJCWNvbnRpbnVlOworCQljYWlyb0NvbnRleHQtPnNldEZpbGxSdWxlKGNsaXBSdWxlKTsKKyAg
ICAJaWYgKGNsaXBEYXRhLmJib3hVbml0cykgeworICAgCQkJLy8gUmVzcGVjdCBjbGlwcGluZyB1
bml0cy4uLgorICAgICAgICAJQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICAgICAgCXRy
YW5zZm9ybS50cmFuc2xhdGUoYm91bmRpbmdCb3gueCgpLCBib3VuZGluZ0JveC55KCkpOworICAg
ICAgICAJdHJhbnNmb3JtLnNjYWxlKGJvdW5kaW5nQm94LndpZHRoKCksIGJvdW5kaW5nQm94Lmhl
aWdodCgpKTsKKwkJCWNhaXJvQ29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAJCX0K
KyAgICAJY2Fpcm9Db250ZXh0LT5jYWlyb0NvbnRleHQoKS0+Y2xlYXJQYXRoKCk7CisgICAgCWNh
aXJvQ29udGV4dC0+Y2Fpcm9Db250ZXh0KCktPmNsZWFyQ2xpcCgpOworICAgIAljYWlyb0NvbnRl
eHQtPmNhaXJvQ29udGV4dCgpLT5jbGlwKHBhdGgpOworCQljYWlyb0NvbnRleHQtPnNldFRyYW5z
Zm9ybShjdXJyZW50VHJhbnNmb3JtKTsKKyAgICB9CisKK30KKworfQorCisvLyB2aW06dHM9NDpu
b2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNl
cnZlclNvbGlkQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
Y2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlyby5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlk
Q2Fpcm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5v
cmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisJCQkJICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgor
CisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNl
Q2Fpcm8uaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJL
UmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nU3Ryb2tlUGFpbnRl
ci5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8uaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlybzo6S1JlbmRl
cmluZ1BhaW50U2VydmVyU29saWRDYWlybygpCisgICAgOiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJT
b2xpZCgpCit7Cit9CisKK0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm86On5LUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvKCkKK3sKK30KKworLy8gJ1NvbGlkJyBpbnRlcmZhY2UK
K3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlybzo6ZHJhdyhLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdl
dFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKiBj
YWlyb0NvbnRleHQgPSAKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0Q2Fpcm8qPihjb250ZXh0KTsKKworICAgIC8vY2Fpcm9Db250ZXh0LT5jYWlyb0NvbnRl
eHQoKS0+ZmlsbFJlY3QoSW50UmVjdCgwLDAsMTAwMCwxMDAwKSxDb2xvcjo6ZGFya0dyYXkpOwor
ICAgIGNhaXJvQ29udGV4dC0+c2F2ZSgpOworICAgIC8vY2Fpcm9Db250ZXh0LT5jYWlyb0NvbnRl
eHQoKS0+Y2xlYXJDbGlwKCk7CisgICAgY2Fpcm9Db250ZXh0LT5hZGRQYXRoKHBhdGgtPnBhdGgo
KSk7CisjaWYgMAorICAgIFN0cmluZyBzdHIgPSBwYXRoLT5wYXRoKCkuZGVidWdTdHJpbmcoKTsK
KyAgICBwcmludGYoIiBQQVRIOjo6ICVzXG4iLHN0ci5kZXByZWNhdGVkU3RyaW5nKCkuYXNjaWko
KSk7CisgICAgY2Fpcm9fbWF0cml4X3QgdHggPSBjYWlyb0NvbnRleHQtPmNhaXJvQ29udGV4dCgp
LT5nZXRDVE0oKTsKK3ByaW50ZigiIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm86OmRy
YXcgQWZmaW5lVHJhbnNmb3JtIHh4PSVmIHl5PSVmIHh5PSVmIHl4PSVmIHgwPSVmIHkwPSVmIFxu
IiwKKyAgICAgICAgICAgICAgICB0eC54eCwKKyAgICAgICAgICAgICAgICB0eC55eSwKKyAgICAg
ICAgICAgICAgICB0eC54eSwKKyAgICAgICAgICAgICAgICB0eC55eCwKKyAgICAgICAgICAgICAg
ICB0eC54MCwKKyAgICAgICAgICAgICAgICB0eC55MCk7CisjZW5kaWYKKyAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworCisgICAgaWYgKCh0eXBlICYgQVBQTFlf
VE9fRklMTCkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkgeworICAgICAg
ICBLUmVuZGVyaW5nRmlsbFBhaW50ZXIgZmlsbFBhaW50ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6
OmZpbGxQYWludGVyKHJlbmRlclN0eWxlLCBwYXRoKTsKKyAgICAgICAgY2Fpcm9Db250ZXh0LT5z
ZXRGaWxsKGZpbGxQYWludGVyLCZjb2xvcigpKTsKKyAgICAgICAgY2Fpcm9Db250ZXh0LT5maWxs
UGF0aCgpOworICAgIH0KKworICAgIGlmKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiByZW5k
ZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKKyAgICAgICAgS1JlbmRlcmluZ1N0
cm9rZVBhaW50ZXIgc3Ryb2tlUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFp
bnRlcihyZW5kZXJTdHlsZSwgcGF0aCk7CisgICAgICAgIGNhaXJvQ29udGV4dC0+c2V0U3Ryb2tl
KHN0cm9rZVBhaW50ZXIsJmNvbG9yKCkpOworICAgICAgICBjYWlyb0NvbnRleHQtPnN0cm9rZVBh
dGgoKTsKKyAgICAgICAgLyogaWYoaXNQYWludGluZ1RleHQoKSkgLi4uICovCisgICAgfQorCisJ
Y2Fpcm9Db250ZXh0LT5kZXN0cm95UGF0dGVybigpOworICAgIGNhaXJvQ29udGV4dC0+cmVzdG9y
ZSgpOworfQorCitib29sIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm86OnNldHVwKEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvOjp0ZWFyZG93bihLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRh
cmdldFR5cGUpIGNvbnN0Cit7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRD
YWlybzo6cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKK30KKwor
fQorCisvLyB2aW06dHM9NDpldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWlyby9L
UmVuZGVyaW5nRGV2aWNlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9k
ZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCQkJCSAg
MjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVk
ZSAiUGF0aC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVzb3Vy
Y2UuaCIKKyNpbmNsdWRlICJLQ2FudmFzTWFya2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyUGF0aENh
aXJvLmgiCisjaW5jbHVkZSAiS0NhbnZhc0NsaXBwZXJDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZUNhaXJvLmgiCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRl
ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvLmgiCisjaW5jbHVkZSAiS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm5DYWlyby5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgor
I2luY2x1ZGUgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6S1JlbmRlcmluZ0RldmljZUNvbnRl
eHRDYWlybyhHcmFwaGljc0NvbnRleHRDYWlybyogZ2MpCit7CisgICAgbV9nYyA9IGdjOworfQor
CitLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjp+S1JlbmRlcmluZ0RldmljZUNvbnRleHRD
YWlybygpCit7Cit9CisKKworQWZmaW5lVHJhbnNmb3JtIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
Q2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHdvcmxkTWF0cml4KQorewor
ICAgIG1fZ2MtPmNvbmNhdENUTSh3b3JsZE1hdHJpeCk7CisgICAgcmV0dXJuIG1fZ2MtPmdldENU
TSgpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6
Y3RtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9nYy0+Z2V0Q1RNKCk7Cit9CisKK0ludFJlY3Qg
S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6bWFwRnJvbVZpc3VhbChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK0ludFJlY3QgS1JlbmRlcmlu
Z0RldmljZUNvbnRleHRDYWlybzo6bWFwVG9WaXN1YWwoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
Q2Fpcm86OmNsZWFyUGF0aCgpCit7CisgICAgbV9nYy0+Y2xlYXJQYXRoKCk7Cit9CisKK3ZvaWQg
S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQor
eworICAgIG1fZ2MtPmFwcGVuZChwYXRoKTsKK30KKworCitHcmFwaGljc0NvbnRleHQqIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm86OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCit7CisgICAg
Ly9ldmVyeW9uZSBlbHNlIGltcGxlbWVudHMgdGhpcyBhcyBhIHdyYXBwZXIKKyAgICAvL0kgdGhp
bmsgdGhlIGNhbGwgaXMgZHViaW9zCisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHRDYWly
byhtX2djLT5wbGF0Zm9ybUNvbnRleHQoKSk7IAorfQorCisKK3ZvaWQgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRDYWlybzo6c2V0RmlsbFJ1bGUoV2luZFJ1bGUgcnVsZSkKK3sKKyAgICBtX2djLT5z
ZXRGaWxsUnVsZShydWxlKTsKK30KKwordm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJv
OjpzYXZlKCkKK3sKKyAgICBtX2djLT5zYXZlKCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRDYWlybzo6cmVzdG9yZSgpCit7CisgICAgbV9nYy0+cmVzdG9yZSgpOworfQorCisK
K3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6ZmlsbFBhdGgoKQoreworICAgIG1f
Z2MtPmZpbGwoKTsKK30KKwordm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjpzdHJv
a2VQYXRoKCkKK3sKKyAgICBtX2djLT5zdHJva2UoKTsKK30KKworCit2b2lkIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0Q2Fpcm86OmNsaXAoUGF0aCYgY2xpcCkKK3sKKyAgICBtX2djLT5jbGlwKGNs
aXApOworfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm86OnJlc2V0Q2xpcCgp
Cit7CisgICAgbV9nYy0+Y2xlYXJDbGlwKCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNv
bnRleHRDYWlybzo6c2V0VHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorewor
ICAgIG1fZ2MtPnNldENUTSh0cmFuc2Zvcm0pOworfQorCitib29sICBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dENhaXJvOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50ICZwKQoreworICAg
IHJldHVybiBtX2djLT5zdHJva2VDb250YWlucyhwKTsKK30KKworRmxvYXRSZWN0IEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0Q2Fpcm86OnN0cm9rZUJCb3goKSBjb25zdAoreworICAgIHJldHVybiBt
X2djLT5zdHJva2VCb3VuZGluZ1JlY3QoKTsKK30KKwordm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dENhaXJvOjpzZXRTdHJva2UoY29uc3QgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXImIHN0cm9r
ZVBhaW50ZXIsIENvbG9yKiBjb2xvcikKK3sKKyAgICBkb3VibGUgIHIsIGcsIGIsIGE7CisgICAg
bV9nYy0+c2V0TGluZVdpZHRoKHN0cm9rZVBhaW50ZXIuc3Ryb2tlV2lkdGgoKSk7CisgICAgaWYg
KHN0cm9rZVBhaW50ZXIuc3Ryb2tlQ2FwU3R5bGUoKSA9PSBDQVBfQlVUVCkgeworICAgICAgICAg
bV9nYy0+c2V0TGluZUNhcChCdXR0Q2FwKTsKKyAgICB9IGVsc2UgaWYgKHN0cm9rZVBhaW50ZXIu
c3Ryb2tlQ2FwU3R5bGUoKSA9PSBDQVBfUk9VTkQpIHsKKyAgICAgICAgIG1fZ2MtPnNldExpbmVD
YXAoUm91bmRDYXApOworICAgIH0gZWxzZSBpZiAoc3Ryb2tlUGFpbnRlci5zdHJva2VDYXBTdHls
ZSgpID09IENBUF9TUVVBUkUpIHsKKyAgICAgICAgIG1fZ2MtPnNldExpbmVDYXAoU3F1YXJlQ2Fw
KTsKKyAgICB9CisKKyAgICBpZihzdHJva2VQYWludGVyLnN0cm9rZUpvaW5TdHlsZSgpID09IEpP
SU5fTUlURVIpIHsKKyAgICAgICAgIG1fZ2MtPnNldExpbmVKb2luKE1pdGVySm9pbik7CisgICAg
ICAgICBtX2djLT5zZXRNaXRlckxpbWl0KHN0cm9rZVBhaW50ZXIuc3Ryb2tlTWl0ZXJMaW1pdCgp
KTsKKyAgICB9IGVsc2UgaWYoc3Ryb2tlUGFpbnRlci5zdHJva2VKb2luU3R5bGUoKSA9PSBKT0lO
X1JPVU5EKSB7CisgICAgICAgICBtX2djLT5zZXRMaW5lSm9pbihSb3VuZEpvaW4pOworICAgIH0g
ZWxzZSBpZihzdHJva2VQYWludGVyLnN0cm9rZUpvaW5TdHlsZSgpID09IEpPSU5fQkVWRUwpIHsK
KyAgICAgICAgIG1fZ2MtPnNldExpbmVKb2luKEJldmVsSm9pbik7CisgICAgfQorCisgICAgS0NE
YXNoQXJyYXkgZGFzaGVzID0gc3Ryb2tlUGFpbnRlci5kYXNoQXJyYXkoKTsKKyAgICB1bnNpZ25l
ZCBpbnQgZGFzaExlbmd0aCA9IGRhc2hlcy5zaXplKCk7CisgICAgaWYoZGFzaExlbmd0aCkgewor
ICAgICAgICBkb3VibGUqIGNkYXNoZXMgPSBuZXcgZG91YmxlW2Rhc2hMZW5ndGhdOworICAgICAg
ICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZGFzaExlbmd0aDsgaSsrKQorICAgICAgICAg
ICAgY2Rhc2hlc1tpXSA9IChkb3VibGUpZGFzaGVzW2Rhc2hMZW5ndGhdOworICAgICAgIG1fZ2Mt
PnNldERhc2hlcyhjZGFzaGVzLCBkYXNoTGVuZ3RoLCBzdHJva2VQYWludGVyLmRhc2hPZmZzZXQo
KSk7CisgICAgICAgZGVsZXRlW10gY2Rhc2hlczsKKyAgICB9CisgICAgaWYoIGNvbG9yICkgewor
ICAgICAgICBjb2xvci0+Z2V0UkdCQShyLGcsYixhKTsKKyAgICAgICAgZG91YmxlIGFscGhhID0g
KGRvdWJsZSlzdHJva2VQYWludGVyLm9wYWNpdHkoKTsKKyAgICAgICAgaWYoIGFscGhhICE9IDEu
MCApCisgICAgICAgICAgICBhID0gYWxwaGE7CisgICAgICAgIG1fZ2MtPnNldFBlbihtYWtlUkdC
QShyLGcsYixhKSk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3Bh
dHRlcm5fY3JlYXRlX3JnYmEocixnLGIsYSk7CisgICAgICAgIHNldFBhdHRlcm4ocGF0dGVybik7
CisgICAgfQorfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm86OnNldEZpbGwo
Y29uc3QgS1JlbmRlcmluZ0ZpbGxQYWludGVyJiBmaWxsUGFpbnRlcixDb2xvciogY29sb3IpCit7
CisgICAgZG91YmxlICByLCBnLCBiLCBhOworICAgIHNldEZpbGxSdWxlKGZpbGxQYWludGVyLmZp
bGxSdWxlKCkpOworICAgIGlmKCBjb2xvciAhPSAwICkgeworICAgICAgICBjb2xvci0+Z2V0UkdC
QShyLGcsYixhKTsKKyAgICAgICAgZG91YmxlIGFscGhhID0gKGRvdWJsZSlmaWxsUGFpbnRlci5v
cGFjaXR5KCk7CisgICAgICAgIGlmKCBhbHBoYSAhPSAxLjAgKQorICAgICAgICAgICAgYSA9IGFs
cGhhOworICAgICAgICBtX2djLT5zZXRGaWxsQ29sb3IobWFrZVJHQkEocixnLGIsYSkpOworICAg
ICAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yZ2Jh
KHIsZyxiLGEpOworICAgICAgICBzZXRQYXR0ZXJuKHBhdHRlcm4pOworICAgIH0KK30KKwordm9p
ZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjpzZXRQYXR0ZXJuKCBjYWlyb19wYXR0ZXJu
X3QgKiBwYXR0ZXJuKQoreworICAgIG1fcGF0dGVybiA9IHBhdHRlcm47CisgICAgbV9nYy0+c2V0
U291cmNlUGF0dGVybihwYXR0ZXJuKTsKKyAgICAvL2NhaXJvX3BhdHRlcm5fZGVzdHJveSAobV9w
YXR0ZXJuKTsKK30KKwordm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjpkZXN0cm95
UGF0dGVybigpCit7CisgLyoKKyAgICBpZihtX3BhdHRlcm4pIHsKKyAgICAgICAgY2Fpcm9fcGF0
dGVybl9kZXN0cm95KG1fcGF0dGVybik7CisgICAgICAgIG1fcGF0dGVybiA9IDA7CisgICAgfQor
Ki8KK30KKworLy8gS1JlbmRlcmluZ0RldmljZUNhaXJvCitLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86
OktSZW5kZXJpbmdEZXZpY2VDYWlybygpIDogS1JlbmRlcmluZ0RldmljZSgpCit7CisgICAgCit9
CisKK0tSZW5kZXJpbmdEZXZpY2VDYWlybzo6fktSZW5kZXJpbmdEZXZpY2VDYWlybygpCit7Cit9
CisKKworS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2VDYWlybzo6cG9w
Q29udGV4dCgpCit7CisgICAgLy8gQW55IHNwZWNpYWwgdGhpbmdzIG5lZWRlZD8KKyAgICByZXR1
cm4gS1JlbmRlcmluZ0RldmljZTo6cG9wQ29udGV4dCgpOworfQorCit2b2lkIEtSZW5kZXJpbmdE
ZXZpY2VDYWlybzo6cHVzaENvbnRleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgLy8gQW55IHNwZWNpYWwgdGhpbmdzIG5lZWRlZD8KKyAgICBLUmVuZGVyaW5nRGV2
aWNlOjpwdXNoQ29udGV4dChjb250ZXh0KTsKKworfQorCisvLyBjb250ZXh0IG1hbmFnZW1lbnQu
CitLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKiBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86OmNh
aXJvQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0Q2Fpcm8qPihjdXJyZW50Q29udGV4dCgpKTsKK30KKworS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2VDYWlybzo6Y29udGV4dEZvckltYWdlKEtDYW52
YXNJbWFnZSogaW1hZ2UpIGNvbnN0Cit7CisgICAgcHJpbnRmKCJLUmVuZGVyaW5nRGV2aWNlQ2Fp
cm86OmNvbnRleHRGb3JJbWFnZSgpIFRPRE8hXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKworCisv
LyBSZXNvdXJjZSBjcmVhdGlvbgorS0NhbnZhc1Jlc291cmNlKiBLUmVuZGVyaW5nRGV2aWNlQ2Fp
cm86OmNyZWF0ZVJlc291cmNlKGNvbnN0IEtDUmVzb3VyY2VUeXBlJiB0eXBlKSBjb25zdAorewor
ICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgUlNfQ0xJUFBFUjoKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgS0NhbnZhc0NsaXBwZXJDYWlybygpOworICAgICAgICBjYXNlIFJT
X01BUktFUjoKKyAgICAgICAgICAgIHJldHVybiBuZXcgS0NhbnZhc01hcmtlcigpOyAvLyBVc2Ug
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4uLgorICAgICAgICBjYXNlIFJTX0lNQUdFOgorICAgICAg
ICAgICAgLy8gcmV0dXJuIG5ldyBLQ2FudmFzSW1hZ2VDYWlybygpOworICAgICAgICBjYXNlIFJT
X0ZJTFRFUjoKKyAgICAgICAgICAgIC8vIHJldHVybiBuZXcgS0NhbnZhc0ZpbHRlckNhaXJvKCk7
CisgICAgICAgIGNhc2UgUlNfTUFTS0VSOgorICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBLQ2Fu
dmFzTWFza2VyQ2Fpcm8oKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworS1JlbmRlcmluZ1BhaW50U2VydmVyKiBLUmVuZGVyaW5nRGV2aWNlQ2Fp
cm86OmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJiB0eXBlKSBjb25z
dAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgUFNfU09MSUQ6Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8oKTsK
KyAgICAgICAgY2FzZSBQU19QQVRURVJOOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8oKTsKKyAgICAgICAgY2FzZSBQU19MSU5FQVJfR1JB
RElFTlQ6CisgICAgICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50Q2Fpcm8oKTsKKyAgICAgICAgY2FzZSBQU19SQURJQUxfR1JBRElFTlQ6CisgICAg
ICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fp
cm8oKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
KworS0NhbnZhc0ZpbHRlckVmZmVjdCogS1JlbmRlcmluZ0RldmljZUNhaXJvOjpjcmVhdGVGaWx0
ZXJFZmZlY3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlJiB0eXBlKSBjb25zdAoreworICAgIHBy
aW50ZigiS1JlbmRlcmluZ0RldmljZUNhaXJvOjpjcmVhdGVGaWx0ZXJFZmZlY3QoKSBUT0RPIVxu
Iik7CisgICAgcmV0dXJuIDA7Cit9CisKKworLy8gaXRlbSBjcmVhdGlvbgorUmVuZGVyUGF0aCog
S1JlbmRlcmluZ0RldmljZUNhaXJvOjpjcmVhdGVJdGVtKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBTVkdTdHlsZWRFbGVtZW50KiBub2RlLCBjb25zdCBQYXRoJiBwYXRo
KSBjb25zdAoreworICAgIFJlbmRlclBhdGgqIGl0ZW0gPSBuZXcgKGFyZW5hKSBSZW5kZXJQYXRo
Q2Fpcm8oc3R5bGUsIG5vZGUpOworICAgIGl0ZW0tPnNldFBhdGgocGF0aCk7CisgICAgcmV0dXJu
IGl0ZW07Cit9CisKK0tSZW5kZXJpbmdEZXZpY2UqIHJlbmRlcmluZ0RldmljZSgpCit7CisgICAg
c3RhdGljIEtSZW5kZXJpbmdEZXZpY2UgKnNoYXJlZFJlbmRlcmluZ0RldmljZSA9IG5ldyBLUmVu
ZGVyaW5nRGV2aWNlQ2Fpcm8oKTsKKyAgICByZXR1cm4gc2hhcmVkUmVuZGVyaW5nRGV2aWNlOwor
fQorCisKK30KKworLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
Y2Fpcm8vS0NhbnZhc0ltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZh
cy9kZXZpY2UvY2Fpcm8vS0NhbnZhc0ltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9jYWlyby9LQ2FudmFzSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisJCQkJIDIwMDYgTWljaGFlbCBFbW1l
bCA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbXBvcnQgIktDYW52YXNJ
bWFnZUNhaXJvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitLQ2FudmFzSW1hZ2VDYWly
bzo6fktDYW52YXNJbWFnZUNhaXJvKCkKK3sKKyAgICAgaWYobV9wYXR0ZXJuKQorICAgICAgICAg
IGNhaXJvX3BhdHRlcm5fZGVzdHJveShtX3BhdHRlcm4pOworfQordm9pZCBLQ2FudmFzSW1hZ2VD
YWlybzo6aW5pdChjb25zdCBJbWFnZSAmaW1hZ2UpIAoreyAKKyAgICAgLy9oYWNrIGNhbi90IGJl
IGNvbnN0CisgICAgIEltYWdlKiBpbWc9IChJbWFnZSopJmltYWdlOworICAgICBjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UgPSBpbWctPmZyYW1lQXRJbmRleCgwKTsgCisgICAgIGlmKCFzdXJmYWNl
KQorICAgICAgICAgIHJldHVybjsKKyAgICAgbV9wYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVh
dGVfZm9yX3N1cmZhY2Uoc3VyZmFjZSk7CisgICAgIG1fc2l6ZSA9IGltYWdlLnNpemUoKTsKKyAg
ICAvL0ZJWE1FICBub3QgZGVmaW5lZCBmb3IgaW1hZ2VzID8KKyAgICAgY2Fpcm9fcGF0dGVybl9z
ZXRfZXh0ZW5kKG1fcGF0dGVybixDQUlST19FWFRFTkRfUkVQRUFUKTsKK30KKwordm9pZCBLQ2Fu
dmFzSW1hZ2VDYWlybzo6aW5pdChJbnRTaXplIHNpemUpCit7IAorICAgIG1fc2l6ZSA9IHNpemU7
IAorICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsc2l6ZS53aWR0aCgpLHNpemUuaGVpZ2h0KCkpOworICAg
IG1fcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9zdXJmYWNlKHN1cmZhY2UpOwor
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICAvL0ZJWE1FICBub3QgZGVm
aW5lZCBmb3IgaW1hZ2VzID8KKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQobV9wYXR0ZXJu
LENBSVJPX0VYVEVORF9SRVBFQVQpOworfQorCit9CisKKy8vIHZpbTp0cz00OmV0CkluZGV4OiBX
ZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50
Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Q2Fp
cm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisJCQkJICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiS1JlbmRl
cmluZ0RldmljZUNhaXJvLmgiCisjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCisj
aW5jbHVkZSAiS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1N0
cm9rZVBhaW50ZXIuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudENh
aXJvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBmaWxsX2NvbG9yX2FycmF5KGNh
aXJvX3BhdHRlcm5fdCAqcGF0dGVybiwgY29uc3QgVmVjdG9yPEtDR3JhZGllbnRTdG9wPiYgc3Rv
cHMsIGZsb2F0IG9wYWNpdHkpCit7CisJZG91YmxlIHIsIGcsIGIsIGE7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0b3BzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBvZmZz
ZXQgPSAoZG91YmxlKXN0b3BzW2ldLmZpcnN0OworICAgICAgICBDb2xvciBjb2xvciA9IHN0b3Bz
W2ldLnNlY29uZDsKKwkJY29sb3IuZ2V0UkdCQShyLGcsYixhKTsKKyAgICAgICAJYSA9IGEqb3Bh
Y2l0eTsgCisJCWNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJuLG9mZnNl
dCxyLGcsYixhKTsKKyAgICB9Cit9CisKK0tSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRp
ZW50Q2Fpcm86OktSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Q2Fpcm8oKQorICAg
IDogS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQoKQoreworfQorCisKKwordm9p
ZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudENhaXJvOjpyZW5kZXJQYXRoKEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBL
Q1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIFJlbmRlclN0eWxlKiByZW5kZXJT
dHlsZSA9IHBhdGgtPnN0eWxlKCk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyog
Y2Fpcm9Db250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyo+
KGNvbnRleHQpOworCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgcmVuZGVyU3R5
bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkKKyAgICAgICAgY2Fpcm9Db250ZXh0LT5maWxsUGF0
aCgpOworCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiByZW5kZXJTdHlsZS0+
c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpCisgICAgICAgIGNhaXJvQ29udGV4dC0+c3Ryb2tlUGF0
aCgpOworfQorCitib29sIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Q2Fpcm86
OnNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dENhaXJvKj4oY29udGV4dCk7CisgICAgYXNzZXJ0KGNhaXJvQ29udGV4
dCAhPSAwKTsKKworICAgIGNhaXJvQ29udGV4dC0+c2F2ZSgpOworCisgICAgaWYgKGxpc3RlbmVy
KCkpCisgICAgICAgIGxpc3RlbmVyKCktPnJlc291cmNlTm90aWZpY2F0aW9uKCk7CisKKyAgICBS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisKKyAgICBkb3VibGUg
eDEsIHgyLCB5MSwgeTI7CisJLy9GSVhNRTogY29waWVkIGZyb20gcXQKKyAgICBpZiAoYm91bmRp
bmdCb3hNb2RlKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBjYWlyb0NvbnRleHQtPnN0
cm9rZUJCb3goKTsKKyAgICAgICAgeDEgPSBkb3VibGUoYmJveC54KCkpICsgKGRvdWJsZShncmFk
aWVudFN0YXJ0KCkueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lkdGgoKSkpOworICAgICAg
ICB5MSA9IGRvdWJsZShiYm94LnkoKSkgKyAoZG91YmxlKGdyYWRpZW50U3RhcnQoKS55KCkgLyAx
MDAuMCkgKiBkb3VibGUoYmJveC5oZWlnaHQoKSkpOworICAgICAgICB4MiA9IGRvdWJsZShiYm94
LndpZHRoKCkpICsgKGRvdWJsZShncmFkaWVudEVuZCgpLngoKSAvIDEwMC4wKSAgKiBkb3VibGUo
YmJveC53aWR0aCgpKSk7CisgICAgICAgIHkyID0gZG91YmxlKGJib3guaGVpZ2h0KCkpICsgKGRv
dWJsZShncmFkaWVudEVuZCgpLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgeDEgPSBncmFkaWVudFN0YXJ0KCkueCgpOworICAgICAg
ICB5MSA9IGdyYWRpZW50U3RhcnQoKS55KCk7CisgICAgICAgIHgyID0gZ3JhZGllbnRFbmQoKS54
KCk7CisgICAgICAgIHkyID0gZ3JhZGllbnRFbmQoKS55KCk7CisgICAgfQorCisJY2Fpcm9fcGF0
dGVybl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyICh4MSx5MSx4Mix5
Mik7CisKKyAgICBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1BSRUFETUVUSE9EX1JFUEVBVCkgewor
CQljYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybixDQUlST19FWFRFTkRfUkVQRUFUKTsK
KyAgICB9IGVsc2UgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRUZMRUNUKSB7
CisJCWNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLENBSVJPX0VYVEVORF9SRUZMRUNU
KTsKKyAgICB9IGVsc2UgeworCQljYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybixDQUlS
T19FWFRFTkRfUEFEKTsKKyAgICB9CisKKworICAgIC8vIFRPRE86IEdyYWRpZW50IHRyYW5zZm9y
bSArIG9wYWNpdHkgZml4ZXMhIAorCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYg
cmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkgeworICAgICAgICBLUmVuZGVyaW5n
RmlsbFBhaW50ZXIgZmlsbFBhaW50ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludGVy
KHJlbmRlclN0eWxlLCBvYmplY3QpOworICAgICAgICBjYWlyb0NvbnRleHQtPnNldEZpbGwoZmls
bFBhaW50ZXIsMCk7CisgICAgICAgIGZpbGxfY29sb3JfYXJyYXkocGF0dGVybiwgZ3JhZGllbnRT
dG9wcygpLCBmaWxsUGFpbnRlci5vcGFjaXR5KCkpOworICAgIH0KKworICAgIGlmICgodHlwZSAm
IEFQUExZX1RPX1NUUk9LRSkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgp
KSB7CisgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyIHN0cm9rZVBhaW50ZXIgPSBLU1ZH
UGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50ZXIocmVuZGVyU3R5bGUsIG9iamVjdCk7CisgICAg
ICAgIGNhaXJvQ29udGV4dC0+c2V0U3Ryb2tlKHN0cm9rZVBhaW50ZXIsMCk7CisgICAgICAgIGZp
bGxfY29sb3JfYXJyYXkocGF0dGVybiwgZ3JhZGllbnRTdG9wcygpLCBzdHJva2VQYWludGVyLm9w
YWNpdHkoKSk7CisgICAgfQorCWNhaXJvQ29udGV4dC0+c2V0UGF0dGVybihwYXR0ZXJuKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50Q2Fpcm86OnRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KmNvbnRleHQsIGNv
bnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdAoreworICAgIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qIGNhaXJvQ29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihjb250ZXh0KTsKKwljYWlyb0NvbnRleHQtPmRlc3Ry
b3lQYXR0ZXJuKCk7CisgICAgY2Fpcm9Db250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgS1Jl
bmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRDYWlybzo6ZHJhdyhLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdl
dFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAoIXNldHVwKGNvbnRleHQsIHBhdGgsIHR5cGUp
KQorICAgICAgICByZXR1cm47CisgICAgcmVuZGVyUGF0aChjb250ZXh0LCBwYXRoLCB0eXBlKTsK
KyAgICB0ZWFyZG93bihjb250ZXh0LCBwYXRoLCB0eXBlKTsKK30KKworLy8gS1JlbmRlcmluZ1Bh
aW50U2VydmVyUmFkaWFsR3JhZGllbnRDYWlybworS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnRDYWlybzo6S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRDYWlybygp
CisgICAgOiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCgpCit7Cit9CisKK2Jv
b2wgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRDYWlybzo6c2V0dXAoS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBL
Q1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0Q2Fpcm8qIGNhaXJvQ29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0Q2Fpcm8qPihjb250ZXh0KTsKKyAgICBhc3NlcnQoY2Fpcm9Db250ZXh0ICE9IDApOworCisg
ICAgY2Fpcm9Db250ZXh0LT5zYXZlKCk7CisKKyAgICBpZiAobGlzdGVuZXIoKSkKKyAgICAgICAg
bGlzdGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsKKworICAgIFJlbmRlclN0eWxlKiBy
ZW5kZXJTdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0ID0g
Y2Fpcm9Db250ZXh0LT5jdG0oKTsKKworICAgIGRvdWJsZSBjeCwgZngsIGN5LCBmeSwgcjsKKwkv
L1hYWCBGSVhNRTogdGhpcyBpcyBwcm9iYWJseSBhbGwgd3JvbmcgY29waWVkIGZyb20gcXQKKyAg
ICBpZiAoYm91bmRpbmdCb3hNb2RlKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGJib3ggPSBjYWly
b0NvbnRleHQtPnN0cm9rZUJCb3goKTsKKyAgICAgICAgY3ggPSBkb3VibGUoYmJveC54KCkpICsg
KGRvdWJsZShncmFkaWVudENlbnRlcigpLngoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LndpZHRo
KCkpKTsKKyAgICAgICAgY3kgPSBkb3VibGUoYmJveC55KCkpICsgKGRvdWJsZShncmFkaWVudENl
bnRlcigpLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7CisgICAgICAgIGZ4
ID0gZG91YmxlKGJib3gud2lkdGgoKSkgKyAoZG91YmxlKGdyYWRpZW50Rm9jYWwoKS54KCkgLyAx
MDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgpKSkgLSBjeDsKKyAgICAgICAgZnkgPSBkb3VibGUo
YmJveC5oZWlnaHQoKSkgKyAoZG91YmxlKGdyYWRpZW50Rm9jYWwoKS55KCkgLyAxMDAuMCkgKiBk
b3VibGUoYmJveC5oZWlnaHQoKSkpIC0gY3k7CisgICAgICAgIHIgPSBkb3VibGUoZ3JhZGllbnRS
YWRpdXMoKSAvIDEwMC4wKSAqIChzcXJ0KHBvdyhiYm94LndpZHRoKCksIDIpICsgcG93KGJib3gu
aGVpZ2h0KCksIDIpKSk7CisKKyAgICAgICAgZmxvYXQgd2lkdGggPSBiYm94LndpZHRoKCk7Cisg
ICAgICAgIGZsb2F0IGhlaWdodCA9IGJib3guaGVpZ2h0KCk7CisKKyAgICAgICAgaW50IGRpZmYg
PSBpbnQod2lkdGggLSBoZWlnaHQpOyAvLyBhbGxvdyBzbGlnaHQgdG9sZXJhbmNlCisgICAgICAg
IGlmICghKGRpZmYgPiAtMiAmJiBkaWZmIDwgMikpIHsKKyAgICAgICAgICAgIC8vIG1ha2UgZWxs
aXB0aWNhbCBvciBjaXJjdWxhciBkZXBlbmRpbmcgb24gYmJveCBhc3BlY3QgcmF0aW8KKyAgICAg
ICAgICAgIGZsb2F0IHJhdGlvWCA9ICh3aWR0aCAvIGhlaWdodCk7CisgICAgICAgICAgICBmbG9h
dCByYXRpb1kgPSAoaGVpZ2h0IC8gd2lkdGgpOworICAgICAgICAgICAgbWF0LnNjYWxlKCh3aWR0
aCA+IGhlaWdodCkgPyAxIDogcmF0aW9YLCAod2lkdGggPiBoZWlnaHQpID8gcmF0aW9ZIDogMSk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjeCA9IGdyYWRpZW50Q2VudGVyKCku
eCgpOworICAgICAgICBjeSA9IGdyYWRpZW50Q2VudGVyKCkueSgpOworCisgICAgICAgIGZ4ID0g
Z3JhZGllbnRGb2NhbCgpLngoKTsKKyAgICAgICAgZnkgPSBncmFkaWVudEZvY2FsKCkueSgpOwor
CisgICAgICAgIGZ4IC09IGN4OworICAgICAgICBmeSAtPSBjeTsKKworICAgICAgICByID0gZ3Jh
ZGllbnRSYWRpdXMoKTsKKyAgICB9CisKKyAgICBpZiAoc3FydChmeCAqIGZ4ICsgZnkgKiBmeSkg
PiByKSB7CisgICAgICAgIC8vIFNwZWM6IElmIChmeCwgZnkpIGxpZXMgb3V0c2lkZSB0aGUgY2ly
Y2xlIGRlZmluZWQgYnkgKGN4LCBjeSkgYW5kIHIsIHNldCAoZngsIGZ5KQorICAgICAgICAvLyB0
byB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaW5lIHRocm91Z2ggKGZ4LCBmeSkg
YW5kIHRoZSBjaXJjbGUuCisgICAgICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKGZ5LCBmeCk7Cisg
ICAgICAgIGZ4ID0gaW50KGNvcyhhbmdsZSkgKiByKSAtIDE7CisgICAgICAgIGZ5ID0gaW50KHNp
bihhbmdsZSkgKiByKSAtIDE7CisgICAgfQorCisJY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0g
Y2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsIChjeCxjeSxyLGZ4LGZ5LHIpOworCisgICAgaWYg
KHNwcmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRVBFQVQpIHsKKwkJY2Fpcm9fcGF0dGVy
bl9zZXRfZXh0ZW5kKHBhdHRlcm4sQ0FJUk9fRVhURU5EX1JFUEVBVCk7CisgICAgfSBlbHNlIGlm
IChzcHJlYWRNZXRob2QoKSA9PSBTUFJFQURNRVRIT0RfUkVGTEVDVCkgeworCQljYWlyb19wYXR0
ZXJuX3NldF9leHRlbmQocGF0dGVybixDQUlST19FWFRFTkRfUkVGTEVDVCk7CisgICAgfSBlbHNl
IHsKKwkJY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sQ0FJUk9fRVhURU5EX1BBRCk7
CisgICAgfQorCisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiByZW5kZXJTdHls
ZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7CisgICAgICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRl
ciBmaWxsUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIocmVuZGVyU3R5
bGUsIG9iamVjdCk7CisgICAgICAgIGNhaXJvQ29udGV4dC0+c2V0RmlsbChmaWxsUGFpbnRlciww
KTsKKyAgICAgICAgZmlsbF9jb2xvcl9hcnJheShwYXR0ZXJuLCBncmFkaWVudFN0b3BzKCksIGZp
bGxQYWludGVyLm9wYWNpdHkoKSk7CisgICAgfQorCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9f
U1RST0tFKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKKyAgICAg
ICAgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgc3Ryb2tlUGFpbnRlciA9IEtTVkdQYWludGVyRmFj
dG9yeTo6c3Ryb2tlUGFpbnRlcihyZW5kZXJTdHlsZSwgb2JqZWN0KTsKKyAgICAgICAgY2Fpcm9D
b250ZXh0LT5zZXRTdHJva2Uoc3Ryb2tlUGFpbnRlciwwKTsKKyAgICAgICAgZmlsbF9jb2xvcl9h
cnJheShwYXR0ZXJuLCBncmFkaWVudFN0b3BzKCksIHN0cm9rZVBhaW50ZXIub3BhY2l0eSgpKTsK
KyAgICB9CisgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnMgPSBncmFkaWVudFRyYW5z
Zm9ybSgpOworCWNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCYoKGNhaXJvX21hdHJp
eF90KWdyYWRpZW50VHJhbnMpKTsKKwljYWlyb0NvbnRleHQtPnNldFBhdHRlcm4ocGF0dGVybik7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnRDYWlybzo6cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4
dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QK
K3sKKyAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qIGNhaXJvQ29udGV4dCA9IHN0YXRpY19jYXN0PEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihjb250ZXh0KTsKKworICAgIGlmICgodHlwZSAm
IEFQUExZX1RPX0ZJTEwpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpCisg
ICAgICAgIGNhaXJvQ29udGV4dC0+ZmlsbFBhdGgoKTsKKworICAgIGlmICgodHlwZSAmIEFQUExZ
X1RPX1NUUk9LRSkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKQorICAg
ICAgICBjYWlyb0NvbnRleHQtPnN0cm9rZVBhdGgoKTsKK30KKwordm9pZCBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJSYWRpYWxHcmFkaWVudENhaXJvOjpkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBl
KSBjb25zdAoreworICAgIGlmICghc2V0dXAoY29udGV4dCwgcGF0aCwgdHlwZSkpCisgICAgICAg
IHJldHVybjsKKyAgICByZW5kZXJQYXRoKGNvbnRleHQsIHBhdGgsIHR5cGUpOworICAgIHRlYXJk
b3duKGNvbnRleHQsIHBhdGgsIHR5cGUpOworfQorCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50Q2Fpcm86OnRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QKK3sK
KyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQgPSBzdGF0aWNf
Y2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKj4oY29udGV4dCk7CisJY2Fpcm9Db250
ZXh0LT5kZXN0cm95UGF0dGVybigpOworICAgIGNhaXJvQ29udGV4dC0+cmVzdG9yZSgpOworfQor
Cit9CisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fp
cm8vS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5D
YWlyby5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlyby5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCQkJCSAgMjAwNiBNaWNoYWVsIEVtbWVs
IDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VDYWlyby5oIgorI2lu
Y2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdGaWxs
UGFpbnRlci5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCisjaW5jbHVk
ZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmgiCisjaW5jbHVkZSAiS0NhbnZh
c0ltYWdlQ2Fpcm8uaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm86OktSZW5kZXJp
bmdQYWludFNlcnZlclBhdHRlcm5DYWlybygpCisgICAgOiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQ
YXR0ZXJuKCkKK3sKK30KKworS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvOjp+S1Jl
bmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvKCkKK3sKK30KKwordm9pZCBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm86OnJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5
cGUpIGNvbnN0Cit7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJv
OjpzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7Cit9CisKK3ZvaWQg
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvOjp0ZWFyZG93bihLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5
cGUpIGNvbnN0Cit7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJv
OjpkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRo
KiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0Q2Fpcm8qIGNhaXJvQ29udGV4dCA9IAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyo+KGNvbnRleHQpOworICAgIGNhaXJvQ29u
dGV4dC0+c2F2ZSgpOworICAgIGlmIChsaXN0ZW5lcigpKSB7CisgICAgICAgIGxpc3RlbmVyKCkt
PnJlc291cmNlTm90aWZpY2F0aW9uKCk7CisgICAgfQorCisgICAgUmVuZGVyU3R5bGUqIHJlbmRl
clN0eWxlID0gcGF0aC0+c3R5bGUoKTsKKyAgICBjYWlyb0NvbnRleHQtPmFkZFBhdGgocGF0aC0+
cGF0aCgpKTsKKworCUtDYW52YXNJbWFnZUNhaXJvKiBpbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52
YXNJbWFnZUNhaXJvKj4odGlsZSgpKTsJCQorCWNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IGlt
YWdlLT5wYXR0ZXJuKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFucyA9IHBhdHRl
cm5UcmFuc2Zvcm0oKTsKKwljYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwmKChjYWly
b19tYXRyaXhfdClwYXR0ZXJuVHJhbnMpKTsKKworCWNhaXJvQ29udGV4dC0+c2V0UGF0dGVybihw
YXR0ZXJuKTsKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiByZW5kZXJTdHlsZS0+
c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7CisgICAgICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciBm
aWxsUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIocmVuZGVyU3R5bGUs
IHBhdGgpOworICAgICAgICBjYWlyb0NvbnRleHQtPnNldEZpbGwoZmlsbFBhaW50ZXIsMCk7Cisg
ICAgICAgIGNhaXJvQ29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICB9CisKKyAgICBpZigodHlwZSAm
IEFQUExZX1RPX1NUUk9LRSkgJiYgIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2Uo
KSkgeworICAgICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyID0gS1NW
R1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludGVyKHJlbmRlclN0eWxlLCBwYXRoKTsKKyAgICAg
ICAgY2Fpcm9Db250ZXh0LT5zZXRTdHJva2Uoc3Ryb2tlUGFpbnRlciwwKTsKKyAgICAgICAgY2Fp
cm9Db250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgIC8qIGlmKGlzUGFpbnRpbmdUZXh0KCkp
IC4uLiAqLworICAgIH0KKworCWNhaXJvQ29udGV4dC0+ZGVzdHJveVBhdHRlcm4oKTsKKyAgICBj
YWlyb0NvbnRleHQtPnJlc3RvcmUoKTsKK30KKworfQorLy8gdmltOnRzPTQ6bm9ldAorCkluZGV4
OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tDYW52YXNDbGlwcGVyQ2Fpcm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tDYW52YXNDbGlwcGVyQ2Fp
cm8uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS0NhbnZh
c0NsaXBwZXJDYWlyby5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KwkJCQkgIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAg
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRlZiBLQ2FudmFzQ2xpcHBl
ckNhaXJvX2gKKyNkZWZpbmUgS0NhbnZhc0NsaXBwZXJDYWlyb19oCisjaW5jbHVkZSAiS0NhbnZh
c0NsaXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLQ2FudmFzQ2xpcHBl
ckNhaXJvIDogcHVibGljIEtDYW52YXNDbGlwcGVyIHsKK3B1YmxpYzoKKyAgICBLQ2FudmFzQ2xp
cHBlckNhaXJvKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBhcHBseUNs
aXAoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3Q7Cit9OworCit9CisKKyNlbmRp
ZgorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJv
L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8uaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWRDYWlyby5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKwkJCQkgIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlrZS5lbW1lbEBn
bWFpbC5jb20+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm9fSAorI2RlZmluZSBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJTb2xpZENhaXJvX0gKKworI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclNv
bGlkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclNvbGlkQ2Fpcm8gOiBwdWJsaWMgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQKK3sK
K3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvKCk7CisgICAgdmly
dHVhbCB+S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlybygpOworCisgICAgdmlydHVhbCB2
b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQ
YWludFRhcmdldFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXR1cChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQq
LCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Cit9OworCit9
CisKKyNlbmRpZgorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDk0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAg
ICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWMuc2VpZGVsQGtkZW1haWwubmV0PgorCQkJCSAgMjAw
NiBNaWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlICJSZW5kZXJQYXRoQ2Fpcm8uaCIKKyNpbmNsdWRlICJLUmVuZGVy
aW5nU3Ryb2tlUGFpbnRlci5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VDYWlyby5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
KyNpbmNsdWRlICJQYXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRlclBh
dGhDYWlybzo6UmVuZGVyUGF0aENhaXJvKFJlbmRlclN0eWxlKiBzdHlsZSwgU1ZHU3R5bGVkRWxl
bWVudCogbm9kZSkKKyAgICA6IFJlbmRlclBhdGgoc3R5bGUsIG5vZGUpCit7Cit9CisKK2Jvb2wg
UmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcCwgYm9vbCByZXF1
aXJlc1N0cm9rZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQ
YWludGVyID0gCisgICAgICAgICAgICBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50ZXIo
c3R5bGUoKSwgdGhpcyk7CisKKyAgICBmbG9hdCBsaW5lV2lkdGggPSBzdHJva2VQYWludGVyLnN0
cm9rZVdpZHRoKCk7CisgICAgTGluZUNhcCBjYXAgPSBCdXR0Q2FwOworICAgIExpbmVKb2luIGpv
aW4gPSBNaXRlckpvaW47CisgICAgZmxvYXQgbWl0ZXJMaW1pdCA9IDEwLjA7CisKKworICAgIGlm
IChzdHJva2VQYWludGVyLnN0cm9rZUNhcFN0eWxlKCkgPT0gQ0FQX1JPVU5EKSB7CisgICAgICAg
IGNhcCA9IFJvdW5kQ2FwOworICAgIH0gZWxzZSBpZiAoc3Ryb2tlUGFpbnRlci5zdHJva2VDYXBT
dHlsZSgpID09IENBUF9TUVVBUkUpIHsKKyAgICAgICAgY2FwID0gU3F1YXJlQ2FwOworICAgIH0K
KworICAgIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tlSm9pblN0eWxlKCkgPT0gSk9JTl9ST1VORCkg
eworICAgICAgICAgam9pbiA9IFJvdW5kSm9pbjsKKyAgICB9IGVsc2UgaWYoc3Ryb2tlUGFpbnRl
ci5zdHJva2VKb2luU3R5bGUoKSA9PSBKT0lOX0JFVkVMKSB7CisgICAgICAgICBqb2luID0gQmV2
ZWxKb2luOworICAgIH0KKyAgICByZXR1cm4gcGF0aCgpLnN0cm9rZUNvbnRhaW5zKHAsbGluZVdp
ZHRoLGNhcCxqb2luLG1pdGVyTGltaXQpOworfQorCitGbG9hdFJlY3QgUmVuZGVyUGF0aDo6c3Ry
b2tlQkJveCgpIGNvbnN0Cit7CisgICAgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgc3Ryb2tlUGFp
bnRlciA9IAorICAgICAgICAgICAgS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludGVyKHN0
eWxlKCksIHRoaXMpOworCisgICAgZmxvYXQgbGluZVdpZHRoID0gc3Ryb2tlUGFpbnRlci5zdHJv
a2VXaWR0aCgpOworICAgIExpbmVDYXAgY2FwID0gQnV0dENhcDsKKyAgICBMaW5lSm9pbiBqb2lu
ID0gTWl0ZXJKb2luOworICAgIGZsb2F0IG1pdGVyTGltaXQgPSAxMC4wOworCisKKyAgICBpZiAo
c3Ryb2tlUGFpbnRlci5zdHJva2VDYXBTdHlsZSgpID09IENBUF9ST1VORCkgeworICAgICAgICBj
YXAgPSBSb3VuZENhcDsKKyAgICB9IGVsc2UgaWYgKHN0cm9rZVBhaW50ZXIuc3Ryb2tlQ2FwU3R5
bGUoKSA9PSBDQVBfU1FVQVJFKSB7CisgICAgICAgIGNhcCA9IFNxdWFyZUNhcDsKKyAgICB9CisK
KyAgICBpZihzdHJva2VQYWludGVyLnN0cm9rZUpvaW5TdHlsZSgpID09IEpPSU5fUk9VTkQpIHsK
KyAgICAgICAgIGpvaW4gPSBSb3VuZEpvaW47CisgICAgfSBlbHNlIGlmKHN0cm9rZVBhaW50ZXIu
c3Ryb2tlSm9pblN0eWxlKCkgPT0gSk9JTl9CRVZFTCkgeworICAgICAgICAgam9pbiA9IEJldmVs
Sm9pbjsKKyAgICB9CisgICAgcmV0dXJuIHBhdGgoKS5zdHJva2VCb3VuZGluZ1JlY3QobGluZVdp
ZHRoLGNhcCxqb2luLG1pdGVyTGltaXQpOworfQorCisKK30KKworLy8gdmltOnRzPTQ6ZXQKSW5k
ZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWlyby9LUmVuZGVyaW5nRGV2
aWNlQ2Fpcm8uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8v
S1JlbmRlcmluZ0RldmljZUNhaXJvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE1IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKwkJCQkgIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlrZS5lbW1l
bEBnbWFpbC5jb20+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIEtSZW5kZXJpbmdEZXZpY2VDYWlyb19ICisjZGVmaW5lIEtSZW5kZXJpbmdEZXZpY2VDYWly
b19ICisKKworI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVuZGVyUGF0aDsKK2NsYXNzIEtSZW5kZXJpbmdTdHJva2VQYWludGVyOworY2xh
c3MgS1JlbmRlcmluZ0ZpbGxQYWludGVyOworY2xhc3MgUGF0aDsKK2NsYXNzIENvbG9yOworY2xh
c3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CitjbGFzcyBLQ2FudmFzUmVzb3VyY2U7CisKK2NsYXNz
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8gOiBwdWJsaWMgS1JlbmRlcmluZ0RldmljZUNv
bnRleHQKK3sKK3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKEdyYXBo
aWNzQ29udGV4dENhaXJvKik7CisgICAgdmlydHVhbCB+S1JlbmRlcmluZ0RldmljZUNvbnRleHRD
YWlybygpOworCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gY29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGN0bSgpIGNvbnN0
OworCisgICAgdmlydHVhbCBJbnRSZWN0IG1hcEZyb21WaXN1YWwoY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgSW50UmVjdCBtYXBUb1Zpc3VhbChjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJQYXRoKCk7CisgICAgdmlydHVhbCB2b2lkIGFkZFBhdGgoY29uc3Qg
UGF0aCYpOworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29u
dGV4dCgpOworICAgIAorICAgIC8vIENhaXJvIHNwZWNpZmljIHN0dWZmCisgICAgdm9pZCBzYXZl
KCk7CisgICAgdm9pZCByZXN0b3JlKCk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7
CisgICAgdm9pZCBmaWxsUGF0aCgpOworICAgIHZvaWQgc3Ryb2tlUGF0aCgpOworICAgIHZvaWQg
Y2xpcChQYXRoJik7CisgICAgdm9pZCByZXNldENsaXAoKTsKKyAgICB2b2lkIHNldFRyYW5zZm9y
bShBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIHNldFN0cm9rZShjb25zdCBLUmVuZGVyaW5n
U3Ryb2tlUGFpbnRlciYsQ29sb3IqKTsKKyAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQgJnApOworICAgIEZsb2F0UmVjdCBzdHJva2VCQm94KCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRGaWxsKGNvbnN0IEtSZW5kZXJpbmdGaWxsUGFpbnRlciYsQ29sb3IqKTsKKyAgICB2b2lk
IHNldFBhdHRlcm4oY2Fpcm9fcGF0dGVybl90Kik7CisgICAgdm9pZCBkZXN0cm95UGF0dGVybigp
OworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQoKXsgcmV0dXJuIG1fZ2M7
fQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBtX2djOworICAgIGNhaXJv
X3BhdHRlcm5fdCAqbV9wYXR0ZXJuOworfTsKKworY2xhc3MgS1JlbmRlcmluZ0RldmljZUNhaXJv
IDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2UKK3sKK3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nRGV2
aWNlQ2Fpcm8oKTsKKyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nRGV2aWNlQ2Fpcm8oKTsKKworICAg
IHZpcnR1YWwgYm9vbCBpc0J1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dmlydHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcG9wQ29udGV4dCgpOworICAgIHZpcnR1
YWwgdm9pZCBwdXNoQ29udGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCopOworCisgICAgLy8g
Y29udGV4dCBtYW5hZ2VtZW50LgorICAgIHZpcnR1YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQq
IGNvbnRleHRGb3JJbWFnZShLQ2FudmFzSW1hZ2UqKSBjb25zdDsKKworCisgICAgLy8gUmVzb3Vy
Y2UgY3JlYXRpb24KKyAgICB2aXJ0dWFsIEtDYW52YXNSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2Uo
Y29uc3QgS0NSZXNvdXJjZVR5cGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciogY3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWludFNlcnZlclR5cGUmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QqIGNyZWF0ZUZpbHRlckVmZmVjdChj
b25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmKSBjb25zdDsKKworICAgIC8vIGl0ZW0gY3JlYXRpb24K
KyAgICB2aXJ0dWFsIFJlbmRlclBhdGgqIGNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEqLCBSZW5kZXJT
dHlsZSosIFNWR1N0eWxlZEVsZW1lbnQqLCBjb25zdCBQYXRoJikgY29uc3Q7CisKKyAgICBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQoKSBjb25zdDsKKyAgcHJpdmF0
ZToKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKiBtX2NvbnRleHQ7CisKK307CisK
K30KKworI2VuZGlmCisKKy8vIHZpbTp0cz00OmV0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50Q2Fpcm8uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fp
cm8vS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKwkJCQkgIDIwMDYgTWljaGFlbCBF
bW1lbCA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Q2Fpcm9fSAor
I2RlZmluZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvX0gKKworI2luY2x1ZGUg
IktSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRDYWlybyA6IHB1Ymxp
YyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudAoreworcHVibGljOgorICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Q2Fpcm8oKTsKKworICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtD
UGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiAsIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKK307CisK
K2NsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm8gOiBwdWJsaWMg
S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQKK3sKK3B1YmxpYzoKKyAgICBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudENhaXJvKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1Bh
aW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCos
IGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKK307CisKK30K
KworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvY2Fpcm8vS0NhbnZhc0ltYWdlQ2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL2NhaXJvL0tDYW52YXNJbWFnZUNhaXJvLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tDYW52YXNJbWFnZUNhaXJvLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisJCQkJIDIwMDYgTWljaGFlbCBFbW1lbCA8
bWlrZS5lbW1lbEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgS0NhbnZhc1Jlc291cmNlc1F1
YXJ0el9oCisjZGVmaW5lIEtDYW52YXNSZXNvdXJjZXNRdWFydHpfaAorCisjaW1wb3J0ICJLQ2Fu
dmFzSW1hZ2UuaCIKKworc3RydWN0IF9jYWlyb19zdXJmYWNlOwordHlwZWRlZiBzdHJ1Y3QgX2Nh
aXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90Oworc3RydWN0IF9jYWlyb19wYXR0ZXJuOwordHlw
ZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKworY2xhc3MgS0NhbnZhc0ltYWdlQ2Fpcm8gOiBwdWJsaWMgS0NhbnZhc0lt
YWdlIHsKK3B1YmxpYzoKKyAgICBLQ2FudmFzSW1hZ2VDYWlybygpOm1fc2l6ZSgwLDApLG1fcGF0
dGVybigwKXsgfQorICAgIH5LQ2FudmFzSW1hZ2VDYWlybygpOworICAgIHZvaWQgaW5pdChjb25z
dCBJbWFnZSAmKTsgCisgICAgdm9pZCBpbml0KEludFNpemUgc2l6ZSk7IAorCisgICAgSW50U2l6
ZSBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CisgICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJu
KCkgeyByZXR1cm4gbV9wYXR0ZXJuOyB9CisgICAgCitwcml2YXRlOgorICAgIEludFNpemUgbV9z
aXplOworICAgIGNhaXJvX3BhdHRlcm5fdCogbV9wYXR0ZXJuOworfTsKKworfQorCisjZW5kaWYK
Ky8vIHZpbTp0cz00OmV0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5k
ZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm5DYWlyby5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKwkJCQkgIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlrZS5lbW1lbEBn
bWFpbC5jb20+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlyb19ICisjZGVmaW5lIEtSZW5kZXJpbmdQ
YWludFNlcnZlclBhdHRlcm5DYWlyb19ICisKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJQYXR0ZXJuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1JlbmRlcmluZ1Bh
aW50U2VydmVyUGF0dGVybkNhaXJvIDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRl
cm4KK3sKK3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8oKTsK
KyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8oKTsKKworICAg
IHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVy
UGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0dXAo
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFy
Z2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0
OworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5oCShyZXZp
c2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywxNSArMjcsMjEgQEAKICNpZm5kZWYgUGF0aF9oCiAjZGVmaW5lIFBhdGhfaAogCisjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorCiAjaWYgUExBVEZPUk0oQ0cpCiB0eXBlZGVmIHN0cnVj
dCBDR1BhdGggUGxhdGZvcm1QYXRoOwogI2VsaWYgUExBVEZPUk0oUVQpCiBjbGFzcyBRUGFpbnRl
clBhdGg7CiB0eXBlZGVmIFFQYWludGVyUGF0aCBQbGF0Zm9ybVBhdGg7CisjZWxpZiBQTEFURk9S
TShDQUlSTykKK3R5cGVkZWYgc3RydWN0IGNhaXJvX3BhdGggY2Fpcm9fcGF0aF90OwordHlwZWRl
ZiBjYWlyb19wYXRoX3QgUGxhdGZvcm1QYXRoOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCBQbGF0Zm9y
bVBhdGg7CiAjZW5kaWYKIAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBBZmZp
bmVUcmFuc2Zvcm07CkBAIC01Niw2ICs2Miw5IEBACiAgICAgICAgIFBhdGhFbGVtZW50QWRkQ3Vy
dmVUb1BvaW50LAogICAgICAgICBQYXRoRWxlbWVudENsb3NlU3VicGF0aAogICAgIH07CisjaWYg
UExBVEZPUk0oQ0FJUk8pCisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CisjZW5kaWYK
IAogICAgIHN0cnVjdCBQYXRoRWxlbWVudCB7CiAgICAgICAgIFBhdGhFbGVtZW50VHlwZSB0eXBl
OwpAQCAtNzQsNyArODMsMTQgQEAKIAogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmLCBXaW5kUnVsZSBydWxlID0gUlVMRV9OT05aRVJPKSBjb25zdDsKICAgICAgICAgRmxv
YXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgICAg
ICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCBsaW5l
X3dpZHRoLAorICAgICAgICAgICAgICAgIExpbmVDYXAgY2FwLExpbmVKb2luIGpvaW4sIGZsb2F0
IG1pdGVyTGltaXQgPSAxMC4wKSBjb25zdDsKIAorICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91
bmRpbmdSZWN0KGZsb2F0IGxpbmVXaWR0aCwKKyAgICAgICAgICAgICAgICBMaW5lQ2FwLExpbmVK
b2luLCBmbG9hdCBtaXRlckxpbWl0ID0gMTAuMCkgY29uc3Q7CisjZW5kaWYKKwogICAgICAgICB2
b2lkIGNsZWFyKCk7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCkBAIC05Niw3ICsx
MTIsMTEgQEAKIAogICAgICAgICBTdHJpbmcgZGVidWdTdHJpbmcoKSBjb25zdDsKIAorI2lmIFBM
QVRGT1JNKENBSVJPKQorICAgICAgICBQbGF0Zm9ybVBhdGgqIHBsYXRmb3JtUGF0aCgpIGNvbnN0
OworI2Vsc2UKICAgICAgICAgUGxhdGZvcm1QYXRoKiBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJl
dHVybiBtX3BhdGg7IH0KKyNlbmRpZgogCiAgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJvdW5k
ZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1Jh
ZGlpKTsKICAgICAgICAgc3RhdGljIFBhdGggY3JlYXRlUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVj
dCYpOwpAQCAtMTA4LDEwICsxMjgsMTUgQEAKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJik7CiAKICAgICBwcml2YXRlOgorI2lmIFBMQVRGT1JNKENBSVJPKQor
ICAgICAgICBHcmFwaGljc0NvbnRleHRDYWlybyogbV9nYzsKKyNlbHNlCiAgICAgICAgIFBsYXRm
b3JtUGF0aCogbV9wYXRoOworI2VuZGlmCiAgICAgICAgIFdpbmRSdWxlIG1fcnVsZTsKICAgICB9
OwogCiB9CisjZW5kaWYKKy8vIHZpbTogdHM9NCBzdz00IGV0CiAKLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11153</attachid>
            <date>2006-10-19 14:07:59 -0700</date>
            <delta_ts>2006-10-28 13:07:29 -0700</delta_ts>
            <desc>bakefile changes fixed for linux compile and a few misc changes</desc>
            <filename>compile.patch</filename>
            <type>text/plain</type>
            <size>34865</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDgyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDYtMTAtMTcgIE1pY2hhZWwg
RW1tZWwgIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT05F
LgorCisgICAgICAgIEZpeGVkIERFQlVHIGNvbXBpbGUgc28gYnVpbHRpbiBhbGxvY2F0b3Igd29y
a3MKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlU291cmNlcy5ia2wKKyAgICAgICAgKiBqc2Nv
cmUuYmtsCisKIDIwMDYtMTAtMTYgIEtldmluIE1jQ3VsbG91Z2ggIDxrbWNjdWxsb3VnaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZi4KSW5kZXg6IFdlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzA4MikKKysr
IFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTEgQEAKKzIwMDYt
MTAtMTcgIE1pY2hhZWwgRW1tZWwgIDxtaWtlLmVtbWVAZ21haWwuY29tPgorCisgICAgICAgIEFk
ZCBTVkcgc3VwcG9ydCB0byBnZGsgcHJvamVjdCBhZGQgc3VwcG9ydCBmb3Igc3ZnIGNvbXBvbmVu
dC4KKworICAgICAgICAqIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBs
YXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2NhaXJv
L0ltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2NhaXJvL0FmZmluZVRyYW5zZm9y
bUNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9QYXRoQ2Fpcm8uY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dkay9QYWdlR2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dkay9JbWFnZUdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1dpZGdldFBy
aXZhdGVHZGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvQnJvd3NlckV4dGVuc2lvbkdkay5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dkay9SZXNvdXJjZUxvYWRlck1hbmFnZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9u
dENhY2hlR2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsv
U3lzdGVtVGltZUxpbnV4LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvTG9hZGVyRnVuY3Rp
b25zR2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9nZGsvU2hhcmVkVGltZXJMaW51eC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z2RrL0Nvb2tpZUphckdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRH
ZGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9XaW5kb3dHZGsuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2Rr
L1Jlc291cmNlTG9hZGVyQ3VybC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1NjcmVlbkdk
ay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL0Jyb3dzZXJFeHRlbnNpb25HZGsuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9SZXNvdXJjZUxvYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9J
Y29uR2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ2Rr
L0ZpbGVDaG9vc2VyR2RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVH
ZGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udEdkay5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1dpbmRvd0dk
ay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Rm9udERhdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Jlc291cmNlTG9hZGVySW50ZXJuYWwu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9BZmZpbmVUcmFuc2Zvcm0uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vUGF0aC5oOgorICAgICAgICAq
IHBsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1Jlc291
cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogUHJvamVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJr
bDoKKyAgICAgICAgKiBQcm9qZWN0cy93eC93ZWJjb3JlLXd4LmJrbDoKKyAgICAgICAgKiBjb25m
aWcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAqIGtjYW52YXMvUmVu
ZGVyU1ZHQ29udGFpbmVyLmg6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vUmVuZGVy
UGF0aENhaXJvLmg6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS0NhbnZhc0NsaXBw
ZXJDYWlyby5jcHA6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWRDYWlyby5jcHA6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8v
S1JlbmRlcmluZ0RldmljZUNhaXJvLmNwcDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9jYWly
by9LQ2FudmFzSW1hZ2VDYWlyby5jcHA6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8v
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHA6CisgICAgICAgICoga2NhbnZh
cy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcDoKKyAg
ICAgICAgKiBrY2FudmFzL2RldmljZS9jYWlyby9LQ2FudmFzQ2xpcHBlckNhaXJvLmg6CisgICAg
ICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWly
by5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHA6
CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmg6
CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnRDYWlyby5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL2NhaXJvL0tDYW52YXNJbWFn
ZUNhaXJvLmg6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ1BhaW50
U2VydmVyUGF0dGVybkNhaXJvLmg6CisgICAgICAgICoga2NhbnZhcy9SZW5kZXJGb3JlaWduT2Jq
ZWN0Lmg6CisgICAgICAgICoga2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAg
ICAqIGtjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0FuaW1hdGVkVGVtcGxhdGUuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTWF0cml4LmNw
cDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQb2ludHMuaDoKKyAgICAgICAgKiBi
cmlkZ2UvQnJvd3NlckV4dGVuc2lvbi5oOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoK
KyAgICAgICAgKiB3ZWJjb3JlLWJhc2UuYmtsOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5jcHA6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKIDIwMDYtMTAtMTcgIERhdmlk
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCAiZmxhc2ggdG8gd2hpdGUn
IHByb2JsZW0gb24geWFob28uY29tIGFzIGl0IGZpbmlzaGVzIGxvYWRpbmcuICBSZWZpbmUgdGhl
IEZPVUMgc3VwcHJlc3Npb24KSW5kZXg6IEJha2VmaWxlcy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQmFrZWZpbGVzL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNjgpCisrKyBCYWtlZmlsZXMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDYtMTAtMTcgIE1pY2hh
ZWwgRW1tZWwgIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T05FLgorCisgICAgICAgIEFkZGVkIGdkayBvbmx5IGJ1aWxkICBwcmVzZXQgCisKKyAgICAgICAg
KiBwcmVzZXRzLmJrbDoKKwogMjAwNi0xMC0wOSAgS3J6eXN6dG9mIEtvd2FsY3p5ayAgPGtrb3dh
bGN6eWtAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmLgpJbmRleDogSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAxNzA4MikKKysr
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDEzICs0MywxMyBAQAogCQlranMvdGVzdGtqcy5jcHAKIAkJa2pzL3VzdHJpbmcuY3Bw
CiAJCWtqcy92YWx1ZS5jcHAKLQogCTwvc2V0PgogCTxzZXQgYXBwZW5kPSIxIiB2YXI9IkpTQ09S
RV9TT1VSQ0VTX1dURiI+CiAJCQogCQl3dGYvQXNzZXJ0aW9ucy5jcHAKIAkJd3RmL0Zhc3RNYWxs
b2MuY3BwCiAJCXd0Zi9IYXNoVGFibGUuY3BwCisJCXd0Zi9UQ1N5c3RlbUFsbG9jLmNwcAogCiAJ
PC9zZXQ+CiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0iSlNDT1JFX1NPVVJDRVNfUENSRSI+CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9qc2NvcmUuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2pzY29yZS5ia2wJKHJldmlzaW9uIDE3MDgyKQorKysgSmF2YVNjcmlwdENvcmUvanNjb3JlLmJr
bAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQsMTQgQEAKICAgICAgICAgPGluY2x1ZGU+JChT
UkNESVIpL2JpbmRpbmdzPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvYmlu
ZGluZ3MvYzwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2JpbmRpbmdzL2pu
aTwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3d0ZjwvaW5jbHVkZT4KICAg
ICAgICAgPGluY2x1ZGU+JChTUkNESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlPC9p
bmNsdWRlPgogCiAgICAgICAgIDxkZWZpbmU+QVBQTEVfQ0hBTkdFUz0xPC9kZWZpbmU+CisgICAg
ICAgIDwhLS0KKyAgICAgICAgPGRlZmluZT5OREVCVUc9MTwvZGVmaW5lPgorICAgICAgICAtLT4K
KyAgICAgICAgPGRlZmluZT5XVEZfQ0hBTkdFUz0xPC9kZWZpbmU+CiAKICAgICAgICAgPCEtLSB0
aGlzIEdDIHZlcnNpb24gcmVxdWlyZXMgTWFjaCdzIHRocmVhZCBzdXNwZW5kL3Jlc3VtZTogLS0+
CiAgICAgICAgIDxpZiBjb25kPSJQTEFURk9STV9NQUNPU1g9PScxJyI+CkBAIC05Niw2ICsxMDEs
MjYgQEAKICAgICAgICAgPGNvbW1hbmQ+YmFzaCBtYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoPC9j
b21tYW5kPgogICAgIDwvYWN0aW9uPgogCisgICA8ZGxsIGlkPSJzaGFyZWRqc2NvcmUiIHRlbXBs
YXRlPSJqc2NvcmVfYmFzZSI+CisgICAgICAgIDxvYmplY3RzLWRlcGVuZD5kZnRhYmxlczwvb2Jq
ZWN0cy1kZXBlbmQ+CisgICAgICAgIDxwcmUtYnVpbGQtdGFyZ2V0PkRlcml2ZWRTb3VyY2VzPC9w
cmUtYnVpbGQtdGFyZ2V0PgorICAgICAgICA8d2FybmluZ3M+ZGVmYXVsdDwvd2FybmluZ3M+Cisg
ICAgICAgIDxjeHgtcnR0aT5vZmY8L2N4eC1ydHRpPgorICAgICAgICA8Y3h4LWV4Y2VwdGlvbnM+
b2ZmPC9jeHgtZXhjZXB0aW9ucz4KKyAgICAgICAgPGRlYnVnLWluZm8+b248L2RlYnVnLWluZm8+
CisgICAgICAgIDxzb3VyY2VzPgorICAgICAgICAgICAgJChKU0NPUkVfU09VUkNFU19XVEYpCisg
ICAgICAgICAgICAkKEpTQ09SRV9TT1VSQ0VTX1BDUkUpCisgICAgICAgICAgICAkKEpTQ09SRV9T
T1VSQ0VTX0tKUykKKyAgICAgICAgICAgICQoSlNDT1JFX1NPVVJDRVNfQklORElOR1MpCisgICAg
ICAgIDwvc291cmNlcz4KKyAgICAgICAgPGlmIGNvbmQ9IlBMQVRGT1JNX1dJTjMyPT0nMSciPgor
ICAgICAgICAgICAgJChKU0NPUkVfU09VUkNFU19XSU4pCisgICAgPC9pZj4KKyAgICA8aW5zdGFs
bC10bz4kKEJVSUxERElSKTwvaW5zdGFsbC10bz4KKyAgICA8L2RsbD4KKworCiAgICAgPGxpYiBp
ZD0ianNjb3JlIiB0ZW1wbGF0ZT0ianNjb3JlX2Jhc2UiPgogICAgICAgICA8b2JqZWN0cy1kZXBl
bmQ+ZGZ0YWJsZXM8L29iamVjdHMtZGVwZW5kPgogICAgICAgICA8cHJlLWJ1aWxkLXRhcmdldD5E
ZXJpdmVkU291cmNlczwvcHJlLWJ1aWxkLXRhcmdldD4KSW5kZXg6IEJha2VmaWxlcy9wcmVzZXRz
LmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBCYWtlZmlsZXMvcHJlc2V0cy5ia2wJKHJldmlzaW9uIDE3MDY4
KQorKysgQmFrZWZpbGVzL3ByZXNldHMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2
IEBACiAgICAgICAgIDwvaWY+CiAgICAgPC90ZW1wbGF0ZT4KIAotCiAgICAgPG9wdGlvbiBuYW1l
PSJTUUxJVEUzX0xJQlMiPgogICAgICAgICA8ZGVmYXVsdC12YWx1ZT4kKG9zLnBvcGVuKCJwa2ct
Y29uZmlnIC0tbGlicyBzcWxpdGUzIikucmVhZCgpKTwvZGVmYXVsdC12YWx1ZT4KICAgICA8L29w
dGlvbj4KQEAgLTEyNyw2ICsxMjYsMTQgQEAKICAgICAgICAgPCEtLSAgICBUT0RPOiBub24tQ3ln
d2luIFdpbmRvd3Mgc3VwcG9ydCBmb3IgdGhpcz8gOikgLS0+IAogICAgIDwvdGVtcGxhdGU+CiAK
KyAgICA8dGVtcGxhdGUgaWQ9ImdkayI+CisgICAgICAgIDxpZiBjb25kPSJGT1JNQVQ9PSdnbnUn
Ij4KKyAgICAJICAgPGxkZmxhZ3M+YHBrZy1jb25maWcgLS1saWJzIGdkay0yLjBgPC9sZGZsYWdz
PgorICAgIAkgICA8Y3h4ZmxhZ3M+YHBrZy1jb25maWcgLS1jZmxhZ3MgZ2RrLTIuMGA8L2N4eGZs
YWdzPgorICAgICAgICA8L2lmPgorICAgICAgICAKKyAgICAgICAgPCEtLSAgICBUT0RPOiBub24t
Q3lnd2luIFdpbmRvd3Mgc3VwcG9ydCBmb3IgdGhpcz8gOikgLS0+IAorICAgIDwvdGVtcGxhdGU+
CiAKICAgICA8b3B0aW9uIG5hbWU9IlhNTDJfTElCUyI+CiAgICAgICAgIDxkZWZhdWx0LXZhbHVl
PiQob3MucG9wZW4oInhtbDItY29uZmlnIC0tbGlicyIpLnJlYWQoKSk8L2RlZmF1bHQtdmFsdWU+
CkluZGV4OiBXZWJDb3JlL1Byb2plY3RzL2dkay93ZWJjb3JlLWdkay5ia2wKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9Qcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsCShyZXZpc2lvbiAxNzA4MikK
KysrIFdlYkNvcmUvUHJvamVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJrbAkod29ya2luZyBjb3B5KQpA
QCAtOCw0MiArOCw1NCBAQAogCiA8bWFrZWZpbGU+CiAKLQkJPG9wdGlvbiBuYW1lPSJFTkNPRElO
R1NfRklMRSI+Ci0JCTxkZWZhdWx0LXZhbHVlPnBsYXRmb3JtL2dkay9nZGstZW5jb2RpbmdzLnR4
dDwvZGVmYXVsdC12YWx1ZT4KLQkJPHZhbHVlcz5wbGF0Zm9ybS9nZGsvZ2RrLWVuY29kaW5ncy50
eHQ8L3ZhbHVlcz4KLQkJPC9vcHRpb24+CisgICAgIDxzZXQgdmFyPSJTUkNESVIiIGFwcGVuZD0i
MCI+Li4vLi48L3NldD4KIAotCQk8b3B0aW9uIG5hbWU9IkZFQVRVUkVfREVGSU5FUyIgbmV2ZXJf
ZW1wdHk9IjEiID4KLQkJPCEtLSBTVkdfU1VQUE9SVCBYUEFUSF9TVVBQT1JULS0+Ci0JCTxkZWZh
dWx0LXZhbHVlPlhQQVRIX1NVUFBPUlQ8L2RlZmF1bHQtdmFsdWU+Ci0JCTx2YWx1ZXM+WFBBVEhf
U1VQUE9SVCxTVkdfU1VQUE9SVDwvdmFsdWVzPgotCQk8L29wdGlvbj4KLQkJPHNldCB2YXI9IkZF
QVRVUkVfREVGSU5FUyI+WFBBVEhfU1VQUE9SVDwvc2V0PgotCQk8c2V0IHZhcj0iRU5DT0RJTkdT
X0ZJTEUiPiQoU1JDRElSKS9wbGF0Zm9ybS9nZGsvZ2RrLWVuY29kaW5ncy50eHQ8L3NldD4KKwk8
b3B0aW9uIG5hbWU9IkVOQ09ESU5HU19GSUxFIj4KKwkgICAgIDxkZWZhdWx0LXZhbHVlPnBsYXRm
b3JtL2dkay9nZGstZW5jb2RpbmdzLnR4dDwvZGVmYXVsdC12YWx1ZT4KKwkgICAgIDx2YWx1ZXM+
cGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3MudHh0PC92YWx1ZXM+CisJPC9vcHRpb24+CiAKKwk8
b3B0aW9uIG5hbWU9IkZFQVRVUkVfREVGSU5FUyIgbmV2ZXJfZW1wdHk9IjEiID4KKwk8IS0tIFNW
R19TVVBQT1JUIFhQQVRIX1NVUFBPUlQtLT4KKwk8ZGVmYXVsdC12YWx1ZT5YUEFUSF9TVVBQT1JU
PC9kZWZhdWx0LXZhbHVlPgorCTx2YWx1ZXM+WFBBVEhfU1VQUE9SVCxTVkdfU1VQUE9SVDwvdmFs
dWVzPgorCTwvb3B0aW9uPgorCTxzZXQgdmFyPSJGRUFUVVJFX0RFRklORVMiPlhQQVRIX1NVUFBP
UlQsU1ZHX1NVUFBPUlQ8L3NldD4KKwk8c2V0IHZhcj0iRU5DT0RJTkdTX0ZJTEUiPiQoU1JDRElS
KS9wbGF0Zm9ybS9nZGsvZ2RrLWVuY29kaW5ncy50eHQ8L3NldD4KKwogCTxpbmNsdWRlIGZpbGU9
Ii4uLy4uL3dlYmNvcmUtYmFzZS5ia2wiLz4KIAogICAgPGFjdGlvbiBpZD0iLkRlcml2ZWRTb3Vy
Y2VzIj4KLSAgIDwhLS0gVGhpcyBjYXVzZXMgYSBmdWxsIHJlYnVpbGQgZXZlcnl0aW1lCisgICAg
IDwhLS0gCiAgICAgIDxpcy1waG9ueS8+Ci0JIC0tPgotICAgICAgICA8Y29tbWFuZD5iYXNoIC1j
ICJjZCAuLi8uLjsgLi9tb3ZlLWpzLWhlYWRlcnMuc2giPC9jb21tYW5kPgorICAgICAgICAgIHBy
b3RlY3Qgd2l0aCBhIGludGVybmFsIHRvdWNoZWQgZmlsZSBvdGhlcndpc2UgCisgICAgICAgICAg
bW92ZS1qcy1oZWFkZXJzIGNhdXNlcyByZWJ1aWxkCisgICAgICAgICAgaXMtcGhvbnkgaXMgbm90
IHdvcmtpbmcKKyAgICAgICAgICBpZiB5b3UgY2hhbmdlIGEgaWRsIGZpbGUgeW91IHdpbGwgaGF2
ZSB0byBtYW51YWxseQorICAgICAgICAgIHJ1biB0aGlzIHJ1bGUgYWZ0ZXIgZGVsZXRpbmcgLkRl
cml2ZWRTb3VyY2VzCisgICAgICAtLT4KICAgICAgICAgPGNvbW1hbmQ+Ci0JCWJhc2ggLWMgImNk
IC4uLy4uO1wKKwkJYmFzaCAtYyAiXAorICAgICAgICAgIGNkIC4uLy4uO1wKKyAgICAgICAgICBp
ZiBbICEgLWUgUHJvamVjdHMvZ2RrLy5EZXJpdmVkU291cmNlcyBdIDtcCisgICAgICAgICAgdGhl
biBcCisgICAgICAgICAgLi9tb3ZlLWpzLWhlYWRlcnMuc2g7IFwKKyAgICAgICAgICB0b3VjaCBQ
cm9qZWN0cy9nZGsvLkRlcml2ZWRTb3VyY2VzO1wKKyAgICAgICAgICBmaTsgXAorICAgICAgICAg
IGV4cG9ydCBQTEFURk9STT1HREtcCiAJCWV4cG9ydCBGRUFUVVJFX0RFRklORVM9JChGRUFUVVJF
X0RFRklORVMpO1wKLQkJLi9tYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoICQoRU5DT0RJTkdTX0ZJ
TEUpIgorCQkuL21ha2UtZ2VuZXJhdGVkLXNvdXJjZXMuc2ggJChFTkNPRElOR1NfRklMRSk7Igog
CQk8L2NvbW1hbmQ+Ci0gICAgICAgIDxjb21tYW5kPmJhc2ggLWMgInRvdWNoIC5EZXJpdmVkU291
cmNlcyI8L2NvbW1hbmQ+CiAgICA8L2FjdGlvbj4KIAotICAgIDxkbGwgaWQ9IndlYmNvcmUtZ2Rr
IiB0ZW1wbGF0ZT0id2ViY29yZV9iYXNlLGZyZWV0eXBlLGd0ayxjdXJsLGNhaXJvLHNxbGl0ZTMi
PiAgICAgICAgCisgICAgPGRsbCBpZD0id2ViY29yZS1nZGsiIHRlbXBsYXRlPSJ3ZWJjb3JlX2Jh
c2UsanNjb3JlLGZyZWV0eXBlLGdkayxjdXJsLGNhaXJvLHNxbGl0ZTMiPiAgICAgICAgCiAJPCEt
LSBGSVhNRTogY3JlYXRlIGEgZGVidWcgb3B0aW9uIGFuZCBzZXQgdGhlc2UgYWNjb3JkaW5nbHkg
LS0+CiAJPCEtLSBjaGVjayBmb3IgdW5kZWZpbmVkIHN5bWJvbHMgZm9yIGRlYnVnZ2luZyByZWFz
b25zIC0tPgogCTwhLS0KIAk8bGRmbGFncz5XLHVuZGVmaW5lZDwvbGRmbGFncz4KIAktLT4KIAot
CQk8cHJlLWJ1aWxkLXRhcmdldD4uRGVyaXZlZFNvdXJjZXM8L3ByZS1idWlsZC10YXJnZXQ+CisJ
ICAgPHByZS1idWlsZC10YXJnZXQ+LkRlcml2ZWRTb3VyY2VzPC9wcmUtYnVpbGQtdGFyZ2V0Pgog
ICAgICAgICA8ZGlybmFtZT4uPC9kaXJuYW1lPgogICAgICAgICA8cGljPm9uPC9waWM+CiAgICAg
ICAgIDx0aHJlYWRpbmc+bXVsdGk8L3RocmVhZGluZz4KQEAgLTUyLDM1ICs2NCw0MiBAQAogICAg
ICAgICA8Y3h4LWV4Y2VwdGlvbnM+b2ZmPC9jeHgtZXhjZXB0aW9ucz4KICAgICAgICAgPGRlYnVn
LWluZm8+b248L2RlYnVnLWluZm8+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9y
bS9nZGs8L2luY2x1ZGU+CisgICAgCTxkZWZpbmU+X0dOVV9TT1VSQ0U8L2RlZmluZT4KICAgICAJ
PGRlZmluZT5CVUlMRElOR19HREtfXzwvZGVmaW5lPgogICAgIAk8ZGVmaW5lPkJVSUxESU5HX0NB
SVJPX188L2RlZmluZT4KLQkJPGluY2x1ZGU+cGxhdGZvcm0vZ2RrPC9pbmNsdWRlPgotCQk8aW5j
bHVkZT5wbGF0Zm9ybS9jYWlybzwvaW5jbHVkZT4KKwkJPGluY2x1ZGU+JChTUkNESVIpL3BsYXRm
b3JtL2dkazwvaW5jbHVkZT4KKwkJPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2NhaXJvPC9p
bmNsdWRlPgogCSAgICA8aW5jbHVkZT4kKFNSQ0RJUikva2NhbnZhcy9kZXZpY2UvY2Fpcm88L2lu
Y2x1ZGU+CiAgICAgCTxkZWZpbmU+WFBBVEhfU1VQUE9SVDwvZGVmaW5lPgorICAgIAk8ZGVmaW5l
PlNWR19TVVBQT1JUPC9kZWZpbmU+CiAgICAgICAgIDwhLS0gZ2RrIGJ1aWxkIGJyb2tlbiB3aXRo
IHdpdGhvdXQgTkRFQlVHIGRlZmluZWQgLS0+CisgICAgIDwhLS0KICAgICAJPGRlZmluZT5OREVC
VUc8L2RlZmluZT4KKyAgICAgLS0+CisKICAKICAgICAgICAgPHNvdXJjZXM+CQkKLSAgICAgICAg
ICBwbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKLSAgICAgICAgICBwbGF0
Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2NhaXJvL0ltYWdl
U291cmNlQ2Fpcm8uY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0Jyb3dzZXJFeHRlbnNpb25H
ZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0Nvb2tpZUphckdkay5jcHAKICAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250
Q2FjaGVHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcAogICAg
ICAgICAgIHBsYXRmb3JtL2dkay9Gb250R2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9G
b250UGxhdGZvcm1EYXRhR2RrLmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9GaWxlQ2hvb3Nl
ckdkay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwCiAgICAgICAgICAg
cGxhdGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNwcAotICAgICAgICAgICBwbGF0Zm9ybS9nZGsvSW1h
Z2VHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ljb25HZGsuY3BwCisgICAgICAgICAg
cGxhdGZvcm0vZ2RrL0ltYWdlR2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9LZXlFdmVu
dEdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvTG9hZGVyRnVuY3Rpb25zR2RrLmNwcAog
ICAgICAgICAgIHBsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNwcAogICAgICAgICAgIHBsYXRm
b3JtL2dkay9QYWdlR2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9SZXNvdXJjZUxvYWRl
ck1hbmFnZXIuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAog
ICAgICAgICAgIHBsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsuY3BwCiAgICAgICAgICAg
cGxhdGZvcm0vZ2RrL1NjcmVlbkdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvUGxhdGZv
cm1TY3JvbGxCYXJHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsu
Y3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1NoYXJlZFRpbWVyTGludXguY3BwCiAgICAgICAg
ICAgcGxhdGZvcm0vZ2RrL1N5c3RlbVRpbWVMaW51eC5jcHAKQEAgLTg4LDYgKzEwNywxMCBAQAog
ICAgICAgICAgIHBsYXRmb3JtL2dkay9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCiAgICAgICAgICAg
cGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1dp
ZGdldEdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAK
KyAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAorICAgICAgICAgICQoV0VCQ09S
RV9CQVNFX1NPVVJDRVMpCisgICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfQ0FJUk9fQklORElO
R1MpCiAJCTwvc291cmNlcz4KIAogCQk8Y2xlYW4tZmlsZXM+CkBAIC05OCw1ICsxMjEsNDcgQEAK
IAkJPC9jbGVhbi1maWxlcz4KIAkJPCEtLUhBQ0sgYmxvY2sgZGVwZW5kZW5jaWVzIG9uIHRoZSBw
aG9ueSB0YXJnZXQgLS0+CiAgICAgPC9kbGw+CisKKyAgICA8ZGxsIGlkPSJ3ZWJjb3JlLXN2ZyIg
dGVtcGxhdGU9IndlYmNvcmVfYmFzZSxmcmVldHlwZSxnZGssY3VybCxjYWlybyxzcWxpdGUzIj4g
ICAgICAgIAorCTwhLS0KKwk8bGRmbGFncz5XLHVuZGVmaW5lZDwvbGRmbGFncz4KKwktLT4KKyAg
ICAgPGRpcm5hbWU+LjwvZGlybmFtZT4KKyAgICAgPHBpYz5vbjwvcGljPgorICAgICA8dGhyZWFk
aW5nPm11bHRpPC90aHJlYWRpbmc+CisgICAgIDx3YXJuaW5ncz5ubzwvd2FybmluZ3M+CisJIDxj
eHhmbGFncz4tdzwvY3h4ZmxhZ3M+CisgICAgIDxjeHgtcnR0aT5vZmY8L2N4eC1ydHRpPgorICAg
ICA8Y3h4LWV4Y2VwdGlvbnM+b2ZmPC9jeHgtZXhjZXB0aW9ucz4KKworICAgICA8aW5jbHVkZT4k
KFNSQ0RJUikvLi4vSmF2YVNjcmlwdENvcmU8L2luY2x1ZGU+CisgICAgIDxpbmNsdWRlPiQoU1JD
RElSKS9wbGF0Zm9ybS9nZGs8L2luY2x1ZGU+CisgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0
Zm9ybS9jYWlybzwvaW5jbHVkZT4KKwk8Y2ZsYWdzPi13PC9jZmxhZ3M+CisgICAgCTxkZWZpbmU+
QlVJTERJTkdfR0RLX188L2RlZmluZT4KKyAgICAJPGRlZmluZT5CVUlMRElOR19DQUlST19fPC9k
ZWZpbmU+CisJPGluY2x1ZGU+cGxhdGZvcm0vZ2RrPC9pbmNsdWRlPgorCTxpbmNsdWRlPnBsYXRm
b3JtL2NhaXJvPC9pbmNsdWRlPgorCTxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2RldmljZS9j
YWlybzwvaW5jbHVkZT4KKyAgICAJPGRlZmluZT5YUEFUSF9TVVBQT1JUPC9kZWZpbmU+CisgICAg
CTxkZWZpbmU+U1ZHX1NVUFBPUlQ8L2RlZmluZT4KKyAgICAgPCEtLSBnZGsgYnVpbGQgYnJva2Vu
IHdpdGggd2l0aG91dCBOREVCVUcgZGVmaW5lZCAtLT4KKyAgICAgPCEtLQorICAgIAk8ZGVmaW5l
Pk5ERUJVRzwvZGVmaW5lPgorICAgICAtLT4KKyAgICAgPHNvdXJjZXM+CQkKKyAgICAgICAgICBr
Y2FudmFzL2RldmljZS9jYWlyby9LQ2FudmFzQ2xpcHBlckNhaXJvLmNwcAorICAgICAgICAgIGtj
YW52YXMvZGV2aWNlL2NhaXJvL0tDYW52YXNJbWFnZUNhaXJvLmNwcAorICAgICAgICAgIGtjYW52
YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdEZXZpY2VDYWlyby5jcHAKKyAgICAgICAgICBrY2Fu
dmFzL2RldmljZS9jYWlyby9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAor
ICAgICAgICAgIGtjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRl
cm5DYWlyby5jcHAKKyAgICAgICAgICBrY2FudmFzL2RldmljZS9jYWlyby9LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJTb2xpZENhaXJvLmNwcAorICAgICAgICAgIGtjYW52YXMvZGV2aWNlL2NhaXJvL1Jl
bmRlclBhdGhDYWlyby5jcHAKKwkJJChXRUJDT1JFX1NPVVJDRVNfS0NBTlZBUykKKwkJJChXRUJD
T1JFX1NPVVJDRVNfS1NWRzIpCisJIAkkKFdFQkNPUkVfU09VUkNFU19TVkdfREVSSVZFRFNPVVJD
RVMpCisgICAJPC9zb3VyY2VzPgorICAgPC9kbGw+CisKIDwvbWFrZWZpbGU+CiAKSW5kZXg6IFdl
YkNvcmUvUHJvamVjdHMvd3gvd2ViY29yZS13eC5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Q
cm9qZWN0cy93eC93ZWJjb3JlLXd4LmJrbAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL1By
b2plY3RzL3d4L3dlYmNvcmUtd3guYmtsCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsMTMg
QEAKICAgICAgICAgPGNvbW1hbmQ+Y2QgJChTUkNESVIpO2Jhc2ggbW92ZS1qcy1oZWFkZXJzLnNo
OyBiYXNoIG1ha2UtZ2VuZXJhdGVkLXNvdXJjZXMuc2ggcGxhdGZvcm0vd3gvd3gtZW5jb2Rpbmdz
LnR4dDtjZCBQcm9qZWN0cy93eDwvY29tbWFuZD4KICAgICA8L2FjdGlvbj4KICAgICAgIAotICAg
IDxsaWIgaWQ9IndlYmNvcmUtd3giIHRlbXBsYXRlPSJ3ZWJjb3JlX2Jhc2UiPgorICAgIDxsaWIg
aWQ9IndlYmNvcmUtd3giIHRlbXBsYXRlPSJ3ZWJjb3JlX2Jhc2UsanNjb3JlIj4KICAgICAgICAg
PHByZS1idWlsZC10YXJnZXQ+RGVyaXZlZFNvdXJjZXM8L3ByZS1idWlsZC10YXJnZXQ+CiAgICAg
ICAgIDxkaXJuYW1lPi48L2Rpcm5hbWU+CiAgICAgICAgIDwhLS0gcGxhdGZvcm0vd3ggc291cmNl
cyBnbyBoZXJlIHdoZW4gdGhleSBleGlzdCEgLS0+CisgICAgICAgIDxzb3VyY2VzPgorICAgICAg
ICAgICQoV0VCQ09SRV9CQVNFX1NPVVJDRVMpCisgICAgICAgIDwvc291cmNlcz4KICAgICA8L2xp
Yj4KIAogPC9tYWtlZmlsZT4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAxNzA4MikKKysr
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAy
LDEzNSBAQAogCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL1hQYXRoR3JhbW1hci5jcHAKIAogCTwv
c2V0PgorCisJPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1NWR19ERVJJVkVE
U09VUkNFUyI+CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU1ZHRWxlbWVudEZhY3RvcnkuY3Bw
CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU1ZHTmFtZXMuY3BwCisKKyAgICAgICAgICA8IS0t
IGluY2x1ZGVkIHNvdXJjZXMKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BvaW50VGFi
bGUuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdSZWN0VGFibGUuY3BwCisgICAg
ICAgICAgLS0+CisKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5nbGUuY3BwCisJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHQW5pbWF0ZWRBbmdsZS5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR0FuaW1hdGVkQm9vbGVhbi5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0Fu
aW1hdGVkRW51bWVyYXRpb24uY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmlt
YXRlZEludGVnZXIuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZExl
bmd0aC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkTGVuZ3RoTGlz
dC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkTnVtYmVyLmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRQb2ludHMuY3BwCisJCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZFJlY3QuY3BwCisJCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZFN0cmluZy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0FuaW1hdGVFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdBbmltYXRpb25FbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
Q2lyY2xlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0NsaXBQYXRo
RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0NvbG9yLmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1l
bnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdDdXJzb3JFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRGVmc0VsZW1lbnQuY3BwCisJCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNTVkdEZXNjRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0RvY3VtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRWxl
bWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0VsbGlwc2VFbGVtZW50LmNw
cAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNw
cAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNw
cAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUZ1bmNBRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU1NWR0ZFRnVuY0JFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHRkVGdW5jR0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdGRUZ1bmNSRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZF
SW1hZ2VFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVNZXJnZUVs
ZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRU1lcmdlTm9kZUVsZW1l
bnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRU9mZnNldEVsZW1lbnQuY3Bw
CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAK
KwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFVGlsZUVsZW1lbnQuY3BwCisJCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHRmlsdGVyRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHR0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdH
cmFkaWVudEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdJbWFnZUVs
ZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdMZW5ndGguY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdMZW5ndGhMaXN0LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHTGluZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdNYXJrZXJFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHTWFz
a0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdNYXRyaXguY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdNZXRhZGF0YUVsZW1lbnQuY3BwCisJCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdOdW1iZXJMaXN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHUGFpbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRo
RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdBcmNBYnMu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQXJjUmVsLmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWcuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMuY3BwCisJCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLmNwcAorCQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoQWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNTbW9vdGhSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQ
YXRoU2VnTGluZXRvQWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxBYnMuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQ
YXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR1BhdGhTZWdMaW5ldG9SZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxBYnMuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
VkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdQYXRoU2VnTGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhT
ZWdNb3ZldG9BYnMuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnTW92
ZXRvUmVsLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0dGVybkVsZW1lbnQu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQb2ludExpc3QuY3BwCisJCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQb2x5Z29uRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNTVkdSZWN0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1Jl
bmRlcmluZ0ludGVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1NjcmlwdEVs
ZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTZXRFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHU3RvcEVsZW1lbnQuY3BwCisJCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNTVkdTdHJpbmdMaXN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHU3R5bGVFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
U1ZHRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1N3aXRjaEVsZW1l
bnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTeW1ib2xFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHVGV4dEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAorCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHVGl0bGVFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHVHJhbnNmb3JtLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHVHJh
bnNmb3JtTGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1RSZWZFbGVtZW50
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHVFNwYW5FbGVtZW50LmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHVW5pdFR5cGVzLmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHVXNlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR1ZpZXdFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHWm9vbUV2
ZW50LmNwcAorCisJPC9zZXQ+CisKIAk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJD
RVNfS0hUTUwiPgogCQkKIApAQCAtMTY3LDkgKzI5NiwxMiBAQAogCQlwbGF0Zm9ybS9JbnRSZWN0
LmNwcAogCQlwbGF0Zm9ybS9LVVJMLmNwcAogCQlwbGF0Zm9ybS9Mb2dnaW5nLmNwcAorCQlwbGF0
Zm9ybS9QYXRoLmNwcAogCQlwbGF0Zm9ybS9QZW4uY3BwCisJCXBsYXRmb3JtL1BvcHVwTWVudS5j
cHAKIAkJcGxhdGZvcm0vUmVndWxhckV4cHJlc3Npb24uY3BwCiAJCXBsYXRmb3JtL1NlZ21lbnRl
ZFN0cmluZy5jcHAKKwkJcGxhdGZvcm0vU2Nyb2xsQmFyLmNwcAogCQlwbGF0Zm9ybS9TdHJlYW1p
bmdUZXh0RGVjb2Rlci5jcHAKIAkJcGxhdGZvcm0vU3RyZWFtaW5nVGV4dERlY29kZXJJQ1UuY3Bw
CiAJCXBsYXRmb3JtL1N0cmluZy5jcHAKQEAgLTMwNSwxMSArNDM3LDEzIEBACiAJCXBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuY3BwCiAKIAk8L3NldD4KLQk8c2V0
IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfQ0FJUk8iPgorCTxzZXQgYXBwZW5kPSIx
IiB2YXI9IldFQkNPUkVfU09VUkNFU19DQUlST19CSU5ESU5HUyI+CiAJCQorCQlwbGF0Zm9ybS9j
YWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5jcHAKIAkJcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCiAJCXBsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCiAJCXBsYXRm
b3JtL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwCisJCXBsYXRmb3JtL2NhaXJvL1BhdGhDYWly
by5jcHAKIAogCTwvc2V0PgogCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19Q
SVhNQU4iPgpAQCAtNDU5LDcgKzU5Myw2IEBACiAJCXJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CiAJCXJlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyUGFydE9iamVj
dC5jcHAKLQkJcmVuZGVyaW5nL1JlbmRlclBvcHVwTWVudS5jcHAKIAkJcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcAogCQlyZW5kZXJpbmcvRGVwcmVjYXRlZFJlbmRlclNlbGVjdC5jcHAKIAkJ
cmVuZGVyaW5nL0RlcHJlY2F0ZWRTbGlkZXIuY3BwCkBAIC01NTcsMTEgKzY5MCwxMiBAQAogCTwv
c2V0PgogCiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0lDT04iPgotCQlp
Y29uL0ljb25EYXRhYmFzZS5jcHAKLQkJaWNvbi9JY29uTG9hZGVyLmNwcAotCQlpY29uL1NRTERh
dGFiYXNlLmNwcAotCQlpY29uL1NRTFN0YXRlbWVudC5jcHAKLQkJaWNvbi9TaXRlSWNvbi5jcHAK
KwkJbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAorCQlsb2FkZXIvaWNvbi9JY29uRGF0YUNh
Y2hlLmNwcAorCQlsb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAorCQlsb2FkZXIvaWNvbi9TUUxE
YXRhYmFzZS5jcHAKKwkJbG9hZGVyL2ljb24vU1FMU3RhdGVtZW50LmNwcAorCQlsb2FkZXIvaWNv
bi9TUUxUcmFuc2FjdGlvbi5jcHAKIAk8L3NldD4KIAogCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldF
QkNPUkVfU09VUkNFU19CUklER0UiPgpAQCAtNzMwLDQgKzg2NCwxNzAgQEAKIAogCTwvc2V0Pgog
CisJPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0tDQU5WQVMiPgorCisJCWtj
YW52YXMvS0NhbnZhc0NsaXBwZXIuY3BwCisJCWtjYW52YXMvS0NhbnZhc0NyZWF0b3IuY3BwCisJ
CWtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCisJCWtjYW52YXMvS0NhbnZhc01hcmtlci5jcHAK
KwkJa2NhbnZhcy9LQ2FudmFzTWFza2VyLmNwcAorCQlrY2FudmFzL0tDYW52YXNSZXNvdXJjZS5j
cHAKKwkJa2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAorCQlrY2FudmFzL1JlbmRlckZvcmVp
Z25PYmplY3QuY3BwCisJCWtjYW52YXMvUmVuZGVyUGF0aC5jcHAKKwkJa2NhbnZhcy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCisJCWtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCisJCWtjYW52YXMv
UmVuZGVyU1ZHSW5saW5lLmNwcAorCSAJa2NhbnZhcy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAor
CQlrY2FudmFzL1JlbmRlclNWR1RleHQuY3BwCisJCWtjYW52YXMvUmVuZGVyU1ZHVFNwYW4uY3Bw
CisJCWtjYW52YXMvU1ZHSW5saW5lRmxvd0JveC5jcHAKKwkJa2NhbnZhcy9TVkdSb290SW5saW5l
Qm94LmNwcAorCQlrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmNwcAorCQlrY2FudmFz
L2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuY3BwCisJCWtjYW52YXMvZGV2aWNlL0tSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmNwcAorCQlrY2FudmFzL2RldmljZS9LUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcAorCQlrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZC5jcHAKKwkJa2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIu
Y3BwCisKKwk8L3NldD4KKworCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19L
U1ZHMiI+CisKKworCQlrc3ZnMi9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRXcmFwcGVyRmFjdG9y
eS5jcHAKKwkJa3N2ZzIvYmluZGluZ3MvanMvSlNTVkdOdW1iZXIuY3BwCisJCWtzdmcyL2JpbmRp
bmdzL2pzL0pTU1ZHUG9pbnQuY3BwCisJCWtzdmcyL2JpbmRpbmdzL2pzL0pTU1ZHUmVjdC5jcHAK
KwkJa3N2ZzIvY3NzL1NWR0NTU1BhcnNlci5jcHAKKwkJa3N2ZzIvY3NzL1NWR0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCisJCWtzdmcyL2Nzcy9TVkdSZW5kZXJTdHlsZS5jcHAKKwkJa3N2ZzIvY3NzL1NW
R1JlbmRlclN0eWxlRGVmcy5jcHAKKyAgICAgICAgICA8IS0tCisJCWtzdmcyL2VjbWEvR2xvYmFs
T2JqZWN0LmNwcAorICAgICAgICAgIC0tPgorCQlrc3ZnMi9ldmVudHMvSlNTVkdMYXp5RXZlbnRM
aXN0ZW5lci5jcHAKKwkJa3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5jcHAKKwkJa3N2ZzIvbWlz
Yy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCisJCWtzdmcyL21pc2MvS1NWR1RpbWVTY2hlZHVs
ZXIuY3BwCisJCWtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAorCQlrc3ZnMi9t
aXNjL1NWR0ltYWdlTG9hZGVyLmNwcAorCQlrc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCisJCWtz
dmcyL3N2Zy9TVkdBbmdsZS5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQu
Y3BwCisJCWtzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmNwcAorCQlrc3ZnMi9zdmcvU1ZH
QW5pbWF0ZWRQb2ludHMuY3BwCisJCWtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCisJ
CWtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdDb2xvci5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcAor
CQlrc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0RlZnNFbGVt
ZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRGVzY0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdE
b2N1bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0RPTUltcGxlbWVudGF0aW9uLmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHRWxlbWVudC5jcHAKKyAgICAgICAgICA8IS0tCisJCWtzdmcyL3N2Zy9TVkdFbGVt
ZW50SW5zdGFuY2UuY3BwCisJCWtzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmNwcAor
ICAgICAgICAgIC0tPgorCQlrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisJCWtzdmcy
L3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorCQlrc3ZnMi9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAorCQlrc3ZnMi9z
dmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUZ1bmNBRWxlbWVudC5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFRnVuY0JFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVG
dW5jR0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUZ1bmNSRWxlbWVudC5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCisJCWtzdmcy
L3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3Zn
L1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAor
CQlrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAorCQlrc3ZnMi9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1l
bnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0dyYWRp
ZW50RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0hlbHBlci5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R0ltYWdlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0xhbmdTcGFjZS5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR0xlbmd0aC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0xlbmd0aExpc3QuY3BwCisJCWtzdmcy
L3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdMaW5lRWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKKwkJa3N2ZzIvc3ZnL1NWR01h
cmtlckVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR01hdHJpeC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR01ldGFkYXRhRWxlbWVudC5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR051bWJlckxpc3QuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYWludC5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvc3ZncGF0aHBhcnNlci5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdBcmMuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2Vn
Q2xvc2VQYXRoLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZy5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3Bw
CisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG8uY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZ01v
dmV0by5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcv
U1ZHUG9pbnRMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCisJCWtzdmcy
L3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVu
dC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCisJCWtzdmcyL3N2
Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVu
dC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdT
ZXRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2
Zy9TVkdTdHJpbmdMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3R5bGFibGUuY3BwCisJCWtzdmcy
L3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxl
RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNw
cAorCQlrc3ZnMi9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9T
VkdTeW1ib2xFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVGVzdHMuY3BwCisJCWtzdmcyL3N2
Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2
Zy9TVkdUaXRsZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAor
CQlrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmNwcAorCQlrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtTGlz
dC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVFNw
YW5FbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAorCQlrc3ZnMi9z
dmcvU1ZHVXNlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAorCQlr
c3ZnMi9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAKKworCTwvc2V0PgorCiA8L21ha2VmaWxlPgpJbmRl
eDogV2ViQ29yZS93ZWJjb3JlLWJhc2UuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2ViY29y
ZS1iYXNlLmJrbAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3dlYmNvcmUtYmFzZS5ia2wJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxMSBAQAogICAgIDxpbmNsdWRlIGZpbGU9Ildl
YkNvcmVTb3VyY2VzLmJrbCIvPgogICAgIAogCTxzZXQgdmFyPSJXRUJDT1JFX0JBU0VfU09VUkNF
UyI+CQotCQkkKFdFQkNPUkVfU09VUkNFU19ERVJJVkVEU09VUkNFUykKIAkJJChXRUJDT1JFX1NP
VVJDRVNfS0hUTUwpCiAJCSQoV0VCQ09SRV9TT1VSQ0VTX01JU0MpCiAJCSQoV0VCQ09SRV9TT1VS
Q0VTX1BBR0UpCiAJCSQoV0VCQ09SRV9TT1VSQ0VTX0xPQURFUikKKwkJJChXRUJDT1JFX1NPVVJD
RVNfSUNPTikKIAkJJChXRUJDT1JFX1NPVVJDRVNfUExBVEZPUk0pCiAJCSQoV0VCQ09SRV9TT1VS
Q0VTX0lNQUdFLURFQ09ERVJTKQogCQkkKFdFQkNPUkVfU09VUkNFU19CTVApCkBAIC02Miw2ICs2
Miw3IEBACiAJCSQoV0VCQ09SRV9TT1VSQ0VTX0hUTUwpCiAJCSQoV0VCQ09SRV9TT1VSQ0VTX0JJ
TkRJTkdTKQogCQkkKFdFQkNPUkVfU09VUkNFU19KUykKKwkJJChXRUJDT1JFX1NPVVJDRVNfREVS
SVZFRFNPVVJDRVMpCiAJPC9zZXQ+CiAKICAgICA8c2V0IHZhcj0iQlVJTERESVIiPm9iai0kKEZP
Uk1BVCk8L3NldD4KQEAgLTcwLDEyICs3MSwxMiBAQAogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJ
UikvcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4k
KFNSQ0RJUikvcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYzwvaW5jbHVkZT4KICAgICAgICAgPHNv
dXJjZXM+Ci0gICAgICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19DQUlSTykgCi0JCSAgICAkKFdF
QkNPUkVfU09VUkNFU19QSVhNQU4pIAorCQkJJChXRUJDT1JFX1NPVVJDRVNfQ0FJUk8pIAorCQkJ
JChXRUJDT1JFX1NPVVJDRVNfUElYTUFOKSAKICAgICAgICAgPC9zb3VyY2VzPgogICAgIDwvdGVt
cGxhdGU+CiAgICAgCi0gICAgPHRlbXBsYXRlIGlkPSJ3ZWJjb3JlX2Jhc2UiIHRlbXBsYXRlPSJ4
bWwyLGljb252LHhzbHQsaWN1LGpzY29yZSI+CisgICAgPHRlbXBsYXRlIGlkPSJ3ZWJjb3JlX2Jh
c2UiIHRlbXBsYXRlPSJ4bWwyLGljb252LHhzbHQsaWN1Ij4KICAgICAgICAgPGluY2x1ZGU+JChT
UkNESVIpLy48L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9pbmNsdWRlPC9p
bmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZTwvaW5jbHVkZT4KQEAgLTEwMSwxMCArMTAyLDE1IEBACiAgICAgICAgIDxpbmNsdWRlPiQoU1JD
RElSKS94bWw8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzPC9p
bmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikva2NhbnZhcy9kZXZpY2U8L2luY2x1
ZGU+Ci0gICAgICAgIAotICAgICAgICA8c291cmNlcz4kKFdFQkNPUkVfQkFTRV9TT1VSQ0VTKTwv
c291cmNlcz4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyPC9pbmNsdWRlPgorICAg
ICAgICA8aW5jbHVkZT4kKFNSQ0RJUikva3N2ZzIvYmluZGluZ3MvanM8L2luY2x1ZGU+CisgICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rc3ZnMi9jc3M8L2luY2x1ZGU+CisgICAgICAgIDxpbmNs
dWRlPiQoU1JDRElSKS9rc3ZnMi9lY21hPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNS
Q0RJUikva3N2ZzIvZXZlbnRzPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikv
a3N2ZzIvbWlzYzwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyL3N2
ZzwvaW5jbHVkZT4KKyAgIAogCi0KIDwhLS0gSEFDSyBBTEVSVCEgRklYIFRIRVNFIExBVEVSISEg
LS0+CiAgICAgICA8aWYgY29uZD0iUExBVEZPUk1fTUFDT1NYPT0nMSciPgogICAgICAgICA8aW5j
bHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vbWFjPC9pbmNsdWRlPiA8IS0tIHdoZW4gYnVpbGRpbmcg
b24gTWFjLCBFeHRyYUNGRW5jb2RpbmdzLmggaXMgbmVlZGVkIC0tPiAgICAgIApJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRUZW1wbGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVkVGVtcGxhdGUuaAkocmV2aXNpb24gMTcwODIpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFRlbXBsYXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAKICAgICBjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0OwogICAgIGNsYXNzIFN0
cmluZzsKICAgICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgU1ZHUG9pbnRMaXN0OwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFyZVR5cGU+CiAgICAgY2xhc3MgU1ZHQW5pbWF0ZWRUZW1w
bGF0ZSA6IHB1YmxpYyBTaGFyZWQ8U1ZHQW5pbWF0ZWRUZW1wbGF0ZTxCYXJlVHlwZT4gPgpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdNYXRyaXguY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR01hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVNWR01hdHJpeDo6U1ZHTWF0cml4KCkgOiBTaGFy
ZWQ8U1ZHTWF0cml4PigpCitTVkdNYXRyaXg6OlNWR01hdHJpeCgpIDogU2hhcmVkPFNWR01hdHJp
eD4oKSxtX21hdCgpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVk
UG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQb2lu
dHMuaAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBv
aW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMCArMjQsMTIgQEAKICNkZWZpbmUgS1NWR19T
VkdBbmltYXRlZFBvaW50c0ltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKKyNpbmNsdWRlICJT
aGFyZWQuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBTVkdQb2ludExpc3Q7
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRQb2ludHMKKyAgICBjbGFzcyBTVkdBbmltYXRlZFBvaW50
cyA6cHVibGljIFNoYXJlZDxTVkdBbmltYXRlZFBvaW50cz4KICAgICB7CiAgICAgcHVibGljOgog
ICAgICAgICBTVkdBbmltYXRlZFBvaW50cygpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Gb250
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Gb250RGF0YS5jcHAJKHJl
dmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Gb250RGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDggKzM1LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZvbnREYXRh
OjpGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQotICAgIDogbV9mb250KGYpCisg
ICAgOiBtX2FzY2VudCgwKQorICAgICwgbV9kZXNjZW50KDApCisgICAgLCBtX2xpbmVTcGFjaW5n
KDApCisgICAgLCBtX2xpbmVHYXAoMCkKKyAgICAsIG1feEhlaWdodCgwKQorICAgICwgbV9mb250
KGYpCiAgICAgLCBtX3RyZWF0QXNGaXhlZFBpdGNoKGZhbHNlKQorICAgICwgbV9zcGFjZUdseXBo
KDApCisgICAgLCBtX3NwYWNlV2lkdGgoMCkKKyAgICAsIG1fYWRqdXN0ZWRTcGFjZVdpZHRoKDAp
CiAgICAgLCBtX3NtYWxsQ2Fwc0ZvbnREYXRhKDApCiB7ICAgIAogICAgIHBsYXRmb3JtSW5pdCgp
OwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw2ICsyNTMsMTIgQEAKICAgICBwTW9kZSA9IFN0
cmljdDsKICAgICBoTW9kZSA9IFhIdG1sOwogICAgIG1fdGV4dENvbG9yID0gQ29sb3I6OmJsYWNr
OworICAgIG1fZG9jVHlwZSA9IDA7CisgICAgbV9mb2N1c05vZGUgPSAwOworICAgIG1faG92ZXJO
b2RlID0gMDsKKyAgICBtX2FjdGl2ZU5vZGUgPSAwOworICAgIG1fdGl0bGVFbGVtZW50ID0gMDsK
KyAgICBtX2RvY3VtZW50RWxlbWVudCA9IDA7CiAgICAgbV9saXN0ZW5lclR5cGVzID0gMDsKICAg
ICBtX2luRG9jdW1lbnQgPSB0cnVlOwogICAgIG1fc3R5bGVTZWxlY3RvckRpcnR5ID0gZmFsc2U7
CkBAIC0xMzQ4LDcgKzEzNTQsMTEgQEAKICAgICBpZiAoIW93bmVyRWxlbWVudCgpKQogICAgICAg
ICBwcmludGYoIlJlY2VpdmVkIGFsbCBkYXRhIGF0ICVkXG4iLCBlbGFwc2VkVGltZSgpKTsKICNl
bmRpZgotICAgIAorICAgIC8vbW92ZWQgZnJvbSBmcmFtZSBkZWxldGUgdGhlIGNvZGUgaW4gRnJh
bWUuY3BwIGlmIHlvdSBhcHBseQorICAgIGlmIChtX2RlY29kZXIgJiYgbV90b2tlbml6ZXIgJiYg
IW1fdG9rZW5pemVyLT53YW50c1Jhd0RhdGEoKSkgeworICAgICAgICBTdHJpbmcgZGVjb2RlZCA9
IG1fZGVjb2Rlci0+Zmx1c2goKTsKKyAgICAgICAgbV90b2tlbml6ZXItPndyaXRlKGRlY29kZWQs
dHJ1ZSk7CisgICAgfQogICAgIC8vIExldCB0aGUgdG9rZW5pemVyIGdvIHRocm91Z2ggYXMgbXVj
aCBkYXRhIGFzIGl0IGNhbi4gIFRoZXJlIHdpbGwgYmUgdGhyZWUgcG9zc2libGUgb3V0Y29tZXMg
YWZ0ZXIKICAgICAvLyBmaW5pc2goKSBpcyBjYWxsZWQ6CiAgICAgLy8gKDEpIEFsbCByZW1haW5p
bmcgZGF0YSBpcyBwYXJzZWQsIGRvY3VtZW50IGlzbid0IGxvYWRlZCB5ZXQKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5
IEBACiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3
aW5iYXNlLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5
cGVzLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11154</attachid>
            <date>2006-10-19 14:10:03 -0700</date>
            <delta_ts>2006-10-28 13:07:29 -0700</delta_ts>
            <desc>Extensive changes to gdk to compile and support svg compenents</desc>
            <filename>gdk.patch</filename>
            <type>text/plain</type>
            <size>226609</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkocmV2aXNpb24g
MTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw2ICs3NSw3IEBACiAKICNpZiBQTEFURk9STShHREspCiAgICAgICAg
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudCopOworICAgICAgICBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBldmVudCxib29sIHJlcGVhdCk7
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
UGFnZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGFnZUdkay5j
cHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGFnZUdkay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzEsNTEgKzMxLDQzIEBA
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAiRnJhbWVHZGsuaCIK
KyNpbmNsdWRlICJXaW5kb3dHZGsuaCIKIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsg
ZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklM
RV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBHZGtEcmF3YWJsZSogcm9vdFdpbmRvd0ZvckZyYW1lKEZy
YW1lKiBmcmFtZSkKK1BhZ2U6OlBhZ2UoKQorICAgICAgICA6IG1fZnJhbWVDb3VudCgwKQorICAg
ICAgICAsIG1fZHJhZ0NhcmV0Q29udHJvbGxlcigwLCB0cnVlKQogewotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZp
ZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgR2RrRHJh
d2FibGUqIGRyYXdhYmxlID0gZnJhbWVWaWV3LT5kcmF3YWJsZSgpOwotICAgIGlmICghZHJhd2Fi
bGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghR0RLX1dJTkRPVyhkcmF3YWJsZSkpCi0g
ICAgICAgIHJldHVybiBkcmF3YWJsZTsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5E
T1coZHJhd2FibGUpOwotICAgIHJldHVybiBnZGtfd2luZG93X2dldF90b3BsZXZlbCh3aW5kb3cp
OworICAgIGluaXQoKTsKIH0KIAogRmxvYXRSZWN0IFBhZ2U6OndpbmRvd1JlY3QoKSBjb25zdAog
ewotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IHJvb3RXaW5kb3dGb3JGcmFtZShtYWluRnJh
bWUoKSk7Ci0gICAgaWYgKCFkcmF3YWJsZSkKKyAgICBGcmFtZUdkayogZnJhbWUgPSBzdGF0aWNf
Y2FzdDxGcmFtZUdkayo+KG1haW5GcmFtZSgpKTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlcHRo
OworICAgIEludFJlY3QgcmVjdDsKIAotICAgIGlmICghR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkp
IHsKLSAgICAgICAgZ2RrX2RyYXdhYmxlX2dldF9zaXplKGRyYXdhYmxlLCAmd2lkdGgsICZoZWln
aHQpOwotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAg
IH0KLQotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAg
Z2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkod2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwg
JmRlcHRoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAg
IGlmIChmcmFtZS0+d2luZG93KCkpCisgICAgICAgIHJlY3QgPSBmcmFtZS0+d2luZG93KCktPmdl
b21ldHJ5KCk7CisgICAgZWxzZQorICAgICAgICByZWN0ID0gZnJhbWUtPnZpZXcoKS0+ZnJhbWVH
ZW9tZXRyeSgpOworICAgIHJldHVybiBGbG9hdFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgUGFnZTo6
c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgR2RrRHJhd2FibGUqIGRy
YXdhYmxlID0gcm9vdFdpbmRvd0ZvckZyYW1lKG1haW5GcmFtZSgpKTsKLSAgICBpZiAoIWRyYXdh
YmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKKyAgICBGcmFtZUdkayogZnJhbWUgPSBz
dGF0aWNfY2FzdDxGcmFtZUdkayo+KG1haW5GcmFtZSgpKTsKKyAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxl
KTsKLSAgICBnZGtfd2luZG93X21vdmVfcmVzaXplKHdpbmRvdywgKGludClyLngoKSwgKGludCly
LnkoKSwgKGludClyLndpZHRoKCksIChpbnQpci5oZWlnaHQoKSk7CisgICAgSW50UmVjdCByZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChyKTsKKyAgICBpZiAoZnJhbWUtPndpbmRvdygpKQorICAgICAg
ICBmcmFtZS0+d2luZG93KCktPnNldEdlb21ldHJ5KHJlY3QpOwogfQogCiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dkay9DdXJzb3JHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0N1cnNvckdkay5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjIsNyArMjIsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCkBAIC0zMiwxMCArMzIsMTIgQEAKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50
ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBf
X0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEN1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCi0gICAgOiBtX2lt
cGwob3RoZXIubV9pbXBsKQorICAgICAgICA6IG1faW1wbChvdGhlci5tX2ltcGwpCiB7CiAgICAg
aWYgKG1faW1wbCkKICAgICAgICAgZ2RrX2N1cnNvcl9yZWYobV9pbXBsKTsKQEAgLTU2LDcgKzU4
LDcgQEAKIH0KIAogQ3Vyc29yOjpDdXJzb3IoR2RrQ3Vyc29yKiBjKQotICAgIDogbV9pbXBsKGMp
CisgICAgICAgIDogbV9pbXBsKGMpCiB7CiAgICAgbV9pbXBsID0gYzsKICAgICBBU1NFUlQoYyk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaE1hcEdkay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3BwCShyZXZpc2lvbiAxNzA4MikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtOCwxMyArOCwxMyBAQAogICogYXJlIG1ldDoKICAqCiAgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgog
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ltYWdlR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9JbWFnZUdkay5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMSArMjAsMTIg
QEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogI2lmIFBMQVRGT1JNKENB
SVJPKQogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC0zMiwzMSArMzMsMzIgQEAKICNlcnJvciAiR0RL
IHBvcnQgcmVxdWlyZXMgUExBVEZPUk0oQ0FJUk8pIgogI2VuZGlmCiAKKyNkZWZpbmUgbm90SW1w
bGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVz
OiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hp
bGUoMCkKKwogLy8gVGhpcyBmdW5jdGlvbiBsb2FkcyByZXNvdXJjZXMgZnJvbSBXZWJLaXQKIFZl
Y3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QgY2hhciopOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICB2b2lkIEltYWdlOjppbml0UGxhdGZvcm1EYXRhKCkKLSAgICB7
Ci0gICAgfQordm9pZCBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgpCit7fQogCi0gICAgdm9pZCBJ
bWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCi0gICAgewotICAgIH0KK3ZvaWQgSW1hZ2U6
OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQore30KIAotICAgIEltYWdlKiBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciAqbmFtZSkKLSAgICB7Ci0gICAgICAgIFZlY3Rvcjxj
aGFyPiBhcnIgPSBsb2FkUmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7Ci0gICAgICAgIEltYWdlKiBp
bWcgPSBuZXcgSW1hZ2U7Ci0gICAgICAgIGltZy0+c2V0TmF0aXZlRGF0YSgmYXJyLCB0cnVlKTsK
LSAgICAgICAgcmV0dXJuIGltZzsKLSAgICB9CitJbWFnZSogSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgVmVjdG9yPGNoYXI+IGFyciA9IGxvYWRS
ZXNvdXJjZUludG9BcnJheShuYW1lKTsKKyAgICBJbWFnZSogaW1nID0gbmV3IEltYWdlOworICAg
IGltZy0+c2V0TmF0aXZlRGF0YSgmYXJyLCB0cnVlKTsKKyAgICByZXR1cm4gaW1nOworfQogCi0g
ICAgYm9vbCBJbWFnZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Citib29sIEltYWdlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlm
ICh0eXBlID09ICJpbWFnZS9qcGVnIiB8fCB0eXBlID09ICJpbWFnZS9wbmciKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL1dpZGdldFByaXZhdGVHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9XaWRnZXRQcml2YXRlR2RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9XaWRnZXRQcml2YXRlR2RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBXaWRnZXQ7CitjbGFzcyBOb2RlOworY2xhc3Mg
V2lkZ2V0Q2xpZW50OworY2xhc3MgUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBGb3JtRGF0YTsKK2Ns
YXNzIEZyYW1lVmlldzsKKworCitjbGFzcyBXaWRnZXRQcml2YXRlIDogUmVzb3VyY2VMb2FkZXJD
bGllbnQKK3sKKworcHVibGljOgorICAgIFdpZGdldFByaXZhdGUoV2lkZ2V0Kik7CisgICAgdmly
dHVhbCB+V2lkZ2V0UHJpdmF0ZSgpOworICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5h
bWUpCisgICAgeworICAgICAgICB0aGlzLT5tX25hbWUgPSBuYW1lOworICAgIH0KKyAgICBTdHJp
bmcgbmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9uYW1lOworICAgIH0KKyAgICB2b2lk
IGNyZWF0ZVZpZXcoS1VSTCB1cmwpOworICAgIGJvb2wgb3BlblVSTChjb25zdCBLVVJMJiB1cmwp
OworICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBGb3JtRGF0YSogcG9zdERhdGEpOworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZl
ZFJlZGlyZWN0KFJlc291cmNlTG9hZGVyKiwgY29uc3QgS1VSTCYpOworICAgIHZpcnR1YWwgdm9p
ZCByZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlTG9hZGVyKiwgUGxhdGZvcm1SZXNwb25zZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkRGF0YShSZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIq
LCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZEFsbERhdGEoUmVzb3VyY2VMb2FkZXIq
LFBsYXRmb3JtRGF0YSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wRG9jdW1lbnQo
KTsKKyNlbmRpZgorcHVibGljOgorICAgIFN0cmluZyBtX25hbWU7CisgICAgS1VSTCBtX3VybDsK
KyAgICBib29sIHZpc2libGU7CisgICAgYm9vbCBlbmFibGVkOworICAgIGJvb2wgc2VsZWN0ZWQ7
CisgICAgYm9vbCBoYXNGb2N1czsKKyAgICBJbnRSZWN0IGdlb21ldHJ5OworICAgIEZvbnQgZm9u
dDsKKyAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKKyAgICBXaWRnZXQqIG1fd2lkZ2V0OworICAg
IFdpZGdldCogbV9vd25lcjsKKyAgICBXaWRnZXQqIG1fcGFyZW50OworICAgIFJlZlB0cjxGcmFt
ZVZpZXc+IG1fdmlldzsKKyAgICBib29sIG1faGFzU2Nyb2xsYmFyczsKKyAgICBib29sIG1fYm91
bmQ7CisgICAgYm9vbCBtX2lzRXJyb3I7Cit9OworCit9CisvLyB2aW06IHRzPTQgc3c9NCBldAor
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Ccm93c2VyRXh0ZW5zaW9uR2RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQnJvd3NlckV4dGVuc2lvbkdkay5oCShyZXZp
c2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Jyb3dzZXJFeHRlbnNpb25HZGsu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIsNyArMjIsNyBAQAogICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEJyb3dzZXJFeHRlbnNpb25HZGtfSF8KQEAgLTM1
LDkgKzM1LDExIEBACiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lR2RrOwogCi1jbGFzcyBCcm93
c2VyRXh0ZW5zaW9uR2RrIDogcHVibGljIEJyb3dzZXJFeHRlbnNpb24geworY2xhc3MgQnJvd3Nl
ckV4dGVuc2lvbkdkayA6IHB1YmxpYyBCcm93c2VyRXh0ZW5zaW9uCit7CiBwdWJsaWM6CiAgICAg
QnJvd3NlckV4dGVuc2lvbkdkayhGcmFtZSopOworICAgIHZpcnR1YWwgfkJyb3dzZXJFeHRlbnNp
b25HZGsoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVOZXdXaW5kb3coY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYpOwogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVOZXdXaW5kb3coY29uc3QgRnJh
bWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdpbmRvd0FyZ3MmLCBGcmFtZSomKTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5oCShyZXZpc2lvbiAxNzA4
MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3ICsyMiw3IEBACiAgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKICNpZm5kZWYgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyX0hfCkBAIC0zMSwyNiAr
MzEsMzAgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8Y3VybC9jdXJsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVzb3Vy
Y2VMb2FkZXJNYW5hZ2VyIHsKKworY2xhc3MgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyCit7CiBwdWJs
aWM6CisgICAgc3RhdGljIGNoYXIqIGdldE1pbWVUeXBlKFN0cmluZyYpOwogICAgIHN0YXRpYyBS
ZXNvdXJjZUxvYWRlck1hbmFnZXIqIGdldCgpOworICAgIHZvaWQgaW5pdEpvYihSZXNvdXJjZUxv
YWRlciopOworICAgIFZlY3RvcjxjaGFyPiBydW5JbW1lZGlhdGVseShSZXNvdXJjZUxvYWRlciop
OwogICAgIHZvaWQgYWRkKFJlc291cmNlTG9hZGVyKik7CiAgICAgdm9pZCBjYW5jZWwoUmVzb3Vy
Y2VMb2FkZXIqKTsKIAotICAgIC8vIElmIHRydWUsIGRvbid0IG11bHRpcGxleCBkb3dubG9hZHM6
IGRvd25sb2FkIGNvbXBsZXRlbHkgb25lIGF0IGEgdGltZS4KLSAgICB2b2lkIHVzZVNpbXBsZVRy
YW5zZmVyKGJvb2wgdXNlU2ltcGxlKTsKLQogcHJpdmF0ZToKICAgICBSZXNvdXJjZUxvYWRlck1h
bmFnZXIoKTsKICAgICB2b2lkIGRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUxv
YWRlck1hbmFnZXI+Kik7CiAgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIqKTsKLQotICAg
IGJvb2wgbV91c2VTaW1wbGU7Ci0gICAgSGFzaFNldDxSZXNvdXJjZUxvYWRlcio+KiBqb2JzOwor
ICAgIHZvaWQgc2V0dXBQb3N0KFJlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBzZXR1cFB1dChS
ZXNvdXJjZUxvYWRlciopOworICAgIEhhc2hTZXQ8UmVzb3VyY2VMb2FkZXIqPiBqb2JzOworICAg
IEhhc2hTZXQ8UmVzb3VyY2VMb2FkZXIqPiBzaW1wbGVKb2JzOwogICAgIFRpbWVyPFJlc291cmNl
TG9hZGVyTWFuYWdlcj4gbV9kb3dubG9hZFRpbWVyOwogICAgIENVUkxNKiBjdXJsTXVsdGlIYW5k
bGU7IC8vIG5vdCBmcmVlZAogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNj
cm9sbEJhckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZv
cm1TY3JvbGxCYXJHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
UGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIldpZGdldFByaXZhdGVH
ZGsuaCIKKyNpbmNsdWRlICJGcmFtZUdkay5oIgorI2luY2x1ZGUgIlNjcm9sbEJhci5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiS1VS
TC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1
ZGUgIlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlIDxh
c3NlcnQuaD4KKworCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVy
ciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9f
LF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisKKwordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvL0ZJWE1FOiBoYWNrIHRpbGwgd2UgaGF2ZSBh
IHJlYWwgcHJpdmF0ZSBjb25maWcgIHBhZ2UgYnJvd3NlckNvbmZpZy54bWwKK3N0YXRpYyBTdHJp
bmcgaW1wbFVSTChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBpZiAo
b3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBTdHJpbmco
Ii9TY3JvbGxiYXIvU2Nyb2xsYmFyLnN2Zz92ZXJ0aWNhbCIpOworCisgICAgcmV0dXJuIFN0cmlu
ZygiL1Njcm9sbGJhci9TY3JvbGxiYXIuc3ZnP2hvcml6b250YWwiKTsKK30KKworCitzdGF0aWMg
dm9pZCBkb1Njcm9sbChjb25zdCBSZW5kZXJPYmplY3QqIHIsIGJvb2wgaXNIb3Jpem9udGFsLCBp
bnQgbXVsdGlwbGllcikKK3sKKyAgICAvLyBGSVhNRTogVGhlIHNjcm9sbGluZyBkb25lIGhlcmUg
c2hvdWxkIGJlIGRvbmUgaW4gdGhlIGRlZmF1bHQgaGFuZGxlcnMKKyAgICAvLyBvZiB0aGUgZWxl
bWVudHMgcmF0aGVyIHRoYW4gaGVyZSBpbiB0aGUgcGFydC4KKyAgICBpZiAoIXIpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vYnJva2VuIHNpbmNlIGl0IGNhbGxzIHNjcm9sbCBvbiBzY3JvbGxi
YXJzCisgICAgLy9hbmQgd2UgaGF2ZSBub25lIG5vdworICAgIC8vci0+c2Nyb2xsKGRpcmVjdGlv
biwgU2Nyb2xsQnlXaGVlbCwgbXVsdGlwbGllcik7CisgICAgaWYgKCFyLT5sYXllcigpKQorICAg
ICAgICByZXR1cm47CisgICAgaW50IHggPSByLT5sYXllcigpLT5zY3JvbGxYT2Zmc2V0KCk7Cisg
ICAgaW50IHkgPSByLT5sYXllcigpLT5zY3JvbGxZT2Zmc2V0KCk7CisgICAgaWYgKGlzSG9yaXpv
bnRhbCkKKyAgICAgICAgeCArPSBtdWx0aXBsaWVyOworICAgIGVsc2UKKyAgICAgICAgeSArPSBt
dWx0aXBsaWVyOworICAgIHItPmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KHgsIHksIHRydWUsIHRy
dWUpOworfQorCisKK1BsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxi
YXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbixTY3JvbGxiYXJDb250cm9sU2l6ZSBjc2l6
ZSkgOgorICAgICAgICBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbixjc2l6ZSksV2lkZ2V0
KCkKK3sKKyAgICBwcml2YXRlRGF0YSgpLT5tX2hhc1Njcm9sbGJhcnMgPSBmYWxzZTsKKyAgICBT
dHJpbmcgdXJsID0gRnJhbWVHZGs6Omluc3RhbGxMb2NhdGlvbigpOworICAgIFN0cmluZyBubSA9
IGltcGxVUkwob3JpZW50YXRpb24pOworICAgIHVybCArPSBubTsKKyAgICBwcml2YXRlRGF0YSgp
LT5jcmVhdGVWaWV3KEtVUkwodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSkpOworfQorCitQbGF0Zm9y
bVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKK3t9CisKK0ludFJlY3QgIFBsYXRmb3Jt
U2Nyb2xsYmFyOjpmcmFtZUdlb21ldHJ5KCkKK3sKKyAgICBJbnRSZWN0IHIgPSBXaWRnZXQ6OmZy
YW1lR2VvbWV0cnkoKTsKKyAgICBpZiAoci5pc0VtcHR5KCkpCisgICAgICAgIHIgPSBJbnRSZWN0
KDAsMCxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCksaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCgpKTsKKyAgICByZXR1cm4gcjsKK30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgp
IGNvbnN0Cit7CisgICAgaW50IHdpZHRoID0gV2lkZ2V0Ojp3aWR0aCgpOworICAgIGlmICh3aWR0
aCA9PSAwIHx8IG9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJl
dHVybiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7Ly9GSVhNRTogaGFjayBmb3Igbm93CisgICAg
cmV0dXJuIHdpZHRoOworCit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KCkgY29u
c3QKK3sKKyAgICBpbnQgaGVpZ2h0ID0gV2lkZ2V0OjpoZWlnaHQoKTsKKyAgICBpZiAoaGVpZ2h0
ID09IDAgfHwgb3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBy
ZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOy8vaGFjayBmb3Igbm93CisgICAgcmV0
dXJuIGhlaWdodDsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0RW5hYmxlZChib29s
IGVuYWJsZWQpCit7CisgICAgV2lkZ2V0OjpzZXRFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lk
IFBsYXRmb3JtU2Nyb2xsYmFyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgSW50
UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBXaWRnZXQ6OnBhaW50KGN0eCxkYW1hZ2VSZWN0KTsK
K30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmIChmcmFtZUdlb21ldHJ5KCkgPT0gcmVjdCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBGcmFtZVZpZXcqIHYgPSBmcmFtZVZpZXcoKTsK
KyAgICAvKgorICAgIGlmKHYpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHYtPmZyYW1lKCkt
PmRvY3VtZW50KCk7CisgICAgICAgIGlmKCFkb2MpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihkb2Mt
PmdldEVsZW1lbnRCeUlkKCJtYWluIikpOworICAgICAgICBpZighc3ZnKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBzdmctPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyLFN0
cmluZzo6bnVtYmVyKHJlY3Qud2lkdGgoKSkpOworICAgICAgICBzdmctPnNldEF0dHJpYnV0ZShT
VkdOYW1lczo6aGVpZ2h0QXR0cixTdHJpbmc6Om51bWJlcihyZWN0LmhlaWdodCgpKSk7CisgICAg
ICAgIHN2Zy0+d2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWUocmVjdC53aWR0aCgpKTsKKyAgICAg
ICAgc3ZnLT5oZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWUocmVjdC5oZWlnaHQoKSk7CisgICAg
fQorICAgICovCisgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOworfQorCit2b2lk
IFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9uKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3Bv
cnRpb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KKwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEBzcHN1LmVkdT4uCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyLDkzICsyMSwxMTIgQEAKICAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIK
LQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
S2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiRnJhbWVHZGsu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIldpZGdldFByaXZhdGVHZGsuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlR5cGlu
Z0NvbW1hbmQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJhc3NlcnQuaCIKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgor
I2luY2x1ZGUgImNhaXJvLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGdkay9n
ZGsuaD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJG
SVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BS
RVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCisjZGVmaW5lIElOQ1JFTUVOVCAyMAorCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vaGFjayB0byBz
aW11bGF0ZSBzY3JvbGwgYmFycwotY29uc3QgaW50IHNjcm9sbGJhclNpemUgPSAxMDsKLQotY2xh
c3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUKK2NsYXNzIFNjcm9sbFZpZXc6OlNjcm9s
bFZpZXdQcml2YXRlIDogcHVibGljIFNjcm9sbGJhckNsaWVudAogewogcHVibGljOgogICAgIFNj
cm9sbFZpZXdQcml2YXRlKCkKLSAgICAgICAgOiBoYXNTdGF0aWNCYWNrZ3JvdW5kKGZhbHNlKSwg
c3VwcHJlc3NTY3JvbGxiYXJzKGZhbHNlKQotICAgICAgICAsIHZTY3JvbGxiYXJNb2RlKFNjcm9s
bGJhckF1dG8pLCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQotICAgIHsgfQorICAgICAg
ICAgICAgOiBoYXNTdGF0aWNCYWNrZ3JvdW5kKGZhbHNlKQorICAgICAgICAgICAgLCBzdXBwcmVz
c1Njcm9sbGJhcnMoZmFsc2UpCisgICAgICAgICAgICAsIHZTY3JvbGxiYXJNb2RlKFNjcm9sbGJh
ckF1dG8pCisgICAgICAgICAgICAsIGhTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCisgICAg
ICAgICAgICAsIHZTY3JvbGxiYXIoMCkKKyAgICAgICAgICAgICwgaFNjcm9sbGJhcigwKQorICAg
ICAgICAgICAgLCB2aWV3KDApCisgICAge30KKyAgICB2aXJ0dWFsIH5TY3JvbGxWaWV3UHJpdmF0
ZSgpCisgICAge30KKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCisg
ICAge30KIAorICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIH0KKwogICAgIEludFNpemUgc2Nyb2xs
T2Zmc2V0OwogICAgIEludFNpemUgY29udGVudHNTaXplOwogICAgIGJvb2wgaGFzU3RhdGljQmFj
a2dyb3VuZDsKICAgICBib29sIHN1cHByZXNzU2Nyb2xsYmFyczsKICAgICBTY3JvbGxiYXJNb2Rl
IHZTY3JvbGxiYXJNb2RlOwogICAgIFNjcm9sbGJhck1vZGUgaFNjcm9sbGJhck1vZGU7Ci0gICAg
SW50UmVjdCB2aXNpYmxlQ29udGVudEFyZWE7Ci0gICAgSW50UmVjdCB2aWV3cG9ydEFyZWE7Ci0g
ICAgSW50UmVjdCBzY3JvbGxWaWV3QXJlYTsKKyAgICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+
IGhTY3JvbGxiYXI7CisgICAgUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiB2U2Nyb2xsYmFyOwor
ICAgIFNjcm9sbFZpZXcqIHZpZXc7CiB9OwogCi0KIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKQot
ICAgIDogbV9kYXRhKG5ldyBTY3JvbGxWaWV3UHJpdmF0ZSkKLXt9CisgICAgICAgIDogbV9kYXRh
KG5ldyBTY3JvbGxWaWV3UHJpdmF0ZSgpKQoreworICAgIG1fZGF0YS0+dmlldyA9IHRoaXM7Cit9
CiAKIFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwogfQog
Ci12b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwg
Ym9vbCBub3cpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHVwZGF0ZVJlY3QueCgpLCB1
cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpIH07
Ci0gICAgR2RrRHJhd2FibGUqIGdka2RyYXdhYmxlID0gV2lkZ2V0OjpkcmF3YWJsZSgpOwotICAg
IGlmIChHREtfSVNfV0lORE9XKGdka2RyYXdhYmxlKSkgewotICAgICAgICBHZGtXaW5kb3cqIHdp
bmRvdyA9IEdES19XSU5ET1coZ2RrZHJhd2FibGUpOwotICAgICAgICBnZGtfd2luZG93X2ludmFs
aWRhdGVfcmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKG5vdykKLSAgICAg
ICAgICAgIGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7Ci0gICAgfQot
fQotCiB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHVwZGF0
ZVJlY3QsIGJvb2wgbm93KQogewogICAgIEludFJlY3QgYWRqdXN0ZWREaXJ0eVJlY3QodXBkYXRl
UmVjdCk7CiAgICAgYWRqdXN0ZWREaXJ0eVJlY3QubW92ZSgtbV9kYXRhLT5zY3JvbGxPZmZzZXQp
OwotICAgIHVwZGF0ZVZpZXcoYWRqdXN0ZWREaXJ0eVJlY3QsIG5vdyk7CisgICAgcmVwYWludChh
ZGp1c3RlZERpcnR5UmVjdCxub3cpOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6dmlzaWJsZVdpZHRo
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT52aWV3cG9ydEFyZWEud2lkdGgoKTsKKyAg
ICBJbnRSZWN0IHIgPSBlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKTsKKyAg
ICByZXR1cm4gci53aWR0aCgpOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6dmlzaWJsZUhlaWdodCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+dmlld3BvcnRBcmVhLmhlaWdodCgpOworICAg
IEludFJlY3QgciA9IGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOworICAg
IHJldHVybiByLmhlaWdodCgpOwogfQogCi0vLyBSZWdpb24gb2YgdGhlIGNvbnRlbnQgY3VycmVu
dGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0IGluIHRoZSBjb250ZW50IHZpZXcncyBjb29yZGlu
YXRlIHN5c3RlbS4KIEZsb2F0UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoKSBj
b25zdAogewotICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdCA9IEZsb2F0UmVjdChtX2RhdGEtPnZp
ZXdwb3J0QXJlYSk7Ci0gICAgY29udGVudFJlY3QubW92ZShtX2RhdGEtPnNjcm9sbE9mZnNldCk7
Ci0gICAgcmV0dXJuIGNvbnRlbnRSZWN0OworICAgIEludFJlY3QgdmlzUmVjdCA9IEludFJlY3Qo
MCwwLHdpZHRoKCksaGVpZ2h0KCkpOworICAgIGlmIChtX2RhdGEtPnZTY3JvbGxiYXIpCisgICAg
ICAgIHZpc1JlY3Quc2V0V2lkdGgodmlzUmVjdC53aWR0aCgpIC0gbV9kYXRhLT52U2Nyb2xsYmFy
LT53aWR0aCgpKTsKKyAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKQorICAgICAgICB2aXNSZWN0
LnNldEhlaWdodCh2aXNSZWN0LmhlaWdodCgpIC0gbV9kYXRhLT5oU2Nyb2xsYmFyLT5oZWlnaHQo
KSk7CisgICAgdmlzUmVjdC5tb3ZlKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKKworICAgIHJldHVy
biBGbG9hdFJlY3QodmlzUmVjdCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0Q29udGVudHNQ
b3MoaW50IG5ld1gsIGludCBuZXdZKQpAQCAtMTE4LDkgKzEzNiw5IEBACiAgICAgc2Nyb2xsQnko
ZHgsIGR5KTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpyZXNpemVDb250ZW50cyhpbnQgdywgaW50
IGgpCit2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGludCB3LGludCBoKQogewotICAg
IEludFNpemUgbmV3U2l6ZSh3LCBoKTsKKyAgICBJbnRTaXplIG5ld1NpemUodyxoKTsKICAgICBp
ZiAobV9kYXRhLT5jb250ZW50c1NpemUgIT0gbmV3U2l6ZSkgewogICAgICAgICBtX2RhdGEtPmNv
bnRlbnRzU2l6ZSA9IG5ld1NpemU7CiAgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKQEAgLTE0
NywyMiArMTY1LDMzIEBACiAgICAgcmV0dXJuIG1fZGF0YS0+Y29udGVudHNTaXplLmhlaWdodCgp
OwogfQogCitJbnRQb2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFBv
aW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCByZXN1bHQgPSBwb2ludDsKKyAgICBJ
bnRQb2ludCBnbG9iYWwgPSBsb2NhdGlvbkluV2luZG93KCk7CisgICAgcmVzdWx0Lm1vdmUoZ2xv
YmFsLngoKSxnbG9iYWwueSgpKTsKKyAgICByZXR1cm4gcmVzdWx0ICsgc2Nyb2xsT2Zmc2V0KCk7
Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHJlc3VsdCA9IHBvaW50OworICAgIElu
dFBvaW50IGdsb2JhbCA9IGxvY2F0aW9uSW5XaW5kb3coKTsKKyAgICByZXN1bHQubW92ZSgtZ2xv
YmFsLngoKSwtZ2xvYmFsLnkoKSk7CisgICAgcmV0dXJuIHJlc3VsdCAtIHNjcm9sbE9mZnNldCgp
OworfQorCiBJbnRTaXplIFNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OwogfQogCi1JbnRTaXplIFNjcm9sbFZpZXc6Om1h
eGltdW1TY3JvbGwoKSBjb25zdAotewotICAgIEludFNpemUgZGVsdGEgPSBtX2RhdGEtPmNvbnRl
bnRzU2l6ZSAtIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OwotICAgIGRlbHRhLmNsYW1wTmVnYXRpdmVU
b1plcm8oKTsKLSAgICByZXR1cm4gZGVsdGE7CiAKLX0KIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xs
QnkoaW50IGR4LCBpbnQgZHkpCiB7CiAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQgPSBtX2RhdGEt
PnNjcm9sbE9mZnNldDsKLSAgICBJbnRTaXplIG1heFNjcm9sbCA9IG1heGltdW1TY3JvbGwoKTsK
KyAgICBJbnRTaXplIG1heFNjcm9sbCA9IG1fZGF0YS0+Y29udGVudHNTaXplIC0gSW50U2l6ZSh2
aXNpYmxlV2lkdGgoKSx2aXNpYmxlSGVpZ2h0KCkpOworICAgIG1heFNjcm9sbC5jbGFtcE5lZ2F0
aXZlVG9aZXJvKCk7CiAgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQg
KyBJbnRTaXplKGR4LCBkeSk7CiAgICAgbmV3U2Nyb2xsT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1pl
cm8oKTsKICAgICBuZXdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQuc2hydW5rVG8obWF4
U2Nyb2xsKTsKQEAgLTE3MCwyNyArMTk5LDIzIEBACiAgICAgaWYgKG5ld1Njcm9sbE9mZnNldCAh
PSBzY3JvbGxPZmZzZXQpIHsKICAgICAgICAgbV9kYXRhLT5zY3JvbGxPZmZzZXQgPSBuZXdTY3Jv
bGxPZmZzZXQ7CiAgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLSAgICAgICAgLy8gU2Nyb2xs
YmFyIHVwZGF0ZXMgY2FuIGZhaWwsIHNvIHdlIGNoZWNrIHRoZSBmaW5hbCBkZWx0YSBiZWZvcmUg
c2Nyb2xsaW5nCi0gICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBtX2RhdGEtPnNjcm9sbE9m
ZnNldCAtIHNjcm9sbE9mZnNldDsKLSAgICAgICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGlzRnJhbWVWaWV3KCkpIHsKLSAg
ICAgICAgICAgIEZyYW1lVmlldyogZiA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpOwot
ICAgICAgICAgICAgZi0+ZnJhbWUoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+c2Nyb2xsVG9PZmZz
ZXQKLSAgICAgICAgICAgICAgICAobmV3U2Nyb2xsT2Zmc2V0LndpZHRoKCksIG5ld1Njcm9sbE9m
ZnNldC5oZWlnaHQoKSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBwcmludGYoIkZJWE1FIFNjcm9sbFZpZXdHZGsgVW5zdXBwb3J0ZWQgU2Nyb2xsIG9wZXJhdGlv
biAhISFcbiIpOwotICAgICAgICAgICAgdXBkYXRlVmlldyhtX2RhdGEtPnZpZXdwb3J0QXJlYSwg
dHJ1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgZnJhbWVWaWV3KCktPmZyYW1lKCktPnNlbmRTY3Jv
bGxFdmVudCgpOworICAgICAgICByZXBhaW50KGZhbHNlKTsKICAgICB9CiB9CiAKLVNjcm9sbGJh
ck1vZGUgU2Nyb2xsVmlldzo6aFNjcm9sbGJhck1vZGUoKSBjb25zdAordm9pZCBTY3JvbGxWaWV3
OjpzY3JvbGxQb2ludFJlY3Vyc2l2ZWx5KGludCBkeCwgaW50IGR5KQogeworICAgIGlmIChwYXJl
bnQoKSkKKyAgICAgICAgcGFyZW50KCktPmZyYW1lVmlldygpLT5zY3JvbGxCeShkeCxkeSk7Cit9
CisKK1dlYkNvcmU6OlNjcm9sbGJhck1vZGUgU2Nyb2xsVmlldzo6aFNjcm9sbGJhck1vZGUoKSBj
b25zdAorewogICAgIHJldHVybiBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlOwogfQogCi1TY3JvbGxi
YXJNb2RlIFNjcm9sbFZpZXc6OnZTY3JvbGxiYXJNb2RlKCkgY29uc3QKK1dlYkNvcmU6OlNjcm9s
bGJhck1vZGUgU2Nyb2xsVmlldzo6dlNjcm9sbGJhck1vZGUoKSBjb25zdAogewogICAgIHJldHVy
biBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlOwogfQpAQCAtMjI5LDI1ICsyNTQsMjczIEBACiAgICAg
bV9kYXRhLT5oYXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAordm9pZCBTY3JvbGxWaWV3
OjphZGRDaGlsZChXaWRnZXQqIGNoaWxkKQoreworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7
Cit9CisKKwordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQorewor
ICAgIGNoaWxkLT5zZXRQYXJlbnQoMCk7CisgICAgcmVwYWludChmYWxzZSk7Cit9CisKK3ZvaWQg
U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit7CisgICAgYm9vbCBoYXNWZXJ0aWNhbCA9
IGZhbHNlOworICAgIGJvb2wgaGFzSG9yaXpvbnRhbCA9IGZhbHNlOworICAgIGludCBwYXNzID0w
OworCisgICAgLy9sYXlvdXQgZmlyc3QgaWYgYXV0byBzY3JvbGxiYXJzIHNjcm9sbCBiYXJzCisg
ICAgaWYgKCFtX2RhdGEtPnN1cHByZXNzU2Nyb2xsYmFycyAmJgorICAgICAgICAgICAgKG1fZGF0
YS0+aFNjcm9sbGJhck1vZGUgPT0gU2Nyb2xsYmFyQXV0byB8fG1fZGF0YS0+dlNjcm9sbGJhck1v
ZGUgPT0gU2Nyb2xsYmFyQXV0bykgKSB7CisgICAgICAgIGZyYW1lVmlldygpLT5sYXlvdXQoKTsK
KyAgICB9CisKKyAgICAvL01ha2UgdHdvIHBhc3NlcyB0byBkZWFsIHdpdGggaW50ZXIgYmFyIGRl
cGVuZGVuY2llcworICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisK
KyAgICAgICAgaWYgKG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzIHx8IG1fZGF0YS0+dlNjcm9s
bGJhck1vZGUgPT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQorICAgICAgICAgICAgaGFzVmVydGljYWwg
PSBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAobV9kYXRhLT52U2Nyb2xsYmFyTW9kZSA9PSBTY3Jv
bGxiYXJBbHdheXNPbikKKyAgICAgICAgICAgIGhhc1ZlcnRpY2FsID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAobV9kYXRhLT52U2Nyb2xsYmFyTW9kZSA9PSBTY3JvbGxiYXJBdXRvKSB7CisgICAg
ICAgICAgICBpbnQgaCA9IGhhc0hvcml6b250YWwgPyBoZWlnaHQoKSAtIFBsYXRmb3JtU2Nyb2xs
YmFyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk6IGhlaWdodCgpOworICAgICAgICAgICAg
aGFzVmVydGljYWwgPSAgKGNvbnRlbnRzSGVpZ2h0KCkgPiBoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX2RhdGEtPnN1cHByZXNzU2Nyb2xsYmFycyB8fCBtX2RhdGEtPmhTY3JvbGxiYXJN
b2RlID09IFNjcm9sbGJhckFsd2F5c09mZikKKyAgICAgICAgICAgIGhhc0hvcml6b250YWwgPSBm
YWxzZTsKKyAgICAgICAgZWxzZSBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9PSBTY3JvbGxi
YXJBbHdheXNPbikKKyAgICAgICAgICAgIGhhc0hvcml6b250YWwgPSB0cnVlOworICAgICAgICBl
bHNlIGlmIChtX2RhdGEtPmhTY3JvbGxiYXJNb2RlID09IFNjcm9sbGJhckF1dG8pIHsKKyAgICAg
ICAgICAgIGludCB3ID0gaGFzVmVydGljYWwgPyB3aWR0aCgpIC0gUGxhdGZvcm1TY3JvbGxiYXI6
OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTogd2lkdGgoKTsKKyAgICAgICAgICAgIGhhc0hvcml6
b250YWw9IChjb250ZW50c1dpZHRoKCkgPiB3KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChoYXNWZXJ0aWNhbCAmJiAhbV9kYXRhLT52U2Nyb2xsYmFyKSB7CisgICAgICAgIG1fZGF0YS0+
dlNjcm9sbGJhciA9IG5ldyBQbGF0Zm9ybVNjcm9sbGJhcihtX2RhdGEsVmVydGljYWxTY3JvbGxi
YXIsUmVndWxhclNjcm9sbGJhcik7CisgICAgICAgIGFkZENoaWxkKG1fZGF0YS0+dlNjcm9sbGJh
ci5nZXQoKSk7CisgICAgfSBlbHNlIGlmICghaGFzVmVydGljYWwgJiYgbV9kYXRhLT52U2Nyb2xs
YmFyKSB7CisgICAgICAgIHJlbW92ZUNoaWxkKG1fZGF0YS0+dlNjcm9sbGJhci5nZXQoKSk7Cisg
ICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhciA9IDA7CisgICAgfQorCisgICAgaWYgKGhhc0hvcml6
b250YWwgJiYgIW1fZGF0YS0+aFNjcm9sbGJhcikgeworICAgICAgICBtX2RhdGEtPmhTY3JvbGxi
YXIgPSBuZXcgUGxhdGZvcm1TY3JvbGxiYXIobV9kYXRhLEhvcml6b250YWxTY3JvbGxiYXIsUmVn
dWxhclNjcm9sbGJhcik7CisgICAgICAgIGFkZENoaWxkKG1fZGF0YS0+aFNjcm9sbGJhci5nZXQo
KSk7CisgICAgfSBlbHNlIGlmICghaGFzSG9yaXpvbnRhbCAmJiBtX2RhdGEtPmhTY3JvbGxiYXIp
IHsKKyAgICAgICAgcmVtb3ZlQ2hpbGQobV9kYXRhLT5oU2Nyb2xsYmFyLmdldCgpKTsKKyAgICAg
ICAgbV9kYXRhLT5oU2Nyb2xsYmFyID0gMDsKKyAgICB9CisKKyAgICAvL2xheW91dCBzY3JvbGxi
YXJzCisgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhcikgeworICAgICAgICBpbnQgaCA9IGhlaWdo
dCgpOworICAgICAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKQorICAgICAgICAgICAgaCAtPSBt
X2RhdGEtPnZTY3JvbGxiYXItPndpZHRoKCk7CisgICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhci0+
c2V0RnJhbWVHZW9tZXRyeShJbnRSZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpZHRoKCktbV9kYXRhLT52U2Nyb2xsYmFyLT53aWR0aCgpLDAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsbV9kYXRh
LT52U2Nyb2xsYmFyLT53aWR0aCgpLGgpKTsKKyAgICB9CisKKyAgICBpZiAobV9kYXRhLT5oU2Ny
b2xsYmFyKSB7CisgICAgICAgIGludCB3ID0gd2lkdGgoKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+
dlNjcm9sbGJhcikKKyAgICAgICAgICAgIHcgLT0gbV9kYXRhLT52U2Nyb2xsYmFyLT53aWR0aCgp
OworICAgICAgICBtX2RhdGEtPmhTY3JvbGxiYXItPnNldEZyYW1lR2VvbWV0cnkoSW50UmVjdCgw
LGhlaWdodCgpIC0gbV9kYXRhLT5oU2Nyb2xsYmFyLT5oZWlnaHQoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHcsbV9kYXRhLT5oU2Nyb2xsYmFyLT5oZWln
aHQoKSkpOworICAgIH0KK30KKworUGxhdGZvcm1TY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9s
bGJhclVuZGVyTW91c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorewor
ICAgIFBsYXRmb3JtU2Nyb2xsYmFyKiBiYXIgPSBtX2RhdGEtPmhTY3JvbGxiYXIuZ2V0KCk7Cisg
ICAgaWYgKGJhcikgeworICAgICAgICBJbnRQb2ludCBwID0gYmFyLT5sb2NhdGlvbkluV2luZG93
KCk7CisgICAgICAgIEludFJlY3QgZ2VvbSA9IEludFJlY3QocC54KCkscC55KCksYmFyLT53aWR0
aCgpLGJhci0+aGVpZ2h0KCkpOworICAgICAgICBpZiAoZ2VvbS5jb250YWlucyhtb3VzZUV2ZW50
LnBvcygpKSkKKyAgICAgICAgICAgIHJldHVybiBiYXI7CisKKyAgICB9CisgICAgYmFyID0gbV9k
YXRhLT52U2Nyb2xsYmFyLmdldCgpOworICAgIGlmIChiYXIpIHsKKyAgICAgICAgSW50UG9pbnQg
cCA9IGJhci0+bG9jYXRpb25JbldpbmRvdygpOworICAgICAgICBJbnRSZWN0IGdlb20gPSBJbnRS
ZWN0KHAueCgpLHAueSgpLGJhci0+d2lkdGgoKSxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgaWYg
KGdlb20uY29udGFpbnMobW91c2VFdmVudC5wb3MoKSkpCisgICAgICAgICAgICByZXR1cm4gYmFy
OworCisgICAgfQorICAgIHJldHVybiAwOworfQorCitib29sIFNjcm9sbFZpZXc6OmluV2luZG93
KCkgY29uc3QKK3sKKyAgICAvL2FyZSB3ZSB2aXNpYmxlID8KKyAgICAvL2JhZCBtZXRob2QgbmFt
ZQorICAgIC8vaGlkZGVuIHRhYiBtaW5pbWl6ZWQgZXRjID8/CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVs
RXZlbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQp
Cit7CisKKyAgICBpZiAoa2V5RXZlbnQuaXNLZXlVcCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTZWxlY3Rpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gZnJhbWVWaWV3KCktPmZyYW1lKCkt
PnNlbGVjdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBOb2RlKiBzdGFydCA9IGNvbnRyb2xsZXItPnN0
YXJ0KCkubm9kZSgpOworICAgIGlmIChzdGFydCAmJiBzdGFydC0+aXNDb250ZW50RWRpdGFibGUo
KSkgeworCisgICAgICAgIHN3aXRjaCAoa2V5RXZlbnQuV2luZG93c0tleUNvZGUoKSkgeworICAg
ICAgICBjYXNlIFZLX0JBQ0s6CisgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQ
cmVzc2VkKGZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFZLX0RFTEVURToKKyAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6
OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKGZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgICAg
ICBjb250cm9sbGVyLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpMRUZULCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19SSUdI
VDoKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpN
T1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OlJJR0hULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWS19VUDoKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPm1vZGlmeShTZWxlY3Rpb25D
b250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkJBQ0tXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBWS19ET1dOOgorICAgICAgICAgICAgY29udHJvbGxlci0+
bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwgUGFyYWdyYXBoR3JhbnVsYXJp
dHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBU
eXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgp
LCBrZXlFdmVudC50ZXh0KCksIGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPm1vZGlm
eShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICBzd2l0Y2ggKGtleUV2
ZW50LldpbmRvd3NLZXlDb2RlKCkpIHsKKyAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgIHNjcm9s
bEJ5KC1JTkNSRU1FTlQsMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfUklHSFQ6Cisg
ICAgICAgIHNjcm9sbEJ5KElOQ1JFTUVOVCwwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBW
S19VUDoKKyAgICAgICAgc2Nyb2xsQnkoMCwtSU5DUkVNRU5UKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBWS19ET1dOOgorICAgICAgICBzY3JvbGxCeSgwLElOQ1JFTUVOVCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVktfUFJJT1I6CisgICAgICAgIC8vcmV0dXJuIFNCX1BBR0VVUDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19ORVhUOgorICAgICAgICAvL3JldHVybiBTQl9Q
QUdFRE9XTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19IT01FOgorICAgICAgICBpZiAo
aXNGcmFtZVZpZXcoKSkgeworICAgICAgICAgICAgc2V0Q29udGVudHNQb3MoMCwwKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX0VORDoKKyAgICAgICAgaWYgKGlzRnJh
bWVWaWV3KCkpIHsKKyAgICAgICAgICAgIHNldENvbnRlbnRzUG9zKDAsY29udGVudHNIZWlnaHQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19TUEFDRToKKyAgICAg
ICAgaWYgKGtleUV2ZW50LnNoaWZ0S2V5KCkpCisgICAgICAgICAgICBzY3JvbGxCeSgwLC1JTkNS
RU1FTlQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JvbGxCeSgwLElOQ1JFTUVOVCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnNldEZyYW1l
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0
cnkocik7Ci0gICAgbV9kYXRhLT5zY3JvbGxWaWV3QXJlYSA9IEludFJlY3QoMCwgMCwgci53aWR0
aCgpLCByLmhlaWdodCgpKTsKLSAgICBtX2RhdGEtPnZpZXdwb3J0QXJlYSA9IEludFJlY3QoMCwg
MCwgci53aWR0aCgpIC0gc2Nyb2xsYmFyU2l6ZSwgci5oZWlnaHQoKSAtIHNjcm9sbGJhclNpemUp
OworICAgIGlmIChwcml2YXRlRGF0YSgpLT5nZW9tZXRyeSA9PSByKQorICAgICAgICByZXR1cm47
CisgICAgcHJpdmF0ZURhdGEoKS0+Z2VvbWV0cnkgPSByOworICAgIHVwZGF0ZVNjcm9sbGJhcnMo
KTsKKyAgICBEb2N1bWVudCogZG9jID0gZnJhbWVWaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCk7
CisgICAgaWYgKGRvYykgeworICAgICAgICBSZW5kZXJWaWV3ICpyb290ID0gc3RhdGljX2Nhc3Q8
UmVuZGVyVmlldyo+KGRvYy0+cmVuZGVyZXIoKSk7CisgICAgICAgIGlmIChyb290KQorICAgICAg
ICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICB9CisgICAg
ZnJhbWVWaWV3KCktPmxheW91dChmYWxzZSk7CisgICAgZnJhbWVWaWV3KCktPmxheW91dCh0cnVl
KTsKKyAgICBmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+c2VuZFJlc2l6ZUV2ZW50KCk7CisgICAgZnJh
bWVWaWV3KCktPmZyYW1lKCktPnNlbmRTY3JvbGxFdmVudCgpOwogfQogCi12b2lkIFNjcm9sbFZp
ZXc6OnNldERyYXdhYmxlKEdka0RyYXdhYmxlKiBnZGtkcmF3YWJsZSkKK3ZvaWQgU2Nyb2xsVmll
dzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewotICAgIFdpZGdldDo6c2V0RHJhd2FibGUoZ2RrZHJhd2FibGUpOwotICAgIGlmICghR0RLX0lT
X1dJTkRPVyhnZGtkcmF3YWJsZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJpbWFnZSBzY3JvbGx2
aWV3IG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAvL3N1YndpZGdldHMgY2FuIGNhdXNlIGEgcGFpbnQg
YmVmb3JlIHdlIGFyZSBsb2FkZWQKKyAgICBpZiAoIWZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1
bWVudCgpIHx8ICFmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkK
ICAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPXN0YXRpY19j
YXN0PEdyYXBoaWNzQ29udGV4dENhaXJvKj4oY29udGV4dCk7CisgICAgSW50UmVjdCBnZW9tID0g
ZnJhbWVHZW9tZXRyeSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gbV9kYXRhLT5zY3JvbGxPZmZz
ZXQ7CisKKworICAgIC8vZm9yIG5vdyBubyBvdGhlciBzdWJjbGFzc2VzCisgICAgYXNzZXJ0KGZy
YW1lVmlldygpID09IHRoaXMpOworICAgIGN0eC0+c2F2ZSgpOworICAgIEludFJlY3QgZGlydHk9
IHJlY3Q7CisgICAgSW50UG9pbnQgcCA9IGxvY2F0aW9uSW5XaW5kb3coKTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnMgPSBjdHgtPmdldENUTSgpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3Qg
PSBJbnRSZWN0KDAsMCx3aWR0aCgpLGhlaWdodCgpKTsKKyAgICBJbnRSZWN0IHZDUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOworCisgICAgY3R4LT50cmFuc2xh
dGUoLW9mZnNldC53aWR0aCgpLC1vZmZzZXQuaGVpZ2h0KCkpOworICAgIEludFJlY3QgY2xpcCA9
IGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOworICAgIGN0eC0+Y2xlYXJD
bGlwKCk7CisgICAgY3R4LT5jbGlwKGNsaXApOworICAgIGNhaXJvX3QqIGNyID0gY3R4LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICBmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+cGFpbnQoY3R4LGNsaXAp
OworICAgIGN0eC0+cmVzdG9yZSgpOworCisgICAgaWYgKG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxi
YXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKSB7Cisg
ICAgICAgIEludFJlY3QgciA9IG1fZGF0YS0+aFNjcm9sbGJhci0+ZnJhbWVHZW9tZXRyeSgpOwor
ICAgICAgICBjdHgtPnNhdmUoKTsKKyAgICAgICAgY3R4LT5jbGVhckNsaXAoKTsKKyAgICAgICAg
Y3R4LT50cmFuc2xhdGUoci54KCksci55KCkpOworICAgICAgICBjbGlwID0gSW50UmVjdCgwLDAs
ci53aWR0aCgpLHIuaGVpZ2h0KCkpOworICAgICAgICBjdHgtPmNsaXAoY2xpcCk7CisgICAgICAg
IHRyYW5zID0gY3R4LT5nZXRDVE0oKTsKKyAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyLT5wYWlu
dChjdHgsY2xpcCk7CisgICAgICAgIGN0eC0+cmVzdG9yZSgpOwogICAgIH0KLSAgICBHZGtXaW5k
b3cqIGZyYW1lID0gR0RLX1dJTkRPVyhnZGtkcmF3YWJsZSk7Ci0gICAgZ2ludCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aDsKLSAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShmcmFtZSwgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQsICZkZXB0aCk7Ci0gICAgbV9kYXRhLT5zY3JvbGxWaWV3QXJl
YSA9IEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbV9kYXRhLT52aWV3cG9ydEFy
ZWEgPSBJbnRSZWN0KDAsIDAsIHdpZHRoIC0gc2Nyb2xsYmFyU2l6ZSwgaGVpZ2h0IC0gc2Nyb2xs
YmFyU2l6ZSk7CisgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhcikgeworICAgICAgICBJbnRSZWN0
IHIgPSBtX2RhdGEtPnZTY3JvbGxiYXItPmZyYW1lR2VvbWV0cnkoKTsKKyAgICAgICAgY3R4LT5z
YXZlKCk7CisgICAgICAgIGN0eC0+Y2xlYXJDbGlwKCk7CisgICAgICAgIGN0eC0+dHJhbnNsYXRl
KHIueCgpLHIueSgpKTsKKyAgICAgICAgY2xpcCA9IEludFJlY3QoMCwwLHIud2lkdGgoKSxyLmhl
aWdodCgpKTsKKyAgICAgICAgY3R4LT5jbGlwKGNsaXApOworICAgICAgICB0cmFucyA9IGN0eC0+
Z2V0Q1RNKCk7CisgICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhci0+cGFpbnQoY3R4LGNsaXApOwor
ICAgICAgICBjdHgtPnJlc3RvcmUoKTsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvRm9udENhY2hlR2RrLmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9Gb250Q2FjaGVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC04LDEzICs4LDEzIEBACiAgKiBhcmUgbWV0OgogICoKICAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgogICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgogICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAtMzMsNiArMzMsOCBAQAogCiAj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCShyZXZpc2lvbiAx
NzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVs
IEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjEsNyArMjEsNyBAQAogKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCkBAIC0zMiw1MyArMzIsNTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQ6OkN1cnJlbnRFdmVudFRhZyBQbGF0Zm9ybU1vdXNlRXZl
bnQ6OmN1cnJlbnRFdmVudCA9IHt9OworY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50OjpDdXJyZW50
RXZlbnRUYWcgUGxhdGZvcm1Nb3VzZUV2ZW50OjpjdXJyZW50RXZlbnQgPQorICAgIHt9OwogCiAv
LyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBtb2RpZmll
ciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KIAogUGxhdGZv
cm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogICAg
IHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToK
LSAgICAgICAgICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT5tb3Rpb24ueCwg
KGludClldmVudC0+bW90aW9uLnkpOwotICAgICAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IElu
dFBvaW50KChpbnQpZXZlbnQtPm1vdGlvbi54X3Jvb3QsIChpbnQpZXZlbnQtPm1vdGlvbi55X3Jv
b3QpOwotICAgICAgICAgICAgbV9idXR0b24gPSAoTW91c2VCdXR0b24pKC0xKTsKLSAgICAgICAg
ICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgICAgICBtX3NoaWZ0S2V5ID0gIGV2ZW50LT5t
b3Rpb24uc3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwOwotICAgICAgICAgICAgbV9jdHJsS2V5
ID0gZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19DT05UUk9MX01BU0sgIT0gMDsKLSAgICAgICAg
ICAgIG1fYWx0S2V5ID0gIGV2ZW50LT5tb3Rpb24uc3RhdGUgJiBHREtfTU9EMV9NQVNLICE9IDA7
Ci0gICAgICAgICAgICBtX21ldGFLZXkgPSBldmVudC0+bW90aW9uLnN0YXRlICYgR0RLX01PRDJf
TUFTSyAhPSAwOwotICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElG
WToKKyAgICAgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPm1vdGlvbi54LCAo
aW50KWV2ZW50LT5tb3Rpb24ueSk7CisgICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2lu
dCgoaW50KWV2ZW50LT5tb3Rpb24ueF9yb290LCAoaW50KWV2ZW50LT5tb3Rpb24ueV9yb290KTsK
KyAgICAgICAgbV9idXR0b24gPSAoTW91c2VCdXR0b24pKC0xKTsKKyAgICAgICAgbV9jbGlja0Nv
dW50ID0gMDsKKyAgICAgICAgbV9zaGlmdEtleSA9ICBldmVudC0+bW90aW9uLnN0YXRlICYgR0RL
X1NISUZUX01BU0sgIT0gMDsKKyAgICAgICAgbV9jdHJsS2V5ID0gZXZlbnQtPm1vdGlvbi5zdGF0
ZSAmIEdES19DT05UUk9MX01BU0sgIT0gMDsKKyAgICAgICAgbV9hbHRLZXkgPSAgZXZlbnQtPm1v
dGlvbi5zdGF0ZSAmIEdES19NT0QxX01BU0sgIT0gMDsKKyAgICAgICAgbV9tZXRhS2V5ID0gZXZl
bnQtPm1vdGlvbi5zdGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgotICAgICAgICBjYXNlIEdES18yQlVUVE9O
X1BSRVNTOgotICAgICAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgotICAgICAgICBjYXNlIEdE
S19CVVRUT05fUkVMRUFTRToKLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVU
VE9OX1BSRVNTKQotICAgICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDE7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykKLSAgICAgICAgICAg
ICAgICBtX2NsaWNrQ291bnQgPSAyOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUg
PT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsK
KyAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoK
KyAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNF
OgorICAgICAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVTUykKKyAgICAgICAg
ICAgIG1fY2xpY2tDb3VudCA9IDE7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdE
S18yQlVUVE9OX1BSRVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMjsKKyAgICAgICAg
ZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCisgICAgICAgICAgICBt
X2NsaWNrQ291bnQgPSAzOwogCi0gICAgICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24g
PT0gMSkKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAgICAg
ICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAyKQotICAgICAgICAgICAgICAgIG1f
YnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRv
bi5idXR0b24gPT0gMykKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOwor
ICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMSkKKyAgICAgICAgICAgIG1fYnV0
dG9uID0gTGVmdEJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24g
PT0gMikKKyAgICAgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOworICAgICAgICBlbHNl
IGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAzKQorICAgICAgICAgICAgbV9idXR0b24gPSBS
aWdodEJ1dHRvbjsKIAotICAgICAgICAgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZl
bnQtPmJ1dHRvbi54LCAoaW50KWV2ZW50LT5idXR0b24ueSk7Ci0gICAgICAgICAgICBtX2dsb2Jh
bFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+YnV0dG9uLnhfcm9vdCwgKGludClldmVu
dC0+YnV0dG9uLnlfcm9vdCk7Ci0gICAgICAgICAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPmJ1dHRv
bi5zdGF0ZSAmIEdES19TSElGVF9NQVNLICE9IDA7Ci0gICAgICAgICAgICBtX2N0cmxLZXkgPSBl
dmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAwOwotICAgICAgICAgICAg
bV9hbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOwotICAg
ICAgICAgICAgbV9tZXRhS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19NT0QyX01BU0sg
IT0gMDsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQo
KGludClldmVudC0+YnV0dG9uLngsIChpbnQpZXZlbnQtPmJ1dHRvbi55KTsKKyAgICAgICAgbV9n
bG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPmJ1dHRvbi54X3Jvb3QsIChpbnQp
ZXZlbnQtPmJ1dHRvbi55X3Jvb3QpOworICAgICAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPmJ1dHRv
bi5zdGF0ZSAmIEdES19TSElGVF9NQVNLICE9IDA7CisgICAgICAgIG1fY3RybEtleSA9IGV2ZW50
LT5idXR0b24uc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLICE9IDA7CisgICAgICAgIG1fYWx0S2V5
ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19NT0QxX01BU0sgIT0gMDsKKyAgICAgICAgbV9t
ZXRhS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiVW5rbm93biBtb3VzZSBldmVudFxuIik7Ci0gICAgICAgICAgICBhc3NlcnQoMCk7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG1vdXNlIGV2ZW50XG4i
KTsKKyAgICAgICAgYXNzZXJ0KDApOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvS2V5RXZlbnRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0tleUV2ZW50R2RrLmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9LZXlFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIy
LDcgKzIyLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKICNpbmNsdWRlIDxn
ZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyNpbmNsdWRlIDxhc3NlcnQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0MjQgKzQyLDQ3MiBAQAogc3RhdGlj
IFN0cmluZyBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShndWludCBrZXlDb2RlKQogewogICAg
IHN3aXRjaCAoa2V5Q29kZSkgewotICAgICAgICBjYXNlIEdES19NZW51OgotICAgICAgICBjYXNl
IEdES19BbHRfTDoKLSAgICAgICAgY2FzZSBHREtfQWx0X1I6Ci0gICAgICAgICAgICByZXR1cm4g
IkFsdCI7Ci0gICAgICAgIGNhc2UgR0RLX0NsZWFyOgotICAgICAgICAgICAgcmV0dXJuICJDbGVh
ciI7Ci0gICAgICAgIGNhc2UgR0RLX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gIkRvd24iOwot
ICAgICAgICAgICAgLy8gIkVuZCIKLSAgICAgICAgY2FzZSBHREtfRW5kOgotICAgICAgICAgICAg
cmV0dXJuICJFbmQiOwotICAgICAgICAgICAgLy8gIkVudGVyIgotICAgICAgICBjYXNlIEdES19J
U09fRW50ZXI6Ci0gICAgICAgIGNhc2UgR0RLX0tQX0VudGVyOgotICAgICAgICAgICAgcmV0dXJu
ICJFbnRlciI7Ci0gICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6Ci0gICAgICAgICAgICByZXR1cm4g
IkV4ZWN1dGUiOwotICAgICAgICBjYXNlIEdES19GMToKLSAgICAgICAgICAgIHJldHVybiAiRjEi
OwotICAgICAgICBjYXNlIEdES19GMjoKLSAgICAgICAgICAgIHJldHVybiAiRjIiOwotICAgICAg
ICBjYXNlIEdES19GMzoKLSAgICAgICAgICAgIHJldHVybiAiRjMiOwotICAgICAgICBjYXNlIEdE
S19GNDoKLSAgICAgICAgICAgIHJldHVybiAiRjQiOwotICAgICAgICBjYXNlIEdES19GNToKLSAg
ICAgICAgICAgIHJldHVybiAiRjUiOwotICAgICAgICBjYXNlIEdES19GNjoKLSAgICAgICAgICAg
IHJldHVybiAiRjYiOwotICAgICAgICBjYXNlIEdES19GNzoKLSAgICAgICAgICAgIHJldHVybiAi
RjciOwotICAgICAgICBjYXNlIEdES19GODoKLSAgICAgICAgICAgIHJldHVybiAiRjgiOwotICAg
ICAgICBjYXNlIEdES19GOToKLSAgICAgICAgICAgIHJldHVybiAiRjkiOwotICAgICAgICBjYXNl
IEdES19GMTA6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMCI7Ci0gICAgICAgIGNhc2UgR0RLX0Yx
MToKLSAgICAgICAgICAgIHJldHVybiAiRjExIjsKLSAgICAgICAgY2FzZSBHREtfRjEyOgotICAg
ICAgICAgICAgcmV0dXJuICJGMTIiOwotICAgICAgICBjYXNlIEdES19GMTM6Ci0gICAgICAgICAg
ICByZXR1cm4gIkYxMyI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNDoKLSAgICAgICAgICAgIHJldHVy
biAiRjE0IjsKLSAgICAgICAgY2FzZSBHREtfRjE1OgotICAgICAgICAgICAgcmV0dXJuICJGMTUi
OwotICAgICAgICBjYXNlIEdES19GMTY6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNiI7Ci0gICAg
ICAgIGNhc2UgR0RLX0YxNzoKLSAgICAgICAgICAgIHJldHVybiAiRjE3IjsKLSAgICAgICAgY2Fz
ZSBHREtfRjE4OgotICAgICAgICAgICAgcmV0dXJuICJGMTgiOwotICAgICAgICBjYXNlIEdES19G
MTk6Ci0gICAgICAgICAgICByZXR1cm4gIkYxOSI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMDoKLSAg
ICAgICAgICAgIHJldHVybiAiRjIwIjsKLSAgICAgICAgY2FzZSBHREtfRjIxOgotICAgICAgICAg
ICAgcmV0dXJuICJGMjEiOwotICAgICAgICBjYXNlIEdES19GMjI6Ci0gICAgICAgICAgICByZXR1
cm4gIkYyMiI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMzoKLSAgICAgICAgICAgIHJldHVybiAiRjIz
IjsKLSAgICAgICAgY2FzZSBHREtfRjI0OgotICAgICAgICAgICAgcmV0dXJuICJGMjQiOwotICAg
ICAgICBjYXNlIEdES19IZWxwOgotICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKLSAgICAgICAg
Y2FzZSBHREtfSG9tZToKLSAgICAgICAgICAgIHJldHVybiAiSG9tZSI7Ci0gICAgICAgIGNhc2Ug
R0RLX0luc2VydDoKLSAgICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKLSAgICAgICAgY2FzZSBH
REtfTGVmdDoKLSAgICAgICAgICAgIHJldHVybiAiTGVmdCI7Ci0gICAgICAgIGNhc2UgR0RLX1Bh
Z2VfRG93bjoKLSAgICAgICAgICAgIHJldHVybiAiUGFnZURvd24iOwotICAgICAgICBjYXNlIEdE
S19QYWdlX1VwOgotICAgICAgICAgICAgcmV0dXJuICJQYWdlVXAiOwotICAgICAgICBjYXNlIEdE
S19QYXVzZToKLSAgICAgICAgICAgIHJldHVybiAiUGF1c2UiOwotICAgICAgICBjYXNlIEdES18z
MjcwX1ByaW50U2NyZWVuOgotICAgICAgICAgICAgcmV0dXJuICJQcmludFNjcmVlbiI7Ci0gICAg
ICAgIGNhc2UgR0RLX1JpZ2h0OgotICAgICAgICAgICAgcmV0dXJuICJSaWdodCI7Ci0gICAgICAg
IGNhc2UgR0RLX1NlbGVjdDoKLSAgICAgICAgICAgIHJldHVybiAiU2VsZWN0IjsKLSAgICAgICAg
Y2FzZSBHREtfVXA6Ci0gICAgICAgICAgICByZXR1cm4gIlVwIjsKLSAgICAgICAgICAgIC8vIFN0
YW5kYXJkIHNheXMgdGhhdCBERUwgYmVjb21lcyBVKzAwMDA3Ri4KLSAgICAgICAgY2FzZSBHREtf
RGVsZXRlOgotICAgICAgICAgICAgcmV0dXJuICJVKzAwMDA3RiI7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOjpzcHJpbnRmKCJVKyUwNlgiLCB0b3VwcGVyKGtl
eUNvZGUpKTsKKyAgICBjYXNlIEdES19NZW51OgorICAgIGNhc2UgR0RLX0FsdF9MOgorICAgIGNh
c2UgR0RLX0FsdF9SOgorICAgICAgICByZXR1cm4gIkFsdCI7CisgICAgY2FzZSBHREtfQ2xlYXI6
CisgICAgICAgIHJldHVybiAiQ2xlYXIiOworICAgIGNhc2UgR0RLX0Rvd246CisgICAgICAgIHJl
dHVybiAiRG93biI7CisgICAgICAgIC8vICJFbmQiCisgICAgY2FzZSBHREtfRW5kOgorICAgICAg
ICByZXR1cm4gIkVuZCI7CisgICAgICAgIC8vICJFbnRlciIKKyAgICBjYXNlIEdES19JU09fRW50
ZXI6CisgICAgY2FzZSBHREtfS1BfRW50ZXI6CisgICAgICAgIHJldHVybiAiRW50ZXIiOworICAg
IGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAgIHJldHVybiAiRXhlY3V0ZSI7CisgICAgY2FzZSBH
REtfRjE6CisgICAgICAgIHJldHVybiAiRjEiOworICAgIGNhc2UgR0RLX0YyOgorICAgICAgICBy
ZXR1cm4gIkYyIjsKKyAgICBjYXNlIEdES19GMzoKKyAgICAgICAgcmV0dXJuICJGMyI7CisgICAg
Y2FzZSBHREtfRjQ6CisgICAgICAgIHJldHVybiAiRjQiOworICAgIGNhc2UgR0RLX0Y1OgorICAg
ICAgICByZXR1cm4gIkY1IjsKKyAgICBjYXNlIEdES19GNjoKKyAgICAgICAgcmV0dXJuICJGNiI7
CisgICAgY2FzZSBHREtfRjc6CisgICAgICAgIHJldHVybiAiRjciOworICAgIGNhc2UgR0RLX0Y4
OgorICAgICAgICByZXR1cm4gIkY4IjsKKyAgICBjYXNlIEdES19GOToKKyAgICAgICAgcmV0dXJu
ICJGOSI7CisgICAgY2FzZSBHREtfRjEwOgorICAgICAgICByZXR1cm4gIkYxMCI7CisgICAgY2Fz
ZSBHREtfRjExOgorICAgICAgICByZXR1cm4gIkYxMSI7CisgICAgY2FzZSBHREtfRjEyOgorICAg
ICAgICByZXR1cm4gIkYxMiI7CisgICAgY2FzZSBHREtfRjEzOgorICAgICAgICByZXR1cm4gIkYx
MyI7CisgICAgY2FzZSBHREtfRjE0OgorICAgICAgICByZXR1cm4gIkYxNCI7CisgICAgY2FzZSBH
REtfRjE1OgorICAgICAgICByZXR1cm4gIkYxNSI7CisgICAgY2FzZSBHREtfRjE2OgorICAgICAg
ICByZXR1cm4gIkYxNiI7CisgICAgY2FzZSBHREtfRjE3OgorICAgICAgICByZXR1cm4gIkYxNyI7
CisgICAgY2FzZSBHREtfRjE4OgorICAgICAgICByZXR1cm4gIkYxOCI7CisgICAgY2FzZSBHREtf
RjE5OgorICAgICAgICByZXR1cm4gIkYxOSI7CisgICAgY2FzZSBHREtfRjIwOgorICAgICAgICBy
ZXR1cm4gIkYyMCI7CisgICAgY2FzZSBHREtfRjIxOgorICAgICAgICByZXR1cm4gIkYyMSI7Cisg
ICAgY2FzZSBHREtfRjIyOgorICAgICAgICByZXR1cm4gIkYyMiI7CisgICAgY2FzZSBHREtfRjIz
OgorICAgICAgICByZXR1cm4gIkYyMyI7CisgICAgY2FzZSBHREtfRjI0OgorICAgICAgICByZXR1
cm4gIkYyNCI7CisgICAgY2FzZSBHREtfSGVscDoKKyAgICAgICAgcmV0dXJuICJIZWxwIjsKKyAg
ICBjYXNlIEdES19Ib21lOgorICAgICAgICByZXR1cm4gIkhvbWUiOworICAgIGNhc2UgR0RLX0lu
c2VydDoKKyAgICAgICAgcmV0dXJuICJJbnNlcnQiOworICAgIGNhc2UgR0RLX0xlZnQ6CisgICAg
ICAgIHJldHVybiAiTGVmdCI7CisgICAgY2FzZSBHREtfUGFnZV9Eb3duOgorICAgICAgICByZXR1
cm4gIlBhZ2VEb3duIjsKKyAgICBjYXNlIEdES19QYWdlX1VwOgorICAgICAgICByZXR1cm4gIlBh
Z2VVcCI7CisgICAgY2FzZSBHREtfUGF1c2U6CisgICAgICAgIHJldHVybiAiUGF1c2UiOworICAg
IGNhc2UgR0RLXzMyNzBfUHJpbnRTY3JlZW46CisgICAgICAgIHJldHVybiAiUHJpbnRTY3JlZW4i
OworICAgIGNhc2UgR0RLX1JpZ2h0OgorICAgICAgICByZXR1cm4gIlJpZ2h0IjsKKyAgICBjYXNl
IEdES19TZWxlY3Q6CisgICAgICAgIHJldHVybiAiU2VsZWN0IjsKKyAgICBjYXNlIEdES19VcDoK
KyAgICAgICAgcmV0dXJuICJVcCI7CisgICAgICAgIC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwg
YmVjb21lcyBVKzAwMDA3Ri4KKyAgICBjYXNlIEdES19EZWxldGU6CisgICAgICAgIHJldHVybiAi
VSswMDAwN0YiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBTdHJpbmc6OnNwcmludGYo
IlUrJTA2WCIsIHRvdXBwZXIoa2V5Q29kZSkpOwogICAgIH0KIH0KIAogc3RhdGljIGludCB3aW5k
b3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVkIGludCBrZXljb2RlKQogewogICAgIHN3aXRj
aCAoa2V5Y29kZSkgewotICAgICAgICBjYXNlIEdES19LUF8wOgotICAgICAgICAgICAgcmV0dXJu
IFZLX05VTVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQotICAgICAgICBjYXNlIEdE
S19LUF8xOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtl
eXBhZCAxIGtleQotICAgICAgICBjYXNlIEdES19LUF8yOgotICAgICAgICAgICAgcmV0dXJuICBW
S19OVU1QQUQyOyAvLyAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5Ci0gICAgICAgIGNhc2UgR0RL
X0tQXzM6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtl
eXBhZCAzIGtleQotICAgICAgICBjYXNlIEdES19LUF80OgotICAgICAgICAgICAgcmV0dXJuIFZL
X05VTVBBRDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKLSAgICAgICAgY2FzZSBHREtf
S1BfNToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlw
YWQgNSBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNjoKLSAgICAgICAgICAgIHJldHVybiBWS19O
VU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQ
Xzc6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBh
ZCA3IGtleQotICAgICAgICBjYXNlIEdES19LUF84OgotICAgICAgICAgICAgcmV0dXJuIFZLX05V
TVBBRDg7IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1Bf
OToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFk
IDkga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX011bHRpcGx5OgotICAgICAgICAgICAgcmV0dXJu
IFZLX01VTFRJUExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQotICAgICAgICBjYXNlIEdES19LUF9B
ZGQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKLSAgICAgICAg
Y2FzZSBHREtfS1BfU3VidHJhY3Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8v
ICg2RCkgU3VidHJhY3Qga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQotICAgICAgICBjYXNl
IEdES19LUF9EaXZpZGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERp
dmlkZSBrZXkKKyAgICBjYXNlIEdES19LUF8wOgorICAgICAgICByZXR1cm4gVktfTlVNUEFEMDsv
LyAoNjApIE51bWVyaWMga2V5cGFkIDAga2V5CisgICAgY2FzZSBHREtfS1BfMToKKyAgICAgICAg
cmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorICAgIGNhc2Ug
R0RLX0tQXzI6CisgICAgICAgIHJldHVybiAgVktfTlVNUEFEMjsgLy8gKDYyKSBOdW1lcmljIGtl
eXBhZCAyIGtleQorICAgIGNhc2UgR0RLX0tQXzM6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQz
OyAvLyAoNjMpIE51bWVyaWMga2V5cGFkIDMga2V5CisgICAgY2FzZSBHREtfS1BfNDoKKyAgICAg
ICAgcmV0dXJuIFZLX05VTVBBRDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKKyAgICBj
YXNlIEdES19LUF81OgorICAgICAgICByZXR1cm4gVktfTlVNUEFENTsgLy8oNjUpIE51bWVyaWMg
a2V5cGFkIDUga2V5CisgICAgY2FzZSBHREtfS1BfNjoKKyAgICAgICAgcmV0dXJuIFZLX05VTVBB
RDY7IC8vICg2NikgTnVtZXJpYyBrZXlwYWQgNiBrZXkKKyAgICBjYXNlIEdES19LUF83OgorICAg
ICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQorICAg
IGNhc2UgR0RLX0tQXzg6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQ4OyAvLyAoNjgpIE51bWVy
aWMga2V5cGFkIDgga2V5CisgICAgY2FzZSBHREtfS1BfOToKKyAgICAgICAgcmV0dXJuIFZLX05V
TVBBRDk7IC8vICg2OSkgTnVtZXJpYyBrZXlwYWQgOSBrZXkKKyAgICBjYXNlIEdES19LUF9NdWx0
aXBseToKKyAgICAgICAgcmV0dXJuIFZLX01VTFRJUExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQor
ICAgIGNhc2UgR0RLX0tQX0FkZDoKKyAgICAgICAgcmV0dXJuIFZLX0FERDsgLy8gKDZCKSBBZGQg
a2V5CisgICAgY2FzZSBHREtfS1BfU3VidHJhY3Q6CisgICAgICAgIHJldHVybiBWS19TVUJUUkFD
VDsgLy8gKDZEKSBTdWJ0cmFjdCBrZXkKKyAgICBjYXNlIEdES19LUF9EZWNpbWFsOgorICAgICAg
ICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQorICAgIGNhc2UgR0RLX0tQ
X0RpdmlkZToKKyAgICAgICAgcmV0dXJuIFZLX0RJVklERTsgLy8gKDZGKSBEaXZpZGUga2V5CiAK
LSAgICAgICAgY2FzZSBHREtfQmFja1NwYWNlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0JBQ0s7
IC8vICgwOCkgQkFDS1NQQUNFIGtleQotICAgICAgICBjYXNlIEdES19UYWI6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfVEFCOyAvLyAoMDkpIFRBQiBrZXkKLSAgICAgICAgY2FzZSBHREtfQ2xlYXI6
Ci0gICAgICAgICAgICByZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIga2V5Ci0gICAgICAg
IGNhc2UgR0RLX1JldHVybjoKLSAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBEKSBS
ZXR1cm4ga2V5Ci0gICAgICAgIGNhc2UgR0RLX1NoaWZ0X0w6Ci0gICAgICAgIGNhc2UgR0RLX1No
aWZ0X1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfU0hJRlQ7IC8vICgxMCkgU0hJRlQga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0NvbnRyb2xfTDoKLSAgICAgICAgY2FzZSBHREtfQ29udHJvbF9SOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX0NPTlRST0w7IC8vICgxMSkgQ1RSTCBrZXkKLSAgICAgICAg
Y2FzZSBHREtfTWVudToKLSAgICAgICAgY2FzZSBHREtfQWx0X0w6Ci0gICAgICAgIGNhc2UgR0RL
X0FsdF9SOgotICAgICAgICAgICAgcmV0dXJuIFZLX01FTlU7IC8vICgxMikgQUxUIGtleQorICAg
IGNhc2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAgcmV0dXJuIFZLX0JBQ0s7IC8vICgwOCkgQkFD
S1NQQUNFIGtleQorICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8g
KDA5KSBUQUIga2V5CisgICAgY2FzZSBHREtfQ2xlYXI6CisgICAgICAgIHJldHVybiBWS19DTEVB
UjsgLy8gKDBDKSBDTEVBUiBrZXkKKyAgICBjYXNlIEdES19SZXR1cm46CisgICAgICAgIHJldHVy
biBWS19SRVRVUk47IC8vKDBEKSBSZXR1cm4ga2V5CisgICAgY2FzZSBHREtfU2hpZnRfTDoKKyAg
ICBjYXNlIEdES19TaGlmdF9SOgorICAgICAgICByZXR1cm4gVktfU0hJRlQ7IC8vICgxMCkgU0hJ
RlQga2V5CisgICAgY2FzZSBHREtfQ29udHJvbF9MOgorICAgIGNhc2UgR0RLX0NvbnRyb2xfUjoK
KyAgICAgICAgcmV0dXJuIFZLX0NPTlRST0w7IC8vICgxMSkgQ1RSTCBrZXkKKyAgICBjYXNlIEdE
S19NZW51OgorICAgIGNhc2UgR0RLX0FsdF9MOgorICAgIGNhc2UgR0RLX0FsdF9SOgorICAgICAg
ICByZXR1cm4gVktfTUVOVTsgLy8gKDEyKSBBTFQga2V5CiAKLSAgICAgICAgY2FzZSBHREtfUGF1
c2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5Ci0gICAg
ICAgIGNhc2UgR0RLX0NhcHNfTG9jazoKLSAgICAgICAgICAgIHJldHVybiBWS19DQVBJVEFMOyAv
LyAoMTQpIENBUFMgTE9DSyBrZXkKLSAgICAgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgotICAgICAg
ICBjYXNlIEdES19LYW5hX1NoaWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgx
NSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKLSAgICAgICAgY2FzZSBHREtf
SGFuZ3VsOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgxNSkg
SU1FIEhhbmd1bCBtb2RlCi0gICAgICAgICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBt
b2RlCi0gICAgICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCi0gICAgICAg
IGNhc2UgR0RLX0hhbmd1bF9IYW5qYToKLSAgICAgICAgICAgIHJldHVybiBWS19IQU5KQTsgLy8g
KDE5KSBJTUUgSGFuamEgbW9kZQotICAgICAgICBjYXNlIEdES19LYW5qaToKLSAgICAgICAgICAg
IHJldHVybiBWS19LQU5KSTsgLy8gKDE5KSBJTUUgS2FuamkgbW9kZQotICAgICAgICBjYXNlIEdE
S19Fc2NhcGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkK
LSAgICAgICAgICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAotICAgICAgICAgICAg
Ly8gVktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0Ci0gICAgICAgICAgICAvLyBWS19B
Q0NFUFQgKDFFKSBJTUUgYWNjZXB0Ci0gICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikg
SU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QKLSAgICAgICAgY2FzZSBHREtfc3BhY2U6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VCQVIKLSAgICAgICAgY2FzZSBHREtf
UGFnZV9VcDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtl
eQotICAgICAgICBjYXNlIEdES19QYWdlX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gVktfTkVY
VDsgLy8gKDIyKSBQQUdFIERPV04ga2V5Ci0gICAgICAgIGNhc2UgR0RLX0VuZDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQotICAgICAgICBjYXNlIEdES19Ib21l
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKLSAgICAgICAg
Y2FzZSBHREtfTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQg
QVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX1VwOgotICAgICAgICAgICAgcmV0dXJuIFZLX1VQ
OyAvLyAoMjYpIFVQIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfRG93bjoKLSAgICAgICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJS
T1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX1NlbGVjdDoKLSAgICAgICAgICAgIHJldHVybiBWS19T
RUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQotICAgICAgICBjYXNlIEdES19QcmludDoKLSAgICAg
ICAgICAgIHJldHVybiBWS19QUklOVDsgLy8gKDJBKSBQUklOVCBrZXkKLSAgICAgICAgY2FzZSBH
REtfRXhlY3V0ZToKLSAgICAgICAgICAgIHJldHVybiBWS19FWEVDVVRFOy8vICgyQikgRVhFQ1VU
RSBrZXkKLSAgICAgICAgICAgIC8vZHVubm8gb24gdGhpcwotICAgICAgICAgICAgLy9jYXNlIEdE
S19QcmludFNjcmVlbjoKLSAgICAgICAgICAgIC8vICAgICAgcmV0dXJuIFZLX1NOQVBTSE9UOyAv
LyAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKLSAgICAgICAgY2FzZSBHREtfSW5zZXJ0OgotICAgICAg
ICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5Ci0gICAgICAgIGNhc2UgR0RL
X0RlbGV0ZToKLSAgICAgICAgICAgIHJldHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVMIGtleQot
ICAgICAgICBjYXNlIEdES19IZWxwOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hFTFA7IC8vICgy
RikgSEVMUCBrZXkKLSAgICAgICAgY2FzZSBHREtfMDoKLSAgICAgICAgY2FzZSBHREtfcGFyZW5s
ZWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLXzA7ICAgIC8vICAoMzApIDApIGtleQotICAgICAg
ICBjYXNlIEdES18xOgotICAgICAgICAgICAgcmV0dXJuIFZLXzE7IC8vICAoMzEpIDEgISBrZXkK
LSAgICAgICAgY2FzZSBHREtfMjoKLSAgICAgICAgY2FzZSBHREtfYXQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfMjsgLy8gICgzMikgMiAmIGtleQotICAgICAgICBjYXNlIEdES18zOgotICAgICAg
ICBjYXNlIEdES19udW1iZXJzaWduOgotICAgICAgICAgICAgcmV0dXJuIFZLXzM7IC8vY2FzZSAn
Myc6IGNhc2UgJyMnOwotICAgICAgICBjYXNlIEdES180OgotICAgICAgICBjYXNlIEdES19kb2xs
YXI6IC8vICAoMzQpIDQga2V5ICckJzsKLSAgICAgICAgICAgIHJldHVybiBWS180OwotICAgICAg
ICBjYXNlIEdES181OgotICAgICAgICBjYXNlIEdES19wZXJjZW50OgotICAgICAgICAgICAgcmV0
dXJuIFZLXzU7IC8vICAoMzUpIDUga2V5ICAnJScKLSAgICAgICAgY2FzZSBHREtfNjoKLSAgICAg
ICAgY2FzZSBHREtfYXNjaWljaXJjdW06Ci0gICAgICAgICAgICByZXR1cm4gVktfNjsgLy8gICgz
NikgNiBrZXkgICdeJwotICAgICAgICBjYXNlIEdES183OgotICAgICAgICBjYXNlIEdES19hbXBl
cnNhbmQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfNzsgLy8gICgzNykgNyBrZXkgIGNhc2UgJyYn
Ci0gICAgICAgIGNhc2UgR0RLXzg6Ci0gICAgICAgIGNhc2UgR0RLX2FzdGVyaXNrOgotICAgICAg
ICAgICAgcmV0dXJuIFZLXzg7IC8vICAoMzgpIDgga2V5ICAnKicKLSAgICAgICAgY2FzZSBHREtf
OToKLSAgICAgICAgY2FzZSBHREtfcGFyZW5yaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS185
OyAvLyAgKDM5KSA5IGtleSAnKCcKLSAgICAgICAgY2FzZSBHREtfYToKLSAgICAgICAgY2FzZSBH
REtfQToKLSAgICAgICAgICAgIHJldHVybiBWS19BOyAvLyAgKDQxKSBBIGtleSBjYXNlICdhJzog
Y2FzZSAnQSc6IHJldHVybiAweDQxOwotICAgICAgICBjYXNlIEdES19iOgotICAgICAgICBjYXNl
IEdES19COgotICAgICAgICAgICAgcmV0dXJuIFZLX0I7IC8vICAoNDIpIEIga2V5IGNhc2UgJ2In
OiBjYXNlICdCJzogcmV0dXJuIDB4NDI7Ci0gICAgICAgIGNhc2UgR0RLX2M6Ci0gICAgICAgIGNh
c2UgR0RLX0M6Ci0gICAgICAgICAgICByZXR1cm4gVktfQzsgLy8gICg0MykgQyBrZXkgY2FzZSAn
Yyc6IGNhc2UgJ0MnOiByZXR1cm4gMHg0MzsKLSAgICAgICAgY2FzZSBHREtfZDoKLSAgICAgICAg
Y2FzZSBHREtfRDoKLSAgICAgICAgICAgIHJldHVybiBWS19EOyAvLyAgKDQ0KSBEIGtleSBjYXNl
ICdkJzogY2FzZSAnRCc6IHJldHVybiAweDQ0OwotICAgICAgICBjYXNlIEdES19lOgotICAgICAg
ICBjYXNlIEdES19FOgotICAgICAgICAgICAgcmV0dXJuIFZLX0U7IC8vICAoNDUpIEUga2V5IGNh
c2UgJ2UnOiBjYXNlICdFJzogcmV0dXJuIDB4NDU7Ci0gICAgICAgIGNhc2UgR0RLX2Y6Ci0gICAg
ICAgIGNhc2UgR0RLX0Y6Ci0gICAgICAgICAgICByZXR1cm4gVktfRjsgLy8gICg0NikgRiBrZXkg
Y2FzZSAnZic6IGNhc2UgJ0YnOiByZXR1cm4gMHg0NjsKLSAgICAgICAgY2FzZSBHREtfZzoKLSAg
ICAgICAgY2FzZSBHREtfRzoKLSAgICAgICAgICAgIHJldHVybiBWS19HOyAvLyAgKDQ3KSBHIGtl
eSBjYXNlICdnJzogY2FzZSAnRyc6IHJldHVybiAweDQ3OwotICAgICAgICBjYXNlIEdES19oOgot
ICAgICAgICBjYXNlIEdES19IOgotICAgICAgICAgICAgcmV0dXJuIFZLX0g7IC8vICAoNDgpIEgg
a2V5IGNhc2UgJ2gnOiBjYXNlICdIJzogcmV0dXJuIDB4NDg7Ci0gICAgICAgIGNhc2UgR0RLX2k6
Ci0gICAgICAgIGNhc2UgR0RLX0k6Ci0gICAgICAgICAgICByZXR1cm4gVktfSTsgLy8gICg0OSkg
SSBrZXkgY2FzZSAnaSc6IGNhc2UgJ0knOiByZXR1cm4gMHg0OTsKLSAgICAgICAgY2FzZSBHREtf
ajoKLSAgICAgICAgY2FzZSBHREtfSjoKLSAgICAgICAgICAgIHJldHVybiBWS19KOyAvLyAgKDRB
KSBKIGtleSBjYXNlICdqJzogY2FzZSAnSic6IHJldHVybiAweDRBOwotICAgICAgICBjYXNlIEdE
S19rOgotICAgICAgICBjYXNlIEdES19LOgotICAgICAgICAgICAgcmV0dXJuIFZLX0s7IC8vICAo
NEIpIEsga2V5IGNhc2UgJ2snOiBjYXNlICdLJzogcmV0dXJuIDB4NEI7Ci0gICAgICAgIGNhc2Ug
R0RLX2w6Ci0gICAgICAgIGNhc2UgR0RLX0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTDsgLy8g
ICg0QykgTCBrZXkgY2FzZSAnbCc6IGNhc2UgJ0wnOiByZXR1cm4gMHg0QzsKLSAgICAgICAgY2Fz
ZSBHREtfbToKLSAgICAgICAgY2FzZSBHREtfTToKLSAgICAgICAgICAgIHJldHVybiBWS19NOyAv
LyAgKDREKSBNIGtleSBjYXNlICdtJzogY2FzZSAnTSc6IHJldHVybiAweDREOwotICAgICAgICBj
YXNlIEdES19uOgotICAgICAgICBjYXNlIEdES19OOgotICAgICAgICAgICAgcmV0dXJuIFZLX047
IC8vICAoNEUpIE4ga2V5IGNhc2UgJ24nOiBjYXNlICdOJzogcmV0dXJuIDB4NEU7Ci0gICAgICAg
IGNhc2UgR0RLX286Ci0gICAgICAgIGNhc2UgR0RLX086Ci0gICAgICAgICAgICByZXR1cm4gVktf
TzsgLy8gICg0RikgTyBrZXkgY2FzZSAnbyc6IGNhc2UgJ08nOiByZXR1cm4gMHg0RjsKLSAgICAg
ICAgY2FzZSBHREtfcDoKLSAgICAgICAgY2FzZSBHREtfUDoKLSAgICAgICAgICAgIHJldHVybiBW
S19QOyAvLyAgKDUwKSBQIGtleSBjYXNlICdwJzogY2FzZSAnUCc6IHJldHVybiAweDUwOwotICAg
ICAgICBjYXNlIEdES19xOgotICAgICAgICBjYXNlIEdES19ROgotICAgICAgICAgICAgcmV0dXJu
IFZLX1E7IC8vICAoNTEpIFEga2V5IGNhc2UgJ3EnOiBjYXNlICdRJzogcmV0dXJuIDB4NTE7Ci0g
ICAgICAgIGNhc2UgR0RLX3I6Ci0gICAgICAgIGNhc2UgR0RLX1I6Ci0gICAgICAgICAgICByZXR1
cm4gVktfUjsgLy8gICg1MikgUiBrZXkgY2FzZSAncic6IGNhc2UgJ1InOiByZXR1cm4gMHg1MjsK
LSAgICAgICAgY2FzZSBHREtfczoKLSAgICAgICAgY2FzZSBHREtfUzoKLSAgICAgICAgICAgIHJl
dHVybiBWS19TOyAvLyAgKDUzKSBTIGtleSBjYXNlICdzJzogY2FzZSAnUyc6IHJldHVybiAweDUz
OwotICAgICAgICBjYXNlIEdES190OgotICAgICAgICBjYXNlIEdES19UOgotICAgICAgICAgICAg
cmV0dXJuIFZLX1Q7IC8vICAoNTQpIFQga2V5IGNhc2UgJ3QnOiBjYXNlICdUJzogcmV0dXJuIDB4
NTQ7Ci0gICAgICAgIGNhc2UgR0RLX3U6Ci0gICAgICAgIGNhc2UgR0RLX1U6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfVTsgLy8gICg1NSkgVSBrZXkgY2FzZSAndSc6IGNhc2UgJ1UnOiByZXR1cm4g
MHg1NTsKLSAgICAgICAgY2FzZSBHREtfdjoKLSAgICAgICAgY2FzZSBHREtfVjoKLSAgICAgICAg
ICAgIHJldHVybiBWS19WOyAvLyAgKDU2KSBWIGtleSBjYXNlICd2JzogY2FzZSAnVic6IHJldHVy
biAweDU2OwotICAgICAgICBjYXNlIEdES193OgotICAgICAgICBjYXNlIEdES19XOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX1c7IC8vICAoNTcpIFcga2V5IGNhc2UgJ3cnOiBjYXNlICdXJzogcmV0
dXJuIDB4NTc7Ci0gICAgICAgIGNhc2UgR0RLX3g6Ci0gICAgICAgIGNhc2UgR0RLX1g6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfWDsgLy8gICg1OCkgWCBrZXkgY2FzZSAneCc6IGNhc2UgJ1gnOiBy
ZXR1cm4gMHg1ODsKLSAgICAgICAgY2FzZSBHREtfeToKLSAgICAgICAgY2FzZSBHREtfWToKLSAg
ICAgICAgICAgIHJldHVybiBWS19ZOyAvLyAgKDU5KSBZIGtleSBjYXNlICd5JzogY2FzZSAnWSc6
IHJldHVybiAweDU5OwotICAgICAgICBjYXNlIEdES196OgotICAgICAgICBjYXNlIEdES19aOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX1o7IC8vICAoNUEpIFoga2V5IGNhc2UgJ3onOiBjYXNlICda
JzogcmV0dXJuIDB4NUE7Ci0gICAgICAgIGNhc2UgR0RLX01ldGFfTDoKLSAgICAgICAgICAgIHJl
dHVybiBWS19MV0lOOyAvLyAoNUIpIExlZnQgV2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFs
IGtleWJvYXJkKQotICAgICAgICBjYXNlIEdES19NZXRhX1I6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUldJTjsgLy8gKDVDKSBSaWdodCBXaW5kb3dzIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKLSAg
ICAgICAgICAgIC8vIFZLX0FQUFMgKDVEKSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJv
YXJkKQotICAgICAgICAgICAgLy8gVktfU0xFRVAgKDVGKSBDb21wdXRlciBTbGVlcCBrZXkKLSAg
ICAgICAgICAgIC8vIFZLX1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkKLSAgICAgICAgICAg
IC8vIFZLX1NVQlRSQUNUICg2RCkgU3VidHJhY3Qga2V5Ci0gICAgICAgICAgICAvLyBWS19ERUNJ
TUFMICg2RSkgRGVjaW1hbCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0RJVklERSAoNkYpIERpdmlk
ZSBrZXkKLSAgICAgICAgICAgIC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJvdmUKKyAgICBjYXNl
IEdES19QYXVzZToKKyAgICAgICAgcmV0dXJuIFZLX1BBVVNFOyAvLyAoMTMpIFBBVVNFIGtleQor
ICAgIGNhc2UgR0RLX0NhcHNfTG9jazoKKyAgICAgICAgcmV0dXJuIFZLX0NBUElUQUw7IC8vICgx
NCkgQ0FQUyBMT0NLIGtleQorICAgIGNhc2UgR0RLX0thbmFfTG9jazoKKyAgICBjYXNlIEdES19L
YW5hX1NoaWZ0OgorICAgICAgICByZXR1cm4gVktfS0FOQTsgLy8gKDE1KSBJbnB1dCBNZXRob2Qg
RWRpdG9yIChJTUUpIEthbmEgbW9kZQorICAgIGNhc2UgR0RLX0hhbmd1bDoKKyAgICAgICAgcmV0
dXJuIFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCisgICAgICAg
IC8vIFZLX0pVTkpBICgxNykgSU1FIEp1bmphIG1vZGUKKyAgICAgICAgLy8gVktfRklOQUwgKDE4
KSBJTUUgZmluYWwgbW9kZQorICAgIGNhc2UgR0RLX0hhbmd1bF9IYW5qYToKKyAgICAgICAgcmV0
dXJuIFZLX0hBTkpBOyAvLyAoMTkpIElNRSBIYW5qYSBtb2RlCisgICAgY2FzZSBHREtfS2Fuamk6
CisgICAgICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5KSBJTUUgS2FuamkgbW9kZQorICAgIGNh
c2UgR0RLX0VzY2FwZToKKyAgICAgICAgcmV0dXJuIFZLX0VTQ0FQRTsgLy8gKDFCKSBFU0Mga2V5
CisgICAgICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAorICAgICAgICAvLyBWS19O
T05DT05WRVJUICgxRCkgSU1FIG5vbmNvbnZlcnQKKyAgICAgICAgLy8gVktfQUNDRVBUICgxRSkg
SU1FIGFjY2VwdAorICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdl
IHJlcXVlc3QKKyAgICBjYXNlIEdES19zcGFjZToKKyAgICAgICAgcmV0dXJuIFZLX1NQQUNFOyAv
LyAoMjApIFNQQUNFQkFSCisgICAgY2FzZSBHREtfUGFnZV9VcDoKKyAgICAgICAgcmV0dXJuIFZL
X1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5CisgICAgY2FzZSBHREtfUGFnZV9Eb3duOgorICAg
ICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5CisgICAgY2FzZSBHREtf
RW5kOgorICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKKyAgICBjYXNlIEdE
S19Ib21lOgorICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQorICAgIGNh
c2UgR0RLX0xlZnQ6CisgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cg
a2V5CisgICAgY2FzZSBHREtfVXA6CisgICAgICAgIHJldHVybiBWS19VUDsgLy8gKDI2KSBVUCBB
UlJPVyBrZXkKKyAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAv
LyAoMjcpIFJJR0hUIEFSUk9XIGtleQorICAgIGNhc2UgR0RLX0Rvd246CisgICAgICAgIHJldHVy
biBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5CisgICAgY2FzZSBHREtfU2VsZWN0Ogor
ICAgICAgICByZXR1cm4gVktfU0VMRUNUOyAvLyAoMjkpIFNFTEVDVCBrZXkKKyAgICBjYXNlIEdE
S19QcmludDoKKyAgICAgICAgcmV0dXJuIFZLX1BSSU5UOyAvLyAoMkEpIFBSSU5UIGtleQorICAg
IGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAgIHJldHVybiBWS19FWEVDVVRFOy8vICgyQikgRVhF
Q1VURSBrZXkKKyAgICAgICAgLy9kdW5ubyBvbiB0aGlzCisgICAgICAgIC8vY2FzZSBHREtfUHJp
bnRTY3JlZW46CisgICAgICAgIC8vICAgICAgcmV0dXJuIFZLX1NOQVBTSE9UOyAvLyAoMkMpIFBS
SU5UIFNDUkVFTiBrZXkKKyAgICBjYXNlIEdES19JbnNlcnQ6CisgICAgICAgIHJldHVybiBWS19J
TlNFUlQ7IC8vICgyRCkgSU5TIGtleQorICAgIGNhc2UgR0RLX0RlbGV0ZToKKyAgICAgICAgcmV0
dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5CisgICAgY2FzZSBHREtfSGVscDoKKyAgICAg
ICAgcmV0dXJuIFZLX0hFTFA7IC8vICgyRikgSEVMUCBrZXkKKyAgICBjYXNlIEdES18wOgorICAg
IGNhc2UgR0RLX3BhcmVubGVmdDoKKyAgICAgICAgcmV0dXJuIFZLXzA7ICAgIC8vICAoMzApIDAp
IGtleQorICAgIGNhc2UgR0RLXzE6CisgICAgICAgIHJldHVybiBWS18xOyAvLyAgKDMxKSAxICEg
a2V5CisgICAgY2FzZSBHREtfMjoKKyAgICBjYXNlIEdES19hdDoKKyAgICAgICAgcmV0dXJuIFZL
XzI7IC8vICAoMzIpIDIgJiBrZXkKKyAgICBjYXNlIEdES18zOgorICAgIGNhc2UgR0RLX251bWJl
cnNpZ246CisgICAgICAgIHJldHVybiBWS18zOyAvL2Nhc2UgJzMnOiBjYXNlICcjJzsKKyAgICBj
YXNlIEdES180OgorICAgIGNhc2UgR0RLX2RvbGxhcjogLy8gICgzNCkgNCBrZXkgJyQnOworICAg
ICAgICByZXR1cm4gVktfNDsKKyAgICBjYXNlIEdES181OgorICAgIGNhc2UgR0RLX3BlcmNlbnQ6
CisgICAgICAgIHJldHVybiBWS181OyAvLyAgKDM1KSA1IGtleSAgJyUnCisgICAgY2FzZSBHREtf
NjoKKyAgICBjYXNlIEdES19hc2NpaWNpcmN1bToKKyAgICAgICAgcmV0dXJuIFZLXzY7IC8vICAo
MzYpIDYga2V5ICAnXicKKyAgICBjYXNlIEdES183OgorICAgIGNhc2UgR0RLX2FtcGVyc2FuZDoK
KyAgICAgICAgcmV0dXJuIFZLXzc7IC8vICAoMzcpIDcga2V5ICBjYXNlICcmJworICAgIGNhc2Ug
R0RLXzg6CisgICAgY2FzZSBHREtfYXN0ZXJpc2s6CisgICAgICAgIHJldHVybiBWS184OyAvLyAg
KDM4KSA4IGtleSAgJyonCisgICAgY2FzZSBHREtfOToKKyAgICBjYXNlIEdES19wYXJlbnJpZ2h0
OgorICAgICAgICByZXR1cm4gVktfOTsgLy8gICgzOSkgOSBrZXkgJygnCisgICAgY2FzZSBHREtf
YToKKyAgICBjYXNlIEdES19BOgorICAgICAgICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkg
Y2FzZSAnYSc6IGNhc2UgJ0EnOiByZXR1cm4gMHg0MTsKKyAgICBjYXNlIEdES19iOgorICAgIGNh
c2UgR0RLX0I6CisgICAgICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNlICdiJzog
Y2FzZSAnQic6IHJldHVybiAweDQyOworICAgIGNhc2UgR0RLX2M6CisgICAgY2FzZSBHREtfQzoK
KyAgICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2UgJ2MnOiBjYXNlICdDJzog
cmV0dXJuIDB4NDM7CisgICAgY2FzZSBHREtfZDoKKyAgICBjYXNlIEdES19EOgorICAgICAgICBy
ZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkgY2FzZSAnZCc6IGNhc2UgJ0QnOiByZXR1cm4gMHg0
NDsKKyAgICBjYXNlIEdES19lOgorICAgIGNhc2UgR0RLX0U6CisgICAgICAgIHJldHVybiBWS19F
OyAvLyAgKDQ1KSBFIGtleSBjYXNlICdlJzogY2FzZSAnRSc6IHJldHVybiAweDQ1OworICAgIGNh
c2UgR0RLX2Y6CisgICAgY2FzZSBHREtfRjoKKyAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYp
IEYga2V5IGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7CisgICAgY2FzZSBHREtfZzoK
KyAgICBjYXNlIEdES19HOgorICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBrZXkgY2Fz
ZSAnZyc6IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsKKyAgICBjYXNlIEdES19oOgorICAgIGNhc2Ug
R0RLX0g6CisgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4KSBIIGtleSBjYXNlICdoJzogY2Fz
ZSAnSCc6IHJldHVybiAweDQ4OworICAgIGNhc2UgR0RLX2k6CisgICAgY2FzZSBHREtfSToKKyAg
ICAgICAgcmV0dXJuIFZLX0k7IC8vICAoNDkpIEkga2V5IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0
dXJuIDB4NDk7CisgICAgY2FzZSBHREtfajoKKyAgICBjYXNlIEdES19KOgorICAgICAgICByZXR1
cm4gVktfSjsgLy8gICg0QSkgSiBrZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsK
KyAgICBjYXNlIEdES19rOgorICAgIGNhc2UgR0RLX0s6CisgICAgICAgIHJldHVybiBWS19LOyAv
LyAgKDRCKSBLIGtleSBjYXNlICdrJzogY2FzZSAnSyc6IHJldHVybiAweDRCOworICAgIGNhc2Ug
R0RLX2w6CisgICAgY2FzZSBHREtfTDoKKyAgICAgICAgcmV0dXJuIFZLX0w7IC8vICAoNEMpIEwg
a2V5IGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7CisgICAgY2FzZSBHREtfbToKKyAg
ICBjYXNlIEdES19NOgorICAgICAgICByZXR1cm4gVktfTTsgLy8gICg0RCkgTSBrZXkgY2FzZSAn
bSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKKyAgICBjYXNlIEdES19uOgorICAgIGNhc2UgR0RL
X046CisgICAgICAgIHJldHVybiBWS19OOyAvLyAgKDRFKSBOIGtleSBjYXNlICduJzogY2FzZSAn
Tic6IHJldHVybiAweDRFOworICAgIGNhc2UgR0RLX286CisgICAgY2FzZSBHREtfTzoKKyAgICAg
ICAgcmV0dXJuIFZLX087IC8vICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJu
IDB4NEY7CisgICAgY2FzZSBHREtfcDoKKyAgICBjYXNlIEdES19QOgorICAgICAgICByZXR1cm4g
VktfUDsgLy8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsKKyAg
ICBjYXNlIEdES19xOgorICAgIGNhc2UgR0RLX1E6CisgICAgICAgIHJldHVybiBWS19ROyAvLyAg
KDUxKSBRIGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUxOworICAgIGNhc2UgR0RL
X3I6CisgICAgY2FzZSBHREtfUjoKKyAgICAgICAgcmV0dXJuIFZLX1I7IC8vICAoNTIpIFIga2V5
IGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7CisgICAgY2FzZSBHREtfczoKKyAgICBj
YXNlIEdES19TOgorICAgICAgICByZXR1cm4gVktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6
IGNhc2UgJ1MnOiByZXR1cm4gMHg1MzsKKyAgICBjYXNlIEdES190OgorICAgIGNhc2UgR0RLX1Q6
CisgICAgICAgIHJldHVybiBWS19UOyAvLyAgKDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6
IHJldHVybiAweDU0OworICAgIGNhc2UgR0RLX3U6CisgICAgY2FzZSBHREtfVToKKyAgICAgICAg
cmV0dXJuIFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJuIDB4
NTU7CisgICAgY2FzZSBHREtfdjoKKyAgICBjYXNlIEdES19WOgorICAgICAgICByZXR1cm4gVktf
VjsgLy8gICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiByZXR1cm4gMHg1NjsKKyAgICBj
YXNlIEdES193OgorICAgIGNhc2UgR0RLX1c6CisgICAgICAgIHJldHVybiBWS19XOyAvLyAgKDU3
KSBXIGtleSBjYXNlICd3JzogY2FzZSAnVyc6IHJldHVybiAweDU3OworICAgIGNhc2UgR0RLX3g6
CisgICAgY2FzZSBHREtfWDoKKyAgICAgICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5IGNh
c2UgJ3gnOiBjYXNlICdYJzogcmV0dXJuIDB4NTg7CisgICAgY2FzZSBHREtfeToKKyAgICBjYXNl
IEdES19ZOgorICAgICAgICByZXR1cm4gVktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNh
c2UgJ1knOiByZXR1cm4gMHg1OTsKKyAgICBjYXNlIEdES196OgorICAgIGNhc2UgR0RLX1o6Cisg
ICAgICAgIHJldHVybiBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2FzZSAnWic6IHJl
dHVybiAweDVBOworICAgIGNhc2UgR0RLX0YxOgorICAgICAgICByZXR1cm4gVktfRjE7CisgICAg
Y2FzZSBHREtfRjI6CisgICAgICAgIHJldHVybiBWS19GMjsKKyAgICBjYXNlIEdES19GMzoKKyAg
ICAgICAgcmV0dXJuIFZLX0YzOworICAgIGNhc2UgR0RLX0Y0OgorICAgICAgICByZXR1cm4gVktf
RjQ7CisgICAgY2FzZSBHREtfRjU6CisgICAgICAgIHJldHVybiBWS19GNTsKKyAgICBjYXNlIEdE
S19GNjoKKyAgICAgICAgcmV0dXJuIFZLX0Y2OworICAgIGNhc2UgR0RLX0Y3OgorICAgICAgICBy
ZXR1cm4gVktfRjc7CisgICAgY2FzZSBHREtfRjg6CisgICAgICAgIHJldHVybiBWS19GODsKKyAg
ICBjYXNlIEdES19GOToKKyAgICAgICAgcmV0dXJuIFZLX0Y5OworICAgIGNhc2UgR0RLX0YxMDoK
KyAgICAgICAgcmV0dXJuIFZLX0YxMDsKKyAgICBjYXNlIEdES19GMTE6CisgICAgICAgIHJldHVy
biBWS19GMTE7CisgICAgY2FzZSBHREtfRjEyOgorICAgICAgICByZXR1cm4gVktfRjEyOworICAg
IGNhc2UgR0RLX0YxMzoKKyAgICAgICAgcmV0dXJuIFZLX0YxMzsKKyAgICBjYXNlIEdES19GMTQ6
CisgICAgICAgIHJldHVybiBWS19GMTQ7CisgICAgY2FzZSBHREtfRjE1OgorICAgICAgICByZXR1
cm4gVktfRjE1OworICAgIGNhc2UgR0RLX0YxNjoKKyAgICAgICAgcmV0dXJuIFZLX0YxNjsKKyAg
ICBjYXNlIEdES19GMTc6CisgICAgICAgIHJldHVybiBWS19GMTc7CisgICAgY2FzZSBHREtfRjE4
OgorICAgICAgICByZXR1cm4gVktfRjE4OworICAgIGNhc2UgR0RLX0YxOToKKyAgICAgICAgcmV0
dXJuIFZLX0YxOTsKKyAgICBjYXNlIEdES19GMjA6CisgICAgICAgIHJldHVybiBWS19GMjA7Cisg
ICAgY2FzZSBHREtfRjIxOgorICAgICAgICByZXR1cm4gVktfRjIxOworICAgIGNhc2UgR0RLX0Yy
MjoKKyAgICAgICAgcmV0dXJuIFZLX0YyMjsKKyAgICBjYXNlIEdES19GMjM6CisgICAgICAgIHJl
dHVybiBWS19GMjM7CisgICAgY2FzZSBHREtfRjI0OgorICAgICAgICByZXR1cm4gVktfRjI0Owor
ICAgIGNhc2UgR0RLX01ldGFfTDoKKyAgICAgICAgcmV0dXJuIFZLX0xXSU47IC8vICg1QikgTGVm
dCBXaW5kb3dzIGtleSAoTWljcm9zb2Z0IE5hdHVyYWwga2V5Ym9hcmQpCisgICAgY2FzZSBHREtf
TWV0YV9SOgorICAgICAgICByZXR1cm4gVktfUldJTjsgLy8gKDVDKSBSaWdodCBXaW5kb3dzIGtl
eSAoTmF0dXJhbCBrZXlib2FyZCkKKyAgICAgICAgLy8gVktfQVBQUyAoNUQpIEFwcGxpY2F0aW9u
cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAgIC8vIFZLX1NMRUVQICg1RikgQ29tcHV0
ZXIgU2xlZXAga2V5CisgICAgICAgIC8vIFZLX1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkK
KyAgICAgICAgLy8gVktfU1VCVFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKKyAgICAgICAgLy8gVktf
REVDSU1BTCAoNkUpIERlY2ltYWwga2V5CisgICAgICAgIC8vIFZLX0RJVklERSAoNkYpIERpdmlk
ZSBrZXkKKyAgICAgICAgLy8gaGFuZGxlZCBieSBrZXkgY29kZSBhYm92ZQogCi0gICAgICAgIGNh
c2UgR0RLX051bV9Mb2NrOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkg
TlVNIExPQ0sga2V5CisgICAgY2FzZSBHREtfTnVtX0xvY2s6CisgICAgICAgIHJldHVybiBWS19O
VU1MT0NLOyAvLyAoOTApIE5VTSBMT0NLIGtleQogCi0gICAgICAgIGNhc2UgR0RLX1Njcm9sbF9M
b2NrOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NDUk9MTDsgLy8gKDkxKSBTQ1JPTEwgTE9DSyBr
ZXkKKyAgICBjYXNlIEdES19TY3JvbGxfTG9jazoKKyAgICAgICAgcmV0dXJuIFZLX1NDUk9MTDsg
Ly8gKDkxKSBTQ1JPTEwgTE9DSyBrZXkKIAotICAgICAgICAgICAgLy8gVktfTFNISUZUIChBMCkg
TGVmdCBTSElGVCBrZXkKLSAgICAgICAgICAgIC8vIFZLX1JTSElGVCAoQTEpIFJpZ2h0IFNISUZU
IGtleQotICAgICAgICAgICAgLy8gVktfTENPTlRST0wgKEEyKSBMZWZ0IENPTlRST0wga2V5Ci0g
ICAgICAgICAgICAvLyBWS19SQ09OVFJPTCAoQTMpIFJpZ2h0IENPTlRST0wga2V5Ci0gICAgICAg
ICAgICAvLyBWS19MTUVOVSAoQTQpIExlZnQgTUVOVSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1JN
RU5VIChBNSkgUmlnaHQgTUVOVSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfQkFDSyAo
QTYpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBCYWNrIGtleQotICAgICAgICAgICAgLy8gVktf
QlJPV1NFUl9GT1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZvcndhcmQga2V5
Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX1JFRlJFU0ggKEE4KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgUmVmcmVzaCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfU1RPUCAoQTkp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdG9wIGtleQotICAgICAgICAgICAgLy8gVktfQlJP
V1NFUl9TRUFSQ0ggKEFBKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU2VhcmNoIGtleQotICAg
ICAgICAgICAgLy8gVktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJy
b3dzZXIgRmF2b3JpdGVzIGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9IT01FIChBQykg
V2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtleQotICAgICAgICAgICAg
Ly8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQot
ICAgICAgICAgICAgLy8gVktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVt
ZSBEb3duIGtleQotICAgICAgICAgICAgLy8gVktfVk9MVU1FX1VQIChBRikgV2luZG93cyAyMDAw
L1hQOiBWb2x1bWUgVXAga2V5Ci0gICAgICAgICAgICAvLyBWS19NRURJQV9ORVhUX1RSQUNLIChC
MCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQotICAgICAgICAgICAgLy8gVktfTUVE
SUFfUFJFVl9UUkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9YUDogUHJldmlvdXMgVHJhY2sga2V5Ci0g
ICAgICAgICAgICAvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1l
ZGlhIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFfUExBWV9QQVVTRSAoQjMpIFdpbmRvd3Mg
MjAwMC9YUDogUGxheS9QYXVzZSBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9N
QUlMIChCNCkgV2luZG93cyAyMDAwL1hQOiBTdGFydCBNYWlsIGtleQotICAgICAgICAgICAgLy8g
VktfTEFVTkNIX01FRElBX1NFTEVDVCAoQjUpIFdpbmRvd3MgMjAwMC9YUDogU2VsZWN0IE1lZGlh
IGtleQotICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5kb3dzIDIwMDAvWFA6
IFN0YXJ0IEFwcGxpY2F0aW9uIDEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfQVBQMiAo
QjcpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBrZXkKKyAgICAgICAgLy8g
VktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKKyAgICAgICAgLy8gVktfUlNISUZUIChBMSkg
UmlnaHQgU0hJRlQga2V5CisgICAgICAgIC8vIFZLX0xDT05UUk9MIChBMikgTGVmdCBDT05UUk9M
IGtleQorICAgICAgICAvLyBWS19SQ09OVFJPTCAoQTMpIFJpZ2h0IENPTlRST0wga2V5CisgICAg
ICAgIC8vIFZLX0xNRU5VIChBNCkgTGVmdCBNRU5VIGtleQorICAgICAgICAvLyBWS19STUVOVSAo
QTUpIFJpZ2h0IE1FTlUga2V5CisgICAgICAgIC8vIFZLX0JST1dTRVJfQkFDSyAoQTYpIFdpbmRv
d3MgMjAwMC9YUDogQnJvd3NlciBCYWNrIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX0ZPUldB
UkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKKyAgICAgICAgLy8g
VktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gg
a2V5CisgICAgICAgIC8vIFZLX0JST1dTRVJfU1RPUCAoQTkpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBTdG9wIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRvd3Mg
MjAwMC9YUDogQnJvd3NlciBTZWFyY2gga2V5CisgICAgICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJ
VEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBrZXkKKyAgICAgICAg
Ly8gVktfQlJPV1NFUl9IT01FIChBQykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFu
ZCBIb21lIGtleQorICAgICAgICAvLyBWS19WT0xVTUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9Y
UDogVm9sdW1lIE11dGUga2V5CisgICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93
cyAyMDAwL1hQOiBWb2x1bWUgRG93biBrZXkKKyAgICAgICAgLy8gVktfVk9MVU1FX1VQIChBRikg
V2luZG93cyAyMDAwL1hQOiBWb2x1bWUgVXAga2V5CisgICAgICAgIC8vIFZLX01FRElBX05FWFRf
VFJBQ0sgKEIwKSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5CisgICAgICAgIC8vIFZL
X01FRElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtl
eQorICAgICAgICAvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1l
ZGlhIGtleQorICAgICAgICAvLyBWS19NRURJQV9QTEFZX1BBVVNFIChCMykgV2luZG93cyAyMDAw
L1hQOiBQbGF5L1BhdXNlIE1lZGlhIGtleQorICAgICAgICAvLyBWS19MQVVOQ0hfTUFJTCAoQjQp
IFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKKyAgICAgICAgLy8gVktfTEFVTkNIX01F
RElBX1NFTEVDVCAoQjUpIFdpbmRvd3MgMjAwMC9YUDogU2VsZWN0IE1lZGlhIGtleQorICAgICAg
ICAvLyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRp
b24gMSBrZXkKKyAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIwMDAvWFA6
IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5CiAKLSAgICAgICAgICAgIC8vIFZLX09FTV8xIChCQSkg
VXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2Fy
ZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6
JyBrZXkKLSAgICAgICAgY2FzZSBHREtfc2VtaWNvbG9uOgotICAgICAgICBjYXNlIEdES19jb2xv
bjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9jYXNlICc7JzogY2FzZSAnOic6IHJl
dHVybiAweEJBOwotICAgICAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dzIDIwMDAv
WFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5Ci0gICAgICAgIGNhc2UgR0RL
X3BsdXM6Ci0gICAgICAgIGNhc2UgR0RLX2VxdWFsOgotICAgICAgICAgICAgcmV0dXJuIFZLX09F
TV9QTFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7Ci0gICAgICAgICAgICAv
LyBWS19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdp
b24sIHRoZSAnLCcga2V5Ci0gICAgICAgIGNhc2UgR0RLX2NvbW1hOgotICAgICAgICBjYXNlIEdE
S19sZXNzOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsgLy9jYXNlICcsJzogY2Fz
ZSAnPCc6IHJldHVybiAweEJDOwotICAgICAgICAgICAgLy8gVktfT0VNX01JTlVTIChCRCkgV2lu
ZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy0nIGtleQotICAgICAg
ICBjYXNlIEdES19taW51czoKLSAgICAgICAgY2FzZSBHREtfdW5kZXJzY29yZToKLSAgICAgICAg
ICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6IGNhc2UgJ18nOiByZXR1cm4gMHhC
RDsKLSAgICAgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5kb3dzIDIwMDAvWFA6IEZv
ciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5Ci0gICAgICAgIGNhc2UgR0RLX3Blcmlv
ZDoKLSAgICAgICAgY2FzZSBHREtfZ3JlYXRlcjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1f
UEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7Ci0gICAgICAgICAgICAv
LyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBr
ZXlib2FyZCwgdGhlICcvPycga2V5Ci0gICAgICAgIGNhc2UgR0RLX3NsYXNoOgotICAgICAgICBj
YXNlIEdES19xdWVzdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMjsgLy9jYXNlICcv
JzogY2FzZSAnPyc6IHJldHVybiAweEJGOwotICAgICAgICAgICAgLy8gVktfT0VNXzMgKEMwKSBV
c2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJk
LiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnYH4n
IGtleQotICAgICAgICBjYXNlIEdES19hc2NpaXRpbGRlOgotICAgICAgICBjYXNlIEdES19xdW90
ZWxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzM7IC8vY2FzZSAnYCc6IGNhc2UgJ34n
OiByZXR1cm4gMHhDMDsKLSAgICAgICAgICAgIC8vIFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAy
MDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkKLSAgICAg
ICAgY2FzZSBHREtfYnJhY2tldGxlZnQ6Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNlbGVmdDoKLSAg
ICAgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdbJzogY2FzZSAneyc6IHJldHVybiAw
eERCOwotICAgICAgICAgICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5lb3Vz
IGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZv
ciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQotICAgICAgICBjYXNlIEdE
S19iYWNrc2xhc2g6Ci0gICAgICAgIGNhc2UgR0RLX2JhcjoKLSAgICAgICAgICAgIHJldHVybiBW
S19PRU1fNTsgLy9jYXNlICdcXCc6IGNhc2UgJ3wnOiByZXR1cm4gMHhEQzsKLSAgICAgICAgICAg
IC8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBj
YW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJk
IGtleWJvYXJkLCB0aGUgJ119JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYnJhY2tldHJpZ2h0Ogot
ICAgICAgICBjYXNlIEdES19icmFjZXJpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV82
OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAweEREOwotICAgICAgICAgICAgLy8gVktf
T0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5
IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9h
cmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScga2V5Ci0gICAgICAgIGNhc2UgR0RL
X3F1b3RlcmlnaHQ6Ci0gICAgICAgIGNhc2UgR0RLX3F1b3RlZGJsOgotICAgICAgICAgICAgcmV0
dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyInOiByZXR1cm4gMHhERTsKLSAgICAg
ICAgICAgIC8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJz
OyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KLSAgICAgICAgICAgIC8vIFZLX09FTV8xMDIgKEUy
KSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhlIGJh
Y2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKLSAgICAgICAgICAgIC8vIFZL
X1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5UIDQuMCwgV2luZG93
cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKLSAgICAgICAgICAgIC8vIFZLX1BBQ0tFVCAoRTcp
IFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBpZiB0
aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tFVCBrZXkgaXMgdGhlIGxvdyB3b3JkIG9m
IGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQgZm9yIG5vbi1rZXlib2FyZCBpbnB1dCBt
ZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJlbWFyayBpbiBLRVlCRElOUFVULFNl
bmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQCi0gICAgICAgICAgICAvLyBWS19BVFRO
IChGNikgQXR0biBrZXkKLSAgICAgICAgICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5Ci0g
ICAgICAgICAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtleQotICAgICAgICAgICAgLy8gVktf
RVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5Ci0gICAgICAgICAgICAvLyBWS19QTEFZIChGQSkgUGxh
eSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1pPT00gKEZCKSBab29tIGtleQotICAgICAgICAgICAg
Ly8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAgICAgICAgICAgIC8v
IFZLX1BBMSAoRkQpIFBBMSBrZXkKLSAgICAgICAgICAgIC8vIFZLX09FTV9DTEVBUiAoRkUpIENs
ZWFyIGtleQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IC8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBj
YW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJk
IGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKKyAgICBjYXNlIEdES19zZW1pY29sb246CisgICAgY2Fz
ZSBHREtfY29sb246CisgICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9jYXNlICc7JzogY2FzZSAn
Oic6IHJldHVybiAweEJBOworICAgICAgICAvLyBWS19PRU1fUExVUyAoQkIpIFdpbmRvd3MgMjAw
MC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcrJyBrZXkKKyAgICBjYXNlIEdES19w
bHVzOgorICAgIGNhc2UgR0RLX2VxdWFsOgorICAgICAgICByZXR1cm4gVktfT0VNX1BMVVM7IC8v
Y2FzZSAnPSc6IGNhc2UgJysnOiByZXR1cm4gMHhCQjsKKyAgICAgICAgLy8gVktfT0VNX0NPTU1B
IChCQykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJywnIGtl
eQorICAgIGNhc2UgR0RLX2NvbW1hOgorICAgIGNhc2UgR0RLX2xlc3M6CisgICAgICAgIHJldHVy
biBWS19PRU1fQ09NTUE7IC8vY2FzZSAnLCc6IGNhc2UgJzwnOiByZXR1cm4gMHhCQzsKKyAgICAg
ICAgLy8gVktfT0VNX01JTlVTIChCRCkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkv
cmVnaW9uLCB0aGUgJy0nIGtleQorICAgIGNhc2UgR0RLX21pbnVzOgorICAgIGNhc2UgR0RLX3Vu
ZGVyc2NvcmU6CisgICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6IGNhc2Ug
J18nOiByZXR1cm4gMHhCRDsKKyAgICAgICAgLy8gVktfT0VNX1BFUklPRCAoQkUpIFdpbmRvd3Mg
MjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcuJyBrZXkKKyAgICBjYXNlIEdE
S19wZXJpb2Q6CisgICAgY2FzZSBHREtfZ3JlYXRlcjoKKyAgICAgICAgcmV0dXJuIFZLX09FTV9Q
RVJJT0Q7IC8vY2FzZSAnLic6IGNhc2UgJz4nOiByZXR1cm4gMHhCRTsKKyAgICAgICAgLy8gVktf
T0VNXzIgKEJGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5
IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9h
cmQsIHRoZSAnLz8nIGtleQorICAgIGNhc2UgR0RLX3NsYXNoOgorICAgIGNhc2UgR0RLX3F1ZXN0
aW9uOgorICAgICAgICByZXR1cm4gVktfT0VNXzI7IC8vY2FzZSAnLyc6IGNhc2UgJz8nOiByZXR1
cm4gMHhCRjsKKyAgICAgICAgLy8gVktfT0VNXzMgKEMwKSBVc2VkIGZvciBtaXNjZWxsYW5lb3Vz
IGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZv
ciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnYH4nIGtleQorICAgIGNhc2UgR0RLX2Fz
Y2lpdGlsZGU6CisgICAgY2FzZSBHREtfcXVvdGVsZWZ0OgorICAgICAgICByZXR1cm4gVktfT0VN
XzM7IC8vY2FzZSAnYCc6IGNhc2UgJ34nOiByZXR1cm4gMHhDMDsKKyAgICAgICAgLy8gVktfT0VN
XzQgKERCKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5
IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQs
IHRoZSAnW3snIGtleQorICAgIGNhc2UgR0RLX2JyYWNrZXRsZWZ0OgorICAgIGNhc2UgR0RLX2Jy
YWNlbGVmdDoKKyAgICAgICAgcmV0dXJuIFZLX09FTV80OyAvL2Nhc2UgJ1snOiBjYXNlICd7Jzog
cmV0dXJuIDB4REI7CisgICAgICAgIC8vIFZLX09FTV81IChEQykgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQ
OiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKKyAgICBjYXNlIEdE
S19iYWNrc2xhc2g6CisgICAgY2FzZSBHREtfYmFyOgorICAgICAgICByZXR1cm4gVktfT0VNXzU7
IC8vY2FzZSAnXFwnOiBjYXNlICd8JzogcmV0dXJuIDB4REM7CisgICAgICAgIC8vIFZLX09FTV82
IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBr
ZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0
aGUgJ119JyBrZXkKKyAgICBjYXNlIEdES19icmFja2V0cmlnaHQ6CisgICAgY2FzZSBHREtfYnJh
Y2VyaWdodDoKKyAgICAgICAgcmV0dXJuIFZLX09FTV82OyAvLyBjYXNlICddJzogY2FzZSAnfSc6
IHJldHVybiAweEREOworICAgICAgICAvLyBWS19PRU1fNyAoREUpIFVzZWQgZm9yIG1pc2NlbGxh
bmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9Y
UDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdzaW5nbGUtcXVvdGUvZG91Ymxl
LXF1b3RlJyBrZXkKKyAgICBjYXNlIEdES19xdW90ZXJpZ2h0OgorICAgIGNhc2UgR0RLX3F1b3Rl
ZGJsOgorICAgICAgICByZXR1cm4gVktfT0VNXzc7IC8vIGNhc2UgJ1wnJzogY2FzZSAnIic6IHJl
dHVybiAweERFOworICAgICAgICAvLyBWS19PRU1fOCAoREYpIFVzZWQgZm9yIG1pc2NlbGxhbmVv
dXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuCisgICAgICAgIC8vIFZLX09F
TV8xMDIgKEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkg
b3IgdGhlIGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKKyAgICAgICAg
Ly8gVktfUFJPQ0VTU0tFWSAoRTUpIFdpbmRvd3MgOTUvOTgvTWUsIFdpbmRvd3MgTlQgNC4wLCBX
aW5kb3dzIDIwMDAvWFA6IElNRSBQUk9DRVNTIGtleQorICAgICAgICAvLyBWS19QQUNLRVQgKEU3
KSBXaW5kb3dzIDIwMDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMgYXMgaWYg
dGhleSB3ZXJlIGtleXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cgd29yZCBv
ZiBhIDMyLWJpdCBWaXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQgaW5wdXQg
bWV0aG9kcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJTlBVVCxT
ZW5kSW5wdXQsIFdNX0tFWURPV04sIGFuZCBXTV9LRVlVUAorICAgICAgICAvLyBWS19BVFROIChG
NikgQXR0biBrZXkKKyAgICAgICAgLy8gVktfQ1JTRUwgKEY3KSBDclNlbCBrZXkKKyAgICAgICAg
Ly8gVktfRVhTRUwgKEY4KSBFeFNlbCBrZXkKKyAgICAgICAgLy8gVktfRVJFT0YgKEY5KSBFcmFz
ZSBFT0Yga2V5CisgICAgICAgIC8vIFZLX1BMQVkgKEZBKSBQbGF5IGtleQorICAgICAgICAvLyBW
S19aT09NIChGQikgWm9vbSBrZXkKKyAgICAgICAgLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQg
Zm9yIGZ1dHVyZSB1c2UKKyAgICAgICAgLy8gVktfUEExIChGRCkgUEExIGtleQorICAgICAgICAv
LyBWS19PRU1fQ0xFQVIgKEZFKSBDbGVhciBrZXkKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKIH0KIAogUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJv
YXJkRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewotICAgIG1faXNLZXlVcCA9IGV2ZW50LT50eXBl
ID09IEdES19LRVlfUkVMRUFTRTsKKyAgICBtX2lzS2V5VXAgPSAoZXZlbnQtPnR5cGUgPT0gR0RL
X0tFWV9SRUxFQVNFKTsKICAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPmtleS5zdGF0ZSAmIEdES19T
SElGVF9NQVNLICE9IDA7CiAgICAgbV9jdHJsS2V5ID0gZXZlbnQtPmtleS5zdGF0ZSAmIEdES19D
T05UUk9MX01BU0sgIT0gMDsKICAgICBtX2FsdEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtf
TU9EMV9NQVNLICE9IDA7CkBAIC00NjcsNiArNTE2LDkgQEAKICAgICBtX3VubW9kaWZpZWRUZXh0
ID0gZXZlbnQtPmtleS5zdHJpbmc7CiAgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmll
ckZvckdka0tleUNvZGUoZXZlbnQtPmtleS5rZXl2YWwpOwogICAgIG1fV2luZG93c0tleUNvZGUg
PSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50LT5rZXkua2V5dmFsKTsKKyAgICBpZiAo
bV9XaW5kb3dzS2V5Q29kZSA9PSAwKQorICAgICAgICBwcmludGYoIiBCQUQgS0VZIFBSRVNTICVk
IFxuIixldmVudC0+a2V5LmtleXZhbCk7CisgICAgYXNzZXJ0KG1fV2luZG93c0tleUNvZGUgIT0g
MCk7CiAgICAgbV9hdXRvUmVwZWF0ID0gZmFsc2U7CiAgICAgbV9pc0tleXBhZCA9IGZhbHNlOwog
CkBAIC00NzYsNCArNTI4LDIyIEBACiAgICAgfQogfQogCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6
OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIHBhcmVu
dCwgYm9vbCByZXBlYXQpCit7CisgICAgbV9pc0tleVVwID0gcGFyZW50Lm1faXNLZXlVcDsKKyAg
ICBtX3NoaWZ0S2V5ID0gcGFyZW50Lm1fc2hpZnRLZXk7CisgICAgbV9jdHJsS2V5ID0gcGFyZW50
Lm1fY3RybEtleTsKKyAgICBtX2FsdEtleSA9IHBhcmVudC5tX2FsdEtleTsKKyAgICBtX21ldGFL
ZXkgPSBwYXJlbnQubV9tZXRhS2V5OworICAgIG1fdGV4dCA9IHBhcmVudC5tX3RleHQ7CisgICAg
bV91bm1vZGlmaWVkVGV4dCA9IHBhcmVudC5tX3VubW9kaWZpZWRUZXh0OworICAgIG1fa2V5SWRl
bnRpZmllciA9IHBhcmVudC5tX2tleUlkZW50aWZpZXI7CisgICAgbV9XaW5kb3dzS2V5Q29kZSA9
IHBhcmVudC5tX1dpbmRvd3NLZXlDb2RlOworICAgIG1faXNLZXlwYWQgPSBwYXJlbnQubV9pc0tl
eXBhZDsKKyAgICBtX3RleHQgPSBwYXJlbnQubV90ZXh0OworICAgIG1fYXV0b1JlcGVhdCA9IHJl
cGVhdDsKIH0KKworfQorLy8gdmltOnRzPTQ6ZXQKKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1t
ZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTIyLDE3ICsyMiwxNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKKyNkZWZpbmUgV0lOMzJfQ09NUElMRV9IQUNLCisKICNpbmNs
dWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgIkNTdHJpbmcuaCIK
ICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiVGV4dEZpZWxkLmgiCi0jaW5jbHVkZSAiRmls
ZUNob29zZXIuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiTGlzdEJveC5oIgogI2lu
Y2x1ZGUgIkludFBvaW50LmgiCkBAIC00MSwxMSArNDEsNyBAQAogI2luY2x1ZGUgIlNsaWRlci5o
IgogI2luY2x1ZGUgIkN1cnNvci5oIgogI2luY2x1ZGUgImxvYWRlci5oIgotI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJh
ci5oIgotI2luY2x1ZGUgIlNjcm9sbEJhci5oIgotI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRl
ICJTY3JlZW4uaCIKQEAgLTU1LDMzOCArNTEsNTI5IEBACiAjaW5jbHVkZSAiUGx1Z0luSW5mb1N0
b3JlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJGcmFtZUdkay5oIgot
I2luY2x1ZGUgIkJyb3dzZXJFeHRlbnNpb25HZGsuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRSZXF1
ZXN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHZGsuaCIKICNpbmNsdWRlICJUZXh0Qm91bmRh
cmllcy5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJFZGl0Q29tbWFu
ZC5oIgotI2luY2x1ZGUgIkljb24uaCIKLSNpbmNsdWRlICJJY29uTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiSWNvbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRl
ICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIK
KyNpbmNsdWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVjdCBQbGF0Zm9ybURhdGFTdHJ1Y3QKKworI2Rl
ZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBM
RU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElP
Tl9fKTsgfSB3aGlsZSgwKQorCitXaWRnZXQqIEZyYW1lR2RrOjpjcmVhdGVKYXZhQXBwbGV0V2lk
Z2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mKQogewotfTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQogCi1z
dHJ1Y3QgUGxhdGZvcm1SZXNwb25zZVN0cnVjdAordm9pZCBUZXh0RmllbGQ6OnNlbGVjdEFsbCgp
CiB7Ci19OworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9Cit2b2lkIFRleHRGaWVsZDo6YWRkU2Vh
cmNoUmVzdWx0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQoraW50IFRleHRGaWVsZDo6
c2VsZWN0aW9uU3RhcnQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9Citib29sIFRleHRGaWVsZDo6aGFzU2VsZWN0ZWRUZXh0KCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorU3RyaW5nIFRleHRGaWVsZDo6
c2VsZWN0ZWRUZXh0KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KK3ZvaWQgVGV4dEZpZWxkOjpzZXRBdXRvU2F2ZU5hbWUoU3RyaW5nIGNv
bnN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorYm9vbCBUZXh0RmllbGQ6OmNoZWNr
c0Rlc2NlbmRhbnRzRm9yRm9jdXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQordm9pZCBUZXh0RmllbGQ6OnNldFNlbGVjdGlvbihpbnQsIGlu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBUZXh0RmllbGQ6OnNldE1heFJl
c3VsdHMoaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Citib29sIFRleHRGaWVsZDo6
ZWRpdGVkKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQogCi0jZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1F
OiBVTklNUExFTUVOVEVEOiAlcyBpbiAlczolZFxuIiwgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywg
X19MSU5FX18pOyB9IHdoaWxlKDApCitTbGlkZXI6OlNsaWRlcigpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KK0ludFNpemUgU2xpZGVyOjpzaXplSGludCgpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50U2l6ZSgpOworfQordm9pZCBTbGlkZXI6OnNl
dFZhbHVlKGRvdWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBTbGlkZXI6
OnNldE1heFZhbHVlKGRvdWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBT
bGlkZXI6OnNldE1pblZhbHVlKGRvdWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
U2xpZGVyOjp+U2xpZGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBTbGlk
ZXI6OnNldEZvbnQoV2ViQ29yZTo6Rm9udCBjb25zdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KK2RvdWJsZSBTbGlkZXI6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQogCi12b2lkIEZyYW1lVmlldzo6dXBkYXRlQm9yZGVyKCkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29sIEZyYW1lVmlldzo6cGFzc01vdXNlUHJlc3NFdmVu
dFRvU2Nyb2xsYmFyKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBQbGF0Zm9ybVNjcm9s
bGJhciopIHsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIEZyYW1lVmlldzo6cGFzc01vdXNlUHJlc3NF
dmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIEZyYW1lKikgeyBy
ZXR1cm4gdHJ1ZTsgfQotYm9vbCBGcmFtZVZpZXc6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3Vi
ZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIEZyYW1lKikgeyByZXR1cm4gdHJ1
ZTsgfQotYm9vbCBGcmFtZVZpZXc6OnBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUoTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIEZyYW1lKikgeyByZXR1cm4gdHJ1ZTsgfQotYm9vbCBG
cmFtZVZpZXc6OnBhc3NXaGVlbEV2ZW50VG9TdWJmcmFtZShQbGF0Zm9ybVdoZWVsRXZlbnQmLCBG
cmFtZSopIHsgcmV0dXJuIHRydWU7IH0KK3ZvaWQgTGlzdEJveDo6c2V0U2VsZWN0ZWQoaW50LCBi
b29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitJbnRTaXplIExpc3RCb3g6OnNpemVG
b3JOdW1iZXJPZkxpbmVzKGludCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBJbnRTaXplKCk7Cit9Citib29sIExpc3RCb3g6OmlzU2VsZWN0ZWQoaW50KSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIExpc3RC
b3g6OmFwcGVuZEl0ZW0oRGVwcmVjYXRlZFN0cmluZyBjb25zdCYsIExpc3RCb3hJdGVtVHlwZSwg
Ym9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBMaXN0Qm94Ojpkb25lQXBw
ZW5kaW5nSXRlbXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lkIExpc3RCb3g6
OnNldFdyaXRpbmdEaXJlY3Rpb24oVGV4dERpcmVjdGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQordm9pZCBMaXN0Qm94OjpzZXRFbmFibGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KK3ZvaWQgTGlzdEJveDo6Y2xlYXIoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9Citib29sIExpc3RCb3g6OmNoZWNrc0Rlc2NlbmRhbnRzRm9yRm9jdXMoKSBjb25zdAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLXZvaWQgV2lkZ2V0
OjplbmFibGVGbHVzaERyYXdpbmcoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgV2lkZ2V0
Ojppc0VuYWJsZWQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1XaWRn
ZXQ6OkZvY3VzUG9saWN5IFdpZGdldDo6Zm9jdXNQb2xpY3koKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiBOb0ZvY3VzOyB9Ci12b2lkIFdpZGdldDo6ZGlzYWJsZUZsdXNoRHJhd2lu
ZygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotR3JhcGhpY3NDb250ZXh0KiBXaWRnZXQ6OmxvY2tE
cmF3aW5nRm9jdXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIFdpZGdl
dDo6dW5sb2NrRHJhd2luZ0ZvY3VzKEdyYXBoaWNzQ29udGV4dCopIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotdm9pZCBXaWRnZXQ6OnJlbW92ZUZyb21QYXJlbnQoKSB7IH0KIAotdm9pZCBUZXh0Rmll
bGQ6OnNlbGVjdEFsbCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBUZXh0RmllbGQ6OmFk
ZFNlYXJjaFJlc3VsdCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotaW50IFRleHRGaWVsZDo6c2Vs
ZWN0aW9uU3RhcnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29s
IFRleHRGaWVsZDo6aGFzU2VsZWN0ZWRUZXh0KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQotU3RyaW5nIFRleHRGaWVsZDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRBdXRv
U2F2ZU5hbWUoU3RyaW5nIGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29sIFRleHRG
aWVsZDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFRleHRGaWVsZDo6c2V0U2VsZWN0aW9uKGludCwgaW50
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRNYXhSZXN1bHRzKGlu
dCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29sIFRleHRGaWVsZDo6ZWRpdGVkKCkgY29uc3Qg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorV2lkZ2V0OjpGb2N1c1BvbGljeSBTbGlk
ZXI6OmZvY3VzUG9saWN5KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBDbGlja0ZvY3VzOworfQorV2lkZ2V0OjpGb2N1c1BvbGljeSBMaXN0Qm94Ojpmb2N1c1Bv
bGljeSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gQ2xpY2tG
b2N1czsKK30KK1dpZGdldDo6Rm9jdXNQb2xpY3kgVGV4dEZpZWxkOjpmb2N1c1BvbGljeSgpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gQ2xpY2tGb2N1czsKK30K
IAotU2xpZGVyOjpTbGlkZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUludFNpemUgU2xpZGVy
OjpzaXplSGludCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFNpemUoKTsg
fQotdm9pZCBTbGlkZXI6OnNldFZhbHVlKGRvdWJsZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12
b2lkIFNsaWRlcjo6c2V0TWF4VmFsdWUoZG91YmxlKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZv
aWQgU2xpZGVyOjpzZXRNaW5WYWx1ZShkb3VibGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotU2xp
ZGVyOjp+U2xpZGVyKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFNsaWRlcjo6c2V0Rm9u
dChXZWJDb3JlOjpGb250IGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1kb3VibGUgU2xp
ZGVyOjp2YWx1ZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK0N1cnNv
cjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CiAKLXZvaWQgTGlzdEJveDo6c2V0U2VsZWN0ZWQoaW50LCBib29sKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KLUludFNpemUgTGlzdEJveDo6c2l6ZUZvck51bWJlck9mTGluZXMoaW50KSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBJbnRTaXplKCk7IH0KLWJvb2wgTGlzdEJv
eDo6aXNTZWxlY3RlZChpbnQpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0K
LXZvaWQgTGlzdEJveDo6YXBwZW5kSXRlbShEZXByZWNhdGVkU3RyaW5nIGNvbnN0JiwgTGlzdEJv
eEl0ZW1UeXBlLCBib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgTGlzdEJveDo6ZG9u
ZUFwcGVuZGluZ0l0ZW1zKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIExpc3RCb3g6OnNl
dFdyaXRpbmdEaXJlY3Rpb24oVGV4dERpcmVjdGlvbikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12
b2lkIExpc3RCb3g6OnNldEVuYWJsZWQoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lk
IExpc3RCb3g6OmNsZWFyKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29sIExpc3RCb3g6OmNo
ZWNrc0Rlc2NlbmRhbnRzRm9yRm9jdXMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biAwOyB9CitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChjb25zdCBDdXJy
ZW50RXZlbnRUYWcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitTdHJpbmcgV2ViQ29y
ZTo6c2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBTdHJpbmcoKTsKK30KIAotV2lkZ2V0OjpGb2N1c1BvbGljeSBTbGlkZXI6
OmZvY3VzUG9saWN5KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9Gb2N1czsg
fQotV2lkZ2V0OjpGb2N1c1BvbGljeSBMaXN0Qm94Ojpmb2N1c1BvbGljeSgpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5vRm9jdXM7IH0KLVdpZGdldDo6Rm9jdXNQb2xpY3kgVGV4
dEZpZWxkOjpmb2N1c1BvbGljeSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5v
Rm9jdXM7IH0KK2ludCBXZWJDb3JlOjpmaW5kTmV4dFNlbnRlbmNlRnJvbUluZGV4KFVDaGFyIGNv
bnN0KiwgaW50LCBpbnQsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KK3ZvaWQgV2ViQ29yZTo6ZmluZFNlbnRlbmNlQm91bmRhcnkoVUNoYXIgY29uc3Qq
LCBpbnQsIGludCwgaW50KiwgaW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQoraW50
IFdlYkNvcmU6OmZpbmROZXh0V29yZEZyb21JbmRleChVQ2hhciBjb25zdCosIGludCwgaW50LCBi
b29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLUN1cnNv
cjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
IAotUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgQ3VycmVudEV2
ZW50VGFnJikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1TdHJpbmcgV2ViQ29yZTo6c2VhcmNoYWJs
ZUluZGV4SW50cm9kdWN0aW9uKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7
IH0KK3ZvaWQgRnJhbWVHZGs6OmZvY3VzV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQordm9pZCBGcmFtZUdkazo6dW5mb2N1c1dpbmRvdygpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KK2Jvb2wgRnJhbWVHZGs6OmxvY2F0aW9uYmFyVmlzaWJsZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK3ZvaWQgRnJhbWVHZGs6Omlzc3VlUmVk
b0NvbW1hbmQodm9pZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorS0pTOjpCaW5kaW5n
czo6SW5zdGFuY2UqIEZyYW1lR2RrOjpnZXRPYmplY3RJbnN0YW5jZUZvcldpZGdldChXaWRnZXQg
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2UqIEZyYW1lR2RrOjpnZXRFbWJlZEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdl
dCAqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CitLSlM6OkJp
bmRpbmdzOjpSb290T2JqZWN0KiBGcmFtZUdkazo6YmluZGluZ1Jvb3RPYmplY3QoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Citib29sIEZyYW1lR2RrOjpjYW5S
ZWRvKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQor
Ym9vbCBGcmFtZUdkazo6Y2FuVW5kbygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KK3ZvaWQgRnJhbWVHZGs6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8o
UGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4pCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KK2Jvb2wgRnJhbWVHZGs6OnJ1bkphdmFTY3JpcHRQcm9tcHQoU3RyaW5nIGNvbnN0Jiwg
U3RyaW5nIGNvbnN0JiwgU3RyaW5nICYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVHZGs6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQordm9pZCBGcmFt
ZUdkazo6cHJpbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitLSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZSogRnJhbWVHZGs6OmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCop
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK3ZvaWQgRnJhbWVH
ZGs6Omlzc3VlQ3V0Q29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQg
RnJhbWVHZGs6Omlzc3VlQ29weUNvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
Cit2b2lkIEZyYW1lR2RrOjppc3N1ZVVuZG9Db21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQordm9pZCBGcmFtZUdkazo6aXNzdWVQYXN0ZUNvbW1hbmQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9Cit2b2lkIEZyYW1lR2RrOjpzY2hlZHVsZUNsb3NlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorYm9vbCBGcmFtZUdkazo6bWVudWJhclZpc2libGUoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Citib29sIEZyYW1lR2RrOjpw
ZXJzb25hbGJhclZpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9Citib29sIEZyYW1lR2RrOjpzdGF0dXNiYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorYm9vbCBGcmFtZUdkazo6dG9vbGJhclZpc2li
bGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIEZy
YW1lR2RrOjppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9Citib29sIEZyYW1lR2RrOjpjYW5QYXN0ZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAotaW50IFdlYkNvcmU6OmZpbmROZXh0U2VudGVuY2VG
cm9tSW5kZXgoVUNoYXIgY29uc3QqLCBpbnQsIGludCwgYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gMDsgfQotdm9pZCBXZWJDb3JlOjpmaW5kU2VudGVuY2VCb3VuZGFyeShVQ2hhciBj
b25zdCosIGludCwgaW50LCBpbnQqLCBpbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWludCBX
ZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgoVUNoYXIgY29uc3QqLCBpbnQsIGludCwgYm9v
bCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorZW51bSBXZWJDb3JlOjpPYmplY3RD
b250ZW50VHlwZSBGcmFtZUdkazo6b2JqZWN0Q29udGVudFR5cGUoS1VSTCBjb25zdCYsIFN0cmlu
ZyBjb25zdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gKE9iamVjdENv
bnRlbnRUeXBlKTA7Cit9Citib29sIEZyYW1lR2RrOjpjYW5Hb0JhY2tPckZvcndhcmQoaW50KSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIEZy
YW1lR2RrOjppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CitQbHVnaW4qIEZyYW1lR2RrOjpjcmVhdGVQbHVnaW4oRWxlbWVudCosIEtV
UkwgY29uc3QmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
U3RyaW5nIGNvbnN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVZlY3RvcjxjaGFyPiBTZXJ2ZVN5bmNocm9ub3Vz
UmVxdWVzdChMb2FkZXIqLERvY0xvYWRlciosUmVzb3VyY2VMb2FkZXIqLEtVUkwmLERlcHJlY2F0
ZWRTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8Y2hhcj4oKTsgfQot
CitpbnQgV2ViQ29yZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoY29uc3QgUGFnZSopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKIH0KK2Jvb2wgV2ViQ29yZTo6c2Ny
ZWVuSXNNb25vY2hyb21lKGNvbnN0IFBhZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQogCi12b2lkIEZyYW1lR2RrOjpmb2N1c1dpbmRvdygpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUdkazo6dW5mb2N1c1dpbmRvdygpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotYm9vbCBGcmFtZUdkazo6bG9jYXRpb25iYXJWaXNpYmxlKCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFtZUdkazo6aXNzdWVSZWRvQ29tbWFu
ZCh2b2lkKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBG
cmFtZUdkazo6Z2V0T2JqZWN0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0ICopIHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIDA7IH0KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6
Z2V0RW1iZWRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQgKikgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQotS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogRnJhbWVHZGs6OmJpbmRpbmdS
b290T2JqZWN0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotV2lkZ2V0KiBGcmFt
ZUdkazo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
MDsgfQotYm9vbCBGcmFtZUdkazo6Y2FuUmVkbygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6OmNhblVuZG8oKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZyYW1lR2RrOjpyZWdpc3RlckNvbW1hbmRGb3JSZWRv
KFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+KSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
LWJvb2wgRnJhbWVHZGs6OnJ1bkphdmFTY3JpcHRQcm9tcHQoU3RyaW5nIGNvbnN0JiwgU3RyaW5n
IGNvbnN0JiwgU3RyaW5nICYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wg
RnJhbWVHZGs6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKSB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiBmYWxzZTsgfQotdm9pZCBGcmFtZUdkazo6cHJpbnQoKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0QXBwbGV0SW5zdGFu
Y2VGb3JXaWRnZXQoV2lkZ2V0KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9v
bCBGcmFtZUdkazo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFtZUdkazo6aXNzdWVDdXRDb21tYW5kKCkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjppc3N1ZUNvcHlDb21tYW5kKCkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjpvcGVuVVJMUmVxdWVzdChzdHJ1
Y3QgV2ViQ29yZTo6RnJhbWVMb2FkUmVxdWVzdCBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQotdm9pZCBGcmFtZUdkazo6aXNzdWVVbmRvQ29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQotU3RyaW5nIEZyYW1lR2RrOjptaW1lVHlwZUZvckZpbGVOYW1lKFN0cmluZyBjb25zdCYpIGNv
bnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIEZyYW1lR2Rr
Ojppc3N1ZVBhc3RlQ29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUdk
azo6c2NoZWR1bGVDbG9zZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUdkazo6
bWFya01pc3NwZWxsaW5ncyhXZWJDb3JlOjpTZWxlY3Rpb24gY29uc3QmKSB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KLWJvb2wgRnJhbWVHZGs6Om1lbnViYXJWaXNpYmxlKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6cGVyc29uYWxiYXJWaXNpYmxlKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6c3RhdHVzYmFyVmlz
aWJsZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6OnRv
b2xiYXJWaXNpYmxlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFt
ZUdkazo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29s
IEZyYW1lR2RrOjpjYW5QYXN0ZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KLWVudW0gV2ViQ29yZTo6T2JqZWN0Q29udGVudFR5cGUgRnJhbWVHZGs6Om9iamVjdENvbnRl
bnRUeXBlKEtVUkwgY29uc3QmLCBTdHJpbmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiAoT2JqZWN0Q29udGVudFR5cGUpMDsgfQotYm9vbCBGcmFtZUdkazo6Y2FuR29CYWNrT3JG
b3J3YXJkKGludCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBG
cmFtZUdkazo6aXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9Ci1ib29sIEZyYW1lR2RrOjppc0xvYWRUeXBlUmVsb2FkKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gZmFsc2U7IH0KLUtVUkwgRnJhbWVHZGs6Om9yaWdpbmFsUmVxdWVzdFVSTCgp
IGNvbnN0IHsgcmV0dXJuIEtVUkwoKTsgfQotUGx1Z2luKiBGcmFtZUdkazo6Y3JlYXRlUGx1Z2lu
KEVsZW1lbnQqLCBLVVJMIGNvbnN0JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIFN0cmluZyBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KLQotYm9vbCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpjYW5SdW5Nb2RhbCgpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6Y3JlYXRlTmV3
V2luZG93KHN0cnVjdCBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1ZXN0IGNvbnN0Jiwgc3RydWN0IFdl
YkNvcmU6OldpbmRvd0FyZ3MgY29uc3QmLCBGcmFtZSomKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
LXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6Y3JlYXRlTmV3V2luZG93KHN0cnVjdCBXZWJDb3Jl
OjpGcmFtZUxvYWRSZXF1ZXN0IGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29sIEJy
b3dzZXJFeHRlbnNpb25HZGs6OmNhblJ1bk1vZGFsTm93KCkgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQotdm9pZCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpydW5Nb2RhbCgpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotdm9pZCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpnb0JhY2tPckZvcndhcmQo
aW50KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUtVUkwgQnJvd3NlckV4dGVuc2lvbkdkazo6aGlz
dG9yeVVSTChpbnQgZGlzdGFuY2UpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEtVUkwoKTsg
fQotQnJvd3NlckV4dGVuc2lvbkdkazo6QnJvd3NlckV4dGVuc2lvbkdkayhXZWJDb3JlOjpGcmFt
ZSopIHsgfQotdm9pZCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpzZXRUeXBlZEljb25VUkwoS1VSTCBj
b25zdCYsIGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpzZXRJ
Y29uVVJMKEtVUkwgY29uc3QmKSB7IH0KLWludCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpnZXRIaXN0
b3J5TGVuZ3RoKCkgeyByZXR1cm4gMDsgfQotCi1pbnQgV2ViQ29yZTo6c2NyZWVuRGVwdGhQZXJD
b21wb25lbnQoY29uc3QgUGFnZSopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJv
b2wgV2ViQ29yZTo6c2NyZWVuSXNNb25vY2hyb21lKGNvbnN0IFBhZ2UqKSB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiBmYWxzZTsgfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzICht
b3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1bik6ICovCiAvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgQ3Vyc29yIGxvY2FsQ3Vy
c29yOwotY29uc3QgQ3Vyc29yJiBXZWJDb3JlOjptb3ZlQ3Vyc29yKCkgeyByZXR1cm4gbG9jYWxD
dXJzb3I7IH0KK2NvbnN0IEN1cnNvciYgV2ViQ29yZTo6bW92ZUN1cnNvcigpCit7CisgICAgcmV0
dXJuIGxvY2FsQ3Vyc29yOworfQogCiBib29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3NpYmlsaXR5
RW5hYmxlZCA9IGZhbHNlOwogCi1ib29sIFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyhEZXByZWNh
dGVkU3RyaW5nIGNvbnN0JikgeyByZXR1cm4gZmFsc2U7IH0KLVN0cmluZyBXZWJDb3JlOjpzdWJt
aXRCdXR0b25EZWZhdWx0TGFiZWwoKSB7IHJldHVybiAiU3VibWl0IjsgfQotU3RyaW5nIFdlYkNv
cmU6OmlucHV0RWxlbWVudEFsdFRleHQoKSB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7IH0K
LVN0cmluZyBXZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCgpIHsgcmV0dXJuICJSZXNl
dCI7IH0KLVN0cmluZyBXZWJDb3JlOjpmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkgeyByZXR1
cm4gIkJyb3dzZS4uLiI7IH0KLVN0cmluZyBXZWJDb3JlOjpmaWxlQnV0dG9uTm9GaWxlU2VsZWN0
ZWRMYWJlbCgpIHsgcmV0dXJuIFN0cmluZygpOyB9Citib29sIFdlYkNvcmU6Omhpc3RvcnlDb250
YWlucyhEZXByZWNhdGVkU3RyaW5nIGNvbnN0JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CitT
dHJpbmcgV2ViQ29yZTo6c3VibWl0QnV0dG9uRGVmYXVsdExhYmVsKCkKK3sKKyAgICByZXR1cm4g
IlN1Ym1pdCI7Cit9CitTdHJpbmcgV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4dCgpCit7Cisg
ICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKK30KK1N0cmluZyBXZWJDb3JlOjpyZXNldEJ1
dHRvbkRlZmF1bHRMYWJlbCgpCit7CisgICAgcmV0dXJuICJSZXNldCI7Cit9CitTdHJpbmcgV2Vi
Q29yZTo6ZGVmYXVsdExhbmd1YWdlKCkKK3sKKyAgICByZXR1cm4gImVuIjsKK30KK1N0cmluZyBX
ZWJDb3JlOjpmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKK3sKKyAgICByZXR1cm4gIkNob29z
ZSBGaWxlIjsKK30KIAotU3RyaW5nIFdlYkNvcmU6OmRlZmF1bHRMYW5ndWFnZSgpIHsgcmV0dXJu
ICJlbiI7IH0KK3ZvaWQgV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeShVQ2hhciBjb25zdCogc3Ry
LCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQoreworICAgICpz
dGFydCA9IHBvc2l0aW9uOworICAgICplbmQgPSBwb3NpdGlvbjsKK30KIAotdm9pZCBXZWJDb3Jl
OjpmaW5kV29yZEJvdW5kYXJ5KFVDaGFyIGNvbnN0KiBzdHIsIGludCBsZW4sIGludCBwb3NpdGlv
biwgaW50KiBzdGFydCwgaW50KiBlbmQpIHsqc3RhcnQgPSBwb3NpdGlvbjsgKmVuZCA9IHBvc2l0
aW9uOyB9CitQbHVnaW5JbmZvKlBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBs
dWdpbkF0SW5kZXgodW5zaWduZWQpCit7CisgICAgcmV0dXJuIDA7Cit9Cit1bnNpZ25lZCBQbHVn
SW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KK2Jv
b2wgV2ViQ29yZTo6UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQordm9pZCBXZWJDb3JlOjpyZWZy
ZXNoUGx1Z2lucyhib29sKQoreyB9CiAKLVBsdWdpbkluZm8qUGx1Z0luSW5mb1N0b3JlOjpjcmVh
dGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkgeyByZXR1cm4gMDt9Ci11bnNp
Z25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQot
Ym9vbCBXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBs
dWdpbnMoYm9vbCkgeyB9Cit2b2lkIEZyYW1lR2RrOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCit7
IH0KK3ZvaWQgRnJhbWVHZGs6OnBhcnRDbGVhcmVkSW5CZWdpbigpCit7IH0KK3ZvaWQgRnJhbWVH
ZGs6OmNyZWF0ZUVtcHR5RG9jdW1lbnQoKQoreyB9CitTdHJpbmcgRnJhbWVHZGs6Om92ZXJyaWRl
TWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9Cit2b2lkIEZyYW1l
R2RrOjpoYW5kbGVkT25sb2FkRXZlbnRzKCkKK3sgfQorUmFuZ2UqIEZyYW1lR2RrOjptYXJrZWRU
ZXh0UmFuZ2UoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorYm9vbCBGcmFtZUdkazo6bGFz
dEV2ZW50SXNNb3VzZVVwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9Cit2b2lkIEZy
YW1lR2RrOjphZGRNZXNzYWdlVG9Db25zb2xlKFN0cmluZyBjb25zdCYsIHVuc2lnbmVkIGludCwg
U3RyaW5nIGNvbnN0JikKK3sgfQogCi12b2lkIFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjphc3Nl
bWJsZVJlc3BvbnNlSGVhZGVycygpIGNvbnN0IHsgfQotdm9pZCBXZWJDb3JlOjpSZXNvdXJjZUxv
YWRlcjo6cmV0cmlldmVDaGFyc2V0KCkgY29uc3QgeyB9Cit2b2lkIEZyYW1lR2RrOjpzYXZlRG9j
dW1lbnRTdGF0ZSgpCit7IH0KK3ZvaWQgRnJhbWVHZGs6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8o
UGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4pCit7IH0KK3ZvaWQgRnJhbWVHZGs6OmNs
ZWFyVW5kb1JlZG9PcGVyYXRpb25zKHZvaWQpCit7IH0KK1N0cmluZyBGcmFtZUdkazo6aW5jb21p
bmdSZWZlcnJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQordm9pZCBGcmFt
ZUdkazo6bWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3JkcyhXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb24gY29uc3QmKQoreyB9CiAKLXZvaWQgRnJhbWVHZGs6OnJlc3RvcmVEb2N1bWVudFN0YXRl
KCkgeyB9Ci12b2lkIEZyYW1lR2RrOjpwYXJ0Q2xlYXJlZEluQmVnaW4oKSB7IH0KLXZvaWQgRnJh
bWVHZGs6OmNyZWF0ZUVtcHR5RG9jdW1lbnQoKSB7IH0KLVN0cmluZyBGcmFtZUdkazo6b3ZlcnJp
ZGVNZWRpYVR5cGUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotdm9pZCBGcmFtZUdkazo6
aGFuZGxlZE9ubG9hZEV2ZW50cygpIHsgfQotUmFuZ2UqIEZyYW1lR2RrOjptYXJrZWRUZXh0UmFu
Z2UoKSBjb25zdCB7IHJldHVybiAwOyB9Ci1ib29sIEZyYW1lR2RrOjpsYXN0RXZlbnRJc01vdXNl
VXAoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotdm9pZCBGcmFtZUdkazo6YWRkTWVzc2FnZVRv
Q29uc29sZShTdHJpbmcgY29uc3QmLCB1bnNpZ25lZCBpbnQsIFN0cmluZyBjb25zdCYpIHsgfQot
Ym9vbCBGcmFtZUdkazo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYsIGNv
bnN0IFNlbGVjdGlvbiYsIFdlYkNvcmU6OkVBZmZpbml0eSwgYm9vbCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQotYm9vbCBGcmFtZUdkazo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVj
dGlvbiYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLXZvaWQgRnJhbWVHZGs6OnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oV2ViQ29yZTo6U2VsZWN0aW9uIGNvbnN0JiwgYm9vbCkgeyB9Ci1GcmFt
ZSogRnJhbWVHZGs6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpIHsgcmV0
dXJuIDA7IH0KIAotdm9pZCBGcmFtZUdkazo6c2F2ZURvY3VtZW50U3RhdGUoKSB7IH0KLXZvaWQg
RnJhbWVHZGs6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0
Q29tbWFuZD4pIHsgfQotdm9pZCBGcmFtZUdkazo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnModm9p
ZCkgeyB9Ci1TdHJpbmcgRnJhbWVHZGs6OmluY29taW5nUmVmZXJyZXIoKSBjb25zdCB7IHJldHVy
biBTdHJpbmcoKTsgfQotdm9pZCBGcmFtZUdkazo6bWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRX
b3JkcyhXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24gY29uc3QmKSB7IH0KLXZvaWQgRnJhbWVHZGs6
OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBTZWxlY3Rpb24mKSB7IH0KK1RleHRGaWVs
ZDo6VGV4dEZpZWxkKFRleHRGaWVsZDo6VHlwZSkKK3sgfQorVGV4dEZpZWxkOjp+VGV4dEZpZWxk
KCkKK3sgfQordm9pZCBUZXh0RmllbGQ6OnNldEZvbnQoV2ViQ29yZTo6Rm9udCBjb25zdCYpCit7
IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRBbGlnbm1lbnQoSG9yaXpvbnRhbEFsaWdubWVudCkKK3sg
fQordm9pZCBUZXh0RmllbGQ6OnNldFdyaXRpbmdEaXJlY3Rpb24oVGV4dERpcmVjdGlvbikKK3sg
fQoraW50IFRleHRGaWVsZDo6bWF4TGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30K
K3ZvaWQgVGV4dEZpZWxkOjpzZXRNYXhMZW5ndGgoaW50KQoreyB9CitTdHJpbmcgVGV4dEZpZWxk
Ojp0ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9Cit2b2lkIFRleHRGaWVs
ZDo6c2V0VGV4dChTdHJpbmcgY29uc3QmKQoreyB9CitpbnQgVGV4dEZpZWxkOjpjdXJzb3JQb3Np
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIFRleHRGaWVsZDo6c2V0Q3Vy
c29yUG9zaXRpb24oaW50KQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0RWRpdGVkKGJvb2wpCit7
IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRSZWFkT25seShib29sKQoreyB9Cit2b2lkIFRleHRGaWVs
ZDo6c2V0UGxhY2Vob2xkZXJTdHJpbmcoU3RyaW5nIGNvbnN0JikKK3sgfQordm9pZCBUZXh0Rmll
bGQ6OnNldENvbG9ycyhDb2xvciBjb25zdCYsIENvbG9yIGNvbnN0JikKK3sgfQorSW50U2l6ZSBU
ZXh0RmllbGQ6OnNpemVGb3JDaGFyYWN0ZXJXaWR0aChpbnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEludFNpemUoKTsKK30KK2ludCBUZXh0RmllbGQ6OmJhc2VsaW5lUG9zaXRpb24oaW50KSBjb25z
dAoreworICAgIHJldHVybiAwOworfQordm9pZCBUZXh0RmllbGQ6OnNldExpdmVTZWFyY2goYm9v
bCkKK3sgfQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CitMaXN0Qm94OjpMaXN0Qm94KCkKK3sgfQor
TGlzdEJveDo6fkxpc3RCb3goKQoreyB9Cit2b2lkIExpc3RCb3g6OnNldFNlbGVjdGlvbk1vZGUo
TGlzdEJveDo6U2VsZWN0aW9uTW9kZSkKK3sgfQordm9pZCBMaXN0Qm94OjpzZXRGb250KFdlYkNv
cmU6OkZvbnQgY29uc3QmKQoreyB9CiAKLWJvb2wgQ2hlY2tJZlJlbG9hZGluZyhEb2NMb2FkZXIq
KSB7IHJldHVybiBmYWxzZTsgfQotdGltZV90IENhY2hlT2JqZWN0RXhwaXJlc1RpbWUoRG9jTG9h
ZGVyKiwgUGxhdGZvcm1SZXNwb25zZSkgeyByZXR1cm4gMDsgfQotdm9pZCBDaGVja0NhY2hlT2Jq
ZWN0U3RhdHVzKERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKikgeyB9Ci1EZXByZWNhdGVkU3Ry
aW5nIFJlc3BvbnNlVVJMKFBsYXRmb3JtUmVzcG9uc2UpIHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJp
bmcoKTsgfQotYm9vbCBJc1Jlc3BvbnNlVVJMRXF1YWxUb1VSTChQbGF0Zm9ybVJlc3BvbnNlICwg
Y29uc3QgU3RyaW5nJiBVUkwpIHsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIFJlc3BvbnNlSXNNdWx0
aXBhcnQoUGxhdGZvcm1SZXNwb25zZSkgeyByZXR1cm4gZmFsc2U7IH0KLURlcHJlY2F0ZWRTdHJp
bmcgUmVzcG9uc2VNSU1FVHlwZShQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiBEZXByZWNhdGVk
U3RyaW5nKCk7IH0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNlKFBsYXRmb3JtUmVz
cG9uc2UpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0QWxs
RGF0YShQbGF0Zm9ybURhdGEpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCitDb2xvciBXZWJDb3Jl
Ojpmb2N1c1JpbmdDb2xvcigpCit7CisgICAgcmV0dXJuIDB4RkYwMDAwRkY7CiB9Cit2b2lkIFdl
YkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkKK3sgfQog
Ci12b2lkIFdpZGdldDo6c2V0RW5hYmxlZChib29sKSB7IH0KLXZvaWQgV2lkZ2V0OjpwYWludChH
cmFwaGljc0NvbnRleHQqLCBJbnRSZWN0IGNvbnN0JikgeyB9Ci12b2lkIFdpZGdldDo6c2V0SXNT
ZWxlY3RlZChib29sKSB7IH0KLXZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlKCkgeyB9Ci12b2lkIFdp
ZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcikgeyB9Cit2b2lkIEZyYW1lOjpz
ZXROZWVkc1JlYXBwbHlTdHlsZXMoKQoreyB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQo
V2lkZ2V0KikgeyB9Ci12b2lkIFNjcm9sbFZpZXc6OnJlbW92ZUNoaWxkKFdpZGdldCopIHsgfQot
dm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxQb2ludFJlY3Vyc2l2ZWx5KGludCB4LCBpbnQgeSkgeyB9
Ci1ib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotdm9p
ZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpIHsgfQotdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKCkgeyB9Ci1pbnQgU2Nyb2xsVmlldzo6dXBkYXRl
U2Nyb2xsSW5mbyhzaG9ydCB0eXBlLCBpbnQgY3VycmVudCwgaW50IG1heCwgaW50IHBhZ2VTaXpl
KSB7IHJldHVybiAwOyB9Ci1JbnRQb2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gcG9pbnQ7IH0KLUludFBvaW50IFNj
cm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdCB7
IHJldHVybiBwb2ludDsgfQotUGxhdGZvcm1TY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJh
clVuZGVyTW91c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KSB7IHJldHVy
biAwOyB9Cit2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgVGlsZVJ1bGUsIFRpbGVSdWxlLCBDb21wb3NpdGVP
cGVyYXRvcikKK3sgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlw
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNp
emUmIHRvcFJpZ2h0LAotICAgICAgICBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21SaWdodCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEdyYXBoaWNz
Q29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50
IHRoaWNrbmVzcykgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0U2hhZG93KEludFNpemUgY29uc3QmLCBpbnQsIENvbG9yIGNvbnN0JikgeyB9Ci12b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpl
bmRUcmFuc3BhcmVuY3lMYXllcigpIHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lV2lkdGgoZmxvYXQpIHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGlu
ZUNhcCkgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4pIHsg
fQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQpIHsgfQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0KSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IpIHsgfQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYpIHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZShmbG9hdCkgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxv
YXRTaXplJikgeyB9CitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBJbnRQb2ludCYsIGludCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9Cit2b2lkIEZvbnQ6OmRyYXdDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxl
JiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
K2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29u
c3QgVGV4dFN0eWxlJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQoraW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGludCwgYm9vbCkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQogCi1QYXRoOjpQYXRoKCl7IH0KLVBhdGg6
On5QYXRoKCl7IH0KLVBhdGg6OlBhdGgoY29uc3QgUGF0aCYpeyB9Ci1ib29sIFBhdGg6OmNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBXaW5kUnVsZSBydWxlKSBjb25zdHsgcmV0dXJuIGZhbHNl
OyB9Ci12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmKXsgfQotRmxvYXRSZWN0
IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Ci1QYXRo
JiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYpeyByZXR1cm4gKiB0aGlzOyB9Ci12b2lkIFBh
dGg6OmNsZWFyKCkgeyB9Ci12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JikgeyB9
Ci12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JikgeyB9Ci12b2lkIFBhdGg6
OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgeyB9
Ci12b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgeyB9Ci12b2lkIFBhdGg6OmFkZEFyY1RvKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQpIHsgfQotdm9pZCBQYXRo
OjpjbG9zZVN1YnBhdGgoKSB7IH0KLXZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQm
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sKSB7IH0KLXZvaWQgUGF0aDo6YWRkUmVjdChjb25z
dCBGbG9hdFJlY3QmKSB7IH0KLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSB7IH0KLQotVGV4dEZpZWxkOjpUZXh0RmllbGQoVGV4dEZpZWxkOjpUeXBlKSB7IH0KLVRleHRG
aWVsZDo6flRleHRGaWVsZCgpIHsgfQotdm9pZCBUZXh0RmllbGQ6OnNldEZvbnQoV2ViQ29yZTo6
Rm9udCBjb25zdCYpIHsgfQotdm9pZCBUZXh0RmllbGQ6OnNldEFsaWdubWVudChIb3Jpem9udGFs
QWxpZ25tZW50KSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRXcml0aW5nRGlyZWN0aW9uKFRleHRE
aXJlY3Rpb24pIHsgfQotaW50IFRleHRGaWVsZDo6bWF4TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
MDsgfQotdm9pZCBUZXh0RmllbGQ6OnNldE1heExlbmd0aChpbnQpIHsgfQotU3RyaW5nIFRleHRG
aWVsZDo6dGV4dCgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIFRleHRGaWVsZDo6
c2V0VGV4dChTdHJpbmcgY29uc3QmKSB7IH0KLWludCBUZXh0RmllbGQ6OmN1cnNvclBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gMDsgfQotdm9pZCBUZXh0RmllbGQ6OnNldEN1cnNvclBvc2l0aW9u
KGludCkgeyB9Ci12b2lkIFRleHRGaWVsZDo6c2V0RWRpdGVkKGJvb2wpIHsgfQotdm9pZCBUZXh0
RmllbGQ6OnNldFJlYWRPbmx5KGJvb2wpIHsgfQotdm9pZCBUZXh0RmllbGQ6OnNldFBsYWNlaG9s
ZGVyU3RyaW5nKFN0cmluZyBjb25zdCYpIHsgfQotdm9pZCBUZXh0RmllbGQ6OnNldENvbG9ycyhD
b2xvciBjb25zdCYsIENvbG9yIGNvbnN0JikgeyB9Ci1JbnRTaXplIFRleHRGaWVsZDo6c2l6ZUZv
ckNoYXJhY3RlcldpZHRoKGludCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgpOyB9Ci1pbnQgVGV4
dEZpZWxkOjpiYXNlbGluZVBvc2l0aW9uKGludCkgY29uc3QgeyByZXR1cm4gMDsgfQotdm9pZCBU
ZXh0RmllbGQ6OnNldExpdmVTZWFyY2goYm9vbCkgeyB9Ci0KLVBsYXRmb3JtU2Nyb2xsYmFyOjpQ
bGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKSA6IFNj
cm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSkgeyB9Ci1QbGF0Zm9ybVNj
cm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkgeyB9Ci1pbnQgUGxhdGZvcm1TY3JvbGxiYXI6
OndpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQotaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjpoZWln
aHQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci12b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRFbmFi
bGVkKGJvb2wpIHsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkgeyB9Ci12b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9uKCkgeyB9Ci12b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1
cGRhdGVUaHVtYlByb3BvcnRpb24oKSB7IH0KLXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJl
Y3QoY29uc3QgSW50UmVjdCYpIHsgfQotCi1MaXN0Qm94OjpMaXN0Qm94KCkgeyB9Ci1MaXN0Qm94
Ojp+TGlzdEJveCgpIHsgfQotdm9pZCBMaXN0Qm94OjpzZXRTZWxlY3Rpb25Nb2RlKExpc3RCb3g6
OlNlbGVjdGlvbk1vZGUpIHsgfQotdm9pZCBMaXN0Qm94OjpzZXRGb250KFdlYkNvcmU6OkZvbnQg
Y29uc3QmKSB7IH0KLQotRmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKERvY3VtZW50KiwgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUZpbGVDaG9vc2VyOjp+
RmlsZUNob29zZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVBhc3NSZWZQdHI8RmlsZUNob29z
ZXI+IEZpbGVDaG9vc2VyOjpjcmVhdGUoRG9jdW1lbnQqLCBSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bCopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgRmlsZUNob29zZXI6Om9w
ZW5GaWxlQ2hvb3NlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotU3RyaW5nIEZpbGVDaG9vc2Vy
OjpiYXNlbmFtZUZvcldpZHRoKGludCB3aWR0aCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gU3RyaW5nKCk7IH0KLXZvaWQgRmlsZUNob29zZXI6OmRpc2Nvbm5lY3RVcGxvYWRDb250
cm9sKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi1Db2xvciBX
ZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KLXZvaWQgV2Vi
Q29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KLQot
dm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkgeyB9Ci0KLXZvaWQgSW1hZ2U6OmRy
YXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmLCBUaWxlUnVsZSwgVGlsZVJ1bGUsIENvbXBvc2l0ZU9wZXJhdG9yKSB7IH0KLQotdm9pZCBS
ZW5kZXJUaGVtZUdkazo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9Ci1i
b29sIFJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiBmYWxzZTsgfQot
dm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9
Ci12b2lkIFJlbmRlclRoZW1lR2RrOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KiBlKSBjb25zdCB7fQotYm9vbCBSZW5kZXJUaGVt
ZUdkazo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gZmFsc2U7IH0KLQotSWNvbjo6SWNv
bigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotSWNvbjo6fkljb24oKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLVBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6bmV3SWNvbkZvckZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gUGFzc1JlZlB0cjxJY29uPihu
ZXcgSWNvbigpKTsgfQotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLXZvaWQgSWNvbkxvYWRlcjo6c3RvcExv
YWRpbmcoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0gCi12b2lkIEljb25Mb2FkZXI6OnN0YXJ0TG9h
ZGluZygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfSAKLUljb25Mb2FkZXIqIEljb25Mb2FkZXI6OmNy
ZWF0ZUZvckZyYW1lKEZyYW1lICpmcmFtZSkgeyByZXR1cm4gMDsgfSAKLQotYm9vbCBJY29uRGF0
YWJhc2U6OmlzSWNvbkV4cGlyZWRGb3JJY29uVVJMKGNvbnN0IFN0cmluZyYgdXJsKSB7IHJldHVy
biBmYWxzZTsgfQotYm9vbCBJY29uRGF0YWJhc2U6Omhhc0VudHJ5Rm9ySWNvblVSTChjb25zdCBT
dHJpbmcmIHVybCkgeyByZXR1cm4gZmFsc2U7IH0KLUljb25EYXRhYmFzZSogSWNvbkRhdGFiYXNl
OjpzaGFyZWRJY29uRGF0YWJhc2UoKSB7IHJldHVybiAwOyB9Ci1ib29sIEljb25EYXRhYmFzZTo6
c2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25zdCBTdHJpbmcm
IHBhZ2VVUkwpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25S
ZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0
IEludFBvaW50JiwgaW50KSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotdm9pZCBGb250
OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IFRleHRTdHlsZSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwg
Y29uc3QgVGV4dFN0eWxlJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQot
aW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYs
IGNvbnN0IFRleHRTdHlsZSYsIGludCwgYm9vbCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1WZWN0b3I8U3RyaW5nPiBzdXBwb3J0
ZWRLZXlTaXplcygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
IH0KLVN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5
U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcgJmNoYWxsZW5nZVN0cmluZywgY29uc3QgS1VSTCAmdXJs
KSB7IHJldHVybiBTdHJpbmcoKTsgfQorVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
Cit9CitTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtl
eVNpemVJbmRleCwgY29uc3QgU3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVy
bCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1N5c3RlbVRpbWVMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvU3lzdGVtVGltZUxpbnV4LmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9TeXN0ZW1UaW1lTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0yNywxOCArMjcsMTggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlN5c3RlbVRpbWUuaCIKLQogI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lz
L3RpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBkb3VibGUgY3VycmVudFRpbWUoKQog
ewotICBzdHJ1Y3QgdGltZXZhbCBhVGltZXZhbDsKLSAgc3RydWN0IHRpbWV6b25lIGFUaW1lem9u
ZTsKLSAKLSAgZ2V0dGltZW9mZGF5KCAmYVRpbWV2YWwsICZhVGltZXpvbmUgKTsKLSAgcmV0dXJu
IChkb3VibGUpYVRpbWV2YWwudHZfc2VjICsgKGRvdWJsZSkoYVRpbWV2YWwudHZfdXNlYyAvIDEw
MDAwMDAuMCApOworICAgIHN0cnVjdCB0aW1ldmFsIGFUaW1ldmFsOworICAgIHN0cnVjdCB0aW1l
em9uZSBhVGltZXpvbmU7CisKKyAgICBnZXR0aW1lb2ZkYXkoJmFUaW1ldmFsLCAmYVRpbWV6b25l
KTsKKyAgICByZXR1cm4gKGRvdWJsZSlhVGltZXZhbC50dl9zZWMgKyAoZG91YmxlKShhVGltZXZh
bC50dl91c2VjIC8gMTAwMDAwMC4wKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvTG9hZGVyRnVuY3Rpb25zR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9Mb2FkZXJGdW5jdGlvbnNHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvTG9hZGVyRnVuY3Rpb25zR2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSAiQ2Fj
aGUuaCIKKyNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUdkay5oIgorI2luY2x1
ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAi
RGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyTWFuYWdlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZlY3RvcjxjaGFyPiBTZXJ2ZVN5bmNocm9ub3VzUmVx
dWVzdChMb2FkZXIqLCBEb2NMb2FkZXIqIGRvY0xvYWRlciwgUmVzb3VyY2VMb2FkZXIqIGpvYiwg
S1VSTCYgdXJsLCBEZXByZWNhdGVkU3RyaW5nJikKK3sKKyAgICBSZXNvdXJjZUxvYWRlck1hbmFn
ZXIqIG1nciA9IFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0KCk7CisgICAgbWdyLT5pbml0Sm9i
KGpvYik7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdEJ1ZmZlciA9IG1nci0+cnVuSW1tZWRpYXRl
bHkoam9iKTsKKyAgICByZXR1cm4gcmVzdWx0QnVmZmVyOworfQorCitpbnQgTnVtYmVyT2ZQZW5k
aW5nT3JMb2FkaW5nUmVxdWVzdHMoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCit7CisgICAgcmV0dXJu
IENhY2hlOjpsb2FkZXIoKS0+bnVtUmVxdWVzdHMoZG9jTG9hZGVyKTsKK30KKworYm9vbCBDaGVj
a0lmUmVsb2FkaW5nKFdlYkNvcmU6OkRvY0xvYWRlciogZG9jTG9hZGVyKQoreworICAgIC8vIEZJ
WE1FOiBOZWVkcyBhIHJlYWwgaW1wbGVtZW50YXRpb24hCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENhY2hl
ZFJlc291cmNlKiBjYWNoZWRPYmplY3QpCit7CisgICAgLy8gUmV0dXJuIGZyb20gdGhlIGZ1bmN0
aW9uIGZvciBvYmplY3RzIHRoYXQgd2UgZGlkbid0IGxvYWQgZnJvbSB0aGUgY2FjaGUuCisgICAg
aWYgKCFjYWNoZWRPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoY2FjaGVk
T2JqZWN0LT5zdGF0dXMoKSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlBlcnNpc3RlbnQ6
CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkOgorICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OlVuY2FjaGVhYmxlOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpOb3RDYWNoZWQ6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VW5rbm93bjoKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpOZXc6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UGVuZGluZzoK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChjYWNoZWRPYmplY3QtPnJlc3Bv
bnNlKCkpOworCisgICAgLy8gRklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIHRoYXQgd2UgImxvYWRl
ZCIuCit9CisKK2Jvb2wgSXNSZXNwb25zZVVSTEVxdWFsVG9VUkwoUGxhdGZvcm1SZXNwb25zZSBy
ZXNwb25zZSwgY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKCFyZXNwb25zZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHJlc3BvbnNlLT51cmwgPT0gdXJsOworfQor
CitEZXByZWNhdGVkU3RyaW5nIFJlc3BvbnNlVVJMKFBsYXRmb3JtUmVzcG9uc2UgcmVzcG9uc2Up
Cit7CisgICAgaWYgKCFyZXNwb25zZSkKKyAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmco
KTsKKworICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKHJlc3BvbnNlLT51cmwuZGVwcmVjYXRl
ZFN0cmluZygpKTsKK30KKworRGVwcmVjYXRlZFN0cmluZyBSZXNwb25zZU1JTUVUeXBlKFBsYXRm
b3JtUmVzcG9uc2UgcmVzcG9uc2UpCit7CisgICAgaWYgKCFyZXNwb25zZSkKKyAgICAgICAgcmV0
dXJuIERlcHJlY2F0ZWRTdHJpbmcoInRleHQvaHRtbCIpOworICAgIHJldHVybiBEZXByZWNhdGVk
U3RyaW5nKHJlc3BvbnNlLT5taW1lVHlwZS5kZXByZWNhdGVkU3RyaW5nKCkpOworfQorCitib29s
IFJlc3BvbnNlSXNNdWx0aXBhcnQoUGxhdGZvcm1SZXNwb25zZSByZXNwb25zZSkKK3sKKyAgICBy
ZXR1cm4gUmVzcG9uc2VNSU1FVHlwZShyZXNwb25zZSkgPT0gIm11bHRpcGFydC94LW1peGVkLXJl
cGxhY2UiOworfQorCit0aW1lX3QgQ2FjaGVPYmplY3RFeHBpcmVzVGltZShEb2NMb2FkZXIqLCBQ
bGF0Zm9ybVJlc3BvbnNlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUhCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNlKFBsYXRmb3JtUmVz
cG9uc2UgcmVzcG9uc2UpCit7CisgICAgbV9yZXNwb25zZSA9IHJlc3BvbnNlOworfQorCit2b2lk
IENhY2hlZFJlc291cmNlOjpzZXRBbGxEYXRhKFBsYXRmb3JtRGF0YSBhbGxEYXRhKQoreworICAg
IG1fYWxsRGF0YSA9IGFsbERhdGE7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9GcmFtZUdkay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
Miw3MiArMjIsNDggQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBGcmFtZUdka19I
XwogI2RlZmluZSBGcmFtZUdka19IXwogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJX
aW5kb3dHZGsuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUg
PGdkay9nZGsuaD4KKyNpbmNsdWRlICJ3dGYvUmVmUHRyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYW1lR2RrOworY2xhc3MgRG9jdW1lbnQ7Citj
bGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKK2NsYXNzIFdpbmRvd0dkazsKK2NsYXNzIFBsYXRm
b3JtV2hlZWxFdmVudDsKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKK2NsYXNzIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDsKK2NsYXNzIFBsYXRmb3JtU2Nyb2xsQmFyOwogCi1jbGFzcyBGcmFtZUdk
a0NsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+RnJhbWVHZGtDbGllbnQoKSB7fTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZShjb25zdCBGcmFtZUdkayopID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCBvcGVuVVJMKGNvbnN0IEtVUkwmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN1
Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBjb25zdCBGb3JtRGF0
YSopID0gMDsKLX07Ci0KLWNsYXNzIEZyYW1lR2RrQ2xpZW50RGVmYXVsdCA6IHB1YmxpYyBGcmFt
ZUdka0NsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyAgUmVzb3Vy
Y2VMb2FkZXJDbGllbnQgCitjbGFzcyBGcmFtZUdkayA6IHB1YmxpYyBGcmFtZSwgUmVzb3VyY2VM
b2FkZXJDbGllbnQKIHsKIHB1YmxpYzoKLQotICAgIEZyYW1lR2RrQ2xpZW50RGVmYXVsdCgpOwot
ICAgIHZpcnR1YWwgfkZyYW1lR2RrQ2xpZW50RGVmYXVsdCgpOwotCi0gICAgLy8gRnJhbWVHZGtD
bGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWUoY29uc3QgRnJhbWVHZGsqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgb3BlblVSTChjb25zdCBLVVJMJik7Ci0gICAgdmlydHVhbCB2b2lkIHN1Ym1p
dEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBjb25zdCBGb3JtRGF0YSop
OwotCi0gICAgLy8gUmVzb3VyY2VMb2FkZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2
ZWRSZXNwb25zZShSZXNvdXJjZUxvYWRlciosIFBsYXRmb3JtUmVzcG9uc2UpOwotICAgIHZpcnR1
YWwgdm9pZCByZWNlaXZlZERhdGEoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlTG9hZGVyKiwgUGxhdGZv
cm1EYXRhKTsKLQotcHJpdmF0ZToKLSAgICBGcmFtZUdkayogbV9mcmFtZTsKLSAgICBib29sIG1f
YmVnaW5DYWxsZWQgOiAxOwotCi19OwotCi1jbGFzcyBGcmFtZUdkayA6IHB1YmxpYyBGcmFtZSB7
Ci1wdWJsaWM6Ci0gICAgRnJhbWVHZGsoUGFnZSosIEVsZW1lbnQqKTsKLSAgICBGcmFtZUdkayhH
ZGtEcmF3YWJsZSopOworICAgIEZyYW1lR2RrKFBhZ2UqLCBFbGVtZW50KiwgV2luZG93R2RrKiB3
aW5kb3cpOwogICAgIHZpcnR1YWwgfkZyYW1lR2RrKCk7Ci0KLSAgICB2b2lkIGhhbmRsZUdka0V2
ZW50KEdka0V2ZW50Kik7CiAgICAgdmlydHVhbCBib29sIG9wZW5VUkwoY29uc3QgS1VSTCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBvcGVuVVJMUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jik7
CiAgICAgdmlydHVhbCB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYpOwog
ICAgIHZpcnR1YWwgdm9pZCB1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jik7Ci0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2
b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcik7CiAKICAgICB2aXJ0dWFsIE9iamVj
dENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKTsKICAgICB2aXJ0dWFsIFBsdWdpbiogY3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IGNvbnN0IFN0cmluZyYpOwogCisgICAgdmlydHVhbCBib29sIGlzTG9hZFR5cGVSZWxvYWQoKTsK
KworICAgIHZpcnR1YWwgS1VSTCBvcmlnaW5hbFJlcXVlc3RVUkwoKSBjb25zdDsKKwogICAgIHZp
cnR1YWwgdm9pZCBzY2hlZHVsZUNsb3NlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1c1dp
bmRvdygpOwpAQCAtMTE3LDEyICs5MywxMyBAQAogICAgIHZpcnR1YWwgU3RyaW5nIG1pbWVUeXBl
Rm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFy
a01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3Jkcyhjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBTZWxlY3Rpb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBTZWxlY3Rpb24mKQorICAgIHt9CiAK
ICAgICB2aXJ0dWFsIGJvb2wgbGFzdEV2ZW50SXNNb3VzZVVwKCkgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMgJiwgRnJhbWUqIHN1YmZyYW1lID0gMCk7CiAgICAgdmlydHVhbCBib29sIHBhc3NX
aGVlbEV2ZW50VG9DaGlsZFdpZGdldChOb2RlKik7CisgICAgdmlydHVhbCBib29sIHBhc3NNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCopOwogCiAgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJp
ZGVNZWRpYVR5cGUoKSBjb25zdDsKIApAQCAtMTQxLDEwICsxMTgsMTUgQEAKICAgICB2aXJ0dWFs
IHZvaWQgaXNzdWVQYXN0ZUNvbW1hbmQoKTsKICAgICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUFu
ZE1hdGNoU3R5bGVDb21tYW5kKCk7CiAgICAgdmlydHVhbCB2b2lkIGlzc3VlVHJhbnNwb3NlQ29t
bWFuZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFNlbGVjdGlvbiYgZW5kaW5nU2Vs
ZWN0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNl
bGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFm
ZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdDsKLSAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgYm9vbCBjbG9zZVR5cGluZykKKyAgICB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9u
ZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQorICAg
IHt9OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5p
dHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfTsKKwogICAgIHZpcnR1YWwgdm9pZCBwYXJ0Q2xlYXJlZEluQmVn
aW4oKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5Hb0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNl
KSBjb25zdDsKQEAgLTE1NSwyNSArMTM3LDQ1IEBACiAgICAgdmlydHVhbCBib29sIGNhblVuZG8o
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOworICAgIHZpcnR1YWwgYm9vbCBkb1RleHRGaWVsZENv
bW1hbmRGcm9tRXZlbnQoRWxlbWVudCosIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCopOwog
Ci0gICAgYm9vbCBrZXlQcmVzcyhjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmKTsKLSAgICB2
aXJ0dWFsIEtVUkwgb3JpZ2luYWxSZXF1ZXN0VVJMKCkgY29uc3Q7Ci0KLSAgICBJbnRSZWN0IGZy
YW1lR2VvbWV0cnkoKSBjb25zdDsKLSAgICB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiByZWZl
cnJlcik7CiAgICAgV2lkZ2V0KiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUm
LCBFbGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKLQorICAgIC8vR2Rr
IHNwZWNpZmljCisgICAgc3RhdGljIHZvaWQgc2V0SW5zdGFsbExvY2F0aW9uKGNvbnN0IGNoYXIg
Kik7CisgICAgc3RhdGljIFN0cmluZyBpbnN0YWxsTG9jYXRpb24oKTsKKyAgICBib29sIGlzVG9w
TGV2ZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2luZG93LmdldCgpICE9IDA7CisgICAg
fQorICAgIHZvaWQgcHJvY2Vzc1BsYXRmb3JtRm9jdXNDaGFuZ2UoYm9vbCBmb2N1c2VkKTsKKyAg
ICB2b2lkIHByb2Nlc3NQbGF0Zm9ybVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50
KTsKKyAgICB2b2lkIHByb2Nlc3NQbGF0Zm9ybUtleWJvYXJkRXZlbnQoUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50IGV2ZW50LCBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlKTsKKyAgICB2b2lkIHBy
b2Nlc3NQbGF0Zm9ybU1vdXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50LCBjb25zdCBB
dG9taWNTdHJpbmcgZXZlbnRUeXBlKTsKKyAgICBGcmFtZUdkayogZ2V0Um9vdEZyYW1lKCk7Cisg
ICAgLy92b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmLCBib29sIGZyb21TeXN0ZW0pOwor
ICAgIC8vSW50UmVjdCBmcmFtZUdlb21ldHJ5KCkgY29uc3Q7CisgICAgLy92b2lkIHNldEZyYW1l
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOworICAgIEZyYW1lR2RrKiBwYXJlbnQoKTsKKyAgICB2
b2lkIHNldFBhcmVudChGcmFtZUdkayopOworICAgIHZvaWQgcmVwYWludChib29sIG5vdyk7Cisg
ICAgdm9pZCByZXBhaW50KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KTsKKyAg
ICAvL0ludFBvaW50IGdldEFic29sdXRlUG9zaXRpb24oKTsKKyAgICBHcmFwaGljc0NvbnRleHRD
YWlybyogY3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8q
IGJlZ2luUGFpbnRpbmcoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgZW5kUGFpbnRpbmcoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8qKTsKKyAgICBXaW5kb3dHZGsqIHdpbmRvdygpCisgICAgeworICAg
ICAgICByZXR1cm4gIG1fd2luZG93LmdldCgpOworICAgIH0KKyAgICB2b2lkICAgIGF0dGFjaFdp
bmRvdyhXaW5kb3dHZGsqKTsKKyAgICB2b2lkICAgIGRldGFjaFdpbmRvdygpOworcHJvdGVjdGVk
OgorICAgIEF0b21pY1N0cmluZyAgICBtX2V2ZW50VHlwZTsKIHByaXZhdGU6Ci0gICAgdmlydHVh
bCBib29sIGlzTG9hZFR5cGVSZWxvYWQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFzc01vdXNlRG93
bkV2ZW50VG9XaWRnZXQoV2lkZ2V0Kik7Ci0KLSAgICBGcmFtZUdka0NsaWVudCogbV9jbGllbnQ7
Ci0gICAgR2RrRHJhd2FibGUqIG1fZHJhd2FibGU7CisgICAgUmVmUHRyPFdpbmRvd0dkaz4gbV93
aW5kb3c7CiB9OwogCi1pbmxpbmUgRnJhbWVHZGsqIFdpbihGcmFtZSogZnJhbWUpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4oZnJhbWUpOyB9Ci1pbmxpbmUgY29uc3QgRnJhbWVHZGsq
IFdpbihjb25zdCBGcmFtZSogZnJhbWUpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEZyYW1l
R2RrKj4oZnJhbWUpOyB9CiAKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2hhcmVk
VGltZXJMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2hhcmVk
VGltZXJMaW51eC5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
U2hhcmVkVGltZXJMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTIyLDcgKzIyLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3BwCShyZXZpc2lvbiAxNzA4
MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Nvb2tpZUphckdkay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hl
ZWxFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxF
dmVudEdkay5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hl
ZWxFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcg
KzIyLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9XaW5kb3dHZGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdpbmRvd0dk
a19IXworI2RlZmluZSBXaW5kb3dHZGtfSF8KKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRl
ICJCcm93c2VyRXh0ZW5zaW9uLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsK
K2NsYXNzIFdpbmRvd0FyZ3M7CitjbGFzcyBDdXJzb3I7CitjbGFzcyBJbnRQb2ludDsKK2NsYXNz
IEludFNpemU7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgRnJhbWVHZGs7CitjbGFzcyBTdHJpbmc7
CisKKworY2xhc3MgV2luZG93R2RrIDogIHB1YmxpYyBTaGFyZWQ8V2luZG93R2RrPgoreworCitw
dWJsaWM6CisgICAgV2luZG93R2RrKCk7CisgICAgV2luZG93R2RrKEdka1dpbmRvdyopOworICAg
IFdpbmRvd0dkayhjb25zdCBXaW5kb3dBcmdzJik7CisgICAgdmlydHVhbCB+V2luZG93R2RrKCk7
CisgICAgc3RhdGljIFdpbmRvd0dkayogZmluZFdpbmRvdyhHZGtXaW5kb3cqKTsKKyAgICB2b2lk
IGhhbmRsZUdka0V2ZW50KEdka0V2ZW50Kik7CisgICAgdm9pZCBzZXRGcmFtZShGcmFtZUdkayog
ZnJhbWUpCisgICAgeworICAgICAgICBtX2ZyYW1lID0gZnJhbWU7CisgICAgfQorICAgIEZyYW1l
R2RrKiBmcmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mcmFtZTsKKyAgICB9CisgICAg
dm9pZCBzZXRJc0FjdGl2ZShib29sIGZsYWcpOworICAgIHZvaWQgc2hvdygpOworICAgIHZvaWQg
aGlkZSgpOworICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKTsKKyAgICB2
b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0RnVsbFNjcmVlbihib29s
KTsKKyAgICB2b2lkIHNldE1heGltaXplZChib29sKTsKKyAgICBXaW5kb3dHZGsqIGdldFBvaW50
ZXJJbmZvKEludFBvaW50JiwgLypwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGlzIHdpbmRvdyovCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgc2hpZnRLZXksYm9vbCYgY3RybEtl
eSwgYm9vbCYgYWx0S2V5LCBib29sJiBtZXRhS2V5KTsKKyAgICBXaW5kb3dHZGsqIHdpbmRvd0F0
UG9pbnRlcigpOworICAgIEludFJlY3QgZ2VvbWV0cnkoKSBjb25zdDsKKyAgICBJbnRQb2ludCBw
b3NpdGlvbigpIGNvbnN0OworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcmVwYWludChjb25zdCBJbnRSZWN0
JiB1cGRhdGVSZWN0LCBib29sIG5vdyk7CisgICAgR2RrV2luZG93KiB3aW5kb3coKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fd2luZG93OworICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHRDYWly
byogY3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8qICBi
ZWdpblBhaW50aW5nKGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIGVuZFBhaW50aW5nKEdyYXBo
aWNzQ29udGV4dENhaXJvKik7CisgICAgSW50UG9pbnQgZ2V0QWJzb2x1dGVQb3NpdGlvbigpIGNv
bnN0OworICAgIFdpbmRvd0FyZ3Mgd2luZG93QXJncygpCisgICAgeworICAgICAgICByZXR1cm4g
bV93aW5kb3dBcmdzOworICAgIH0KK3ByaXZhdGU6CisgICAgYm9vbCBtX2NyZWF0ZWREcmF3YWJs
ZTsKKyAgICBHZGtXaW5kb3cqIG1fd2luZG93OworICAgIFdpbmRvd0FyZ3MgbV93aW5kb3dBcmdz
OworICAgIEZyYW1lR2RrKiBtX2ZyYW1lOworfTsKKworCit9CisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRQcml2YXRlR2RrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0UHJpdmF0ZUdkay5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJJbnRl
cm5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyTWFuYWdlci5oIgorI2luY2x1ZGUgIldp
ZGdldC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGcmFtZUdkay5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2lmbmRlZiBOREVCVUcKKyNpbmNs
dWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2VuZGlm
CisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6
IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlf
RlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKworCit1c2luZyBuYW1lc3BhY2UgS0pTOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKworV2lkZ2V0UHJpdmF0ZTo6V2lkZ2V0UHJpdmF0ZShXaWRnZXQq
IHdpZGdldCkKKyAgICAgICAgOiBSZXNvdXJjZUxvYWRlckNsaWVudCgpCisgICAgICAgICwgbV9u
YW1lKCJfYmxhbmsiKQorICAgICAgICAsIG1fdXJsKCkKKyAgICAgICAgLCB2aXNpYmxlKGZhbHNl
KQorICAgICAgICAsIGVuYWJsZWQoZmFsc2UpCisgICAgICAgICwgc2VsZWN0ZWQoZmFsc2UpCisg
ICAgICAgICwgaGFzRm9jdXMoZmFsc2UpCisgICAgICAgICwgZ2VvbWV0cnkoKQorICAgICAgICAs
IGZvbnQoKQorICAgICAgICAsIGNsaWVudCgwKQorICAgICAgICAsIG1fd2lkZ2V0KHdpZGdldCkK
KyAgICAgICAgLCBtX293bmVyKDApCisgICAgICAgICwgbV9wYXJlbnQoMCkKKyAgICAgICAgLCBt
X3ZpZXcoMCkKKyAgICAgICAgLCBtX2hhc1Njcm9sbGJhcnModHJ1ZSkKKyAgICAgICAgLCBtX2lz
RXJyb3IoZmFsc2UpCit7fQorCitXaWRnZXRQcml2YXRlOjp+V2lkZ2V0UHJpdmF0ZSgpCit7Cisg
ICAgaWYgKG1fdmlldy5nZXQoKSkKKyAgICAgICAgbV92aWV3LT5wcml2YXRlRGF0YSgpLT5tX293
bmVyID0gMDsKKyAgICBtX3BhcmVudCA9IDA7CisgICAgbV93aWRnZXQgPSAwOworICAgIG1fdmll
dyA9IDA7CisgICAgY2xpZW50ID0gMDsKK30KKwordm9pZCBXaWRnZXRQcml2YXRlOjpjcmVhdGVW
aWV3KEtVUkwgdXJsKQoreworICAgIG1fdXJsID0gdXJsOworICAgIG1fbmFtZSA9IFN0cmluZyh1
cmwudXJsKCkpOworICAgIC8vYSByZWJpbmQKKyAgICBpZiAobV92aWV3KSB7CisgICAgICAgIGRl
bGV0ZSBtX3ZpZXctPmZyYW1lKCk7CisgICAgICAgIG1fdmlldyA9IDA7CisgICAgfQorICAgIEZy
YW1lR2RrKiB0bXAgPSBuZXcgRnJhbWVHZGsobmV3IFBhZ2UoKSwwLDApOworICAgIHRtcC0+dHJl
ZSgpLT5zZXROYW1lKG1fdXJsLnVybCgpKTsKKyAgICBtX3ZpZXcgPSB0bXAtPnZpZXcoKTsKKwor
ICAgIC8vaW1wb3J0YW50IG9yIHdlIGhhdmUgcmVjdXJzaW9uCisgICAgbV92aWV3LT5wcml2YXRl
RGF0YSgpLT5tX2hhc1Njcm9sbGJhcnMgPSBtX2hhc1Njcm9sbGJhcnM7CisgICAgbV92aWV3LT5w
cml2YXRlRGF0YSgpLT5tX25hbWUgPSBtX25hbWUrIlt2aWV3XSI7CisgICAgbV92aWV3LT5zZXRP
d25lcih0aGlzLT5tX3dpZGdldCk7CisKKyAgICBpZiAoIW1faGFzU2Nyb2xsYmFycykgeworICAg
ICAgICBtX3ZpZXctPnN1cHByZXNzU2Nyb2xsYmFycyh0cnVlLGZhbHNlKTsKKyAgICAgICAgbV92
aWV3LT5zZXRWU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBbHdheXNPZmYpOworICAgICAgICBtX3Zp
ZXctPnNldEhTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckFsd2F5c09mZik7CisgICAgfQorICAgIHRt
cC0+b3BlblVSTChtX3VybCk7Cit9CisKK2Jvb2wgV2lkZ2V0UHJpdmF0ZTo6b3BlblVSTChjb25z
dCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCFtX293bmVyKQorICAgICAgICBtX25hbWU9U3RyaW5n
KHVybC51cmwoKSk7CisgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBSZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlKHRoaXMsICJHRVQiLCB1cmwpOworICAgIFJlc291cmNlTG9hZGVySW50
ZXJuYWwqIGludGVybmFsID0gbG9hZGVyLT5nZXRJbnRlcm5hbCgpOworICAgIC8vRklYTUU6IHdo
eSBpcyB0aGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQgPworICAgIGludGVybmFsLT5hc3NlbWJs
ZWRSZXNwb25zZUhlYWRlcnMgPSBmYWxzZTsKKyAgICBsb2FkZXItPnN0YXJ0KDApOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFdpZGdldFByaXZhdGU6OnN1Ym1pdEZvcm0oY29uc3QgU3Ry
aW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgRm9ybURhdGEqIHBvc3REYXRhKQor
eworICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gUmVzb3VyY2VMb2FkZXI6OmNy
ZWF0ZSh0aGlzLCBtZXRob2QsIHVybCwqcG9zdERhdGEpOworICAgIGxvYWRlci0+c3RhcnQoMCk7
Cit9CisKK3ZvaWQgV2lkZ2V0UHJpdmF0ZTo6cmVjZWl2ZWRSZWRpcmVjdChSZXNvdXJjZUxvYWRl
ciogam9iLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgam9iLT5jYW5jZWwoKTsKKyAgICBvcGVu
VVJMKHVybCk7Cit9CisKKy8qCisgKiBEYXRhIGlzIHRoZSBmdWxsIHNldCBvZiBoZWFkZXJzCisg
KiBDYWxsZWQgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IHJlY2lldmVkIGRhdGEgb3IgYWxsIGRhdGEK
KyAqLwordm9pZCBXaWRnZXRQcml2YXRlOjpyZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlTG9hZGVy
KiBqb2IsIFBsYXRmb3JtUmVzcG9uc2UgZGF0YSkKK3sKKyAgICBSZXNvdXJjZUxvYWRlckludGVy
bmFsKiBpbnRlcm5hbCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBpbnRlcm5hbC0+YXNzZW1i
bGVkUmVzcG9uc2VIZWFkZXJzID0gdHJ1ZTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fdmlldy0+
ZnJhbWUoKTsKKworICAgIFN0cmluZyBtaW1lVHlwZSA9IGpvYi0+cXVlcnlNZXRhRGF0YSgiQ29u
dGVudC1UeXBlOiIpOworCisgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkgeworICAgICAgICBT
dHJpbmcgcGF0aCA9ICBTdHJpbmcoam9iLT51cmwoKS5wYXRoKCkpOworICAgICAgICBtaW1lVHlw
ZSA9IFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0TWltZVR5cGUocGF0aCk7CisgICAgfQorCisg
ICAgZnJhbWUtPnNldFJlc3BvbnNlTUlNRVR5cGUobWltZVR5cGUpOworICAgIFN0cmluZyBjaGFy
c2V0ID0gam9iLT5xdWVyeU1ldGFEYXRhKCJjaGFyc2V0Iik7CisKKyAgICBtX3ZpZXctPmZyYW1l
KCktPmFkZE1ldGFEYXRhKCJIVFRQLUhlYWRlcnMiLFN0cmluZyhpbnRlcm5hbC0+cmVzcG9uc2VI
ZWFkZXJzKSk7CisKKyAgICAvLyBzZXRFbmNvZGluZyBjYWxscyBiZWdpbigpIGZvciB1cywgZGVz
cGl0ZSB0aGUgbWlzbGVhZGluZyBuYW1lCisgICAgaWYgKCFjaGFyc2V0LmlzRW1wdHkoKSkKKyAg
ICAgICAgZnJhbWUtPnNldEVuY29kaW5nKGNoYXJzZXQsdHJ1ZSk7CisgICAgZWxzZQorICAgICAg
ICBmcmFtZS0+c2V0RW5jb2RpbmcobV92aWV3LT5mcmFtZSgpLT5lbmNvZGluZygpLGZhbHNlKTsK
K30KKwordm9pZCBXaWRnZXRQcml2YXRlOjpyZWNlaXZlZERhdGEoUmVzb3VyY2VMb2FkZXIqIGpv
YiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBtX3ZpZXctPmZyYW1lKCkt
PmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBXaWRnZXRQcml2YXRlOjpyZWNlaXZl
ZEFsbERhdGEoUmVzb3VyY2VMb2FkZXIqIGpvYiwgUGxhdGZvcm1EYXRhIGRhdGEpCit7CisKKyAg
ICBtX2lzRXJyb3IgPSBqb2ItPmlzRXJyb3JQYWdlKCk7CisgICAgbV92aWV3LT5mcmFtZSgpLT5l
bmQoKTsKKyAgICBtX3ZpZXctPnJlcGFpbnQoZmFsc2UpOworfQorCisjaWZuZGVmIE5ERUJVRwor
dm9pZCBXaWRnZXRQcml2YXRlOjpkdW1wRG9jdW1lbnQoKQoreworICAgIERlcHJlY2F0ZWRTdHJp
bmcgczsKKyAgICBEb2N1bWVudCAqZG9jID0gbV92aWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpOwor
ICAgIFRleHRTdHJlYW0gdHMoJnMpOworICAgIGRvYy0+ZHVtcCgmdHMsRGVwcmVjYXRlZFN0cmlu
ZygiICIpKTsKKyAgICBwcmludGYoIldJREdFVCBOT0RFUzolc1xuJXNcbiIsbV9uYW1lLmRlcHJl
Y2F0ZWRTdHJpbmcoKS5hc2NpaSgpLHMuYXNjaWkoKSk7CisgICAgcHJpbnRmKCJFTkRfTk9ERVNc
biIpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgc3QgPSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKGRv
Yy0+cmVuZGVyZXIoKSk7CisgICAgcHJpbnRmKCJXSURHRVQgJXMgUkVOREVSRVM6XG4lc1xuIixt
X25hbWUuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCksc3QuYXNjaWkoKSk7CisgICAgcHJpbnRm
KCJFTkRfUkVOREVSRVNcbiIpOworfQorI2VuZGlmCisKK30KKy8vIHZpbTogdHM9NCBzdz00IGV0
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Jlc291cmNlTG9hZGVyQ3VybC5jcHAJKHJl
dmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVzb3VyY2VMb2FkZXJDdXJs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMjIsNyArMjIsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCkBAIC0zMSwyMSArMzEsNDkgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRlckludGVybmFsLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5h
Z2VyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgogCisKKyNk
ZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1Q
TEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJ
T05fXyk7IH0gd2hpbGUoMCkKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZXNvdXJjZUxvYWRl
ckludGVybmFsOjp+UmVzb3VyY2VMb2FkZXJJbnRlcm5hbCgpCiB7CisgICAgaWYgKG1faGFuZGxl
KQorICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChtX2hhbmRsZSk7CisgICAgaWYgKG1fdXJsKQor
ICAgICAgICBmcmVlKG1fdXJsKTsKKworICAgIGlmIChtX2N1c3RvbUhlYWRlcikKKyAgICAgICAg
Y3VybF9zbGlzdF9mcmVlX2FsbChtX2N1c3RvbUhlYWRlcik7CisKKyAgICBpZiAobV9jdXN0b21Q
b3N0SGVhZGVyKQorICAgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKG1fY3VzdG9tUG9zdEhlYWRl
cik7CisKKyAgICBpZiAobV9maWxlUG9zdCkKKyAgICAgICAgY3VybF9mb3JtZnJlZShtX2ZpbGVQ
b3N0KTsKKyAgICAvL2Rvbid0IGRlbGV0ZSB3ZSBwYXNzIHRoaXMgb2ZmIGluIHRoZSBlbmQKKyAg
ICBpZiAobV9yZXNwb25zZSkKKyAgICAgICAgbV9yZXNwb25zZSA9IDA7CiB9CiAKIFJlc291cmNl
TG9hZGVyOjp+UmVzb3VyY2VMb2FkZXIoKQogewotICAgIGNhbmNlbCgpOworICAgIGRlbGV0ZSBk
OwogfQogCiBib29sIFJlc291cmNlTG9hZGVyOjpzdGFydChEb2NMb2FkZXIqIGRvY0xvYWRlcikK
IHsKICAgICByZWYoKTsKKyAgICBnZXRJbnRlcm5hbCgpLT5tX2xvYWRpbmcgPSB0cnVlOworICAg
IGQtPnJldHJpZXZlZENoYXJzZXQgPWZhbHNlOworICAgIGQtPmFzc2VtYmxlZFJlc3BvbnNlSGVh
ZGVycyA9ZmFsc2U7CisgICAgZC0+bV9yZXNwb25zZSA9IG5ldyBQbGF0Zm9ybVJlc3BvbnNlR2Rr
KCk7CisgICAgZC0+bV9yZXNwb25zZS0+dXJsPVN0cmluZyh1cmwoKS51cmwoKSk7CiAgICAgUmVz
b3VyY2VMb2FkZXJNYW5hZ2VyOjpnZXQoKS0+YWRkKHRoaXMpOwogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtNTUsNCArODMsMzUgQEAKICAgICBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmdldCgpLT5j
YW5jZWwodGhpcyk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkUmVzcG9uc2Uo
UGxhdGZvcm1SZXNwb25zZSByZXNwb25zZSkKK3sKKyAgICBSZXNvdXJjZUxvYWRlckludGVybmFs
KiBpbnRlcm5hbCA9IGdldEludGVybmFsKCk7CisKKyAgICBpbnQgaW5kZXggPSByZXNwb25zZS0+
ZGF0YS5maW5kKCc6Jyk7CisgICAgU3RyaW5nIG5hbWUgPSByZXNwb25zZS0+ZGF0YS5zdWJzdHJp
bmcoMCxpbmRleCsxKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBTdHJpbmcgdmFsdWUgPSByZXNw
b25zZS0+ZGF0YS5zdWJzdHJpbmcoaW5kZXgrMSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICBp
ZiAobmFtZSA9PSAiQ29udGVudC1UeXBlOiIpIHsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0g
dmFsdWU7CisgICAgICAgIFN0cmluZyBjaGFyc2V0OworICAgICAgICAvL3RoZSBtaW1lIHN0cmlu
ZyBjYW4gaGF2ZSB0eXBlOyBjaGFyc2V0CisgICAgICAgIGluZGV4ID0gdmFsdWUuZmluZCgiOyIp
OworICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgIG1pbWVUeXBlID0gdmFs
dWUubGVmdChpbmRleCk7CisgICAgICAgICAgICBjaGFyc2V0ID0gdmFsdWUucmlnaHQoaW5kZXgr
MSk7CisgICAgICAgICAgICBhZGRNZXRhRGF0YSgiY2hhcnNldCIsY2hhcnNldCk7CisgICAgICAg
IH0KKyAgICAgICAgaW50ZXJuYWwtPm1fcmVzcG9uc2UtPm1pbWVUeXBlPW1pbWVUeXBlOworICAg
IH0gZWxzZSB7CisgICAgICAgIGFkZE1ldGFEYXRhKG5hbWUsdmFsdWUpOworICAgIH0KKyAgICBp
bnRlcm5hbC0+cmVzcG9uc2VIZWFkZXJzICs9IHJlc3BvbnNlLT5kYXRhLmRlcHJlY2F0ZWRTdHJp
bmcoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6YXNzZW1ibGVSZXNwb25zZUhlYWRlcnMo
KSBjb25zdAorICAgIHt9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2hhcnNldCgp
IGNvbnN0CisgICAge30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9TY3JlZW5HZGsuY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1NjcmVlbkdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIy
LDMwICsyMiw0MyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU2NyZWVuLmgiCi0KICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiRnJhbWVHZGsuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgotCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogCisj
ZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklN
UExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNU
SU9OX18pOyB9IHdoaWxlKDApCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEdka0Ry
YXdhYmxlKiBkcmF3YWJsZUZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKIHsKICAgICBGcmFtZSog
ZnJhbWUgPSAocGFnZSA/IHBhZ2UtPm1haW5GcmFtZSgpIDogMCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgRnJhbWVHZGsqIGlmcmFtZSA9IHN0YXRpY19jYXN0PEZy
YW1lR2RrKj4oZnJhbWUpOworICAgIEZyYW1lR2RrKiByb290ID0gaWZyYW1lLT5nZXRSb290RnJh
bWUoKTsKKyAgICBpZiAoIXJvb3QgfHwgIXJvb3QtPndpbmRvdygpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiByb290LT53aW5kb3coKS0+d2luZG93KCk7Cit9CisKK3N0YXRpYyBX
aWRnZXQqIHdpZGdldEZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKK3sKKyAgICBGcmFtZSogZnJh
bWUgPSAocGFnZSA/IHBhZ2UtPm1haW5GcmFtZSgpIDogMCk7CiAgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSAoZnJhbWUgPyBmcmFtZS0+dmlldygpIDogMCk7Ci0gICAgCiAgICAgaWYgKCFmcmFt
ZVZpZXcpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBmcmFtZVZpZXctPmRy
YXdhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lVmlldzsKIH0KIAogRmxvYXRSZWN0IHNjcmVlblJl
Y3QoY29uc3QgUGFnZSogcGFnZSkKQEAgLTY1LDE1ICs3OCwxNSBAQAogICAgIHJldHVybiBnZGtf
ZHJhd2FibGVfZ2V0X2RlcHRoKGRyYXdhYmxlKTsKIH0KIAotRmxvYXRSZWN0IHVzYWJsZVNjcmVl
blJlY3QoY29uc3QgUGFnZSogcGFnZSkKK2Zsb2F0IHNjYWxlRmFjdG9yKGNvbnN0IFBhZ2UqKQog
ewotICAgIHJldHVybiBzY3JlZW5SZWN0KHBhZ2UpOworICAgIHJldHVybiAxLjBmOwogfQogCi1m
bG9hdCBzY2FsZUZhY3Rvcihjb25zdCBQYWdlKikKK0Zsb2F0UmVjdCB1c2FibGVTY3JlZW5SZWN0
KGNvbnN0IFBhZ2UqIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIDEuMGY7Ci0KKyAgICByZXR1cm4gc2Ny
ZWVuUmVjdChwYWdlKTsKIH0KIAogfQorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0Jyb3dzZXJFeHRlbnNpb25HZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0Jyb3dzZXJFeHRlbnNpb25HZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvQnJvd3NlckV4dGVuc2lvbkdkay5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnJvd3NlckV4dGVuc2lvbkdkay5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZw
cmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVf
XywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQnJvd3NlckV4dGVuc2lvbkdkazo6QnJvd3NlckV4dGVuc2lvbkdkayhGcmFt
ZSopCit7fQorCitCcm93c2VyRXh0ZW5zaW9uR2RrOjp+QnJvd3NlckV4dGVuc2lvbkdkaygpCit7
fQorCit2b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OmNyZWF0ZU5ld1dpbmRvdyhjb25zdCBGcmFt
ZUxvYWRSZXF1ZXN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBCcm93c2Vy
RXh0ZW5zaW9uR2RrOjpjcmVhdGVOZXdXaW5kb3coY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNv
bnN0IFdpbmRvd0FyZ3MmLCBGcmFtZSomKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Citi
b29sIEJyb3dzZXJFeHRlbnNpb25HZGs6OmNhblJ1bk1vZGFsKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQorYm9vbCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpjYW5S
dW5Nb2RhbE5vdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
K3ZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6cnVuTW9kYWwoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6Z29CYWNrT3JGb3J3YXJkKGlu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorS1VSTCBCcm93c2VyRXh0ZW5zaW9uR2Rr
OjpoaXN0b3J5VVJMKGludCBkaXN0YW5jZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBLVVJMKCk7Cit9CitpbnQgQnJvd3NlckV4dGVuc2lvbkdkazo6Z2V0SGlzdG9yeUxl
bmd0aCgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6
c2V0VHlwZWRJY29uVVJMKEtVUkwgY29uc3QmLCBjb25zdCBTdHJpbmcmKQoreyB9Cit2b2lkIEJy
b3dzZXJFeHRlbnNpb25HZGs6OnNldEljb25VUkwoS1VSTCBjb25zdCYpCit7IH0KKworfQorCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtMjIsNTIgKzIyLDg2IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKLQorI2luY2x1ZGUgIldpZGdldFBy
aXZhdGVHZGsuaCIKKyNpbmNsdWRlICJGcmFtZUdkay5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgog
I2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIktVUkwuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAi
UmVuZGVyUGFydC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVk
ZSA8bWF0aC5oPgogCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVy
ciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIixcCisgICAgICAgIF9fRklMRV9f
LCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdpZGdldFByaXZhdGUgewotcHVibGljOgotICAgIEdka0RyYXdh
YmxlKiBkcmF3YWJsZTsKLSAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBJbnRSZWN0IGdl
b21ldHJ5OwotICAgIEZvbnQgZm9udDsKLX07CiAKKworc3RhdGljIEZyYW1lR2RrKiBpZnJhbWVQ
YXJlbnQoY29uc3QgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQtPmlzRnJhbWVW
aWV3KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IEZyYW1lVmlldyogdmlldyA9IHN0
YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHdpZGdldCk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEZyYW1lR2RrKj4odmlldy0+ZnJhbWUoKSk7Cit9CisKIFdpZGdldDo6V2lkZ2V0KCkKLSAg
ICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCisgICAgICAgIDogZGF0YShuZXcgV2lkZ2V0UHJp
dmF0ZSh0aGlzKSkKK3t9CisKK0ZyYW1lVmlldyogV2lkZ2V0OjpmcmFtZVZpZXcoKSBjb25zdAog
ewotICAgIGRhdGEtPmRyYXdhYmxlID0gMDsKKyAgICByZXR1cm4gZGF0YS0+bV92aWV3LmdldCgp
OwogfQogCi1XaWRnZXQ6OldpZGdldChHZGtEcmF3YWJsZSogZHJhd2FibGUpCi0gICAgOiBkYXRh
KG5ldyBXaWRnZXRQcml2YXRlKQordm9pZCBXaWRnZXQ6OnNldEZyYW1lVmlldyhGcmFtZVZpZXcq
IHZpZXcpCiB7Ci0gICAgc2V0RHJhd2FibGUoZHJhd2FibGUpOworICAgIGRhdGEtPm1fdmlldyA9
IHZpZXc7CisgICAgdmlldy0+ZGF0YS0+Z2VvbWV0cnkgPSBkYXRhLT5nZW9tZXRyeTsKKyAgICB2
aWV3LT5kYXRhLT5tX3BhcmVudCA9IGRhdGEtPm1fcGFyZW50OwogfQogCi1HZGtEcmF3YWJsZSog
V2lkZ2V0OjpkcmF3YWJsZSgpIGNvbnN0Cit2b2lkIFdpZGdldDo6c2V0T3duZXIoV2lkZ2V0KiBw
KQogewotICAgIHJldHVybiBkYXRhLT5kcmF3YWJsZTsKKyAgICBkYXRhLT5tX293bmVyID0gcDsK
IH0KIAotdm9pZCBXaWRnZXQ6OnNldERyYXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSkKK1dp
ZGdldCogV2lkZ2V0Ojpvd25lcigpIGNvbnN0CiB7Ci0gICAgZGF0YS0+ZHJhd2FibGUgPSBkcmF3
YWJsZTsKKyAgICByZXR1cm4gZGF0YS0+bV9vd25lcjsKIH0KIAorV2lkZ2V0KiBXaWRnZXQ6OnBh
cmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPm1fcGFyZW50OworfQorCit2b2lkIFdp
ZGdldDo6c2V0UGFyZW50KFdpZGdldCogcCkKK3sKKyAgICBkYXRhLT5tX3BhcmVudCA9IHA7Cisg
ICAgaWYgKHApCisgICAgICAgIHJlcGFpbnQoZmFsc2UpOworfQorCit2b2lkIFdpZGdldDo6cmVt
b3ZlRnJvbVBhcmVudCgpCit7CisgICAgZGF0YS0+bV9wYXJlbnQ9MDsKK30KKwogV2lkZ2V0Ojp+
V2lkZ2V0KCkKIHsKICAgICBkZWxldGUgZGF0YTsKQEAgLTgzLDYgKzExNyw1OSBAQAogICAgIHJl
dHVybiBkYXRhLT5jbGllbnQ7CiB9CiAKK3ZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlKCkKK3sKKyAg
ICBJbnRSZWN0IHIoMCwwLGRhdGEtPmdlb21ldHJ5LndpZHRoKCksZGF0YS0+Z2VvbWV0cnkuaGVp
Z2h0KCkpOworICAgIGludmFsaWRhdGVSZWN0KHIpOworfQorCit2b2lkIFdpZGdldDo6aW52YWxp
ZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcikKK3sKKworICAgIHJlcGFpbnQocixmYWxzZSk7Cit9
CisKK3ZvaWQgV2lkZ2V0OjpyZXBhaW50KGJvb2wgbm93KQoreworICAgIEludFJlY3QgcigwLDAs
ZGF0YS0+Z2VvbWV0cnkud2lkdGgoKSxkYXRhLT5nZW9tZXRyeS5oZWlnaHQoKSk7CisgICAgcmVw
YWludChyLG5vdyk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpyZXBhaW50KGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIGJvb2wgbm93KQoreworICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIC8vaWYgd2UgYXJlIG93bmVkIGxldCBvd25lciByZXBhaW50Cisg
ICAgaWYgKG93bmVyKCkgIT0gMCkgeworICAgICAgICBvd25lcigpLT5yZXBhaW50KHVwZGF0ZVJl
Y3Qsbm93KTsKKyAgICB9IGVsc2UgaWYgKGlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAgRnJhbWVW
aWV3KiB2ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyk7CisgICAgICAgIEZyYW1lR2Rr
KiBmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4odi0+ZnJhbWUoKSk7CisgICAgICAgIElu
dFJlY3QgZGlydHkgPSB1cGRhdGVSZWN0OworICAgICAgICBkaXJ0eS5tb3ZlKEludFNpemUoZGF0
YS0+Z2VvbWV0cnkueCgpLGRhdGEtPmdlb21ldHJ5LnkoKSkpOworICAgICAgICBmcmFtZS0+cmVw
YWludChkaXJ0eSxub3cpOworICAgIH0gZWxzZSBpZiAocGFyZW50KCkgIT0gMCkgeworICAgICAg
ICBJbnRSZWN0IGRpcnR5ID0gdXBkYXRlUmVjdDsKKyAgICAgICAgZGlydHkubW92ZShJbnRTaXpl
KGRhdGEtPmdlb21ldHJ5LngoKSxkYXRhLT5nZW9tZXRyeS55KCkpKTsKKyAgICAgICAgcGFyZW50
KCktPnJlcGFpbnQoZGlydHksbm93KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NlcnQoMCk7
CisgICAgfQorfQorCisvKgorICogU2luY2Ugd2UgY2FsbCByZXBhaW50IG9uIHRoZSByb290IGZy
YW1lIHRoZSByZWN0IGNvbWVzCisgKiBiYWNrIHRvIHVzIGluIHRoZSByb290IGZyYW1lIGNvb3Jk
aW5hdGUgc3lzdGVtCisgKiBub3QgdGhlIHdpZGdldHMKKyAqLwordm9pZCBXaWRnZXQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICgh
ZnJhbWVWaWV3KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhc3NlcnQoZnJhbWVWaWV3KCkgIT0g
dGhpcyk7CisgICAgZnJhbWVWaWV3KCktPnBhaW50KGN0eCxyZWN0KTsKK30KKwogSW50UmVjdCBX
aWRnZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAogewogICAgIHJldHVybiBkYXRhLT5nZW9tZXRy
eTsKQEAgLTkwLDIwICsxNzcsMTcgQEAKIAogYm9vbCBXaWRnZXQ6Omhhc0ZvY3VzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRhdGEtPmhhc0ZvY3VzOwogfQogCiB2
b2lkIFdpZGdldDo6c2V0Rm9jdXMoKQogewotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IGRh
dGEtPmRyYXdhYmxlOwotICAgIGlmICghZHJhd2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2Fi
bGUpKQotICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9X
KGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X2ZvY3VzKHdpbmRvdywgR0RLX0NVUlJFTlRfVElN
RSk7CisgICAgZGF0YS0+aGFzRm9jdXM9IHRydWU7CiB9CiAKIHZvaWQgV2lkZ2V0OjpjbGVhckZv
Y3VzKCkKIHsKKyAgICBkYXRhLT5oYXNGb2N1cz0gZmFsc2U7CiB9CiAKIGNvbnN0IEZvbnQmIFdp
ZGdldDo6Zm9udCgpIGNvbnN0CkBAIC0xMTgsNDQgKzIwMiwxMTIgQEAKIAogdm9pZCBXaWRnZXQ6
OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICBHZGtDdXJzb3IqIHBjdXIg
PSBjdXJzb3IuaW1wbCgpOwotICAgIGlmICghcGN1cikKLSAgICAgICAgcmV0dXJuOwogCi0gICAg
R2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZGF0YS0+ZHJhd2FibGU7Ci0gICAgaWYgKCFkcmF3YWJs
ZSB8fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBHZGtX
aW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfc2V0
X2N1cnNvcih3aW5kb3csIHBjdXIpOworICAgIEZyYW1lR2RrKiBmcmFtZSA9IGlmcmFtZVBhcmVu
dCh0aGlzKTsKIAorICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJhbWUtPnNldEN1cnNvcihjdXJz
b3IpOworICAgIGVsc2UgaWYgKHBhcmVudCgpKQorICAgICAgICBwYXJlbnQoKS0+c2V0Q3Vyc29y
KGN1cnNvcik7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzaG93KCkKIHsKLSAgICBHZGtEcmF3YWJsZSog
ZHJhd2FibGUgPSBkYXRhLT5kcmF3YWJsZTsKLSAgICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNf
V0lORE9XKGRyYXdhYmxlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93
ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdpbmRvdyk7Cisg
ICAgZGF0YS0+dmlzaWJsZSA9IHRydWU7CiB9CiAKKwogdm9pZCBXaWRnZXQ6OmhpZGUoKQogewot
ICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IGRhdGEtPmRyYXdhYmxlOwotICAgIGlmICghZHJh
d2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAgICByZXR1cm47Ci0gICAg
R2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93
X2hpZGUod2luZG93KTsKKyAgICBkYXRhLT52aXNpYmxlID0gZmFsc2U7CiB9CiAKK0ludFBvaW50
IFdpZGdldDo6bG9jYXRpb25JbldpbmRvdygpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcCgwLDAp
OworICAgIFdpZGdldCogd2lkZ2V0ID0gY29uc3RfY2FzdDxXaWRnZXQqPih0aGlzKTsKKworICAg
IHdoaWxlICh3aWRnZXQpIHsKKyAgICAgICAgUmVuZGVyUGFydCogcmVuZGVyZXIgPSAgd2lkZ2V0
LT5mcmFtZVZpZXcoKS0+ZnJhbWUoKS0+b3duZXJSZW5kZXJlcigpOworICAgICAgICBpZiAod2lk
Z2V0LT5vd25lcigpKSB7CisgICAgICAgICAgICB3aWRnZXQgPSB3aWRnZXQtPm93bmVyKCk7Cisg
ICAgICAgICAgICBJbnRSZWN0IHIgPSB3aWRnZXQtPmZyYW1lR2VvbWV0cnkoKTsKKyAgICAgICAg
fSBlbHNlIGlmICh3aWRnZXQtPmlzRnJhbWVWaWV3KCkgJiYgcmVuZGVyZXIpIHsKKyAgICAgICAg
ICAgIEFmZmluZVRyYW5zZm9ybSB0eCA9IHJlbmRlcmVyLT5hYnNvbHV0ZVRyYW5zZm9ybSgpOwor
ICAgICAgICAgICAgcC5tb3ZlKChpbnQpdHguZHgoKSwoaW50KXR4LmR5KCkpOworICAgICAgICAg
ICAgd2lkZ2V0ID0gd2lkZ2V0LT5wYXJlbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEludFJlY3QgciA9IHdpZGdldC0+ZnJhbWVHZW9tZXRyeSgpOworICAgICAgICAgICAgcC5t
b3ZlKHIueCgpLHIueSgpKTsKKyAgICAgICAgICAgIHdpZGdldCA9IHdpZGdldC0+cGFyZW50KCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKwogdm9pZCBXaWRnZXQ6OnNl
dEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBkYXRhLT5nZW9tZXRyeSA9
IHI7Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZGF0YS0+ZHJhd2FibGU7Ci0gICAgaWYg
KCFkcmF3YWJsZSB8fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCisgICAgaWYgKGRhdGEtPmdl
b21ldHJ5ID09IHIpCiAgICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdE
S19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfbW92ZV9yZXNpemUod2luZG93LCBy
LngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgZGF0YS0+Z2VvbWV0cnk9
cjsKKyAgICBpZiAoZnJhbWVWaWV3KCkgJiYgZnJhbWVWaWV3KCkgIT0gdGhpcykKKyAgICAgICAg
ZnJhbWVWaWV3KCktPnNldEZyYW1lR2VvbWV0cnkocik7CiB9CiAKK3ZvaWQgV2lkZ2V0OjpzZXRF
bmFibGVkKGJvb2wgYikKK3sKKyAgICBkYXRhLT5lbmFibGVkID0gYjsKIH0KKworYm9vbCBXaWRn
ZXQ6OmlzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPmVuYWJsZWQ7Cit9CisK
K3ZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wgYikKK3sKKyAgICBkYXRhLT5zZWxlY3Rl
ZCA9IGI7Cit9CisKKworV2lkZ2V0OjpGb2N1c1BvbGljeSBXaWRnZXQ6OmZvY3VzUG9saWN5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQ2xpY2tGb2N1czsKK30KKwordm9pZCBXaWRnZXQ6OmRpc2Fi
bGVGbHVzaERyYXdpbmcoKQore30KKwordm9pZCBXaWRnZXQ6OmVuYWJsZUZsdXNoRHJhd2luZygp
Cit7fQorCitHcmFwaGljc0NvbnRleHQqIFdpZGdldDo6bG9ja0RyYXdpbmdGb2N1cygpCit7Cisg
ICAgV2lkZ2V0KiBwciA9IHRoaXM7CisgICAgSW50UmVjdCByZWN0KDAsMCxkYXRhLT5nZW9tZXRy
eS53aWR0aCgpLGRhdGEtPmdlb21ldHJ5LmhlaWdodCgpKTsKKworICAgIHdoaWxlIChwcikgewor
ICAgICAgICBGcmFtZUdkayogaWZyYW1lID0gaWZyYW1lUGFyZW50KHByKTsKKyAgICAgICAgaWYg
KGlmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpZnJhbWUtPmJlZ2luUGFpbnRpbmcocmVjdCk7
CisgICAgICAgIHJlY3QubW92ZShwci0+ZGF0YS0+Z2VvbWV0cnkueCgpLHByLT5kYXRhLT5nZW9t
ZXRyeS55KCkpOworICAgICAgICBwciA9IHByLT5wYXJlbnQoKTsKKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgV2lkZ2V0Ojp1bmxvY2tEcmF3aW5nRm9jdXMoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQoreworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBzdGF0aWNfY2Fz
dDxHcmFwaGljc0NvbnRleHRDYWlybyo+KGNvbnRleHQpOworICAgIFdpZGdldCogcHIgPSB0aGlz
OworICAgIHdoaWxlIChwcikgeworICAgICAgICBGcmFtZUdkayogaWZyYW1lID0gaWZyYW1lUGFy
ZW50KHByKTsKKyAgICAgICAgaWYgKGlmcmFtZSkKKyAgICAgICAgICAgIGlmcmFtZS0+ZW5kUGFp
bnRpbmcoY3R4KTsKKyAgICAgICAgcHIgPSBwci0+cGFyZW50KCk7CisgICAgfQorfQorCit9Cisv
LyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVzb3VyY2VM
b2FkZXJNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZXNv
dXJjZUxvYWRlck1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDE0ICsyMiwyMCBAQAogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgi
CiAKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oIgorI2luY2x1ZGUgIkZvcm1EYXRhLmgiCisj
aW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDxz
dGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM3LDEwICs0MywxNCBAQAogY29uc3QgZG91YmxlIHBvbGxUaW1lU2Vjb25kcyA9IDAuMDU7CiAK
IFJlc291cmNlTG9hZGVyTWFuYWdlcjo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyKCkKLSAgICA6IG1f
dXNlU2ltcGxlKGZhbHNlKQotICAgICwgam9icyhuZXcgSGFzaFNldDxSZXNvdXJjZUxvYWRlcio+
KQotICAgICwgbV9kb3dubG9hZFRpbWVyKHRoaXMsICZSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmRv
d25sb2FkVGltZXJDYWxsYmFjaykKKyAgICAgICAgOiBqb2JzKCkKKyAgICAgICAgLCBzaW1wbGVK
b2JzKCkKKyAgICAgICAgLCBtX2Rvd25sb2FkVGltZXIodGhpcywgJlJlc291cmNlTG9hZGVyTWFu
YWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKQogeworICAgIEZEX1pFUk8oJmZkcmVhZCk7Cisg
ICAgRkRfWkVSTygmZmR3cml0ZSk7CisgICAgRkRfWkVSTygmZmRleGNlcCk7CisgICAgbWF4ZmQg
PSAwOwogICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKICAgICBjdXJsTXVs
dGlIYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKIH0KQEAgLTUzLDQ3ICs2Myw1MyBAQAogICAg
IHJldHVybiBzaW5nbGV0b247CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjp1c2VT
aW1wbGVUcmFuc2Zlcihib29sIHVzZVNpbXBsZSkKLXsKLSAgICBtX3VzZVNpbXBsZSA9IHVzZVNp
bXBsZTsKLX0KLQogc3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90
IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogb2JqKQogewogICAgIFJlc291cmNlTG9hZGVyKiBq
b2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRlcio+KG9iaik7CisgICAgaWYgKGpvYi0+aXNF
cnJvclBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIFJlc291cmNlTG9hZGVySW50ZXJu
YWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CisgICAgaWYgKCFkLT5hc3NlbWJsZWRSZXNwb25z
ZUhlYWRlcnMpCisgICAgICAgIGQtPmNsaWVudC0+cmVjZWl2ZWRSZXNwb25zZShqb2IsZC0+bV9y
ZXNwb25zZSk7CiAgICAgaW50IHRvdGFsU2l6ZSA9IHNpemUgKiBubWVtYjsKICAgICBkLT5jbGll
bnQtPnJlY2VpdmVkRGF0YShqb2IsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpLCB0b3RhbFNpemUp
OworICAgIGlmIChkLT5tX3VzZVNpbXBsZSkgeworICAgICAgICBkLT5yZXN1bHREYXRhLmFwcGVu
ZChzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKKyAgICB9CiAgICAgcmV0dXJu
IHRvdGFsU2l6ZTsKIH0KIAotc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIs
IHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCitzdGF0aWMgc2l6ZV90IGhl
YWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCog
b2JqKQogeworICAgIFJlc291cmNlTG9hZGVyKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUxv
YWRlcio+KG9iaik7CisgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50
ZXJuYWwoKTsKKworICAgIGlmIChqb2ItPmlzRXJyb3JQYWdlKCkpCisgICAgICAgIHJldHVybiAt
MTsKICAgICBpbnQgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOworICAgIGQtPm1fcmVzcG9uc2Ut
PmRhdGEgPSBTdHJpbmcocHRyLHRvdGFsU2l6ZSk7CisgICAgam9iLT5yZWNlaXZlZFJlc3BvbnNl
KGQtPm1fcmVzcG9uc2UpOwogICAgIHJldHVybiB0b3RhbFNpemU7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkZXJNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soVGltZXI8UmVzb3VyY2VMb2Fk
ZXJNYW5hZ2VyPiogdGltZXIpCiB7Ci0gICAgaWYgKGpvYnMtPmlzRW1wdHkoKSkgewotICAgICAg
ICBtX2Rvd25sb2FkVGltZXIuc3RvcCgpOworICAgIGlmIChqb2JzLmlzRW1wdHkoKSYmIHNpbXBs
ZUpvYnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX3VzZVNp
bXBsZSkgewotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVzb3VyY2VMb2FkZXIqPjo6aXRlcmF0b3Ig
aXQgPSBqb2JzLT5iZWdpbigpOyBpdCAhPSBqb2JzLT5lbmQoKTsgKytpdCkgeworCisgICAgaWYg
KCFzaW1wbGVKb2JzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKEhhc2hTZXQ8UmVzb3VyY2VM
b2FkZXIqPjo6aXRlcmF0b3IgaXQgPSBzaW1wbGVKb2JzLmJlZ2luKCk7CisgICAgICAgICAgICAg
ICAgaXQgIT0gc2ltcGxlSm9icy5lbmQoKTsgKytpdCkgewogICAgICAgICAgICAgUmVzb3VyY2VM
b2FkZXIqIGpvYiA9ICppdDsKICAgICAgICAgICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQg
PSBqb2ItPmdldEludGVybmFsKCk7CiAgICAgICAgICAgICBDVVJMY29kZSByZXMgPSBjdXJsX2Vh
c3lfcGVyZm9ybShkLT5tX2hhbmRsZSk7CiAgICAgICAgICAgICBpZiAocmVzICE9IENVUkxFX09L
KQogICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgV0lUSCBKT0IgJWRcbiIsIHJlcyk7Ci0g
ICAgICAgICAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IsIDApOwotICAgICAgICAg
ICAgZC0+Y2xpZW50LT5yZWNlaXZlZEFsbERhdGEoam9iKTsKLSAgICAgICAgICAgIGN1cmxfZWFz
eV9jbGVhbnVwKGQtPm1faGFuZGxlKTsKLSAgICAgICAgICAgIGQtPm1faGFuZGxlID0gMDsKKyAg
ICAgICAgICAgIHJlbW92ZShqb2IpOwogICAgICAgICB9Ci0gICAgICAgIGpvYnMtPmNsZWFyKCk7
Ci0gICAgICAgIG1fZG93bmxvYWRUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisK
KyAgICBpZiAoIWpvYnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7CiAg
ICAgICAgIEZEX1pFUk8oJmZkd3JpdGUpOwogICAgICAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKQEAg
LTEwNSwyMyArMTIxLDE3IEBACiAgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHNlbGVjdFRpbWVv
dXRNUyAqIDEwMDA7ICAgICAgIC8vIHNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMKICAgICAgICAg
cmV0dmFsID0gOjpzZWxlY3QobWF4ZmQgKyAxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAs
ICZ0aW1lb3V0KTsKICAgICAgICAgc3dpdGNoIChyZXR2YWwpIHsKLSAgICAgICAgICAgIGNhc2Ug
LTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0IGVycm9yCi0jaWZuZGVmIE5ERUJV
RwotICAgICAgICAgICAgICAgIHByaW50ZigiJXMsIHNlbGVjdCBlcnJvciglZClcbiIsIF9fUFJF
VFRZX0ZVTkNUSU9OX18scmV0dmFsKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIC8qIGZhbGx0
aHJvdWdoKi8KLSAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgIC8vIHNlbGVjdCB0
aW1lb3V0Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgICAgIHByaW50ZigiJXMsIHNlbGVj
dCB0aW1lb3V0ICVkXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLHJldHZhbCk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaC4gdGhpcyBjYW4gYmUgdGhlIGZpcnN0IHBlcmZv
cm0gdG8gYmUgbWFkZSAqLwotICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg
ICAgICAvLyAxKyBkZXNjcmlwdG9ycyBoYXZlIGRhdGEKLSAgICAgICAgICAgICAgICB3aGlsZSAo
Q1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNID09IGN1cmxfbXVsdGlfcGVyZm9ybShjdXJsTXVsdGlI
YW5kbGUsICZucnVubmluZykpCi0gICAgICAgICAgICAgICAgICAgIHsgfQorICAgICAgICBjYXNl
IC0xOi8vIHNlbGVjdCBlcnJvcgorICAgICAgICAgICAgLyogZmFsbHRocm91Z2gqLworICAgICAg
ICBjYXNlIDA6ICAgICAgICAgICAgICAgICAvLyBzZWxlY3QgdGltZW91dAorICAgICAgICAgICAg
LyogZmFsbHRocm91Z2guIHRoaXMgY2FuIGJlIHRoZSBmaXJzdCBwZXJmb3JtIHRvIGJlIG1hZGUg
Ki8KKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAvLyAxKyBkZXNjcmlw
dG9ycyBoYXZlIGRhdGEKKyAgICAgICAgd2hpbGUgKENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9
PSBjdXJsX211bHRpX3BlcmZvcm0oY3VybE11bHRpSGFuZGxlLCAmbnJ1bm5pbmcpKSB7IH0KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIGNoZWNrIHRoZSBjdXJsIG1lc3NhZ2VzIGluZGljYXRpbmcg
Y29tcGxldGVkIHRyYW5zZmVycwogICAgICAgICAvLyBhbmQgZnJlZSB0aGVpciByZXNvdXJjZXMK
KyAgICAgICAgUmVzb3VyY2VMb2FkZXIqIGpvYjsKICAgICAgICAgaW50IG5tc2dzOwogICAgICAg
ICB3aGlsZSAoQ1VSTE1zZyogbXNnID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoY3VybE11bHRpSGFu
ZGxlLCAmbm1zZ3MpKSB7CiAgICAgICAgICAgICBpZiAobXNnLT5tc2cgPT0gQ1VSTE1TR19ET05F
KSB7CkBAIC0xMzAsNjAgKzE0MCwxNTggQEAKICAgICAgICAgICAgICAgICBhc3NlcnQoY2hhbmRs
ZSk7CiAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXIgKmpvYjsKICAgICAgICAgICAgICAg
ICBjdXJsX2Vhc3lfZ2V0aW5mbyhjaGFuZGxlLCBDVVJMSU5GT19QUklWQVRFLCAmam9iKTsKLSAg
ICAgICAgICAgICAgICBhc3NlcnQoam9iKTsgLy9maXhtZTogYXNzZXJ0LT5pZiA/Ci0gICAgICAg
ICAgICAgICAgLy8gaWYgZm91bmQsIGRlbGV0ZSBpdAotICAgICAgICAgICAgICAgIGlmIChqb2Ip
IHsKLSAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCAqZCA9IGpvYi0+
Z2V0SW50ZXJuYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtc2ctPmRhdGEucmVz
dWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENVUkxFX09LOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoaXMgdG8gYXV0aGVudGljYXRlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3BDb2RlID0gLTE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJTkZPX1JFU1BP
TlNFX0NPREUsICZyZXNwQ29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Zl
KGpvYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ3VybCBFUlJPUiAlc1xuIiwgY3VybF9lYXN5X3N0
cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
b2ItPnNldEVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbW92ZShqb2IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmKCJDdXJsUmVxdWVzdCBub3QgZm91bmQsIGV2ZW50aG91Z2ggY3VybCBk
LT5tX2hhbmRsZSBmaW5pc2hlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCgwKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQoam9iKTsKKyAgICAgICAgICAgICAgICBpZiAobXNnLT5k
YXRhLnJlc3VsdCAhPSBDVVJMRV9PSykgeworICAgICAgICAgICAgICAgICAgICBjaGFyICpoYW5k
bGVfdXJsPTA7CisgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGNoYW5kbGUs
Q1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJmhhbmRsZV91cmwpOworICAgICAgICAgICAgICAgICAg
ICBwcmludGYoIkN1cmwgRVJST1IgdXJsPSVzIGVycm9yOiVzXG4iLGhhbmRsZV91cmwsIGN1cmxf
ZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgIGZy
ZWUoaGFuZGxlX3VybCk7CisgICAgICAgICAgICAgICAgICAgIGpvYi0+c2V0RXJyb3IobXNnLT5k
YXRhLnJlc3VsdCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlbW92ZShq
b2IpOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFqb2JzLT5p
c0VtcHR5KCkpCisgICAgaWYgKCFtX2Rvd25sb2FkVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9kb3dubG9hZFRpbWVyLnN0YXJ0T25lU2hvdChwb2xsVGltZVNlY29uZHMpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZGVyTWFuYWdlcjo6cmVtb3ZlKFJlc291cmNlTG9hZGVyKiBqb2IpCiB7Cisg
ICAgLy90YWtlIG91dCBvZiBjdXJsIG11bHRpIGZpcnN0ICEKICAgICBSZXNvdXJjZUxvYWRlcklu
dGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgIGlmICghZC0+bV9oYW5kbGUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoam9icy0+Y29udGFpbnMoam9iKSkKLSAgICAgICAgam9i
cy0+cmVtb3ZlKGpvYik7Ci0gICAgaWYgKGpvYnMtPmlzRW1wdHkoKSkKLSAgICAgICAgbV9kb3du
bG9hZFRpbWVyLnN0b3AoKTsKLSAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IsIDAp
OwotICAgIGQtPmNsaWVudC0+cmVjZWl2ZWRBbGxEYXRhKGpvYik7Ci0gICAgaWYgKGQtPm1faGFu
ZGxlKSB7CisgICAgaWYgKGQtPm1faGFuZGxlKQogICAgICAgICBjdXJsX211bHRpX3JlbW92ZV9o
YW5kbGUoY3VybE11bHRpSGFuZGxlLCBkLT5tX2hhbmRsZSk7Ci0gICAgICAgIGN1cmxfZWFzeV9j
bGVhbnVwKGQtPm1faGFuZGxlKTsKLSAgICAgICAgZC0+bV9oYW5kbGUgPSBOVUxMOworCisgICAg
aWYgKGpvYnMuY29udGFpbnMoam9iKSkKKyAgICAgICAgam9icy5yZW1vdmUoam9iKTsKKworICAg
IGlmIChzaW1wbGVKb2JzLmNvbnRhaW5zKGpvYikpCisgICAgICAgIHNpbXBsZUpvYnMucmVtb3Zl
KGpvYik7CisKKyAgICBpZiAoZC0+Y2xpZW50KSB7CisgICAgICAgIC8vZW1wdHkgcGFnZSBpZiB0
cnVlCisgICAgICAgIGlmICghZC0+YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzKQorICAgICAgICAg
ICAgZC0+Y2xpZW50LT5yZWNlaXZlZFJlc3BvbnNlKGpvYixkLT5tX3Jlc3BvbnNlKTsKKyAgICAg
ICAgZC0+Y2xpZW50LT5yZWNlaXZlZEFsbERhdGEoam9iKTsKKyAgICAgICAgZC0+Y2xpZW50LT5y
ZWNlaXZlZEFsbERhdGEoam9iLCAwKTsKICAgICB9CisgICAgZGVsZXRlIGpvYjsKIH0KIAotdm9p
ZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmFkZChSZXNvdXJjZUxvYWRlciogam9iKQordm9pZCAg
UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpzZXR1cFB1dChSZXNvdXJjZUxvYWRlciogam9iKQogewot
ICAgIGJvb2wgc3RhcnRUaW1lciA9IGpvYnMtPmlzRW1wdHkoKTsKICAgICBSZXNvdXJjZUxvYWRl
ckludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOworICAgIGlmIChkLT5tZXRob2QgIT0g
IlBVVCIpCisgICAgICAgIHJldHVybjsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX1VQTE9BRCwgVFJVRSkgOworCisgICAgeworICAgICAgICBzdHJ1Y3QgY3VybF9z
bGlzdCAqc2xpc3Q9TlVMTDsKKyAgICAgICAgLy9GSVhNRTogaG1tbSBkaXNhYmxlIEV4cGVjdDog
MTAwLWNvbnRpbnVlCisgICAgICAgIC8vc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwi
RXhwZWN0OiIpOworICAgICAgICAvL2p1c3Qgc3VwcHJvdCBIdHRwIDEuMSBjaHVuY2tlZCBlbmNv
ZGluZyBub3cKKyAgICAgICAgc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwiVHJhbnNm
ZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSxDVVJMT1BUX0hUVFBIRUFERVIsIHNsaXN0KTsKKyAgICAgICAgZC0+bV9jdXN0b21Qb3N0
SGVhZGVyID0gc2xpc3Q7CisgICAgfQorfQorCit2b2lkICBSZXNvdXJjZUxvYWRlck1hbmFnZXI6
OnNldHVwUG9zdChSZXNvdXJjZUxvYWRlciogam9iKQoreworICAgIFJlc291cmNlTG9hZGVySW50
ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CisgICAgaWYgKGQtPm1ldGhvZCAhPSAiUE9T
VCIpCisgICAgICAgIHJldHVybjsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX1BPU1QsdHJ1ZSk7CisgICAgLy9kaXNhYmxlIEV4cGVjdDogMTAwLWNvbnRpbnVlCisg
ICAgeworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3Q9TlVMTDsKKyAgICAgICAgc2xp
c3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwiRXhwZWN0OiIpOworICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAgICAg
ICBkLT5tX2N1c3RvbVBvc3RIZWFkZXIgPSBzbGlzdDsKKyAgICB9CisKKyAgICAvL2ZpcnN0IGFk
ZCBhbnkgZGF0YQorICAgIGQtPnBvc3REYXRhLmZsYXR0ZW4oZC0+bV9wb3N0Qnl0ZXMpOworICAg
IGlmIChkLT5tX3Bvc3RCeXRlcy5zaXplKCkgIT0gMCkgeworICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFMsZC0+bV9wb3N0Qnl0ZXMuZGF0YSgp
KTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklF
TERTSVpFLGQtPm1fcG9zdEJ5dGVzLnNpemUoKSk7CisgICAgfQorCisgICAgVmVjdG9yPEZvcm1E
YXRhRWxlbWVudD4gZWxlbWVudHMgPSBkLT5wb3N0RGF0YS5lbGVtZW50cygpOworICAgIGludCBz
aXplID0gZWxlbWVudHMuc2l6ZSgpOworICAgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpsYXN0cHRy
PU5VTEw7CisKKyAgICBmb3IgKGludCBpID0wOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlm
IChlbGVtZW50c1tpXS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZSkgewor
ICAgICAgICAgICAgQ1N0cmluZyBjc3RyaW5nID0gIGVsZW1lbnRzW2ldLm1fZmlsZW5hbWUudXRm
OCgpOworICAgICAgICAgICAgLy9rZWVwIHJlZiBoZXJlIHNvIGl0cyBub3QgZnJlZWQKKyAgICAg
ICAgICAgIGQtPm1fY3N0cmluZ3MuYXBwZW5kKGNzdHJpbmcpOworICAgICAgICAgICAgY29uc3Qg
Y2hhciAqZmlsZW5hbWUgPSBjc3RyaW5nLmRhdGEoKTsKKworICAgICAgICAgICAgLyogRmlsbCBp
biB0aGUgZmlsZSB1cGxvYWQgZmllbGQgKi8KKyAgICAgICAgICAgIGN1cmxfZm9ybWFkZCgmZC0+
bV9maWxlUG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmbGFzdHB0ciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgInNlbmRmaWxlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBDVVJMRk9STV9GSUxFLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBDVVJMRk9STV9FTkQpOworCisgICAgICAgICAgICAvKiBGaWxsIGluIHRoZSBm
aWxlbmFtZSBmaWVsZCAqLworICAgICAgICAgICAgY3VybF9mb3JtYWRkKCZkLT5tX2ZpbGVQb3N0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICZsYXN0cHRyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAiZmlsZW5hbWUiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKworICAgICAgICAgICAgLyogRmlsbCBpbiB0aGUgc3Vi
bWl0IGZpZWxkIHRvbywgZXZlbiBpZiB0aGlzIGlzIHJhcmVseSBuZWVkZWQgKi8KKyAgICAgICAg
ICAgIGN1cmxfZm9ybWFkZCgmZC0+bV9maWxlUG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAmbGFzdHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwg
InN1Ym1pdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRT
LCAic2VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKyAgICAg
ICAgfQorICAgIH0KK30KK1ZlY3RvcjxjaGFyPiBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnJ1bklt
bWVkaWF0ZWx5KFJlc291cmNlTG9hZGVyKiBqb2IpCit7CisgICAgaWYgKGpvYnMuY29udGFpbnMo
am9iKSkKKyAgICAgICAgam9icy5yZW1vdmUoam9iKTsKKworICAgIGlmIChzaW1wbGVKb2JzLmNv
bnRhaW5zKGpvYikpCisgICAgICAgIHNpbXBsZUpvYnMucmVtb3ZlKGpvYik7CisKKyAgICBSZXNv
dXJjZUxvYWRlckludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOworICAgIC8vY2F1c2Ug
ZGF0YSB0byBiZSBjYWNoZWQgaW4gcmVzdWx0RGF0YQorICAgIGQtPm1fdXNlU2ltcGxlID0gdHJ1
ZTsKKyAgICBDVVJMY29kZSByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShkLT5tX2hhbmRsZSk7Cisg
ICAgaWYgKHJlcyAhPSBDVVJMRV9PSykKKyAgICAgICAgcHJpbnRmKCJFcnJvciBXSVRIIEpPQiAl
ZFxuIiwgcmVzKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0cyA9IFZlY3RvcjxjaGFyPihkLT5y
ZXN1bHREYXRhKTsKKyAgICBkLT5yZXN1bHREYXRhLmNsZWFyKCk7CisgICAgcmVtb3ZlKGpvYik7
CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpp
bml0Sm9iKFJlc291cmNlTG9hZGVyKmpvYikKK3sKKyAgICBSZXNvdXJjZUxvYWRlckludGVybmFs
KiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwogICAgIERlcHJlY2F0ZWRTdHJpbmcgdXJsID0gZC0+
VVJMLnVybCgpOworCisvL3ByaW50ZigiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjphZGQgU3RhcnRp
bmcgam9iICVzXG4iLGQtPlVSTC51cmwoKS5hc2NpaSgpKTsKKyAgICAvL3JlbW92ZSBhbnkgcXVl
cnkgcGFydCBzZW50IHRvIGEgbG9jYWwgZmlsZQorICAgIC8vYWxsb3dzIGh0dHAgc3R5bGUgZ2V0
IG9wdGlvbnMgdG8gYmUgaGFuZGxlZCBieSBhIGxvY2FsIGZpbGUKKyAgICBpZiAoZC0+VVJMLmlz
TG9jYWxGaWxlKCkpIHsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBxdWVyeSA9IGQtPlVSTC5x
dWVyeSgpOworICAgICAgICBpZiAoIXF1ZXJ5LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdW5z
aWduZWQgaW50IGlkeCA9IHVybC5maW5kKHF1ZXJ5KTsKKyAgICAgICAgICAgIHVybCA9IHVybC5s
ZWZ0KGlkeCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgZC0+bV9oYW5kbGUgPSBjdXJsX2Vhc3lf
aW5pdCgpOworICAgIC8vIHVybCBwdHIgbXVzdCByZW1haW4gdmFsaWQgdGhyb3VnaCB0aGUgcmVx
dWVzdAorICAgIGQtPm1fdXJsID0gIHN0cmR1cCh1cmwuYXNjaWkoKSk7CisKICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BSSVZBVEUsIGpvYik7CiAgICAgY3VybF9l
YXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgZXJyb3JfYnVmZmVy
KTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVOQ1RJ
T04sIHdyaXRlQ2FsbGJhY2spOwpAQCAtMTkzLDMwICszMDEsNzIgQEAKICAgICBjdXJsX2Vhc3lf
c2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKICAgICBjdXJs
X2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX01BWFJFRElSUywgMTApOwogICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0FO
WSk7Ci0gICAgLy8gdXJsIHB0ciBtdXN0IHJlbWFpbiB2YWxpZCB0aHJvdWdoIHRoZSByZXF1ZXN0
Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VUkwsIHVybC5hc2Np
aSgpKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VSTCxkLT5t
X3VybCk7CiAKLSAgICBpZiAobV91c2VTaW1wbGUpCi0gICAgICAgIGpvYnMtPmFkZChqb2IpOwot
ICAgIGVsc2UgeworICAgIC8veG1sSHR0cFJlcXVlc3Qgc2VlIHhtbC94bWxodHRwcmVxdWVzdC5j
cHAKKyAgICBTdHJpbmcgY3VzdG9tSGVhZGVycyA9IGpvYi0+cXVlcnlNZXRhRGF0YSgiY3VzdG9t
SFRUUEhlYWRlciIpOworICAgIGlmICghY3VzdG9tSGVhZGVycy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgc3RydWN0IGN1cmxfc2xpc3QgKnNsaXN0PU5VTEw7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IGhlYWRlcnMgPSBjdXN0b21IZWFkZXJzLnNwbGl0KCJcclxuIik7CisgICAgICAgIGludCBzaXpl
ID0gaGVhZGVycy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICAgICAgQ1N0cmluZyBjc3RyaW5nID0gaGVhZGVyc1tpXS51dGY4KCk7CisgICAg
ICAgICAgICAvL3NhdmUgZm9yIGxhdGVyIGNsZWFudXAKKyAgICAgICAgICAgIGQtPm1fY3N0cmlu
Z3MuYXBwZW5kKGNzdHJpbmcpOworICAgICAgICAgICAgY29uc3QgY2hhciAqIGhlYWRlciA9ICBj
c3RyaW5nLmRhdGEoKTsKKyAgICAgICAgICAgIHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoc2xp
c3QsaGVhZGVyKTsKKyAgICAgICAgfQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFu
ZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIsIHNsaXN0KTsKKyAgICAgICAgZC0+bV9jdXN0b21IZWFk
ZXIgPSBzbGlzdDsKKyAgICB9CisgICAgLy9kZWZhdWx0IHRvIGdldAorICAgIGN1cmxfZWFzeV9z
ZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEdFVCwgVFJVRSk7CisKKyAgICBpZiAoZC0+
bWV0aG9kID09ICJQT1NUIikKKyAgICAgICAgc2V0dXBQb3N0KGpvYik7CisgICAgZWxzZSBpZiAo
ZC0+bWV0aG9kID09ICJQVVQiKQorICAgICAgICBzZXR1cFB1dChqb2IpOworICAgIGVsc2UgaWYg
KGQtPm1ldGhvZCA9PSAiSEVBRCIpCisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfTk9CT0RZLCBUUlVFKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlck1hbmFn
ZXI6OmFkZChSZXNvdXJjZUxvYWRlciogam9iKQoreworICAgIFJlc291cmNlTG9hZGVySW50ZXJu
YWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CisgICAgaW5pdEpvYihqb2IpOworCisgICAgam9i
cy5hZGQoam9iKTsKKworICAgIGlmIChkLT5tX3VzZVNpbXBsZSkgeworICAgICAgICBzaW1wbGVK
b2JzLmFkZChqb2IpOworICAgIH0gZWxzZSB7CiAgICAgICAgIENVUkxNY29kZSByZXQgPSBjdXJs
X211bHRpX2FkZF9oYW5kbGUoY3VybE11bHRpSGFuZGxlLCBkLT5tX2hhbmRsZSk7Ci0gICAgICAg
IC8vIGRvbid0IGNhbGwgcGVyZm9ybSwgYmVjYXVzZSBldmVudHMgbXVzdCBiZSBhc3luYwotICAg
ICAgICAvLyB0aW1lb3V0IHdpbGwgb2NjdXIgYW5kIGRvIGN1cmxfbXVsdGlfcGVyZm9ybQogICAg
ICAgICBpZiAocmV0ICYmIHJldCAhPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsKICAgICAg
ICAgICAgIHByaW50ZigiRXJyb3IgJWQgc3RhcnRpbmcgam9iICVzXG4iLCByZXQsIGQtPlVSTC51
cmwoKS5hc2NpaSgpKTsKLSAgICAgICAgICAgIGpvYi0+c2V0RXJyb3IoMSk7Ci0gICAgICAgICAg
ICBzdGFydFRpbWVyID1mYWxzZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBqb2JzLT5h
ZGQoam9iKTsKKyAgICAgICAgICAgIGNhbmNlbChqb2IpOworICAgICAgICB9CiAgICAgfQotICAg
IGlmIChzdGFydFRpbWVyKQorICAgIGlmICghbV9kb3dubG9hZFRpbWVyLmlzQWN0aXZlKCkpCiAg
ICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNvbmRzKTsKIH0K
IAogdm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmNhbmNlbChSZXNvdXJjZUxvYWRlciogam9i
KQogeworICAgIGpvYi0+c2V0RXJyb3IoMSk7CiAgICAgcmVtb3ZlKGpvYik7Ci0gICAgam9iLT5z
ZXRFcnJvcigxKTsKIH0KK2NoYXIqIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0TWltZVR5cGUo
U3RyaW5nJiBpblBhdGgpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyBwYXRoID0gaW5QYXRoLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBpZiAocGF0aC5lbmRzV2l0aCgiLnN2ZyIpKQorICAgICAg
ICByZXR1cm4gImltYWdlL3N2Zyt4bWwiOworICAgIGlmIChwYXRoLmVuZHNXaXRoKCIueG1sIikp
CisgICAgICAgIHJldHVybiAidGV4dC94bWwiOworICAgIGlmIChwYXRoLmVuZHNXaXRoKCIueHNs
IikpCisgICAgICAgIHJldHVybiAidGV4dC94c2wiOworICAgIGlmIChwYXRoLmVuZHNXaXRoKCIu
anMiKSkKKyAgICAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiOworICAgIHJl
dHVybiAidGV4dC9odG1sIjsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvSWNvbkdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvSWNvbkdkay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9JY29uR2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJJY29uLmgi
CisjaW5jbHVkZSAiSWNvbkxvYWRlci5oIgorI2luY2x1ZGUgIkljb25EYXRhYmFzZS5oIgorCisK
KyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVO
SU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVO
Q1RJT05fXyk7IH0gd2hpbGUoMCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEljb25M
b2FkZXI6OnJlY2VpdmVkUmVzcG9uc2UoUmVzb3VyY2VMb2FkZXIqLCBQbGF0Zm9ybVJlc3BvbnNl
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSWNvbkxvYWRlcjo6bm90aWZ5
SWNvbkNoYW5nZWQoY29uc3QgS1VSTCYgaWNvblVSTCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCisKK0ljb246Okljb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0lj
b246On5JY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPElj
b24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxJY29uPigwKTsKK30KKwor
dm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtMjIsMTcgKzIyLDIzIEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGcmFtZUdkay5oIgorI2luY2x1ZGUgIldpbmRvd0dkay5oIgor
I2luY2x1ZGUgIldpZGdldFByaXZhdGVHZGsuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKICNpbmNsdWRlICJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCisj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiQnJvd3NlckV4dGVuc2lvbkdkay5oIgpAQCAtNDAsOCArNDYsMTIgQEAKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIkZyYW1l
UHJpdmF0ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MRnJh
bWVFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckludGVybmFsLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCkBAIC01Miw5ICs2MiwxMiBAQAogI2lu
Y2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKICNpbmNsdWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJLZXlib2FyZENvZGVzLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgot
I2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJ
WE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJF
VFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCiAKIC8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVz
b3VyY2VzIGZyb20gV2ViS2l0CiAvLyBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIGFuZCBJJ20g
bm90IHN1cmUgd2hlcmUKQEAgLTcxLDkwICs4NCw2MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6RnJhbWVHZGtDbGllbnREZWZhdWx0KCkKLSAgICA6
IFJlc291cmNlTG9hZGVyQ2xpZW50KCkKLSAgICAsIG1fZnJhbWUoMCkKLSAgICAsIG1fYmVnaW5D
YWxsZWQoZmFsc2UpCi17Ci19Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1GcmFtZUdk
a0NsaWVudERlZmF1bHQ6On5GcmFtZUdka0NsaWVudERlZmF1bHQoKQotewotfQorc3RhdGljIGNo
YXIqIGluc3RhbGxQYXRoOworc3RhdGljIEZyYW1lR2RrKiBmb2N1c0ZyYW1lOwogCi12b2lkIEZy
YW1lR2RrQ2xpZW50RGVmYXVsdDo6c2V0RnJhbWUoY29uc3QgRnJhbWVHZGsqIGZyYW1lKQordm9p
ZCBGcmFtZVZpZXc6OnVwZGF0ZUJvcmRlcigpCiB7Ci0gICAgbV9mcmFtZSA9IGNvbnN0X2Nhc3Q8
RnJhbWVHZGsqPihmcmFtZSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFt
ZUdka0NsaWVudERlZmF1bHQ6Om9wZW5VUkwoY29uc3QgS1VSTCYgdXJsKQorYm9vbCBGcmFtZVZp
ZXc6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1Njcm9sbGJhcihNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBoaXQsIFBsYXRmb3JtU2Nyb2xsYmFyKiBiYXIpCiB7Ci0gICAgbV9mcmFtZS0+ZGlk
T3BlblVSTCh1cmwpOwotICAgIG1fYmVnaW5DYWxsZWQgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxS
ZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSh0aGlzLCAiR0VU
IiwgdXJsKTsKLSAgICBsb2FkZXItPnN0YXJ0KDApOworICAgIEZyYW1lKiBmcmFtZSA9IGJhci0+
ZnJhbWVWaWV3KCktPmZyYW1lKCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIGZyYW1lLT52
aWV3KCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChoaXQuZXZlbnQoKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRnJhbWVHZGtDbGll
bnREZWZhdWx0OjpzdWJtaXRGb3JtKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEZvcm1EYXRhKiBwb3N0RGF0YSkKK2Jvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VQ
cmVzc0V2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBoaXQsIEZy
YW1lKiBmcmFtZSkKIHsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFJlc291cmNlTG9hZGVyOjpjcmVhdGUodGhpcywgbWV0
aG9kLCB1cmwsICpwb3N0RGF0YSk7Ci0gICAgbG9hZGVyLT5zdGFydCgwKTsKKyAgICBpZiAoZm9j
dXNGcmFtZSAmJiBmb2N1c0ZyYW1lICE9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAgICAgZm9jdXNG
cmFtZS0+aW52YWxpZGF0ZVNlbGVjdGlvbigpOworICAgICAgICBmb2N1c0ZyYW1lLT5zZXRJc0Fj
dGl2ZShmYWxzZSk7CisgICAgICAgIGZvY3VzRnJhbWUtPnNldFdpbmRvd0hhc0ZvY3VzKGZhbHNl
KTsKKyAgICB9CisgICAgZm9jdXNGcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4oZnJhbWUp
OworICAgIGZvY3VzRnJhbWUtPnNldElzQWN0aXZlKHRydWUpOworICAgIGZvY3VzRnJhbWUtPnNl
dFdpbmRvd0hhc0ZvY3VzKHRydWUpOworICAgIGZvY3VzRnJhbWUtPnZpZXcoKS0+aGFuZGxlTW91
c2VQcmVzc0V2ZW50KGhpdC5ldmVudCgpKTsKKyAgICBmb2N1c0ZyYW1lLT5pbnZhbGlkYXRlU2Vs
ZWN0aW9uKCk7CisgICAgcmV0dXJuIHRydWU7CiB9Ci0KLXZvaWQgRnJhbWVHZGtDbGllbnREZWZh
dWx0OjpyZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlTG9hZGVyKiwgUGxhdGZvcm1SZXNwb25zZSkK
K2Jvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VSZWxlYXNlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmIGhpdCwgRnJhbWUqIGZyYW1lKQogewotICAgIC8vIG5vLW9w
CisgICAgZnJhbWUtPnZpZXcoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoaGl0LmV2ZW50KCkp
OworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6cmVj
ZWl2ZWREYXRhKFJlc291cmNlTG9hZGVyKiBqb2IsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpCitib29sIEZyYW1lVmlldzo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBoaXQsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIW1f
YmVnaW5DYWxsZWQpIHsKLSAgICAgICAgbV9iZWdpbkNhbGxlZCA9IHRydWU7Ci0KLSNpZiAwICAv
LyBGSVhNRTogVGhpcyBpcyBmcm9tIFF0IHZlcnNpb24sIG5lZWQgdG8gYmUgcmVtb3ZlZCBvciBH
ZGsgZXF1aXZhbGVudCB3cml0dGVuCi0gICAgICAgIC8vIEFzc2lnbiBjb3JyZWN0IG1pbWV0eXBl
IF9iZWZvcmVfIGNhbGxpbmcgYmVnaW4oKSEKLSAgICAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5h
bCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICAgICAgaWYgKGQpIHsKLSAgICAgICAgICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fZnJhbWUtPnJlc291cmNlUmVxdWVzdCgpKTsKLSAg
ICAgICAgICAgIHJlcXVlc3QubV9yZXNwb25zZU1JTUVUeXBlID0gZC0+bV9taW1ldHlwZTsKLSAg
ICAgICAgICAgIG1fZnJhbWUtPnNldFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAg
fQotI2VuZGlmCi0gICAgICAgIG1fZnJhbWUtPmJlZ2luKGpvYi0+dXJsKCkpOwotICAgIH0KLQot
ICAgIG1fZnJhbWUtPndyaXRlKGRhdGEsIGxlbmd0aCk7CisgICAgZnJhbWUtPnZpZXcoKS0+aGFu
ZGxlTW91c2VNb3ZlRXZlbnQoaGl0LmV2ZW50KCkpOworICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6cmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlTG9hZGVy
KiBqb2IsIFBsYXRmb3JtRGF0YSBkYXRhKQorYm9vbCBGcmFtZVZpZXc6OnBhc3NXaGVlbEV2ZW50
VG9TdWJmcmFtZShQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIEZyYW1lKiBmcmFtZSkK
IHsKLSAgICBtX2ZyYW1lLT5lbmQoKTsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7CisgICAg
ZnJhbWUtPnZpZXcoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZG9TY3JvbGwoY29uc3QgUmVuZGVyT2JqZWN0KiByLCBm
bG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSkKLXsKLSAgICAvLyBGSVhNRTogVGhlIHNjcm9sbGlu
ZyBkb25lIGhlcmUgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGRlZmF1bHQgaGFuZGxlcnMKLSAgICAv
LyBvZiB0aGUgZWxlbWVudHMgcmF0aGVyIHRoYW4gaGVyZSBpbiB0aGUgcGFydC4KLSAgICBpZiAo
IXIpCi0gICAgICAgIHJldHVybjsKIAotICAgIC8vYnJva2VuIHNpbmNlIGl0IGNhbGxzIHNjcm9s
bCBvbiBzY3JvbGxiYXJzCi0gICAgLy9hbmQgd2UgaGF2ZSBub25lIG5vdwotICAgIC8vci0+c2Ny
b2xsKGRpcmVjdGlvbiwgU2Nyb2xsQnlXaGVlbCwgbXVsdGlwbGllcik7Ci0gICAgaWYgKCFyLT5s
YXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeCA9IHItPmxheWVyKCktPnNjcm9s
bFhPZmZzZXQoKSArIGRlbHRhWDsKLSAgICBpbnQgeSA9IHItPmxheWVyKCktPnNjcm9sbFlPZmZz
ZXQoKSArIGRlbHRhWTsKLSAgICByLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCh4LCB5LCB0cnVl
LCB0cnVlKTsKLX0KLQotRnJhbWVHZGs6OkZyYW1lR2RrKEdka0RyYXdhYmxlKiBnZGtkcmF3YWJs
ZSkKLSAgICA6IEZyYW1lKG5ldyBQYWdlLCAwKSwgbV9kcmF3YWJsZShnZGtkcmF3YWJsZSkKK0Zy
YW1lR2RrOjpGcmFtZUdkayhQYWdlKiBwYWdlLCBFbGVtZW50KiBlbGVtZW50LCBXaW5kb3dHZGsq
IHdpbmRvdykKKyAgICAgICAgOiBGcmFtZShwYWdlLGVsZW1lbnQpCisgICAgICAgICwgbV9ldmVu
dFR5cGUoKQorICAgICAgICAsIG1fd2luZG93KDApCiB7CiAgICAgZC0+bV9leHRlbnNpb24gPSBu
ZXcgQnJvd3NlckV4dGVuc2lvbkdkayh0aGlzKTsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBu
ZXcgU2V0dGluZ3M7CkBAIC0xNjIsNzMgKzE0OCw5NiBAQAogICAgIHNldHRpbmdzLT5zZXRNaW5G
b250U2l6ZSg1KTsKICAgICBzZXR0aW5ncy0+c2V0TWluTG9naWNhbEZvbnRTaXplKDUpOwogICAg
IHNldHRpbmdzLT5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKHRydWUpOwotCiAgICAgc2V0dGlu
Z3MtPnNldE1lZGl1bUZpeGVkRm9udFNpemUoMTQpOwogICAgIHNldHRpbmdzLT5zZXRNZWRpdW1G
b250U2l6ZSgxNCk7CiAgICAgc2V0dGluZ3MtPnNldFNlcmlmRm9udE5hbWUoIlRpbWVzIE5ldyBS
b21hbiIpOwogICAgIHNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250TmFtZSgiQXJpYWwiKTsKICAg
ICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250TmFtZSgiQ291cmllciIpOwogICAgIHNldHRpbmdzLT5z
ZXRTdGRGb250TmFtZSgiQXJpYWwiKTsKKyAgICBzZXR0aW5ncy0+c2V0SXNKYXZhU2NyaXB0RW5h
YmxlZCh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0
b21hdGljYWxseSh0cnVlKTsKKyAgICAvL3BpY2sgdXAgdXNlciBzdHlsZSBzaGVldAorICAgIFN0
cmluZyBsb2NhdGlvbiA9IGluc3RhbGxMb2NhdGlvbigpOworICAgIGlmICghbG9jYXRpb24uaXNF
bXB0eSgpKSB7CisgICAgICAgIFN0cmluZyBzdHlsZSA9IGxvY2F0aW9uKyIvYnJvd3Nlci5jc3Mi
OworICAgICAgICBLVVJMIHVzZXJTdHlsZVNoZWV0ID0gS1VSTChzdHlsZS5kZXByZWNhdGVkU3Ry
aW5nKCkpOworICAgICAgICBzZXR0aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbih1c2Vy
U3R5bGVTaGVldCk7CisgICAgfQogICAgIHNldFNldHRpbmdzKHNldHRpbmdzKTsKLSAgICBwYWdl
KCktPnNldE1haW5GcmFtZSh0aGlzKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBuZXcgRnJhbWVW
aWV3KHRoaXMpOworICAgIHZpZXctPnNldEZyYW1lVmlldyh2aWV3KTsKICAgICBzZXRWaWV3KHZp
ZXcpOwotICAgIEludFJlY3QgZ2VvbSA9IGZyYW1lR2VvbWV0cnkoKTsKLSAgICB2aWV3LT5yZXNp
emUoZ2VvbS53aWR0aCgpLCBnZW9tLmhlaWdodCgpKTsKLSAgICB2aWV3LT5TY3JvbGxWaWV3Ojpz
ZXREcmF3YWJsZShnZGtkcmF3YWJsZSk7CisgICAgaWYgKCFlbGVtZW50ICYmICFwYWdlLT5tYWlu
RnJhbWUoKSkKKyAgICAgICAgcGFnZS0+c2V0TWFpbkZyYW1lKHRoaXMpOworICAgIGF0dGFjaFdp
bmRvdyh3aW5kb3cpOworfQogCi0gICAgbV9jbGllbnQgPSBuZXcgRnJhbWVHZGtDbGllbnREZWZh
dWx0KCk7Ci0gICAgbV9jbGllbnQtPnNldEZyYW1lKHRoaXMpOworRnJhbWVHZGs6On5GcmFtZUdk
aygpCit7CisgICAgaWYgKGZvY3VzRnJhbWUgPT0gdGhpcykKKyAgICAgICAgZm9jdXNGcmFtZSA9
IDA7CiB9CiAKLUZyYW1lR2RrOjpGcmFtZUdkayhQYWdlKiBwYWdlLCBFbGVtZW50KiBlbGVtZW50
KQotICAgIDogRnJhbWUocGFnZSxlbGVtZW50KQorCitGcmFtZSogRnJhbWVHZGs6OmNyZWF0ZUZy
YW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBvd25lckVs
ZW1lbnQsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpCiB7Ci0gICAgZC0+bV9leHRlbnNpb24gPSBu
ZXcgQnJvd3NlckV4dGVuc2lvbkdkayh0aGlzKTsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBu
ZXcgU2V0dGluZ3M7Ci0gICAgc2V0dGluZ3MtPnNldEF1dG9Mb2FkSW1hZ2VzKHRydWUpOwotICAg
IHNldFNldHRpbmdzKHNldHRpbmdzKTsKLSAgICBtX2NsaWVudCA9IG5ldyBGcmFtZUdka0NsaWVu
dERlZmF1bHQoKTsKLSAgICBtX2NsaWVudC0+c2V0RnJhbWUodGhpcyk7CisgICAgUGFnZSogcGFn
ZTsKKyAgICBpZiAob3duZXJFbGVtZW50KQorICAgICAgICBwYWdlID0gb3duZXJFbGVtZW50LT5k
b2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCk7CisgICAgZWxzZQorICAgICAgICBwYWdlID0gbmV3
IFBhZ2UoKTsKKworICAgIEZyYW1lR2RrKiBmY2hpbGQgPSBuZXcgRnJhbWVHZGsocGFnZSxvd25l
ckVsZW1lbnQsMCk7CisgICAgZmNoaWxkLT50cmVlKCktPnNldE5hbWUobmFtZSk7CisgICAgaWYg
KG93bmVyRWxlbWVudCkgeworICAgICAgICBGcmFtZUdkayogcCA9IHN0YXRpY19jYXN0PEZyYW1l
R2RrKj4ob3duZXJFbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICAgICAgZmNoaWxk
LT5zZXRQYXJlbnQocCk7CisgICAgfQorICAgIGZjaGlsZC0+b3BlblVSTCh1cmwpOworICAgIHJl
dHVybiBmY2hpbGQ7CiB9CiAKLUZyYW1lR2RrOjp+RnJhbWVHZGsoKQordm9pZCBGcmFtZUdkazo6
b3BlblVSTFJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCkK
IHsKLSAgICBjYW5jZWxBbmRDbGVhcigpOworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0g
ZnJhbWVMb2FkUmVxdWVzdC5tX3JlcXVlc3Q7CisgICAgb3BlblVSTChyZXF1ZXN0LnVybCgpKTsK
IH0KIAogYm9vbCBGcmFtZUdkazo6b3BlblVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgaWYg
KCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9jbGllbnQtPm9wZW5V
UkwodXJsKTsKKyAgICBkaWRPcGVuVVJMKHVybCk7CisgICAgdmlldygpLT5wcml2YXRlRGF0YSgp
LT5vcGVuVVJMKHVybCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVHZGs6OnN1
Ym1pdEZvcm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCkKIHsKICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGZyYW1lTG9hZFJlcXVlc3QubV9yZXF1ZXN0Owot
CiAgICAgLy8gRklYTUU6IHRoaXMgaXMgYSBoYWNrIGluaGVyaXRlZCBmcm9tIEZyYW1lTWFjLCBh
bmQgc2hvdWxkIGJlIHB1c2hlZCBpbnRvIEZyYW1lCiAgICAgaWYgKGQtPm1fc3VibWl0dGVkRm9y
bVVSTCA9PSByZXF1ZXN0LnVybCgpKQogICAgICAgICByZXR1cm47Ci0KICAgICBkLT5tX3N1Ym1p
dHRlZEZvcm1VUkwgPSByZXF1ZXN0LnVybCgpOwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+c3VibWl0Rm9ybShyZXF1ZXN0LmRvUG9zdCgpID8gIlBPU1QiIDogIkdFVCIs
IHJlcXVlc3QudXJsKCksICZyZXF1ZXN0LnBvc3REYXRhKTsKKyAgICBkaWRPcGVuVVJMKHJlcXVl
c3QudXJsKCkpOworICAgIHZpZXcoKS0+cHJpdmF0ZURhdGEoKS0+c3VibWl0Rm9ybShyZXF1ZXN0
LmRvUG9zdCgpID8gIlBPU1QiIDogIkdFVCIsIHJlcXVlc3QudXJsKCksICZyZXF1ZXN0LnBvc3RE
YXRhKTsKICAgICBjbGVhclJlY29yZGVkRm9ybVZhbHVlcygpOwogfQogCitLVVJMIEZyYW1lR2Rr
OjpvcmlnaW5hbFJlcXVlc3RVUkwoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIEtVUkwoKTsKK30KKworYm9vbCBGcmFtZUdkazo6aXNMb2FkVHlwZVJlbG9hZCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQg
RnJhbWVHZGs6OnVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJl
cXVlc3QpCiB7CiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBmcmFtZUxvYWRSZXF1ZXN0
Lm1fcmVxdWVzdDsKLQotICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY2xpZW50LT5vcGVuVVJMKHJlcXVlc3QudXJsKCkpOworICAgIG9wZW5VUkwocmVxdWVzdC51
cmwoKSk7CiB9CiAKIFN0cmluZyBGcmFtZUdkazo6dXNlckFnZW50KCkgY29uc3QKQEAgLTIzOCw2
ICsyNDcsNyBAQAogCiB2b2lkIEZyYW1lR2RrOjpydW5KYXZhU2NyaXB0QWxlcnQoU3RyaW5nIGNv
bnN0JiBtZXNzYWdlKQogeworICAgIHByaW50ZigiSmF2YVNjcmlwdEFsZXJ0OiVzXG46IixtZXNz
YWdlLmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgpKTsKIH0KIAogYm9vbCBGcmFtZUdkazo6cnVu
SmF2YVNjcmlwdENvbmZpcm0oU3RyaW5nIGNvbnN0JiBtZXNzYWdlKQpAQCAtMjQ3LDE2NCArMjU3
LDE1MCBAQAogCiB2b2lkIEZyYW1lR2RrOjpzZXRUaXRsZShjb25zdCBTdHJpbmcgJnRpdGxlKQog
eworICAgIGlmIChtX3dpbmRvdy5nZXQoKSkKKyAgICAgICAgbV93aW5kb3ctPnNldFRpdGxlKHRp
dGxlKTsKIH0KIAotdm9pZCBGcmFtZUdkazo6aGFuZGxlR2RrRXZlbnQoR2RrRXZlbnQqIGV2ZW50
KQorCitib29sIEZyYW1lR2RrOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCpu
b2RlLCBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtldmVudCkKIHsKLSAgICBzd2l0Y2gg
KGV2ZW50LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgR0RLX0VYUE9TRTogewotICAgICAgICAgICAg
R2RrUmVjdGFuZ2xlIGNsaXA7Ci0gICAgICAgICAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2
ZW50LT5leHBvc2UucmVnaW9uLCAmY2xpcCk7Ci0gICAgICAgICAgICBnZGtfd2luZG93X2JlZ2lu
X3BhaW50X3JlZ2lvbiAoZXZlbnQtPmFueS53aW5kb3csIGV2ZW50LT5leHBvc2UucmVnaW9uKTsK
LSAgICAgICAgICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0ZSAoZXZlbnQtPmFueS53
aW5kb3cpOwotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjdHggPSBuZXcgR3JhcGhpY3ND
b250ZXh0KGNyKTsKLSAgICAgICAgICAgIHBhaW50KGN0eCwgSW50UmVjdChjbGlwLngsIGNsaXAu
eSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpKTsKLSAgICAgICAgICAgIGRlbGV0ZSBjdHg7Ci0g
ICAgICAgICAgICBjYWlyb19kZXN0cm95KGNyKTsKLSAgICAgICAgICAgIGdka193aW5kb3dfZW5k
X3BhaW50IChldmVudC0+YW55LndpbmRvdyk7CisgICAgTm9kZSogc3RhcnQgPSBzZWxlY3Rpb25D
b250cm9sbGVyKCktPnN0YXJ0KCkubm9kZSgpOworCisgICAgaWYgKHN0YXJ0ICYmIHN0YXJ0LT5p
c0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIHN3aXRjaCAoa2V2ZW50LT5XaW5kb3dzS2V5
Q29kZSgpKSB7CisgICAgICAgIGNhc2UgVktfQkFDSzoKKyAgICAgICAgICAgIFR5cGluZ0NvbW1h
bmQ6OmRlbGV0ZUtleVByZXNzZWQoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEdES19TQ1JPTEw6IHsKLSAgICAgICAgICAgIFBsYXRmb3Jt
V2hlZWxFdmVudCB3aGVlbEV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIHZpZXcoKS0+aGFuZGxl
V2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLSAgICAgICAgICAgIGlmICh3aGVlbEV2ZW50LmlzQWNj
ZXB0ZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFJlbmRlck9iamVjdDo6Tm9kZUluZm8gbm9kZUluZm8odHJ1ZSwgdHJ1ZSk7Ci0gICAg
ICAgICAgICByZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KG5vZGVJbmZvLCB3aGVlbEV2ZW50
LnBvcygpKTsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2RlSW5mby5pbm5lck5vZGUoKTsK
LSAgICAgICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAvL0RlZmF1bHQgdG8gc2Nyb2xsaW5nIHRoZSBwYWdlCi0gICAgICAgICAgICAvL25vdCBz
dXJlIHdoeSBpdHMgbnVsbAotICAgICAgICAgICAgLy9icm9rZSBhbnl3YXkgd2hlbiBpdHMgbm90
IG51bGwKLSAgICAgICAgICAgIGRvU2Nyb2xsKHJlbmRlcmVyKCksIHdoZWVsRXZlbnQuZGVsdGFY
KCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpOworICAgICAgICBjYXNlIFZLX0RFTEVURToKKyAgICAg
ICAgICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKGRvY3VtZW50KCkp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfRFJBR19F
TlRFUjoKLSAgICAgICAgY2FzZSBHREtfRFJBR19MRUFWRToKLSAgICAgICAgY2FzZSBHREtfRFJB
R19NT1RJT046Ci0gICAgICAgIGNhc2UgR0RLX0RSQUdfU1RBVFVTOgotICAgICAgICBjYXNlIEdE
S19EUk9QX1NUQVJUOgotICAgICAgICBjYXNlIEdES19EUk9QX0ZJTklTSEVEOiB7Ci0gICAgICAg
ICAgICAvL2Jvb2wgdXBkYXRlRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jiwg
Q2xpcGJvYXJkKik7Ci0gICAgICAgICAgICAvL3ZvaWQgY2FuY2VsRHJhZ0FuZERyb3AoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7Ci0gICAgICAgICAgICAvL2Jvb2wgcGVy
Zm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwor
ICAgICAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCkt
Pm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6TEVGVCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgICAgIHZpZXcoKS0+aGFuZGxlTW91c2VNb3Zl
RXZlbnQoZXZlbnQpOworICAgICAgICBjYXNlIFZLX1JJR0hUOgorICAgICAgICAgICAgc2VsZWN0
aW9uQ29udHJvbGxlcigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OlJJR0hULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgotICAgICAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNT
OgotICAgICAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgotICAgICAgICAgICAgdmlldygpLT5o
YW5kbGVNb3VzZVByZXNzRXZlbnQoZXZlbnQpOworICAgICAgICBjYXNlIFZLX1VQOgorICAgICAg
ICAgICAgc2VsZWN0aW9uQ29udHJvbGxlcigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6
TU9WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkJBQ0tXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICB2
aWV3KCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgY2FzZSBWS19E
T1dOOgorICAgICAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxlcigpLT5tb2RpZnkoU2VsZWN0aW9u
Q29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkZPUldBUkQsIFBhcmFncmFwaEdyYW51bGFyaXR5KTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19LRVlfUFJFU1M6Ci0gICAgICAg
IGNhc2UgR0RLX0tFWV9SRUxFQVNFOiB7Ci0gICAgICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQga2V2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAg
ICAgICAgICAgaWYgKCFrZXZlbnQuaXNLZXlVcCgpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
c3RhcnQgPSBzZWxlY3Rpb25Db250cm9sbGVyKCktPnN0YXJ0KCkubm9kZSgpOwotICAgICAgICAg
ICAgICAgIGlmIChzdGFydCAmJiBzdGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2goa2V2ZW50LldpbmRvd3NLZXlDb2RlKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgVktfQkFDSzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKGRvY3VtZW50KCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBW
S19ERUxFVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQoZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX0xFRlQ6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxlcigpLT5tb2RpZnkoU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6TEVGVCwgQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19SSUdIVDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVy
OjpNT1ZFLCBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBWS19VUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25D
b250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rpb25D
b250cm9sbGVyOjpCQUNLV0FSRCwgUGFyYWdyYXBoR3JhbnVsYXJpdHkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19E
T1dOOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+
bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkZP
UldBUkQsIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChkb2N1bWVudCgpLCBrZXZl
bnQudGV4dCgpLCBmYWxzZSk7CisgICAgICAgIGNhc2UgVktfUkVUVVJOOgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0VGV4dChkb2N1bWVudCgpLCBrZXZlbnQtPnRleHQoKSwgZmFsc2UpOworICAgICAg
ICAgICAgc2VsZWN0aW9uQ29udHJvbGxlcigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6
TU9WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoa2V2ZW50LldpbmRvd3NLZXlDb2RlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgVktfTEVGVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Nj
cm9sbChyZW5kZXJlcigpLCB0cnVlLCAtMTIwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfUklHSFQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgdHJ1ZSwgMTIwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgVktfVVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVy
ZXIoKSwgZmFsc2UsIC0xMjApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19QUklPUjoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvL3JldHVybiBTQl9QQUdFVVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX05FWFQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gU0JfUEFHRURPV047Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX0RP
V046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgZmFs
c2UsIDEyMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIFZLX0hPTUU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVuZGVyZXIoKS0+bGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQoMCwgMCwgdHJ1ZSwgdHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgZmFsc2UsIDEy
MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFZLX0VORDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJl
cigpLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCgwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPmhlaWdo
dCgpLCB0cnVlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfU1BBQ0U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGtldmVudC5zaGlmdEtleSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb1Njcm9sbChyZW5kZXJlcigpLCBmYWxzZSwgLTEyMCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Nj
cm9sbChyZW5kZXJlcigpLCBmYWxzZSwgMTIwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBGcmFtZUdkazo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0ICZyKQordm9pZCBG
cmFtZUdkazo6cHJvY2Vzc1BsYXRmb3JtRm9jdXNDaGFuZ2UoYm9vbCBmb2N1c2VkKQogewotICAg
IGlmICghbV9kcmF3YWJsZSB8fCAhR0RLX0lTX1dJTkRPVyhtX2RyYXdhYmxlKSkKKyNpZiAwCisg
ICAgaWYgKCFkb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3aW5k
b3cgPSBHREtfV0lORE9XKG1fZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfbW92ZV9yZXNpemUo
d2luZG93LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgbV9ldmVu
dFR5cGUgPSBmb2N1c2VkID8gRXZlbnROYW1lczo6Zm9jdXNFdmVudCA6IEV2ZW50TmFtZXM6OmJs
dXJFdmVudDsKKyAgICBpbnZhbGlkYXRlU2VsZWN0aW9uKCk7CisgICAgc2V0SXNBY3RpdmUoZm9j
dXNlZCk7CisgICAgc2V0V2luZG93SGFzRm9jdXMoZm9jdXNlZCk7CisjZW5kaWYKKyAgICBmb2N1
c0ZyYW1lID0gZm9jdXNlZCA/IHRoaXM6MDsKIH0KIAotSW50UmVjdCBGcmFtZUdkazo6ZnJhbWVH
ZW9tZXRyeSgpIGNvbnN0Cit2b2lkIEZyYW1lR2RrOjpwcm9jZXNzUGxhdGZvcm1XaGVlbEV2ZW50
KFBsYXRmb3JtV2hlZWxFdmVudCBldmVudCkKIHsKLSAgICBnaW50IHgsIHksIHdpZHRoLCBoZWln
aHQsIGRlcHRoOwotICAgIGlmICghbV9kcmF3YWJsZSkKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKKyAgICBpZiAoIWRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2V2ZW50VHlw
ZSA9IEV2ZW50TmFtZXM6Om1vdXNld2hlZWxFdmVudDsKIAotICAgIGlmICghR0RLX0lTX1dJTkRP
VyhtX2RyYXdhYmxlKSkgewotICAgICAgICBnZGtfZHJhd2FibGVfZ2V0X3NpemUobV9kcmF3YWJs
ZSwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgd2lkdGgs
IGhlaWdodCk7CisgICAgdmlldygpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKKworfQorCit2
b2lkIEZyYW1lR2RrOjpwcm9jZXNzUGxhdGZvcm1LZXlib2FyZEV2ZW50KFBsYXRmb3JtS2V5Ym9h
cmRFdmVudCBldmVudCwKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSkKK3sK
KyAgICBpZiAoIWRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWZvY3VzRnJh
bWUpCisgICAgICAgIGZvY3VzRnJhbWUgPSB0aGlzOworCisgICAgaWYgKGZvY3VzRnJhbWUgIT0g
dGhpcykgeworICAgICAgICBmb2N1c0ZyYW1lLT5wcm9jZXNzUGxhdGZvcm1LZXlib2FyZEV2ZW50
KGV2ZW50LGV2ZW50VHlwZSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHZGtXaW5k
b3cqIHdpbmRvdyA9IEdES19XSU5ET1cobV9kcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19nZXRf
Z2VvbWV0cnkod2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgJmRlcHRoKTsKLSAgICBy
ZXR1cm4gSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX2V2ZW50VHlwZSA9IGV2
ZW50VHlwZTsKKworICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAgIGlmICghZG9j
KQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBub2RlID0gZG9jLT5mb2N1c05vZGUoKTsK
KyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkKKyAg
ICAgICAgICAgIG5vZGUgPSBkb2MtPmJvZHkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bm9kZSA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7CisKKyAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZXZlbnQuaXNLZXlVcCgpKQorICAg
ICAgICBwcmVwYXJlRm9yVXNlckFjdGlvbigpOworCisgICAgYm9vbCBub3RoYW5kbGVkID0gRXZl
bnRUYXJnZXROb2RlQ2FzdChub2RlKS0+ZGlzcGF0Y2hLZXlFdmVudChldmVudCk7CisKKyAgICAv
L2hhY2sgdG8gY2F1c2UgYSBrZXkgcHJlc3Mgc2VlIEZyYW1lTWFjLm1tCisgICAgaWYgKGV2ZW50
VHlwZSA9PSBFdmVudE5hbWVzOjprZXlkb3duRXZlbnQpIHsKKyAgICAgICAgUGxhdGZvcm1LZXli
b2FyZEV2ZW50IHJlcGVhdEV2ZW50KGV2ZW50LHRydWUpOworICAgICAgICBib29sIHByZXNzTm90
aGFuZGxlZCA9IEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9kZSktPmRpc3BhdGNoS2V5RXZlbnQocmVw
ZWF0RXZlbnQpOworICAgICAgICBpZiAobm90aGFuZGxlZCkKKyAgICAgICAgICAgIG5vdGhhbmRs
ZWQgPSBwcmVzc05vdGhhbmRsZWQ7CisgICAgfQorICAgIGlmIChub3RoYW5kbGVkKSB7CisgICAg
ICAgIHZpZXcoKS0+aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudCk7CisgICAgfQogfQogCit2b2lk
IEZyYW1lR2RrOjpwcm9jZXNzUGxhdGZvcm1Nb3VzZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudCBl
dmVudCwKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSkKK3sKKyAgICBpZiAo
IWRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2V2ZW50VHlwZSA9IGV2ZW50VHlw
ZTsKKworICAgIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6bW91c2Vtb3ZlRXZlbnQpCisg
ICAgICAgIHZpZXcoKS0+aGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQpOworICAgIGlmIChldmVu
dFR5cGUgPT0gRXZlbnROYW1lczo6bW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgaWYgKGZvY3Vz
RnJhbWUgJiYgZm9jdXNGcmFtZSAhPSB0aGlzKSB7CisgICAgICAgICAgICBmb2N1c0ZyYW1lLT5p
bnZhbGlkYXRlU2VsZWN0aW9uKCk7CisgICAgICAgICAgICBmb2N1c0ZyYW1lLT5zZXRJc0FjdGl2
ZShmYWxzZSk7CisgICAgICAgICAgICBmb2N1c0ZyYW1lLT5zZXRXaW5kb3dIYXNGb2N1cyhmYWxz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZm9jdXNGcmFtZSA9IHRoaXM7CisgICAgICAgIGZvY3Vz
RnJhbWUtPmludmFsaWRhdGVTZWxlY3Rpb24oKTsKKyAgICAgICAgZm9jdXNGcmFtZS0+c2V0SXNB
Y3RpdmUodHJ1ZSk7CisgICAgICAgIGZvY3VzRnJhbWUtPnNldFdpbmRvd0hhc0ZvY3VzKHRydWUp
OworICAgICAgICB2aWV3KCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CisgICAgfQor
ICAgIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6bW91c2V1cEV2ZW50KQorICAgICAgICB2
aWV3KCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGV2ZW50KTsKK30KKwogYm9vbCBGcmFtZUdk
azo6cGFzc1doZWVsRXZlbnRUb0NoaWxkV2lkZ2V0KE5vZGUqIG5vZGUpCiB7CisgICAgLy9GSVhN
RTogZGV0ZXJtaW5lIGlmIGEgd2hlZWwgZW5hYmxlcyB3aWRnZXQgaXMgYWN0aXZlCiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG5vZGUtPnJlbmRlcmVyKCk7CkBAIC00MTYsMTEgKzQxMiwxOTEgQEAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBGcmFtZUdkazo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqKQorCisKK2Jvb2wgRnJhbWVH
ZGs6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQogewotICAgIGlm
IChtZXYudGFyZ2V0Tm9kZSgpID09IDApCi0gICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBmYWxzZTsKIH0KK0ZyYW1lR2RrKiBGcmFtZUdkazo6Z2V0Um9vdEZyYW1lKCkKK3sKKyAgICBG
cmFtZUdkayogY3VyID0gdGhpczsKKyAgICB3aGlsZSAoIWN1ci0+aXNUb3BMZXZlbCgpKSB7Cisg
ICAgICAgIGN1ciA9IGN1ci0+cGFyZW50KCk7CisgICAgfQorICAgIHJldHVybiAgY3VyOwogCiB9
CisKKwordm9pZCBGcmFtZUdkazo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQorewor
ICAgIGlmIChtX3dpbmRvdy5nZXQoKSkgeworICAgICAgICBtX3dpbmRvdy0+c2V0Q3Vyc29yKGN1
cnNvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRnJhbWVHZGsqIHAgPSBwYXJlbnQo
KTsKKyAgICBpZiAocCkKKyAgICAgICAgcC0+c2V0Q3Vyc29yKGN1cnNvcik7Cit9CisKKyNpZiAw
CitJbnRSZWN0ICBGcmFtZUdkazo6ZnJhbWVHZW9tZXRyeSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
d2luZG93LmdldCgpKQorICAgICAgICByZXR1cm4gbV93aW5kb3ctPmdlb21ldHJ5KCk7CisgICAg
cmV0dXJuIG1fZ2VvbWV0cnk7CisKK30KKwordm9pZCBGcmFtZUdkazo6c2V0R2VvbWV0cnkoY29u
c3QgSW50UmVjdCYgciwgYm9vbCBmcm9tU3lzdGVtKQoreworICAgIGlmIChtX2dlb21ldHJ5ID09
IHIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2dlb21ldHJ5ID0gcjsKKyAgICBpZiAoZnJvbVN5
c3RlbSkgeworICAgICAgICB2aWV3KCktPmxheW91dChmYWxzZSk7CisgICAgICAgIHZpZXcoKS0+
dXBkYXRlU2Nyb2xsQmFycygpOworICAgICAgICBzZW5kUmVzaXplRXZlbnQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgIEZyYW1lR2RrOjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIHIpCit7
CisgICAgc2V0R2VvbWV0cnkocixmYWxzZSk7Cit9CisjZW5kaWYKKwordm9pZCBGcmFtZUdkazo6
cmVwYWludChib29sIG5vdykKK3sKKworICAgIEludFJlY3QgciA9IHZpZXcoKS0+ZnJhbWVHZW9t
ZXRyeSgpOworICAgIHIuc2V0WCgwKTsKKyAgICByLnNldFkoMCk7CisgICAgcmVwYWludChyLG5v
dyk7Cit9CisKK3ZvaWQgRnJhbWVHZGs6OnJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVj
dCwgYm9vbCBub3cpCit7CisgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fd2luZG93LmdldCgpKSB7CisgICAgICAgIEludFJlY3QgciA9IHZp
ZXcoKS0+ZnJhbWVHZW9tZXRyeSgpOworICAgICAgICAvL0ZJWE1FIEhBQ0sgc2luY2Ugd2UgZG9u
J3QgZ2V0IGNvcnJlY3QgcmVwYWludHMKKyAgICAgICAgbV93aW5kb3ctPnJlcGFpbnQocixub3cp
OworICAgICAgICAvL21fd2luZG93LT5yZXBhaW50KHVwZGF0ZVJlY3Qsbm93KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBGcmFtZUdkayogcGFyZW50ID0gc3RhdGljX2Nhc3Q8RnJhbWVH
ZGsqPih0cmVlKCktPnBhcmVudCgpKTsKKyAgICBpZiAocGFyZW50KSB7CisgICAgICAgIEludFJl
Y3QgZGlydHlSZWN0ID0gdXBkYXRlUmVjdDsKKyAgICAgICAgSW50UmVjdCByID0gdmlldygpLT5m
cmFtZUdlb21ldHJ5KCk7CisgICAgICAgIGRpcnR5UmVjdC5tb3ZlKHIueCgpLHIueSgpKTsKKyAg
ICAgICAgcGFyZW50LT5yZXBhaW50KGRpcnR5UmVjdCxub3cpOworICAgIH0KK30KKworU3RyaW5n
IEZyYW1lR2RrOjptaW1lVHlwZUZvckZpbGVOYW1lKFN0cmluZyBjb25zdCYgcGF0aCkgY29uc3QK
K3sKKyAgICBTdHJpbmcgbnBhdGggPSAgU3RyaW5nKHBhdGgpOworICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRlck1hbmFnZXI6OmdldE1pbWVUeXBlKG5wYXRoKTsKK30KKwordm9pZCBGcmFtZUdkazo6
c2V0UGFyZW50KEZyYW1lR2RrKiBwKQoreworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChwID09IHBhcmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgcC0+dHJlZSgpLT5h
cHBlbmRDaGlsZCh0aGlzKTsKKyAgICB2aWV3KCktPnNldFBhcmVudChwLT52aWV3KCkpOworfQor
CitGcmFtZUdkayogRnJhbWVHZGs6OnBhcmVudCgpCit7CisgICAgcmV0dXJuICBzdGF0aWNfY2Fz
dDxGcmFtZUdkayo+KHRyZWUoKS0+cGFyZW50KCkpOworfQorCisjaWYgMAorSW50UG9pbnQgRnJh
bWVHZGs6OmdldEFic29sdXRlUG9zaXRpb24oKQoreworICAgIGlmIChpc1RvcExldmVsKCkpCisg
ICAgICAgIHJldHVybiBJbnRQb2ludCgpOworCisgICAgRnJhbWVHZGsqIHAgPSBwYXJlbnQoKTsK
KyAgICBhc3NlcnQocCAhPSAwKTsKKyAgICBpZiAocCkKKyAgICAgICAgcmV0dXJuIHZpZXcoKS0+
ZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCk7CisgICAgSW50UG9pbnQgcHQgPSBwLT5nZXRBYnNv
bHV0ZVBvc2l0aW9uKCk7CisgICAgcHQubW92ZShtX2dlb21ldHJ5LngoKSxtX2dlb21ldHJ5Lnko
KSk7CisgICAgcmV0dXJuIHB0OworfQorI2VuZGlmCisKK0dyYXBoaWNzQ29udGV4dENhaXJvKiBG
cmFtZUdkazo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKK3sKKyAgICBpZiAobV93aW5kb3cuZ2V0
KCkpCisgICAgICAgIHJldHVybiBtX3dpbmRvdy0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisK
KyAgICBGcmFtZUdkayogcGFyZW50ID0gc3RhdGljX2Nhc3Q8RnJhbWVHZGsqPih0cmVlKCktPnBh
cmVudCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyogY3R4ID0gcGFyZW50LT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoKTsKKyAgICBJbnRQb2ludCBwID0gdmlldygpLT5mcmFtZUdlb21ldHJ5
KCkubG9jYXRpb24oKTsKKyAgICBjdHgtPnRyYW5zbGF0ZShwLngoKSxwLnkoKSk7CisgICAgcmV0
dXJuIGN0eDsKK30KKworR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIEZyYW1lR2RrOjpiZWdpblBhaW50
aW5nKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1fd2luZG93LmdldCgpKQorICAg
ICAgICByZXR1cm4gbV93aW5kb3ctPmJlZ2luUGFpbnRpbmcocmVjdCk7CisgICAgSW50UmVjdCBy
ZWdpb24gPSByZWN0OworICAgIEludFJlY3QgciA9IHZpZXcoKS0+ZnJhbWVHZW9tZXRyeSgpOwor
ICAgIHJlZ2lvbi5tb3ZlKHIueCgpLHIueSgpKTsKKyAgICBGcmFtZUdkayogcGFyZW50ID0gc3Rh
dGljX2Nhc3Q8RnJhbWVHZGsqPih0cmVlKCktPnBhcmVudCgpKTsKKyAgICByZXR1cm4gcGFyZW50
LT5iZWdpblBhaW50aW5nKHJlZ2lvbik7Cit9CisKK3ZvaWQgRnJhbWVHZGs6OmVuZFBhaW50aW5n
KEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHgpCit7CisgICAgaWYgKG1fd2luZG93LmdldCgpKSB7
CisgICAgICAgIG1fd2luZG93LT5lbmRQYWludGluZyhjdHgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgRnJhbWVHZGsqIHBhcmVudCA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4odHJl
ZSgpLT5wYXJlbnQoKSk7CisgICAgcGFyZW50LT5lbmRQYWludGluZyhjdHgpOworfQorCit2b2lk
IEZyYW1lR2RrOjphdHRhY2hXaW5kb3coV2luZG93R2RrKiB3aW5kb3cpCit7CisgICAgbV93aW5k
b3cgPSB3aW5kb3c7CisgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgcmV0dXJuOworICAgIG1f
d2luZG93LT5zZXRGcmFtZSh0aGlzKTsKKyAgICBJbnRSZWN0IHIgPSB3aW5kb3ctPmdlb21ldHJ5
KCk7CisgICAgci5zZXRYKDApOworICAgIHIuc2V0WSgwKTsKKyAgICB2aWV3KCktPnNldEZyYW1l
R2VvbWV0cnkocik7Cit9CisKK3ZvaWQgRnJhbWVHZGs6OmRldGFjaFdpbmRvdygpCit7CisgICAg
aWYgKCFtX3dpbmRvdykKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2luZG93LT5zZXRGcmFtZSgw
KTsKKyAgICBtX3dpbmRvdy5yZWxlYXNlKCk7CisgICAgbV93aW5kb3cgPSAwOworfQorCit2b2lk
IEZyYW1lR2RrOjpzZXRJbnN0YWxsTG9jYXRpb24oY29uc3QgY2hhciAqbG9jYXRpb24pCit7Cisg
ICAgaW5zdGFsbFBhdGggPSBzdHJkdXAobG9jYXRpb24pOworfQorCitTdHJpbmcgRnJhbWVHZGs6
Omluc3RhbGxMb2NhdGlvbigpCit7CisgICAgcmV0dXJuIFN0cmluZyhpbnN0YWxsUGF0aCk7Cit9
CisKK30KKy8vIHZpbTp0cz00OmV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250RGF0
YUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsu
Y3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOCwxMyArOCwxMyBAQAog
ICogYXJlIG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
ICAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKICAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKQEAgLTQxLDYgKzQxLDggQEAKICNpbmNsdWRlIDx1bmljb2RlL3Vub3Jt
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRl
ZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNc
biIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgVVNFX09MRF9DQUlSTyAxCkBAIC01Nywx
MCArNTksMTAgQEAKICAgICBtX3hIZWlnaHQgPSAxMzsKICAgICBtX3NwYWNlV2lkdGggPSAxMDsK
ICNlbHNlCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fZm9udC5tX3NjYWxl
ZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7Ci0gICAgbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRz
LmhlaWdodDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9mb250Lm1fc2Nh
bGVkRm9udCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBtX3NwYWNlV2lkdGggPSAgc3RhdGlj
X2Nhc3Q8aW50Pih0ZXh0X2V4dGVudHMueF9hZHZhbmNlKTsKKyAgICAvL2NhaXJvX3NjYWxlZF9m
b250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAieCIsICZ0ZXh0X2V4dGVudHMp
OworICAgIC8vbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhlaWdodDsKKyAgICAvL2NhaXJvX3Nj
YWxlZF9mb250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAiICIsICZ0ZXh0X2V4
dGVudHMpOworICAgIC8vbV9zcGFjZVdpZHRoID0gIHN0YXRpY19jYXN0PGludD4odGV4dF9leHRl
bnRzLnhfYWR2YW5jZSk7CiAjZW5kaWYKICAgICBhc3NlcnQobV9zcGFjZVdpZHRoICE9IDApOwog
ICAgIG1fbGluZUdhcCA9IG1fbGluZVNwYWNpbmcgLSBtX2FzY2VudCAtIG1fZGVzY2VudDsKQEAg
LTY4LDcgKzcwLDggQEAKIAogdm9pZCBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAg
ICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBpZiAobV9zbWFsbENhcHNGb250RGF0
YSkKKyAgICAgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7CiB9CiAKIEZvbnREYXRhKiBG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9GaWxlQ2hvb3Nlckdk
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRmlsZUNob29zZXJHZGsu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRmlsZUNob29zZXJHZGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKworI2RlZmluZSBub3RJbXBsZW1lbnRl
ZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNc
biIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RmlsZUNob29zZXI+IEZpbGVDaG9v
c2VyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCog
dXBsb2FkQ29udHJvbCkKK3sKKyAgICBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBmaWxlQ2hvb3Nl
cihuZXcgRmlsZUNob29zZXIoZG9jdW1lbnQsIHVwbG9hZENvbnRyb2wpKTsKKyAgICByZXR1cm4g
ZmlsZUNob29zZXI7Cit9CisKK0ZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihEb2N1bWVudCosIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitG
aWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNob29zZXIoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK1N0cmluZyBGaWxlQ2hvb3Nlcjo6YmFzZW5hbWVGb3JXaWR0aChpbnQgd2lk
dGgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK3ZvaWQgRmlsZUNob29zZXI6OmRpc2Nvbm5lY3RVcGxvYWRDb250cm9sKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQor
CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVy
VGhlbWVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRo
ZW1lR2RrLmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5k
ZXJUaGVtZUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCiAgKgogICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVs
IEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTU4LDggKzU4LDcgQEAKIH0KIAogdm9pZCBSZW5kZXJUaGVtZUdkazo6Y2xv
c2UoKQotewotfQore30KIAogdm9pZCBSZW5kZXJUaGVtZUdkazo6YWRkSW50cmluc2ljTWFyZ2lu
cyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CkBAIC04OSwxMiArODgsMTIgQEAKIGJvb2wg
UmVuZGVyVGhlbWVHZGs6OnN1cHBvcnRzRm9jdXMoRUFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKIHsK
ICAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKLSAgICAgICAgY2FzZSBQdXNoQnV0dG9uQXBwZWFy
YW5jZToKLSAgICAgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgotICAgICAgICBjYXNlIFRleHRG
aWVsZEFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFB1c2hCdXR0b25BcHBlYXJh
bmNlOgorICAgIGNhc2UgQnV0dG9uQXBwZWFyYW5jZToKKyAgICBjYXNlIFRleHRGaWVsZEFwcGVh
cmFuY2U6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjIsMjMgKzEyMSwyMyBA
QAogewogICAgIFRoZW1lRGF0YSByZXN1bHQ7CiAgICAgc3dpdGNoIChvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkpIHsKLSAgICAgICAgY2FzZSBQdXNoQnV0dG9uQXBwZWFyYW5jZToKLSAgICAgICAg
Y2FzZSBCdXR0b25BcHBlYXJhbmNlOgotICAgICAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0JV
VFRPTjsKLSAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja2JveEFwcGVhcmFuY2U6Ci0gICAg
ICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfQ0hFQ0tCT1g7Ci0gICAgICAgICAgICByZXN1bHQu
bV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUmFkaW9BcHBlYXJhbmNlOgotICAgICAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX1JB
RElPOwotICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6Ci0gICAg
ICAgICAgICByZXN1bHQubV9wYXJ0ID0gVEZQX1RFWFRGSUVMRDsKLSAgICAgICAgICAgIHJlc3Vs
dC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBj
YXNlIFB1c2hCdXR0b25BcHBlYXJhbmNlOgorICAgIGNhc2UgQnV0dG9uQXBwZWFyYW5jZToKKyAg
ICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0JVVFRPTjsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUg
PSBkZXRlcm1pbmVTdGF0ZShvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDaGVja2JveEFw
cGVhcmFuY2U6CisgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9DSEVDS0JPWDsKKyAgICAgICAg
cmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBSYWRpb0FwcGVhcmFuY2U6CisgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9SQURJTzsK
KyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBUZXh0RmllbGRBcHBlYXJhbmNlOgorICAgICAgICByZXN1bHQubV9wYXJ0
ID0gVEZQX1RFWFRGSUVMRDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0
ZShvKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1
MSw3ICsxNTAsMjEgQEAKIAogdm9pZCBSZW5kZXJUaGVtZUdkazo6c3lzdGVtRm9udChpbnQgcHJv
cElkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdAogeworfQogCit2b2lkIFJlbmRlclRoZW1lR2Rr
OjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdAorICAgIHsgfQorYm9vbCBSZW5k
ZXJUaGVtZUdkazo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICByZXR1cm4gZmFsc2U7CiB9Cit2
b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdAorICAg
IHsgfQordm9pZCBSZW5kZXJUaGVtZUdkazo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCogZSkgY29uc3QKKyAgICB7fQorYm9vbCBS
ZW5kZXJUaGVtZUdkazo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFH
ZGsuY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0
Zm9ybURhdGFHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogRm9udE1h
Yy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVt
bWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtMzQsMTAgKzM0LDEyIEBACiAjaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0
eXBlLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBk
byB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBf
X0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseU5hbWUpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pCisg
ICAgICAgIDogbV9mb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSxtX3BhdHRlcm4oMCkK
IHsKICAgICBpbml0KCk7CiAKQEAgLTUyLDE2ICs1NCwxNiBAQAogCiAgICAgaW50IHR5cGUgPSBm
b250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOwogICAgIHN3aXRjaCAodHlwZSkgewotICAg
ICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6Ci0gICAgICAgICAgICBmYW1p
bHkgPSAoRmNDaGFyOCopInNhbnMtc2VyaWYiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6Ci0gICAgICAgICAgICBmYW1p
bHkgPSAoRmNDaGFyOCopInNhbnMtc2VyaWYiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToKLSAgICAgICAgY2FzZSBGb250RGVzY3Jp
cHRpb246OlN0YW5kYXJkRmFtaWx5OgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZmFt
aWx5ID0gKEZjQ2hhcjgqKSJzYW5zLXNlcmlmIjsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
U2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlseSA9IChGY0NoYXI4Kikic2Fucy1zZXJpZiI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6
CisgICAgICAgIGZhbWlseSA9IChGY0NoYXI4Kikic2Fucy1zZXJpZiI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToKKyAgICBjYXNlIEZvbnREZXNj
cmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6CisgICAgZGVmYXVsdDoKKyAgICAgICAgZmFtaWx5ID0g
KEZjQ2hhcjgqKSJzYW5zLXNlcmlmIjsKICAgICB9CiAgICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0g
RmNQYXR0ZXJuQ3JlYXRlKCk7CiAgICAgYXNzZXJ0KHBhdHRlcm4gIT0gMCk7CkBAIC0xNTAsNyAr
MTUyLDYgQEAKICAgICBjYWlyb19mb250X2ZhY2VfdCoqIHJlc3VsdCA9IChjYWlyb19mb250X2Zh
Y2VfdCoqKW1hbGxvYygoZnMtPm5mb250ICsgMSkgKiBzaXplb2YoY2Fpcm9fZm9udF9mYWNlX3Qq
KSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcy0+bmZvbnQ7IGkrKykgewogICAgICAgICBG
Y0NoYXI4KiBmb250ID0gRmNOYW1lVW5wYXJzZShmcy0+Zm9udHNbaV0pOwotICAgICAgICBwcmlu
dGYoIiVzXG4iLCBmb250KTsKICAgICAgICAgcmVzdWx0W2ldID0gY2Fpcm9fZnRfZm9udF9mYWNl
X2NyZWF0ZV9mb3JfcGF0dGVybihmcy0+Zm9udHNbaV0pOwogICAgIH0KICAgICByZXN1bHRbZnMt
Pm5mb250XSA9IE5VTEw7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNwcAkocmV2aXNpb24g
MTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIsNDIgKzIyLDUzIEBACiAgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRl
ICJGb250RGF0YS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPGNh
aXJvLmg+CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKIAorI2RlZmluZSBub3RJ
bXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDog
JXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3
aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgRm9udDo6ZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udERhdGEqIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0g
ICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CisgICAgY2Fpcm9fdCogY3IgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwor
ICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3ND
b250ZXh0Q2Fpcm8qPihncmFwaGljc0NvbnRleHQpOwogCiAgICAgLy8gU2V0IHRoZSB0ZXh0IGNv
bG9yIHRvIHVzZSBmb3IgZHJhd2luZy4KKyAgICBkb3VibGUgeCx5OwogICAgIGZsb2F0IHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhOwogICAgIENvbG9yIHBlbkNvbG9yID0gZ3JhcGhpY3NDb250ZXh0
LT5wZW4oKS5jb2xvcigpOwogICAgIHBlbkNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCByZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7CiAKLSAgICAvLyBTZWxlY3QgdGhlIHNjYWxlZCBmb250LgotICAgIGZvbnQt
PnNldEZvbnQoY29udGV4dCk7CisgICAgY2Fpcm9fc2F2ZShjcik7CiAKLSAgICBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMgPSAoR2x5cGhCdWZmZXJHbHlwaCopIGdseXBoQnVmZmVyLmdseXBocyhm
cm9tKTsKKyAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChj
ciwmbWF0cml4KTsKKyAgICBmb250LT5zZXRGb250KGNyKTsKKyAgICBjYWlyb19zZXRfbWF0cml4
KGNyLCZtYXRyaXgpOworICAgIGNhaXJvX25ld19wYXRoKGNyKTsKKyAgICBjYWlyb19tb3ZlX3Rv
KGNyLHBvaW50LngoKSxwb2ludC55KCkpOworICAgIGNhaXJvX2dldF9jdXJyZW50X3BvaW50KGNy
LCZ4LCZ5KTsKKyAgICBmbG9hdCBvZmZzZXQgPSB4OwogCi0gICAgZmxvYXQgb2Zmc2V0ID0gcG9p
bnQueCgpOwogCisgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29uc3RfY2FzdDxHbHlw
aEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKKwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewogICAgICAgICBnbHlwaHNbaV0ueCA9
IG9mZnNldDsKLSAgICAgICAgZ2x5cGhzW2ldLnkgPSBwb2ludC55KCk7CisgICAgICAgIGdseXBo
c1tpXS55ID0geTsKICAgICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9t
ICsgaSk7CiAgICAgfQotICAgIGNhaXJvX3Nob3dfZ2x5cGhzKGNvbnRleHQsIGdseXBocywgbnVt
R2x5cGhzKTsKKyAgICBjYWlyb19zaG93X2dseXBocyhjciwgZ2x5cGhzLCBudW1HbHlwaHMpOwor
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9QbGF0Zm9ybVNjcm9sbEJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1BsYXRmb3JtU2Nyb2xsQmFyLmgJKHJldmlzaW9uIDE3MDgyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBA
QAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIFBsYXRmb3JtU2Nyb2xsQmFyX2gKQEAg
LTMxLDIyICszMSwzMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBsYXRmb3Jt
U2Nyb2xsYmFyIDogcHVibGljIFdpZGdldCwgcHVibGljIFNjcm9sbGJhciB7CitjbGFzcyBQbGF0
Zm9ybVNjcm9sbGJhciA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYyBTY3JvbGxiYXIKK3sKIHB1Ymxp
YzoKICAgICBQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOwogICAgIHZpcnR1YWwgflBsYXRmb3JtU2Ny
b2xsYmFyKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaWRnZXQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KIAogICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlY3Qo
Y29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwogICAg
IHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0KTsKKyAgICB2aXJ0dWFsIEludFJlY3QgZnJhbWVHZW9tZXRyeSgpOwogCiAgICAgLy8g
RklYTUU6IEltcGxlbWVudC4KLSAgICBzdGF0aWMgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQoKSB7IHJldHVybiAxNTsgfQotICAgIHN0YXRpYyBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpIHsgcmV0dXJuIDE1OyB9CisgICAgc3RhdGljIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KCkKKyAgICB7CisgICAgICAgIHJldHVybiAxNzsKKyAgICB9CisgICAgc3RhdGljIGludCB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkKKyAgICB7CisgICAgICAgIHJldHVybiAxNzsKKyAgICB9
CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9XaW5kb3dHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCisjaW5jbHVkZSAiRnJhbWVHZGsu
aCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRl
cldpZGdldC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAi
RE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJCcm93c2VyRXh0ZW5zaW9uR2RrLmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlBs
dWdpbi5oIgorI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENhaXJvLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVFbGVt
ZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckludGVybmFsLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgorI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisjaW5jbHVkZSAiU1NMS2V5R2VuZXJhdG9y
LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNs
dWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPGdkay9n
ZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OworCitzdGF0aWMgSGFzaE1hcDxHZGtEcmF3YWJsZSosV2luZG93R2RrKj4gd2luZG93czsKK3N0
YXRpYyBXaW5kb3dHZGsqIGN1cnJlbnRBY3RpdmVGcmFtZTsKKworI2lmIDAKK2dfaWRsZV9hZGQo
R1NvdXJjZUZ1bmMgZnVuY3Rpb24sZ3BvaW50ZXIgZGF0YSk7CitnYm9vbGVhbiAgICAoKkdTb3Vy
Y2VGdW5jKShncG9pbnRlciBkYXRhKTsKKworc3RhdGljIGdib29sZWFuIHBhaW50X2NhbGxiYWNr
KGdwb2ludGVyIGRhdGEpCit7CisgICAgZ2RrX3RocmVhZHNfZW50ZXIoKTsKKyAgICBnZGtfdGhy
ZWFkc19sZWF2ZSgpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRvU2Nyb2xsKGNvbnN0IFJl
bmRlck9iamVjdCogciwgYm9vbCBpc0hvcml6b250YWwsIGludCBtdWx0aXBsaWVyKQoreworICAg
IC8vIEZJWE1FOiBUaGUgc2Nyb2xsaW5nIGRvbmUgaGVyZSBzaG91bGQgYmUgZG9uZSBpbiB0aGUg
ZGVmYXVsdCBoYW5kbGVycworICAgIC8vIG9mIHRoZSBlbGVtZW50cyByYXRoZXIgdGhhbiBoZXJl
IGluIHRoZSBwYXJ0LgorICAgIGlmICghcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy9icm9r
ZW4gc2luY2UgaXQgY2FsbHMgc2Nyb2xsIG9uIHNjcm9sbGJhcnMKKyAgICAvL2FuZCB3ZSBoYXZl
IG5vbmUgbm93CisgICAgLy9yLT5zY3JvbGwoZGlyZWN0aW9uLCBTY3JvbGxCeVdoZWVsLCBtdWx0
aXBsaWVyKTsKKyAgICBpZiAoIXItPmxheWVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQg
eCA9IHItPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKKyAgICBpbnQgeSA9IHItPmxheWVyKCkt
PnNjcm9sbFlPZmZzZXQoKTsKKyAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICB4ICs9IG11
bHRpcGxpZXI7CisgICAgZWxzZQorICAgICAgICB5ICs9IG11bHRpcGxpZXI7CisgICAgci0+bGF5
ZXIoKS0+c2Nyb2xsVG9PZmZzZXQoeCwgeSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK1dpbmRvd0dkazo6
V2luZG93R2RrKEdka1dpbmRvdyogd2luZG93KQorICAgICAgICA6IG1fd2luZG93KHdpbmRvdyks
bV93aW5kb3dBcmdzKCkKK3sKKyAgICBJbnRSZWN0IHIgPSBnZW9tZXRyeSgpOworICAgIHdpbmRv
d3MuYWRkKG1fd2luZG93LHRoaXMpOworICAgIHNldEdlb21ldHJ5KHIpOworfQorCitXaW5kb3dH
ZGs6OldpbmRvd0dkayhjb25zdCBXaW5kb3dBcmdzJiBhcmdzKQorICAgICAgICA6IG1fd2luZG93
QXJncyhhcmdzKQoreworICAgIEdka1dpbmRvd0F0dHIgYXR0cjsKKyAgICBpbnQgZXh0cmFBdHRy
czsKKworICAgIGlmIChhcmdzLnhTZXQpIHsKKyAgICAgICAgYXR0ci54ID0gKGludClhcmdzLng7
CisgICAgICAgIGV4dHJhQXR0cnMgfD1HREtfV0FfWDsKKyAgICB9CisgICAgaWYgKGFyZ3MueVNl
dCkgeworICAgICAgICBhdHRyLnkgPSAoaW50KWFyZ3MueDsKKyAgICAgICAgZXh0cmFBdHRycyB8
PUdES19XQV9ZOworICAgIH0KKyAgICBpZiAoYXJncy5oaWRlRnJhbWVEZWNvcmF0aW9ucykgewor
ICAgICAgICBhdHRyLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgZXh0cmFBdHRy
cyB8PUdES19XQV9OT1JFRElSOworICAgIH0KKyAgICBhdHRyLndpZHRoID0gYXJncy53aWR0aFNl
dCA/IHN0YXRpY19jYXN0PGdpbnQ+KGFyZ3Mud2lkdGgpOjMwMDsKKyAgICBhdHRyLmhlaWdodCA9
IGFyZ3MuaGVpZ2h0U2V0ID8gc3RhdGljX2Nhc3Q8Z2ludD4oYXJncy5oZWlnaHQpOjE1MDsKKyAg
ICBhdHRyLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19UT1BMRVZFTDsKKyAgICBhdHRyLndjbGFz
cyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0ci5ldmVudF9tYXNrID0gKChHREtfQUxMX0VW
RU5UU19NQVNLXkdES19QT0lOVEVSX01PVElPTl9ISU5UX01BU0spKTsKKworICAgIG1fd2luZG93
ID0gZ2RrX3dpbmRvd19uZXcobV93aW5kb3csJmF0dHIsZXh0cmFBdHRycyk7CisgICAgZ2RrX3dp
bmRvd19zZXRfYWNjZXB0X2ZvY3VzKG1fd2luZG93LFRSVUUpOworICAgIGlmIChhcmdzLmZ1bGxz
Y3JlZW4pIHsKKyAgICAgICAgc2V0RnVsbFNjcmVlbih0cnVlKTsKKyAgICB9Cit9CisKK1dpbmRv
d0dkayogV2luZG93R2RrOjpmaW5kV2luZG93KEdka1dpbmRvdyogd2luZG93KQoreworICAgIHJl
dHVybiB3aW5kb3dzLmdldCh3aW5kb3cpOworfQorCitXaW5kb3dHZGs6On5XaW5kb3dHZGsoKQor
eworICAgIHdpbmRvd3MucmVtb3ZlKG1fd2luZG93KTsKKyAgICBnZGtfd2luZG93X2Rlc3Ryb3ko
bV93aW5kb3cpOworICAgIG1fd2luZG93ID0gMDsKK30KKwordm9pZCBXaW5kb3dHZGs6OnNldEZ1
bGxTY3JlZW4oYm9vbCBmdWxsKQoreworICAgIGlmIChmdWxsKQorICAgICAgICBnZGtfd2luZG93
X2Z1bGxzY3JlZW4obV93aW5kb3cpOworICAgIGVsc2UKKyAgICAgICAgZ2RrX3dpbmRvd191bmZ1
bGxzY3JlZW4obV93aW5kb3cpOworfQorCit2b2lkIFdpbmRvd0dkazo6c2V0TWF4aW1pemVkKGJv
b2wgbWF4aW1pemVkKQoreworICAgIGlmIChtYXhpbWl6ZWQpCisgICAgICAgIGdka193aW5kb3df
bWF4aW1pemUobV93aW5kb3cpOworICAgIGVsc2UKKyAgICAgICAgZ2RrX3dpbmRvd191bm1heGlt
aXplKG1fd2luZG93KTsKK30KKworV2luZG93R2RrKiBXaW5kb3dHZGs6OmdldFBvaW50ZXJJbmZv
KEludFBvaW50JiBwb3NpdGlvbiwgLypwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGlzIHdpbmRvdyov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIHNoaWZ0S2V5LGJv
b2wmIGN0cmxLZXksIGJvb2wmIGFsdEtleSwgYm9vbCYgbWV0YUtleSkKK3sKKyAgICBHZGtNb2Rp
ZmllclR5cGUgbWFzazsKKyAgICBpbnQgeCx5OworICAgIEdka1dpbmRvdyogd2luID0gZ2RrX3dp
bmRvd19nZXRfcG9pbnRlcihtX3dpbmRvdywmeCwmeSwmbWFzayk7CisgICAgcG9zaXRpb24uc2V0
WCh4KTsKKyAgICBwb3NpdGlvbi5zZXRZKHkpOworICAgIGlmIChtYXNrICYgR0RLX1NISUZUX01B
U0spCisgICAgICAgIHNoaWZ0S2V5PXRydWU7CisgICAgaWYgKG1hc2sgJiBHREtfQ09OVFJPTF9N
QVNLKQorICAgICAgICBjdHJsS2V5PXRydWU7CisgICAgaWYgKG1hc2sgJiBHREtfTU9EMV9NQVNL
KQorICAgICAgICBhbHRLZXkgPSB0cnVlOworICAgIGlmIChtYXNrICYgR0RLX01PRDJfTUFTSykK
KyAgICAgICAgbWV0YUtleSA9IHRydWU7CisgICAgcmV0dXJuIGZpbmRXaW5kb3cod2luKTsKK30K
Kwordm9pZCBXaW5kb3dHZGs6OnNldFRpdGxlKGNvbnN0IFN0cmluZyAmdGl0bGUpCit7CisgICAg
Z2RrX3dpbmRvd19zZXRfdGl0bGUobV93aW5kb3csdGl0bGUuZGVwcmVjYXRlZFN0cmluZygpLmFz
Y2lpKCkpOworfQorCit2b2lkIFdpbmRvd0dkazo6c2V0SXNBY3RpdmUoYm9vbCBmbGFnKQorewor
ICAgIGlmIChmbGFnKSB7CisgICAgICAgIGdka193aW5kb3dfc2hvdyhtX3dpbmRvdyk7CisgICAg
ICAgIGdka193aW5kb3dfZm9jdXMobV93aW5kb3csR0RLX0NVUlJFTlRfVElNRSk7CisgICAgfQor
fQorCisvKgorICogUG9zaXRpb24gaW4gdGhlIHRvcCBsZXZlbCBvciBwYWludGluZyBQYXJlbnQK
KyAqIHplcm8gZm9yIHRvcCBsZXZlbCBmcmFtZXMKKyAqLworSW50UG9pbnQgV2luZG93R2RrOjpn
ZXRBYnNvbHV0ZVBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoKTsKK30K
KworR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIFdpbmRvd0dkazo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCkKK3sKKyAgICBjYWlyb190KiBjciA9IGdka19jYWlyb19jcmVhdGUgKG1fd2luZG93KTsKKyAg
ICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dENhaXJvKGNyKTsKK30KKworR3JhcGhpY3NDb250
ZXh0Q2Fpcm8qIFdpbmRvd0dkazo6YmVnaW5QYWludGluZyhjb25zdCBJbnRSZWN0JiBwYWludFJl
Y3QpCit7CisgICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHBhaW50UmVjdC54KCksIHBhaW50UmVj
dC55KCksIHBhaW50UmVjdC53aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCkgfTsKKyAgICBnZGtf
d2luZG93X2JlZ2luX3BhaW50X3JlY3QgKG1fd2luZG93LCAmcmVjdCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIFdpbmRvd0dkazo6ZW5kUGFpbnRpbmco
R3JhcGhpY3NDb250ZXh0Q2Fpcm8qIGN0eCkKK3sKKyAgICBpZiAoY3R4KQorICAgICAgICBkZWxl
dGUgY3R4OworICAgIGdka193aW5kb3dfZW5kX3BhaW50IChtX3dpbmRvdyk7CisgICAgZ2RrX2Zs
dXNoKCk7Cit9CisKKwordm9pZCBXaW5kb3dHZGs6OmhhbmRsZUdka0V2ZW50KEdka0V2ZW50KiBl
dmVudCkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfREVMRVRF
OgorICAgICAgICAvL0ZJWE1FOiBzYXZlIGNhbGxiYWNrIGhlcmUKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHREtfRVhQT1NFOiB7CisgICAgICAgIEdka1JlY3RhbmdsZSBjbGlwOworICAgICAg
ICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5leHBvc2UucmVnaW9uLCAmY2xpcCk7Cisg
ICAgICAgIEludFJlY3QgZGlydHkgPSBJbnRSZWN0KGNsaXAueCwgY2xpcC55LCBjbGlwLndpZHRo
LCBjbGlwLmhlaWdodCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBiZWdp
blBhaW50aW5nKGRpcnR5KTsKKyAgICAgICAgbV9mcmFtZS0+dmlldygpLT5wYWludChjdHgsZGly
dHkpOworICAgICAgICBlbmRQYWludGluZyhjdHgpOworICAgIH0KKyAgICBicmVhazsKKyAgICBj
YXNlIEdES19EUkFHX0VOVEVSOgorICAgIGNhc2UgR0RLX0RSQUdfTEVBVkU6CisgICAgY2FzZSBH
REtfRFJBR19NT1RJT046CisgICAgY2FzZSBHREtfRFJBR19TVEFUVVM6CisgICAgY2FzZSBHREtf
RFJPUF9TVEFSVDoKKyAgICBjYXNlIEdES19EUk9QX0ZJTklTSEVEOiB7CisgICAgICAgIC8vYm9v
bCB1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQq
KTsKKyAgICAgICAgLy92b2lkIGNhbmNlbERyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYsIENsaXBib2FyZCopOworICAgICAgICAvL2Jvb2wgcGVyZm9ybURyYWdBbmREcm9wKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOworICAgICAgICAvL3ZpZXcoKS0+
aW52YWxpZGF0ZUNsaWNrKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdES19G
T0NVU19DSEFOR0U6IHsKKyAgICAgICAgbV9mcmFtZS0+cHJvY2Vzc1BsYXRmb3JtRm9jdXNDaGFu
Z2UoZXZlbnQtPmZvY3VzX2NoYW5nZS5pbik7CisgICAgfQorICAgIGJyZWFrOworICAgIGNhc2Ug
R0RLX1NDUk9MTDogeworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVu
dCk7CisgICAgICAgIG1fZnJhbWUtPnByb2Nlc3NQbGF0Zm9ybVdoZWVsRXZlbnQod2hlZWxFdmVu
dCk7CisgICAgfQorICAgIGJyZWFrOworICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6IHsKKyAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNlRXZlbnQoZXZlbnQpOworICAgICAgICBtX2Zy
YW1lLT5wcm9jZXNzUGxhdGZvcm1Nb3VzZUV2ZW50KG1vdXNlRXZlbnQsRXZlbnROYW1lczo6bW91
c2Vtb3ZlRXZlbnQpOworICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIEdES19CVVRUT05fUFJF
U1M6CisgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18zQlVUVE9OX1BS
RVNTOiB7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZUV2ZW50KGV2ZW50KTsKKyAg
ICAgICAgbV9mcmFtZS0+cHJvY2Vzc1BsYXRmb3JtTW91c2VFdmVudChtb3VzZUV2ZW50LEV2ZW50
TmFtZXM6Om1vdXNlZG93bkV2ZW50KTsKKyAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBHREtf
QlVUVE9OX1JFTEVBU0U6IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNlRXZlbnQo
ZXZlbnQpOworICAgICAgICBtX2ZyYW1lLT5wcm9jZXNzUGxhdGZvcm1Nb3VzZUV2ZW50KG1vdXNl
RXZlbnQsRXZlbnROYW1lczo6bW91c2V1cEV2ZW50KTsKKyAgICB9CisgICAgYnJlYWs7CisgICAg
Y2FzZSBHREtfS0VZX1BSRVNTOiB7CisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlF
dmVudChldmVudCk7CisgICAgICAgIG1fZnJhbWUtPnByb2Nlc3NQbGF0Zm9ybUtleWJvYXJkRXZl
bnQoa2V5RXZlbnQsRXZlbnROYW1lczo6a2V5ZG93bkV2ZW50KTsKKyAgICB9CisgICAgYnJlYWs7
CisgICAgY2FzZSBHREtfS0VZX1JFTEVBU0U6IHsKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2
ZW50IGtleUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9mcmFtZS0+cHJvY2Vzc1BsYXRmb3JtS2V5
Ym9hcmRFdmVudChrZXlFdmVudCxFdmVudE5hbWVzOjprZXl1cEV2ZW50KTsKKyAgICB9CisgICAg
YnJlYWs7CisgICAgY2FzZSBHREtfQ09ORklHVVJFOiB7CisgICAgICAgIEludFJlY3QgbmV3R2Vv
bSgwLDAsZXZlbnQtPmNvbmZpZ3VyZS53aWR0aCxldmVudC0+Y29uZmlndXJlLmhlaWdodCk7Cisg
ICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+c2V0RnJhbWVHZW9tZXRyeShuZXdHZW9tKTsKKyAgICB9
CisgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisK
K3ZvaWQgV2luZG93R2RrOjpzaG93KCkKK3sKKyAgICBnZGtfd2luZG93X3Nob3cobV93aW5kb3cp
OworfQorCit2b2lkIFdpbmRvd0dkazo6aGlkZSgpCit7CisgICAgZ2RrX3dpbmRvd19oaWRlKG1f
d2luZG93KTsKK30KKwordm9pZCBXaW5kb3dHZGs6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3Qg
JnIpCit7CisgICAgZ2RrX3dpbmRvd19tb3ZlX3Jlc2l6ZShtX3dpbmRvdywgci54KCksIHIueSgp
LCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOworfQorCitJbnRSZWN0IFdpbmRvd0dkazo6Z2VvbWV0
cnkoKSBjb25zdAoreworICAgIGdpbnQgeCwgeSwgd2lkdGgsIGhlaWdodCwgZGVwdGg7CisgICAg
Z2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkobV93aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0
LCAmZGVwdGgpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQor
CisKK3ZvaWQgV2luZG93R2RrOjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7Cisg
ICAgR2RrQ3Vyc29yKiBwY3VyID0gY3Vyc29yLmltcGwoKTsKKyAgICBpZiAoIXBjdXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBnZGtfd2luZG93X3NldF9jdXJzb3IobV93aW5kb3csIHBjdXIpOwor
fQorCisKK0ludFBvaW50IFdpbmRvd0dkazo6cG9zaXRpb24oKSBjb25zdAoreworICAgIGdpbnQg
eCwgeTsKKyAgICBnZGtfd2luZG93X2dldF9vcmlnaW4obV93aW5kb3csICZ4LCAmeSk7CisgICAg
cmV0dXJuIEludFBvaW50KHgseSk7Cit9CisKK0ludFNpemUgV2luZG93R2RrOjpzaXplKCkgY29u
c3QKK3sKKyAgICBnaW50IHcsaDsKKyAgICBnZGtfd2luZG93X2dldF9zaXplKG1fd2luZG93LCAm
dywgJmgpOworICAgIHJldHVybiBJbnRTaXplKHcsaCk7Cit9CisKK3ZvaWQgV2luZG93R2RrOjpy
ZXBhaW50KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KQoreworICAgIEdka1Jl
Y3RhbmdsZSByZWN0ID0ge3VwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVj
dC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpIH07CisgICAgZ2RrX3dpbmRvd19pbnZhbGlk
YXRlX3JlY3QobV93aW5kb3csICZyZWN0LCB0cnVlKTsKKworICAgIGlmIChub3cpIHsKKyAgICAg
ICAgZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMobV93aW5kb3csIHRydWUpOworICAgIH0KKyAg
ICBnZGtfZmx1c2goKTsKK30KKworCit9CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9XaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1dp
ZGdldC5oCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCw2IEBACiB0eXBlZGVmIHN0cnVjdCBIV05EX18qIEhX
TkQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgc3RydWN0IF9HZGtEcmF3
YWJsZSBHZGtEcmF3YWJsZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oUVQpCiBjbGFzcyBRV2lk
Z2V0OwogI2VuZGlmCkBAIC02MCw4ICs1NiwyMCBAQAogICAgIGNsYXNzIFNjcm9sbFZpZXc7CiAg
ICAgY2xhc3MgV2lkZ2V0Q2xpZW50OwogICAgIGNsYXNzIFdpZGdldFByaXZhdGU7CisjaWYgUExB
VEZPUk0oR0RLKQorICAgIGNsYXNzIEludGVybmFsRnJhbWVHZGs7CisgICAgY2xhc3MgS1VSTDsK
KyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFN0cmluZzsK
KyAgICBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgRnJhbWVWaWV3Owor
I2VuZGlmCiAKICAgICBjbGFzcyBXaWRnZXQgeworI2lmIFBMQVRGT1JNKEdESykKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEZyYW1lR2RrOworI2VuZGlmCiAgICAgcHVibGljOgogCiAgICAgICAgIGVu
dW0gRm9jdXNQb2xpY3kgewpAQCAtMTc0LDE1ICsxODIsMjIgQEAKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oR0RLKQotICAgICAgICBXaWRnZXQoR2RrRHJhd2FibGUqIGRyYXdhYmxlKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHNldERyYXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSk7Ci0gICAg
ICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSgpIGNvbnN0OworICAgICAgV2lkZ2V0UHJpdmF0ZSog
cHJpdmF0ZURhdGEoKSBjb25zdHtyZXR1cm4gZGF0YTt9CisgICAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldygpIGNvbnN0OworICAgICAgdm9pZCBzZXRGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CisgICAg
ICB2b2lkIHNldFBhcmVudChXaWRnZXQqKTsKKyAgICAgIFdpZGdldCogcGFyZW50KCkgY29uc3Q7
CisgICAgICB2b2lkIHNldE93bmVyKFdpZGdldCopOworICAgICAgV2lkZ2V0KiBvd25lcigpIGNv
bnN0OworICAgICAgSW50UG9pbnQgbG9jYXRpb25JbldpbmRvdygpIGNvbnN0OworICAgICAgdm9p
ZCByZXBhaW50KGJvb2wgbm93KTsKKyAgICAgIHZvaWQgcmVwYWludChjb25zdCBJbnRSZWN0JiB1
cGRhdGVSZWN0LCBib29sIG5vdyk7CisgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5Ym9hcmRF
dmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGV2dCl7fTsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oUVQpCiAgICAgICAgIFFXaWRnZXQqIHBhcmVudFdpZGdldCgpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50V2lkZ2V0KFFXaWRnZXQqKTsKLQogICAgICAgICBR
V2lkZ2V0KiBxd2lkZ2V0KCk7CiAgICAgICAgIHZvaWQgc2V0UVdpZGdldChRV2lkZ2V0Kik7CiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oCShy
ZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vUmVzb3VyY2VMb2FkZXJJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw5IEBACiAjZW5kaWYKIAogI2lmIFVTRShD
VVJMKQotdHlwZWRlZiB2b2lkIENVUkw7CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPENTdHJpbmcuaD4KICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oUVQpCkBAIC04OSw2ICs5MSwxMSBAQAogI2VuZGlmCiAjaWYgVVNFKENVUkwpCiAgICAg
ICAgICAgICAsIG1faGFuZGxlKDApCisgICAgICAgICAgICAsIG1fdXJsKDApCisgICAgICAgICAg
ICAsIG1fdXNlU2ltcGxlKGZhbHNlKQorICAgICAgICAgICAgLCBtX2N1c3RvbUhlYWRlcigwKQor
ICAgICAgICAgICAgLCBtX2N1c3RvbVBvc3RIZWFkZXIoMCkKKyAgICAgICAgICAgICwgbV9maWxl
UG9zdCgwKQogI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtMTI1LDYgKzEzMiwxMSBA
QAogI2VuZGlmCiAjaWYgVVNFKENVUkwpCiAgICAgICAgICAgICAsIG1faGFuZGxlKDApCisgICAg
ICAgICAgICAsIG1fdXJsKDApCisgICAgICAgICAgICAsIG1fdXNlU2ltcGxlKGZhbHNlKQorICAg
ICAgICAgICAgLCBtX2N1c3RvbUhlYWRlcigwKQorICAgICAgICAgICAgLCBtX2N1c3RvbVBvc3RI
ZWFkZXIoMCkKKyAgICAgICAgICAgICwgbV9maWxlUG9zdCgwKQogI2VuZGlmCiAgICAgICAgIHsK
ICAgICAgICAgfQpAQCAtMTY5LDYgKzE4MSwyMiBAQAogI2VuZGlmCiAjaWYgVVNFKENVUkwpCiAg
ICAgICAgIENVUkwgKm1faGFuZGxlOworICAgICAgICBjaGFyICptX3VybDsKKyAgICAgICAgLyoK
KyAgICAgICAgICogZXhlY3V0ZSB0aGUgZnVsbCByZXF1ZXN0IG9uIGNhbGxiYWNrCisgICAgICAg
ICAqIGRvbid0IG11bHRpcGxleAorICAgICAgICAgKi8KKyAgICAgICAgYm9vbCBtX3VzZVNpbXBs
ZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFN0b3JlcyBlbnRpcmUgcmVzcG9uc2UgaWYgam9i
IGlzIG1fdXNlU2ltcGxlCisgICAgICAgICAqLworICAgICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0
RGF0YTsKKyAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QqIG1fY3VzdG9tSGVhZGVyOworICAgICAg
ICBzdHJ1Y3QgY3VybF9zbGlzdCogbV9jdXN0b21Qb3N0SGVhZGVyOworICAgICAgICBzdHJ1Y3Qg
Y3VybF9odHRwcG9zdCAqbV9maWxlUG9zdDsKKyAgICAgICAgVmVjdG9yPGNoYXI+IG1fcG9zdEJ5
dGVzOworICAgICAgICBWZWN0b3I8Q1N0cmluZz4gbV9jc3RyaW5nczsKKyAgICAgICAgUGxhdGZv
cm1SZXNwb25zZSAgbV9yZXNwb25zZTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAg
ICBRU3RyaW5nIG1fY2hhcnNldDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQWZmaW5lVHJhbnNm
b3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9BZmZpbmVUcmFuc2Zvcm0uaAko
cmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0FmZmluZVRyYW5zZm9ybS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2
aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRl
IDxRTWF0cml4PgorI2VsaWYgUExBVEZPUk0oR0RLKQorI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsNiArNDksOCBAQAogICAgIEFmZmluZVRy
YW5zZm9ybShDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0pOwogI2VsaWYgUExBVEZPUk0oUVQp
CiAgICAgQWZmaW5lVHJhbnNmb3JtKGNvbnN0IFFNYXRyaXggJm1hdHJpeCk7CisjZWxpZiBQTEFU
Rk9STShHREspCisgICAgQWZmaW5lVHJhbnNmb3JtKGNvbnN0IGNhaXJvX21hdHJpeF90ICZtYXRy
aXgpOwogI2VuZGlmCiAKICAgICB2b2lkIHNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRv
dWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIHR4LCBkb3VibGUgdHkpOwpAQCAtNzgsNiArODIsOCBA
QAogICAgIG9wZXJhdG9yIENHQWZmaW5lVHJhbnNmb3JtKCkgY29uc3Q7CiAjZWxpZiBQTEFURk9S
TShRVCkKICAgICBvcGVyYXRvciBRTWF0cml4KCkgY29uc3Q7CisjZWxpZiBQTEFURk9STShHREsp
CisgICAgb3BlcmF0b3IgY2Fpcm9fbWF0cml4X3QoKSBjb25zdDsKICNlbmRpZgogCiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OwpAQCAtODksNiArOTUs
OCBAQAogICAgIENHQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogI2VsaWYgUExBVEZPUk0o
UVQpCiAgICAgUU1hdHJpeCBtX3RyYW5zZm9ybTsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAg
IGNhaXJvX21hdHJpeF90IG1fdHJhbnNmb3JtOwogI2VuZGlmCiB9OwogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsMTUgQEAKIHR5cGVkZWYgc3RydWN0IEhS
R05fXyogSFJHTjsKICNlbmRpZgogCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAgICAgCisj
aWYgUExBVEZPUk0oR0RLKQorICAgIGNsYXNzIFNjcm9sbEJhcjsKKyAgICBjbGFzcyBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgR3JhcGhpY3ND
b250ZXh0OworI2VuZGlmCiAgICAgY2xhc3MgRmxvYXRSZWN0OwogICAgIGNsYXNzIFBsYXRmb3Jt
V2hlZWxFdmVudDsKICAgICBjbGFzcyBQbGF0Zm9ybVNjcm9sbGJhcjsKQEAgLTEzMCwxNSArMTM4
LDEzIEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdESykKLSAgICAgICAgdm9pZCB1cGRhdGVW
aWV3KGNvbnN0IEludFJlY3QmLCBib29sIG5vdyA9IGZhbHNlKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHNldERyYXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSk7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgU2Nyb2xsVmll
dygpOwogICAgICAgICB+U2Nyb2xsVmlldygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
S2V5Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGV2dCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKICAg
ICBwcml2YXRlOgogICAgICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLSAgICAgICAgSW50
U2l6ZSBtYXhpbXVtU2Nyb2xsKCkgY29uc3Q7Ci0gICAgICAgIGludCB1cGRhdGVTY3JvbGxJbmZv
KHNob3J0IHR5cGUsIGludCBjdXJyZW50LCBpbnQgbWF4LCBpbnQgcGFnZVNpemUpOwogICAgICAg
ICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsKICAgICAgICAgU2Nyb2xsVmlld1ByaXZhdGUqIG1f
ZGF0YTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCShy
ZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQAogI2VuZGlmCiAjaWYgUExBVEZPUk0o
R0RLKSAKICAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50Kik7CisgICAgICAgIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgSW50UG9pbnQgcG9zKSB7IG1fcG9zaXRpb24gPSBwb3M7IH0K
ICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoUU1v
dXNlRXZlbnQqLCBpbnQgY2xpY2tDb3VudCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Jlc291
cmNlTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9SZXNvdXJj
ZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vUmVz
b3VyY2VMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsMTMgQEAKICNp
ZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRU3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNlbmRpZgogCisjaWYgVVNFKENVUkwpCisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsNiArNzAsMTUg
QEAKIAogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1EYXRhOwogICAgIHR5cGVkZWYgUmVmUHRy
PFBsYXRmb3JtUmVzcG9uc2VRdD4gUGxhdGZvcm1SZXNwb25zZTsKKyNlbGlmIFVTRShDVVJMKQor
ICAgICBjbGFzcyBQbGF0Zm9ybVJlc3BvbnNlR2RrIDogcHVibGljIFNoYXJlZDxQbGF0Zm9ybVJl
c3BvbnNlR2RrPiAgeworICAgICBwdWJsaWM6CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgICAg
IFN0cmluZyBtaW1lVHlwZTsKKyAgICAgICAgU3RyaW5nIGRhdGE7CisgICAgIH07CisgICAgIHR5
cGVkZWYgdm9pZCogUGxhdGZvcm1EYXRhOworICAgICB0eXBlZGVmIFJlZlB0cjxQbGF0Zm9ybVJl
c3BvbnNlR2RrPiBQbGF0Zm9ybVJlc3BvbnNlOwogI2Vsc2UKICAgICAvLyBOb3Qgc3VyZSB3aGF0
IHRoZSBzdHJhdGVneSBmb3IgdGhpcyB3aWxsIGJlIG9uIG90aGVyIHBsYXRmb3Jtcy4KICAgICB0
eXBlZGVmIHN0cnVjdCBQbGF0Zm9ybURhdGFTdHJ1Y3QqIFBsYXRmb3JtRGF0YTsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2
aXNpb24gMTcwODIpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Myw2ICs4MywxMCBAQAogICAgICAgICBzdGF0aWMgSElOU1RBTkNFIGluc3RhbmNlSGFuZGxlKCkg
eyByZXR1cm4gc19pbnN0YW5jZUhhbmRsZTsgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHREsp
CisgICAgICAgIFBhZ2UoKTsKKyNlbmRpZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBp
bml0KCk7CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL0Jyb3dzZXJFeHRlbnNpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9Ccm93c2VyRXh0ZW5zaW9uLmgJKHJldmlzaW9uIDE3MDgy
KQorKysgV2ViQ29yZS9icmlkZ2UvQnJvd3NlckV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCw5IEBACiAgICAgYm9vbCB0b29sQmFyVmlzaWJsZTsKICAgICBib29sIGxvY2F0
aW9uQmFyVmlzaWJsZTsKICAgICBib29sIHNjcm9sbGJhcnNWaXNpYmxlOworI2lmIFBMQVRGT1JN
KEdESykKKyAgICBib29sIGhpZGVGcmFtZURlY29yYXRpb25zOworI2VuZGlmCiAgICAgYm9vbCBy
ZXNpemFibGU7CiAKICAgICBib29sIGZ1bGxzY3JlZW47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11155</attachid>
            <date>2006-10-19 14:13:25 -0700</date>
            <delta_ts>2006-10-28 13:07:29 -0700</delta_ts>
            <desc>Removed use of gtk for closing window added svg web browser demo</desc>
            <filename>launcher.patch</filename>
            <type>text/plain</type>
            <size>8409</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL21haW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0dka0xhdW5jaGVyL21haW4uY3BwCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYktp
dFRvb2xzL0dka0xhdW5jaGVyL21haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDE3ICsyLDI0
IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1
bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGcmFtZUdkay5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgi
CisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorLy8jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAKICNp
bmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKy8vI2luY2x1ZGUgImh0
bWxuYW1lcy5oIgogCiAjaWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAt
MjAsMTggKzI3LDI2IEBACiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjZW5k
aWYKIAorLy9wYWludGluZwogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIldpbmRvd0dkay5oIgorI2luY2x1ZGUgIkZyYW1l
R2RrLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgR01haW5Mb29wICps
b29wOworCiBjbGFzcyBMYXVuY2hlckZyYW1lR2RrIDogcHVibGljIEZyYW1lR2RrCiB7CiBwdWJs
aWM6Ci0gICAgTGF1bmNoZXJGcmFtZUdkayhQYWdlKiBwYWdlLCBFbGVtZW50KiBlbGVtZW50KSA6
IEZyYW1lR2RrKHBhZ2UsIGVsZW1lbnQpLCBtX2V4aXRBZnRlckxvYWRpbmcoZmFsc2UpIHt9Ci0g
ICAgTGF1bmNoZXJGcmFtZUdkayhHZGtEcmF3YWJsZSogZHJhd2FibGUpIDogRnJhbWVHZGsoZHJh
d2FibGUpLCBtX2V4aXRBZnRlckxvYWRpbmcoZmFsc2UpIHt9CisgICAgTGF1bmNoZXJGcmFtZUdk
ayhQYWdlKiBwYWdlLCBFbGVtZW50KiBlbGVtZW50LFdpbmRvd0dkayogd2luZG93KSA6IEZyYW1l
R2RrKHBhZ2UsZWxlbWVudCx3aW5kb3cpLCBtX2V4aXRBZnRlckxvYWRpbmcoZmFsc2UpCisgICAg
e30KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlZE9ubG9hZEV2ZW50cygpOwotICAgIHZvaWQgc2V0
RXhpdEFmdGVyTG9hZGluZyhib29sIGV4aXRBZnRlckxvYWRpbmcpIHsgbV9leGl0QWZ0ZXJMb2Fk
aW5nID0gZXhpdEFmdGVyTG9hZGluZzsgfQorICAgIHZvaWQgc2V0RXhpdEFmdGVyTG9hZGluZyhi
b29sIGV4aXRBZnRlckxvYWRpbmcpCisgICAgeworICAgICAgICBtX2V4aXRBZnRlckxvYWRpbmcg
PSBleGl0QWZ0ZXJMb2FkaW5nOworICAgIH0KIHByaXZhdGU6CiAgICAgYm9vbCBtX2V4aXRBZnRl
ckxvYWRpbmc7CiB9OwpAQCAtMzksNjAgKzU0LDk1IEBACiB2b2lkIExhdW5jaGVyRnJhbWVHZGs6
OmhhbmRsZWRPbmxvYWRFdmVudHMoKQogewogICAgIGlmIChtX2V4aXRBZnRlckxvYWRpbmcpCi0g
ICAgICAgIGd0a19tYWluX3F1aXQoKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsK
IH0KIAotc3RhdGljICBMYXVuY2hlckZyYW1lR2RrICpmcmFtZTsKLXN0YXRpYyAgR2RrV2luZG93
ICp3aW47CitzdGF0aWMgTGF1bmNoZXJGcmFtZUdkayAqZnJhbWU7CitzdGF0aWMgR2RrV2luZG93
ICp3aW47CitzdGF0aWMgV2luZG93R2RrICp3aW5kb3c7CitzdGF0aWMgYm9vbCBkZWJ1ZzsKIAog
c3RhdGljIHZvaWQgaGFuZGxlX2V2ZW50KEdka0V2ZW50ICpldmVudCkKIHsKKyAgICBnZGtfdGhy
ZWFkc19sZWF2ZSgpOworICAgIFdpbmRvd0dkayogZWZyYW1lID0gV2luZG93R2RrOjpmaW5kV2lu
ZG93KGV2ZW50LT5hbnkud2luZG93KTsKKyAgICBpZiAoZWZyYW1lKSB7CisgICAgICAgIGlmIChk
ZWJ1ZykgeworICAgICAgICAgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBHREtfRVhQT1NFOgorICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSBjbGlwOworICAg
ICAgICAgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdpb24s
ICZjbGlwKTsKKyAgICAgICAgICAgICAgICAvL3ByaW50ZigiIFBBSU5UIEZSQU1FICVwIHg9JWQg
eT0lZCB3PSVkIGg9JWQgXG4iLGVmcmFtZSwKKyAgICAgICAgICAgICAgICAvLyAgICBjbGlwLngs
IGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBHREtfS0VZX1BSRVNTOgorICAgICAgICAgICAgICAgIGlmIChl
dmVudC0+a2V5LmtleXZhbCA9PSBHREtfRjkpIHsKKyAgICAgICAgICAgICAgICAgICAgRnJhbWVH
ZGsqIGVmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgRGVwcmVj
YXRlZFN0cmluZyBzdCA9IGV4dGVybmFsUmVwcmVzZW50YXRpb24oZWZyYW1lLT5yZW5kZXJlcigp
KTsKKyAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzOworICAgICAgICAgICAg
ICAgICAgICBwcmludGYoIkZSQU1FR0RLIERPQ1VNRU5UOiAlcyBcbiIsc3QuYXNjaWkoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtKCZzKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWZyYW1lLT5kb2N1bWVudCgpLT5kdW1wKCZzdHJlYW0sRGVwcmVjYXRlZFN0cmluZygi
ICIpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGUkFNRUdESyBOT0RFUzogJXMgXG4i
LHMuYXNjaWkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVmcmFtZS0+aGFuZGxlR2RrRXZlbnQo
ZXZlbnQpOworICAgIH0KICAgICBpZiAoR0RLX0RFTEVURSA9PSBldmVudC0+dHlwZSkgewotICAg
ICAgICBndGtfbWFpbl9xdWl0KCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZnJhbWUtPmhhbmRsZUdka0V2ZW50KGV2ZW50KTsK
KyAgICBnZGtfdGhyZWFkc19lbnRlcigpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAq
YXJndltdKSAKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisgICAgZGVidWcg
PSB0cnVlOwogICAgIEdka1dpbmRvd0F0dHIgYXR0cjsKLSAgICBjaGFyICp1cmw7CisgICAgZ190
aHJlYWRfaW5pdCgwKTsKKyAgICBnZGtfdGhyZWFkc19pbml0KCk7CiAgICAgZ2RrX2luaXQoJmFy
Z2MsJmFyZ3YpOwogICAgIGdka19ldmVudF9oYW5kbGVyX3NldCAoKEdka0V2ZW50RnVuYyloYW5k
bGVfZXZlbnQsIE5VTEwsIE5VTEwpOwotCi0gICAgYXR0ci53aWR0aCA9IDgwMDsKLSAgICBhdHRy
LmhlaWdodCA9IDYwMDsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLFRSVUUpOwor
ICAgIFN0cmluZyBzID0gZ2V0ZW52KCJQV0QiKTsKKyAgICBzID0gImZpbGU6Ly8iK3MrIi9jb21w
b25lbnRzIjsKKyAgICBGcmFtZUdkazo6c2V0SW5zdGFsbExvY2F0aW9uKHMuZGVwcmVjYXRlZFN0
cmluZygpLmFzY2lpKCkpOworICAgIGF0dHIud2lkdGggPSA0MDA7CisgICAgYXR0ci5oZWlnaHQg
PSAzMDA7CiAgICAgYXR0ci53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfVE9QTEVWRUw7CiAgICAg
YXR0ci53Y2xhc3MgPSBHREtfSU5QVVRfT1VUUFVUOwogICAgIC8vc2VlIGhvdyB3aGVyZSB3ZSBo
YW5kbGUgbW90aW9uIGhlcmUgbmVlZCB0byBkbyB0aGUgaGludCBzdHVmZgotICAgIGF0dHIuZXZl
bnRfbWFzayA9ICgoR0RLX0FMTF9FVkVOVFNfTUFTS15HREtfUE9JTlRFUl9NT1RJT05fSElOVF9N
QVNLKSk7IAorICAgIGF0dHIuZXZlbnRfbWFzayA9ICgoR0RLX0FMTF9FVkVOVFNfTUFTS15HREtf
UE9JTlRFUl9NT1RJT05fSElOVF9NQVNLKSk7CiAgICAgd2luID0gZ2RrX3dpbmRvd19uZXcoTlVM
TCwmYXR0ciwwKTsKLSAgICBmcmFtZSA9IG5ldyBMYXVuY2hlckZyYW1lR2RrKHdpbik7CisgICAg
d2luZG93ID0gbmV3IFdpbmRvd0dkayh3aW4pOworICAgIGZyYW1lID0gbmV3IExhdW5jaGVyRnJh
bWVHZGsobmV3IFBhZ2UsMCx3aW5kb3cpOwogICAgIGdka193aW5kb3dfc2hvdyh3aW4pOwotICAg
IHVybCA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20iOworCisgICAgY2hhciAqdXJsID0iY29tcG9u
ZW50cy9icm93c2VyLnN2ZyI7CiAgICAgYm9vbCBleGl0QWZ0ZXJMb2FkaW5nID0gZmFsc2U7CisK
ICAgICBmb3IgKGludCBhcmdQb3MgPSAxOyBhcmdQb3MgPCBhcmdjOyArK2FyZ1BvcykgewogICAg
ICAgICBpZiAoMCA9PSBzdHJjbXAoYXJndlthcmdQb3NdLCAiLWV4aXQtYWZ0ZXItbG9hZGluZyIp
KQogICAgICAgICAgICAgZXhpdEFmdGVyTG9hZGluZyA9IHRydWU7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHVybCA9IGFyZ3ZbYXJnUG9zXTsKICAgICB9Ci0gICAgZnJhbWUtPnNldEV4aXRB
ZnRlckxvYWRpbmcoZXhpdEFmdGVyTG9hZGluZyk7Ci0gICAgaWYgKHVybCkgewotICAgICAgICBw
cmludGYoIk9QRU5JTkcgVVJMID09ICVzIFxuIiwgdXJsKTsKLSAgICAgICAgZnJhbWUtPm9wZW5V
UkwodXJsKTsKLSAgICB9IGVsc2UgewotI2lmIDAKLSAgICAgICAgY2hhciAqcGcgPSAiIDxodG1s
PjxoZWFkPjx0aXRsZT5Hb29nbGU8L3RpdGxlPiA8Ym9keSBiZ2NvbG9yPSNmZmZmZmYgdGV4dD0j
MDAwMDAwPiA8cD48Zm9udCBzaXplPS0yLz4yMDA2IEdvb2dsZSBIZWxsbyBiaWd3b3JsZCBmcm9t
IG1pa2U8L3A+PC9ib2R5PjwvaHRtbD4gIjsKLSAgICAgICAgZnJhbWUtPmNyZWF0ZUVtcHR5RG9j
dW1lbnQoKTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPm9wZW4oKTsKLSAgICAgICAgZnJh
bWUtPndyaXRlKHBnLHN0cmxlbihwZykpOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2xv
c2UoKTsKLSNlbmRpZgorCisgICAgU3RyaW5nIHN1cmw9dXJsOworCisgICAgaWYgKHN0cm5jbXAo
ImZpbGU6Ly8iLHVybCw3KSAmJiBzdHJuY21wKCJodHRwOi8vIix1cmwsNykpIHsKKyAgICAgICAg
aWYgKCp1cmwgIT0gJy8nKSB7CisgICAgICAgICAgICBTdHJpbmcgcHdkID0gZ2V0ZW52KCJQV0Qi
KTsKKyAgICAgICAgICAgIHN1cmwgPSAiZmlsZTovLyIrcHdkKyIvIitzdXJsOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHN1cmwgPSAiZmlsZTovLyIrc3VybDsKICAgICB9Ci0gICAgCi0g
ICAgZ3RrX21haW4oKTsKKworICAgIHByaW50ZigiT1BFTklORyBVUkwgPT0gJXMgXG4iLCBzdXJs
LmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgpKTsKKyAgICBmcmFtZS0+b3BlblVSTChzdXJsLmRl
cHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKICAgICBkZWxl
dGUgZnJhbWU7CiAgICAgZ2RrX3dpbmRvd19kZXN0cm95KHdpbik7CiAgICAgcmV0dXJuIDA7Cklu
ZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9zaW1wbGUuc3ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0dka0xhdW5jaGVyL3NpbXBsZS5zdmcJKHJldmlzaW9uIDE3MDgyKQorKysgV2Vi
S2l0VG9vbHMvR2RrTGF1bmNoZXIvc2ltcGxlLnN2Zwkod29ya2luZyBjb3B5KQpAQCAtMSwxNSAr
MCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+Ci08IURPQ1RZUEUg
c3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKLSJodHRwOi8vd3d3Lncz
Lm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+Ci08c3ZnIHdpZHRo
PSI1Y20iIGhlaWdodD0iNGNtIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4K
LTxkZXNjPkZvdXIgc2VwYXJhdGUgcmVjdGFuZ2xlcwotPC9kZXNjPgotPHJlY3QgeD0iMC41Y20i
IHk9IjAuNWNtIiB3aWR0aD0iMmNtIiBoZWlnaHQ9IjFjbSIvPgotPHJlY3QgeD0iMC41Y20iIHk9
IjJjbSIgd2lkdGg9IjFjbSIgaGVpZ2h0PSIxLjVjbSIvPgotPHJlY3QgeD0iM2NtIiB5PSIwLjVj
bSIgd2lkdGg9IjEuNWNtIiBoZWlnaHQ9IjJjbSIvPgotPHJlY3QgeD0iMy41Y20iIHk9IjNjbSIg
d2lkdGg9IjFjbSIgaGVpZ2h0PSIwLjVjbSIvPgotPCEtLSBTaG93IG91dGxpbmUgb2YgY2FudmFz
IHVzaW5nICdyZWN0JyBlbGVtZW50IC0tPgotPHJlY3QgeD0iLjAxY20iIHk9Ii4wMWNtIiB3aWR0
aD0iNC45OGNtIiBoZWlnaHQ9IjMuOThjbSIKLWZpbGw9Im5vbmUiIHN0cm9rZT0iYmx1ZSIgc3Ry
b2tlLXdpZHRoPSIuMDJjbSIgLz4KLTwvc3ZnPgpJbmRleDogV2ViS2l0VG9vbHMvR2RrTGF1bmNo
ZXIvRU5WCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL0VOVgkocmV2aXNp
b24gMTcwODIpCisrKyBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9FTlYJKHdvcmtpbmcgY29weSkK
QEAgLTEsNCArMSw0IEBACiBleHBvcnQgREZCQVJHUz1zeXN0ZW09c2RsLG1vZGU9ODAweDYwMAog
ZXhwb3J0IERGQkFSR1M9c3lzdGVtPXgxMSxtb2RlPTgwMHg2MDAKLWV4cG9ydCBMRF9MSUJSQVJZ
X1BBVEg9JExEX0xJQlJBUllfUEFUSDouLi8uLi9XZWJDb3JlL1Byb2plY3RzL2dkazovdXNyL2xv
Y2FsL2xpYgorZXhwb3J0IExEX0xJQlJBUllfUEFUSD0kTERfTElCUkFSWV9QQVRIOmByZWFscGF0
aCAtcyAuLi8uLi9XZWJDb3JlL1Byb2plY3RzL2dka2A6YHJlYWxwYXRoIC1zIC4uLy4uL0phdmFT
Y3JpcHRDb3JlYDovdXNyL2xvY2FsL2xpYgogCkluZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hl
ci9nZGtsYXVuY2hlci5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIv
Z2RrbGF1bmNoZXIuYmtsCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYktpdFRvb2xzL0dka0xhdW5j
aGVyL2dka2xhdW5jaGVyLmJrbAkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDcgQEAKIDxtYWtl
ZmlsZT4KIAk8aW5jbHVkZSBmaWxlPSIuLi8uLi9CYWtlZmlsZXMvcHJlc2V0cy5ia2wiLz4KIAot
ICAgPHRlbXBsYXRlIGlkPSJ3ZWJjb3JlX2dka19saW5rIiB0ZW1wbGF0ZT0iZ3RrLGZyZWV0eXBl
Ij4KKyAgIDx0ZW1wbGF0ZSBpZD0id2ViY29yZV9nZGtfbGluayIgdGVtcGxhdGU9ImdkayxmcmVl
dHlwZSI+CiAgICAJCQogICAgICAgICA8ZGVmaW5lPkFQUExFX0NIQU5HRVM9MTwvZGVmaW5lPgog
ICAgICAgICA8IS0tIHRoaXMgR0MgdmVyc2lvbiByZXF1aXJlcyBNYWNoJ3MgdGhyZWFkIHN1c3Bl
bmQvcmVzdW1lOiAtLT4KQEAgLTcxLDcgKzcxLDEzIEBACiAKIAk8c2V0IHZhcj0iVE9QRElSIj4u
Li8uLjwvc2V0PgogICAgIDxleGUgaWQ9Imdka2xhdW5jaGVyIiB0ZW1wbGF0ZT0id2ViY29yZV9n
ZGtfbGluayI+ICAgICAgICAKLQkJPGxkZmxhZ3M+LUwkKFRPUERJUikvV2ViQ29yZS9Qcm9qZWN0
cy9nZGsgLWx3ZWJjb3JlLWdkazwvbGRmbGFncz4KKwkJPGxkZmxhZ3M+LUwkKFRPUERJUikvSmF2
YVNjcmlwdENvcmUgIC1sc2hhcmVkanNjb3JlPC9sZGZsYWdzPgorCQk8bGRmbGFncz4tTCQoVE9Q
RElSKS9XZWJDb3JlL1Byb2plY3RzL2dkayAgLWx3ZWJjb3JlLWdkazwvbGRmbGFncz4KKwkJPGxk
ZmxhZ3M+LUwkKFRPUERJUikvV2ViQ29yZS9Qcm9qZWN0cy9nZGsgLWx3ZWJjb3JlLXN2ZzwvbGRm
bGFncz4KKwkJPGxkZmxhZ3M+LUwkKFRPUERJUikvSmF2YVNjcmlwdENvcmUgIC1sc2hhcmVkanNj
b3JlPC9sZGZsYWdzPgorICAgICAgICA8bGRmbGFncz5gcGtnLWNvbmZpZyAtLWxpYnMgZ3RocmVh
ZC0yLjBgPC9sZGZsYWdzPgorICAgICAgICA8Y3h4ZmxhZ3M+YHBrZy1jb25maWcgLS1jZmxhZ3Mg
Z3RocmVhZC0yLjBgPC9jeHhmbGFncz4KKwogICAgICAgICA8d2FybmluZ3M+ZGVmYXVsdDwvd2Fy
bmluZ3M+CiAgICAgICAgIDxjeHgtcnR0aT5vZmY8L2N4eC1ydHRpPgogICAgICAgICA8Y3h4LWV4
Y2VwdGlvbnM+b2ZmPC9jeHgtZXhjZXB0aW9ucz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11156</attachid>
            <date>2006-10-19 14:16:35 -0700</date>
            <delta_ts>2006-10-28 13:07:29 -0700</delta_ts>
            <desc>This patch allows you to get the correct offsets for svg foriegnObjects</desc>
            <filename>offsetaffine.patch</filename>
            <type>text/plain</type>
            <size>14057</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE3MDgyKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMwLDgg
KzI1MzAsMTQgQEAKIHsKICAgICBib29sIGlubGluZUZsb3cgPSBpc0lubGluZUZsb3coKTsKIAor
I2lmIFBMQVRGT1JNKEdESykKKyAgICAvL3VzZSB2aXJ0dWFsIG1ldGhvZHMgdG8gc3VwcG9ydCBz
dmcgZm9yZWlnbk9iamVjdAorICAgIGludCB0eCA9IF90eCArIHhQb3MoKTsKKyAgICBpbnQgdHkg
PSBfdHkgKyB5UG9zKCkgKyBib3JkZXJUb3BFeHRyYSgpOworI2Vsc2UKICAgICBpbnQgdHggPSBf
dHggKyBtX3g7CiAgICAgaW50IHR5ID0gX3R5ICsgbV95ICsgYm9yZGVyVG9wRXh0cmEoKTsKKyNl
bmRpZgogICAgIAogICAgIGlmICghaW5saW5lRmxvdyAmJiAhaXNSb290KCkpIHsKICAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCkluZGV4OiBXZWJDb3Jl
L2tjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2Fu
dmFzL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiAxNzA4MikKKysrIFdlYkNvcmUva2Nh
bnZhcy9SZW5kZXJTVkdDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTkgKzU2LDMw
IEBACiAgICAgdm9pZCBzZXREcmF3c0NvbnRlbnRzKGJvb2wpOwogICAgIGJvb2wgZHJhd3NDb250
ZW50cygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzS0NhbnZhc0NvbnRhaW5lcigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiS0NhbnZhc0NvbnRhaW5lciI7IH0KLSAgICAKKyAgICB2aXJ0dWFs
IGJvb2wgaXNLQ2FudmFzQ29udGFpbmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICJSZW5kZXJTVkdDb250YWluZXIiOworICAgIH0KKwogICAg
IHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdDsKLSAgICAKKwogICAgIHZpcnR1
YWwgYm9vbCByZXF1aXJlc0xheWVyKCk7CiAgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJv
b2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgc2hv
cnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBj
b25zdDsKLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyAm
cGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwotICAgIAorCisgICAgdmlydHVh
bCB2b2lkIHNldFBvcyhpbnQgeFBvcywgaW50IHlQb3MpOworICAgIHZpcnR1YWwgaW50IHhQb3Mo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGFic29sdXRlUG9zaXRpb24oaW50ICZ4UG9zLCBpbnQgJnlQb3MsIGJvb2wgZiA9IGZhbHNlKTsK
KwogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBm
KTsKQEAgLTc4LDEwICs4OSwxMCBAQAogICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKICAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKICAgICBGbG9hdFJlY3QgcmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSA9
IHRydWUpIGNvbnN0OwotICAgIAorCiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxU
cmFuc2Zvcm0oKSBjb25zdDsKICAgICB2b2lkIHNldExvY2FsVHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOwotICAgCisKICAgICBGbG9hdFJlY3Qgdmlld3BvcnQoKSBjb25zdDsKIAog
ICAgIHZvaWQgc2V0Vmlld0JveChjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTkyLDE3ICsxMDMsMTkg
QEAKIAogICAgIHZvaWQgc2V0U2xpY2UoYm9vbCk7CiAgICAgYm9vbCBzbGljZSgpIGNvbnN0Owot
ICAgIAorCiAgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdwb3J0VHJhbnNmb3JtKCkgY29uc3Q7Ci0g
ICAgCisKIHByaXZhdGU6Ci0gICAgdm9pZCBjYWxjVmlld3BvcnQoKTsgCisgICAgdm9pZCBjYWxj
Vmlld3BvcnQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0QXNwZWN0UmF0aW8oY29uc3QgRmxv
YXRSZWN0JiBsb2dpY2FsLCBjb25zdCBGbG9hdFJlY3QmIHBoeXNpY2FsKSBjb25zdDsKIAotICAg
IGJvb2wgbV9kcmF3c0NvbnRlbnRzIDogMTsKLSAgICBib29sIG1fc2xpY2UgOiAxOworYm9vbCBt
X2RyYXdzQ29udGVudHMgOgorICAgIDE7Citib29sIG1fc2xpY2UgOgorICAgIDE7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fbWF0cml4OwotICAgIAorCiAgICAgRmxvYXRSZWN0IG1fdmlld3BvcnQ7
CiAgICAgRmxvYXRSZWN0IG1fdmlld0JveDsKICAgICBLQ0FsaWduIG1fYWxpZ247CkluZGV4OiBX
ZWJDb3JlL2tjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHJldmlzaW9uIDE3MDgyKQorKysgV2Vi
Q29yZS9rY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MjEgKzM1LDM1IEBACiB7CiBwdWJsaWM6CiAgICAgUmVuZGVyRm9yZWlnbk9iamVjdChTVkdGb3Jl
aWduT2JqZWN0RWxlbWVudCAqbm9kZSk7Ci0gICAgCi0gICAgdmlydHVhbCBjb25zdCBjaGFyICpy
ZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckZvcmVpZ25PYmplY3QiOyB9CisKKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICJSZW5kZXJGb3JlaWduT2JqZWN0IjsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwotICAg
IAotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYWxUcmFuc2Zvcm0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zv
cm07IH0KLSAgICAKKworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3MoaW50IHhQb3MsIGludCB5UG9z
KTsKKyAgICB2aXJ0dWFsIGludCB4UG9zKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgeVBvcygp
IGNvbnN0OworICAgIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQb3MsIGludCAmeVBvcywg
Ym9vbCBmPWZhbHNlKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0oKSBj
b25zdDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TG9jYWxUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgewor
ICAgICAgICBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmKTsKICAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGludCB4LCBpbnQgeSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCi0gcHJpdmF0ZToKLSAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7Citwcml2YXRlOgorICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSBjb25zdDsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gbV90cmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2Fic29sdXRlQm91bmRzOwogfTsK
SW5kZXg6IFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAxNzA4
MikKKysrIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxNiArMzcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyU1ZH
Q29udGFpbmVyOjpSZW5kZXJTVkdDb250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCAqbm9kZSkKLSAg
ICA6IFJlbmRlckNvbnRhaW5lcihub2RlKQotICAgICwgbV9kcmF3c0NvbnRlbnRzKHRydWUpCi0g
ICAgLCBtX3NsaWNlKGZhbHNlKQorICAgICAgICA6IFJlbmRlckNvbnRhaW5lcihub2RlKQorICAg
ICAgICAsIG1fZHJhd3NDb250ZW50cyh0cnVlKQorICAgICAgICAsIG1fc2xpY2UoZmFsc2UpCiB7
CiAgICAgc2V0UmVwbGFjZWQodHJ1ZSk7CiB9CiAKIFJlbmRlclNWR0NvbnRhaW5lcjo6flJlbmRl
clNWR0NvbnRhaW5lcigpCi17Ci19Cit7fQogCiBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6ZHJh
d3NDb250ZW50cygpIGNvbnN0CiB7CkBAIC03Miw3ICs3MSw3IEBACiB7CiAgICAgcmV0dXJuIHRy
dWU7CiB9Ci0gICAgCisKIGJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpyZXF1aXJlc0xheWVyKCkK
IHsKICAgICAvLyBPbmx5IGFsbG93IGFuIDxzdmc+IGVsZW1lbnQgdG8gZ2VuZXJhdGUgYSBsYXll
ciB3aGVuIGl0J3MgcG9zaXRpb25lZCBpbiBhIG5vbi1TVkcgY29udGV4dApAQCAtMTI5LDI0ICsx
MjgsMjQgQEAKIHsKICAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gTm8gb25lIHNob3VsZCBiZSB0cmFuc2Zvcm1p
bmcgdXMgdmlhIHRoZXNlLgogICAgIC8vQVNTRVJUKG1feCA9PSAwKTsKICAgICAvL0FTU0VSVCht
X3kgPT0gMCk7Ci0gICAgICAgIAotICAgIGlmIChzaG91bGRQYWludEJhY2tncm91bmRPckJvcmRl
cigpICYmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pKSAKKworICAgIGlmIChzaG91bGRQYWlu
dEJhY2tncm91bmRPckJvcmRlcigpICYmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZv
cmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pKQogICAg
ICAgICBwYWludEJveERlY29yYXRpb25zKHBhaW50SW5mbywgcGFyZW50WCwgcGFyZW50WSk7Ci0g
ICAgCisKICAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRs
aW5lV2lkdGgoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKICAgICAgICAg
cGFpbnRPdXRsaW5lKHBhaW50SW5mby5wLCBwYXJlbnRYLCBwYXJlbnRZLCB3aWR0aCgpLCBoZWln
aHQoKSwgc3R5bGUoKSk7Ci0gICAgCisKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2VGb3JlZ3JvdW5kIHx8ICFkcmF3c0NvbnRlbnRzKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IEhJRERFTikKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgS0NhbnZhc0ZpbHRl
ciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdHlsZSgpLT5zdmdTdHlsZSgp
LT5maWx0ZXIoKS5zdWJzdHJpbmcoMSkpOwogICAgIGlmICghZmlyc3RDaGlsZCgpICYmICFmaWx0
ZXIpCiAgICAgICAgIHJldHVybjsgLy8gU3BlYzogZ3JvdXBzIHcvbyBjaGlsZHJlbiBzdGlsbCBt
YXkgcmVuZGVyIGZpbHRlciBjb250ZW50LgotICAgIAorCiAgICAgS1JlbmRlcmluZ0RldmljZSog
ZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CiAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQq
IGRldmljZUNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7CiAgICAgYm9vbCBzaG91
bGRQb3BDb250ZXh0ID0gZmFsc2U7CkBAIC0xNTcsMjQgKzE1NiwyNCBAQAogICAgICAgICBzaG91
bGRQb3BDb250ZXh0ID0gdHJ1ZTsKICAgICB9IGVsc2UKICAgICAgICAgcGFpbnRJbmZvLnAtPnNh
dmUoKTsKLSAgICAKKwogICAgIGlmIChwYXJlbnRYICE9IDAgfHwgcGFyZW50WSAhPSAwKSB7CiAg
ICAgICAgIC8vIFRyYW5zbGF0ZSBmcm9tIHBhcmVudCBvZmZzZXRzIChodG1sIHJlbmRlcmVycykg
dG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2ZyByZW5kZXJlcnMpCiAgICAgICAgIGRldmljZUNv
bnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFy
ZW50WSkpOwogICAgICAgICBwYXJlbnRYID0gcGFyZW50WSA9IDA7CiAgICAgfQotICAgIAorCiAg
ICAgaWYgKCF2aWV3cG9ydCgpLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoc3R5bGUoKS0+b3Zl
cmZsb3dYKCkgIT0gT1ZJU0lCTEUpCiAgICAgICAgICAgICBwYWludEluZm8ucC0+Y2xpcChlbmNs
b3NpbmdJbnRSZWN0KHZpZXdwb3J0KCkpKTsgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2UnbGwgd2Fu
dCBmbG9hdC1wcmVjaXNpb24gY2xpcHBpbmcKICAgICAgICAgZGV2aWNlQ29udGV4dC0+Y29uY2F0
Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSh2aWV3cG9ydCgpLngoKSwgdmlld3BvcnQo
KS55KCkpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIWxvY2FsVHJhbnNmb3JtKCkuaXNJZGVu
dGl0eSgpKQogICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25jYXRDVE0obG9jYWxUcmFuc2Zvcm0o
KSk7Ci0gICAgCisKICAgICBGbG9hdFJlY3Qgc3Ryb2tlQkJveCA9IHJlbGF0aXZlQkJveCh0cnVl
KTsKLSAgICAKKwogICAgIGlmIChLQ2FudmFzQ2xpcHBlciAqY2xpcHBlciA9IGdldENsaXBwZXJC
eUlkKGRvY3VtZW50KCksIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBQYXRoKCkuc3Vic3RyaW5n
KDEpKSkKICAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKHN0cm9rZUJCb3gpOwogCkBAIC0xODks
MTggKzE4OCwxNyBAQAogCiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgZmlsdGVyLT5wcmVwYXJl
RmlsdGVyKHN0cm9rZUJCb3gpOwotICAgIAorCiAgICAgaWYgKCF2aWV3Qm94KCkuaXNFbXB0eSgp
KQogICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25jYXRDVE0odmlld3BvcnRUcmFuc2Zvcm0oKSk7
Ci0gICAgCisKICAgICBSZW5kZXJDb250YWluZXI6OnBhaW50KHBhaW50SW5mbywgMCwgMCk7Ci0g
ICAgCiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgZmlsdGVyLT5hcHBseUZpbHRlcihzdHJva2VC
Qm94KTsKLSAgICAKKwogICAgIGlmIChvcGFjaXR5IDwgMS4wZikKICAgICAgICAgcGFpbnRJbmZv
LnAtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgCisKICAgICAvLyByZXN0b3JlIGRyYXdp
bmcgc3RhdGUKICAgICBpZiAoc2hvdWxkUG9wQ29udGV4dCkgewogICAgICAgICBkZXZpY2UtPnBv
cENvbnRleHQoKTsKQEAgLTIyNiw3ICsyMjQsNyBAQAogICAgICAgICBtX3ZpZXdwb3J0ID0gRmxv
YXRSZWN0KHgsIHksIHcsIGgpOwogICAgIH0gZWxzZSBpZiAoc3ZnZWxlbS0+aGFzVGFnTmFtZShT
VkdOYW1lczo6bWFya2VyVGFnKSkgewogICAgICAgICBTVkdNYXJrZXJFbGVtZW50KiBzdmcgPSBz
dGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4oZWxlbWVudCgpKTsKLSAgICAgICAgICAgIGRv
dWJsZSB3ID0gc3ZnLT5tYXJrZXJXaWR0aCgpLT52YWx1ZSgpOworICAgICAgICBkb3VibGUgdyA9
IHN2Zy0+bWFya2VyV2lkdGgoKS0+dmFsdWUoKTsKICAgICAgICAgZG91YmxlIGggPSBzdmctPm1h
cmtlckhlaWdodCgpLT52YWx1ZSgpOwogICAgICAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KDAs
IDAsIHcsIGgpOwogICAgIH0KQEAgLTI1Niw3ICsyNTQsNyBAQAogewogICAgIGlmICghdmlld0Jv
eCgpLmlzRW1wdHkoKSkgewogICAgICAgICBGbG9hdFJlY3Qgdmlld3BvcnRSZWN0ID0gdmlld3Bv
cnQoKTsKLSAgICAgICAgaWYgKCFwYXJlbnQoKS0+aXNLQ2FudmFzQ29udGFpbmVyKCkpCisgICAg
ICAgIGlmIChwYXJlbnQoKSAmJiAhcGFyZW50KCktPmlzS0NhbnZhc0NvbnRhaW5lcigpKQogICAg
ICAgICAgICAgdmlld3BvcnRSZWN0ID0gRmxvYXRSZWN0KHZpZXdwb3J0KCkueCgpLCB2aWV3cG9y
dCgpLnkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm4gZ2V0QXNwZWN0UmF0
aW8odmlld0JveCgpLCB2aWV3cG9ydFJlY3QpOwogICAgIH0KQEAgLTI2NiwxMCArMjY0LDEwIEBA
CiBJbnRSZWN0IFJlbmRlclNWR0NvbnRhaW5lcjo6Z2V0QWJzb2x1dGVSZXBhaW50UmVjdCgpCiB7
CiAgICAgSW50UmVjdCByZXBhaW50UmVjdDsKLSAgICAKKwogICAgIGZvciAoUmVuZGVyT2JqZWN0
ICpjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50ICE9IDA7IGN1cnJlbnQgPSBjdXJyZW50
LT5uZXh0U2libGluZygpKQogICAgICAgICByZXBhaW50UmVjdC51bml0ZShjdXJyZW50LT5nZXRB
YnNvbHV0ZVJlcGFpbnRSZWN0KCkpOwotICAgIAorCiAgICAgLy8gRmlsdGVycyBjYW4gZXhwYW5k
IHRoZSBib3VuZGluZyBib3gKICAgICBLQ2FudmFzRmlsdGVyICpmaWx0ZXIgPSBnZXRGaWx0ZXJC
eUlkKGRvY3VtZW50KCksIHN0eWxlKCktPnN2Z1N0eWxlKCktPmZpbHRlcigpLnN1YnN0cmluZygx
KSk7CiAgICAgaWYgKGZpbHRlcikKQEAgLTI4Myw4ICsyODEsMTYgQEAKIHZvaWQgUmVuZGVyU1ZH
Q29udGFpbmVyOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGYp
CiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGxvY2FsVHJhbnNmb3JtKCk7Cisg
ICAgaWYgKCF2aWV3cG9ydCgpLmlzRW1wdHkoKSkgeworICAgICAgICBGbG9hdFJlY3Qgdmlld1Jl
Y3QgPSB2aWV3cG9ydCgpOworICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHZpZXdSZWN0Lngo
KSx2aWV3UmVjdC55KCkpOworICAgIH0KICAgICByID0gdHJhbnNmb3JtLm1hcFJlY3Qocik7Ci0g
ICAgCisKKyAgICAvL0ZJWE1FOiBpcyB0aGlzIHRydWU/IHdpdGhvdXQgaXQgY2xpcCBpcyB0byBz
bWFsbAorICAgIGlmICghci5pc0VtcHR5KCkpCisgICAgICAgIHIuaW5mbGF0ZSgxKTsgLy8gaW5m
bGF0ZSAxIHBpeGVsIGZvciBhbnRpYWxpYXNpbmcKKwogICAgIC8vIEZJWE1FOiBjb25zaWRlciBm
aWx0ZXIKIAogICAgIFJlbmRlckNvbnRhaW5lcjo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3Qo
ciwgZik7CkBAIC0yOTUsNiArMzAxLDM5IEBACiAgICAgcmV0dXJuIHZpZXdwb3J0VHJhbnNmb3Jt
KCkgKiBSZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7CiB9CiAKK2ludCAgUmVu
ZGVyU1ZHQ29udGFpbmVyOjp4UG9zKCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHgg
PXZpZXdwb3J0VHJhbnNmb3JtKCkgKiBsb2NhbFRyYW5zZm9ybSgpOworICAgIHJldHVybiB0eC5k
eCgpOworfQorCitpbnQgIFJlbmRlclNWR0NvbnRhaW5lcjo6eVBvcygpIGNvbnN0Cit7CisgICAg
QWZmaW5lVHJhbnNmb3JtIHR4ID12aWV3cG9ydFRyYW5zZm9ybSgpICogbG9jYWxUcmFuc2Zvcm0o
KTsKKyAgICByZXR1cm4gdHguZHkoKTsKK30KKwordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnNl
dFBvcyhpbnQgeFBvcywgaW50IHlQb3MpCit7CisgICAgLy9UaGUgU1ZHIGNvbnRhaW5lciBpcyBu
b3QgbW92ZWQgYnkgYmxvY2sgbGF5b3V0cworICAgIC8vRklYTUU6ID8/CisgICAgLy9zZWUgUmVu
ZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4gLi4uIGNoaWxkLT5zZXRQb3MoY2hpbGQtPnhQ
b3MoKSwgeVBvc0VzdGltYXRlKTsKK30KKworYm9vbCAgUmVuZGVyU1ZHQ29udGFpbmVyOjphYnNv
bHV0ZVBvc2l0aW9uKGludCAmeFBvcywgaW50ICZ5UG9zLCBib29sIGYpCit7CisgICAgLy9GSVhN
RTogYWx3YXlzIGZpeGVkID8KKyAgICBmID0gdHJ1ZTsKKworICAgIFJlbmRlck9iamVjdCAqbyA9
IGNvbnRhaW5lcigpOworICAgIGlmIChvKQorICAgICAgICBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQ
b3MsIHlQb3MsIGYpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHR4ID12aWV3cG9ydFRyYW5zZm9y
bSgpICogbG9jYWxUcmFuc2Zvcm0oKTsKKyAgICB4UG9zICs9IHR4LmR4KCk7CisgICAgeVBvcyAr
PSB0eC5keSgpOworICAgIHJldHVybiB0cnVlOworfQogYm9vbCBSZW5kZXJTVkdDb250YWluZXI6
OmZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAogewogICAgIFJlbmRlck9i
amVjdCAqY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKQEAgLTMyMiw3ICszNjEsNyBAQAogRmxvYXRS
ZWN0IFJlbmRlclNWR0NvbnRhaW5lcjo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSkg
Y29uc3QKIHsKICAgICBGbG9hdFJlY3QgcmVjdDsKLSAgICAKKwogICAgIFJlbmRlck9iamVjdCAq
Y3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKICAgICBmb3IgKDsgY3VycmVudCAhPSAwOyBjdXJyZW50
ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBGbG9hdFJlY3QgY2hpbGRCQm94
ID0gY3VycmVudC0+cmVsYXRpdmVCQm94KGluY2x1ZGVTdHJva2UpOwpJbmRleDogV2ViQ29yZS9r
Y2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2Nh
bnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwODIpCisrKyBXZWJDb3Jl
L2tjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3
ICszMSw1NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRlckZvcmVpZ25PYmplY3Q6
OlJlbmRlckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQgKm5vZGUpIAotICAg
IDogUmVuZGVyQmxvY2sobm9kZSkKLXsKLX0KK1JlbmRlckZvcmVpZ25PYmplY3Q6OlJlbmRlckZv
cmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQgKm5vZGUpCisgICAgICAgIDogUmVu
ZGVyQmxvY2sobm9kZSkKK3t9CiAKLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0
Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQorQWZmaW5lVHJhbnNmb3JtIFJlbmRlckZvcmVp
Z25PYmplY3Q6OnRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgU1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQqIGZvcmVpZ24gPSBzdGF0aWNfY2FzdDxTVkdGb3JlaWduT2JqZWN0
RWxlbWVudCo+KGVsZW1lbnQoKSk7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5z
bGF0ZShmb3JlaWduLT54KCktPnZhbHVlKCksIGZvcmVpZ24tPnkoKS0+dmFsdWUoKSk7CiB9CiAK
K0FmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0OjphYnNvbHV0ZVRyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zPSBSZW5kZXJDb250YWluZXI6OmFi
c29sdXRlVHJhbnNmb3JtKCk7CisgICAgcmV0dXJuIHRyYW5zKnRyYW5zbGF0aW9uRm9yQXR0cmli
dXRlcygpOworfQorCitpbnQgIFJlbmRlckZvcmVpZ25PYmplY3Q6OnhQb3MoKSBjb25zdAorewor
ICAgIEFmZmluZVRyYW5zZm9ybSB0eCA9dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkgKiBsb2Nh
bFRyYW5zZm9ybSgpOworICAgIHJldHVybiB0eC5keCgpOworfQorCitpbnQgIFJlbmRlckZvcmVp
Z25PYmplY3Q6OnlQb3MoKSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0eCA9dHJhbnNs
YXRpb25Gb3JBdHRyaWJ1dGVzKCkgKiBsb2NhbFRyYW5zZm9ybSgpOworICAgIHJldHVybiB0eC5k
eSgpOworfQorCit2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OnNldFBvcyhpbnQgeFBvcywgaW50
IHlQb3MpCit7CisgICAgLy90aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKKyAgICBBU1NFUlQo
MCk7Cit9CisKK2Jvb2wgIFJlbmRlckZvcmVpZ25PYmplY3Q6OmFic29sdXRlUG9zaXRpb24oaW50
ICZ4UG9zLCBpbnQgJnlQb3MsIGJvb2wgZikKK3sKKyAgICAvL0ZJWE1FOiBhbHdheXMgZml4ZWQg
PworICAgIGYgPSB0cnVlOworICAgIFJlbmRlck9iamVjdCAqbyA9IGNvbnRhaW5lcigpOworICAg
IGlmIChvICYmIG8tPmFic29sdXRlUG9zaXRpb24oeFBvcywgeVBvcywgZikpIHsKKyAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIHR4ID10cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSAqIGxvY2FsVHJh
bnNmb3JtKCk7CisgICAgICAgIHhQb3MgKz0gdHguZHgoKTsKKyAgICAgICAgeVBvcyArPSB0eC5k
eSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICB4UG9zPTA7
CisgICAgICAgIHlQb3M9MDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogdm9p
ZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBh
cmVudFgsIGludCBwYXJlbnRZKQogewogICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNh
YmxlZCgpKQpAQCAtNzYsNyArMTE2LDcgQEAKIAogICAgIGlmIChvcGFjaXR5IDwgMS4wZikKICAg
ICAgICAgcGFpbnRJbmZvLnAtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgCisKICAgICBp
ZiAoc2hvdWxkUG9wQ29udGV4dCkgewogICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKICAg
ICAgICAgZGVsZXRlIGNvbnRleHQ7CkBAIC04OSw3ICsxMjksNyBAQAogewogICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0gPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSAqIGxvY2FsVHJh
bnNmb3JtKCk7CiAgICAgciA9IHRyYW5zZm9ybS5tYXBSZWN0KHIpOwotICAgIAorCiAgICAgUmVu
ZGVyQmxvY2s6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KHIsIGYpOwogfQogCkBAIC0xMTQs
MTQgKzE1NCwxMyBAQAogCiAgICAgaWYgKGNoZWNrRm9yUmVwYWludCkKICAgICAgICAgcmVwYWlu
dEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRCb3VuZHMpOwotICAgIAorCiAgICAg
c2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCiBib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6Om5v
ZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRvdGFs
VHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICB0b3RhbFRyYW5zZm9ybSAqPSB0
cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKICAgICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7CiAg
ICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCkubWFwKHgsIHksICZsb2NhbFgsICZsb2NhbFkpOwog
ICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoaW5mbywgKGludClsb2NhbFgsIChp
bnQpbG9jYWxZLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>11157</attachid>
            <date>2006-10-19 14:21:20 -0700</date>
            <delta_ts>2006-11-05 20:30:48 -0800</delta_ts>
            <desc>astyle plus sed script for formatting</desc>
            <filename>wkstyle</filename>
            <type>text/plain</type>
            <size>486</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">YXN0eWxlIFwKLS1zdHlsZT1saW51eCBcCi0taW5kZW50PXNwYWNlcz00IFwKLS1jb252ZXJ0LXRh
YnMgXAokQAoKI2FzdHlsZSBkb2VzIG5vdCBzdXBwb3J0IHVucGFkZGluZyBzbyB3ZSB1c2Ugc2Vk
CmZvciBpIGluICRACmRvCmVjaG8gJGkKI2ZpcnN0IHByaW50IHRoZSBjaGFuZ2VzIHdlIGFyZSBt
YWtpbmcKc2VkICAtbiAtZSAnCi8oIC4qL3AgIApzLyggLygvZ3AgICAKLyouICkvcApzLyApLykv
Z3AgICAKI3N1cHJlc3MgcHJpbnRpbmcgdGhpcwojL15uYW1lc3BhY2UgV2ViQ29yZS97CiNOCiNz
L1xuey8gey9wCiN9CicgJGkgCgojZG8gaXQgZm9yIHJlYWwKc2VkIC1lICcKI3VucGFkIGxlYWRp
bmcgc3BhY2VzCnMvKCAvKC9nCiN1bnBhZCB0cmFsaW5nIHNwYWNlcwpzLyApLykvZwojZml4dXAg
dGhlIG5hbXNwZWMgZGVjbAovXm5hbWVzcGFjZSBXZWJDb3JlL3sKTgpzL1xuey8gey8KfQonICRp
ID4gJGkuc2VkCm12ICRpLnNlZCAkaQpkb25lCgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11268</attachid>
            <date>2006-10-28 13:07:29 -0700</date>
            <delta_ts>2006-10-28 13:35:44 -0700</delta_ts>
            <desc>Roll up patch to build gdk and add svg support</desc>
            <filename>svg.patch</filename>
            <type>text/plain</type>
            <size>367696</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2
ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiZGF0ZV9vYmplY3QuaCIK
ICNpbmNsdWRlICJkYXRlX29iamVjdC5sdXQuaCIKKyNpbmNsdWRlICJEYXRlTWF0aC5oIgogCiAj
aWYgSEFWRShFUlJOT19IKQogI2luY2x1ZGUgPGVycm5vLmg+CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDE3Mzk5KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTMg
KzQzLDEzIEBACiAJCWtqcy90ZXN0a2pzLmNwcAogCQlranMvdXN0cmluZy5jcHAKIAkJa2pzL3Zh
bHVlLmNwcAotCiAJPC9zZXQ+CiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0iSlNDT1JFX1NPVVJDRVNf
V1RGIj4KIAkJCiAJCXd0Zi9Bc3NlcnRpb25zLmNwcAogCQl3dGYvRmFzdE1hbGxvYy5jcHAKIAkJ
d3RmL0hhc2hUYWJsZS5jcHAKKwkJd3RmL1RDU3lzdGVtQWxsb2MuY3BwCiAKIAk8L3NldD4KIAk8
c2V0IGFwcGVuZD0iMSIgdmFyPSJKU0NPUkVfU09VUkNFU19QQ1JFIj4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2pzY29yZS5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvanNjb3JlLmJr
bAkocmV2aXNpb24gMTczOTkpCisrKyBKYXZhU2NyaXB0Q29yZS9qc2NvcmUuYmtsCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw5ICs1NCwxMiBAQAogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvYmlu
ZGluZ3M8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9iaW5kaW5ncy9jPC9p
bmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvYmluZGluZ3Mvam5pPC9pbmNsdWRl
PgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvd3RmPC9pbmNsdWRlPgogICAgICAgICA8aW5j
bHVkZT4kKFNSQ0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmU8L2luY2x1ZGU+CiAK
ICAgICAgICAgPGRlZmluZT5BUFBMRV9DSEFOR0VTPTE8L2RlZmluZT4KKyAgICAgICAgPCEtLWRl
ZmluZT5OREVCVUc9MTwvZGVmaW5lLS0+CisgICAgICAgIDxkZWZpbmU+V1RGX0NIQU5HRVM9MTwv
ZGVmaW5lPgogCiAgICAgICAgIDwhLS0gdGhpcyBHQyB2ZXJzaW9uIHJlcXVpcmVzIE1hY2gncyB0
aHJlYWQgc3VzcGVuZC9yZXN1bWU6IC0tPgogICAgICAgICA8aWYgY29uZD0iUExBVEZPUk1fTUFD
T1NYPT0nMSciPgpJbmRleDogQmFrZWZpbGVzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBCYWtl
ZmlsZXMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM5OSkKKysrIEJha2VmaWxlcy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMSBAQAorMjAwNi0xMC0xNyAgTWljaGFlbCBFbW1l
bCAgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PTkUuCisK
KyAgICAgICAgQWRkZWQgZ2RrIG9ubHkgYnVpbGQgIHByZXNldCAKKworICAgICAgICAqIHByZXNl
dHMuYmtsOgorCiAyMDA2LTEwLTA5ICBLcnp5c3p0b2YgS293YWxjenlrICA8a2tvd2FsY3p5a0Bn
bWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYuCkluZGV4OiBCYWtlZmlsZXMv
UmVhZG1lLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBCYWtlZmlsZXMvUmVhZG1lLnR4dAkocmV2aXNpb24g
MTczOTkpCisrKyBCYWtlZmlsZXMvUmVhZG1lLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsOSBAQAogCiBSZWdlbmVyYXRpbmcgdGhlIHNvdXJjZSBmaWxlIGxpc3RzIAogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGVydCEKK1RoaXMgaXMgbm8gbG9uZ2VyIHRy
dWUgdGhleSBhcmUgbm93IG1hbnVhbGx5IHN5bmNoZWQuCisKIEN1cnJlbnRseSwgV2ViQ29yZVNv
dXJjZXMuYmtsIGFuZCBKYXZhU2NyaXB0Q29yZS5ia2wgZmlsZXMgYXJlCiBhdXRvZ2VuZXJhdGVk
IGJ5IHJlYWRpbmcgdGhlIC52Y3Byb2ogZmlsZXMgYW5kIGV4dHJhY3RpbmcgdGhlIGZpbGUgbGlz
dHMKIGZyb20gdGhlbSwgdXNpbmcgdXBkYXRlLWZpbGUtbGlzdHMucHkuIFdoZW5ldmVyIGZpbGVz
IGFyZSBhZGRlZC9yZW1vdmVkLApAQCAtOTcsMyArMTAwLDE4IEBACiAKIGh0dHA6Ly9iYWtlZmls
ZS5zb3VyY2Vmb3JnZS5uZXQvZG9jL2h0bWwvcm4wMXJlMDEuaHRtbAogCitHZGsgYnVpbGQgaW5z
dHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uY2UgdGhlIGJha2VmaWxlcyBh
cmUgZ2VuZXJhdGVkIHBlciB0aGUgYWJvdmUgaW5zdHJ1Y3Rpb25zLgorY2QgV2ViQ29yZS9Qcm9q
ZWN0cy9nZGsKK21ha2UKKworY2QgV2Via2l0VG9vbHMvR2RrbGF1bmNoZXIKK2Jha2VmaWxlX2dl
bgorbWFrZQorLiAuL0VOVgorLi9nZGtsYXVuY2hlcgorCitnZGtsYXVuY2hlciBjYW4gdGFrZSBh
IHVybCBhcyBhbiBhcmd1bWVudAorCkluZGV4OiBCYWtlZmlsZXMvcHJlc2V0cy5ia2wKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQmFrZWZpbGVzL3ByZXNldHMuYmtsCShyZXZpc2lvbiAxNzM5OSkKKysrIEJha2Vm
aWxlcy9wcmVzZXRzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogICAgICAg
ICA8L2lmPgogICAgIDwvdGVtcGxhdGU+CiAKLQogICAgIDxvcHRpb24gbmFtZT0iU1FMSVRFM19M
SUJTIj4KICAgICAgICAgPGRlZmF1bHQtdmFsdWU+JChvcy5wb3BlbigicGtnLWNvbmZpZyAtLWxp
YnMgc3FsaXRlMyIpLnJlYWQoKSk8L2RlZmF1bHQtdmFsdWU+CiAgICAgPC9vcHRpb24+CkBAIC0x
MjcsNiArMTI2LDE0IEBACiAgICAgICAgIDwhLS0gICAgVE9ETzogbm9uLUN5Z3dpbiBXaW5kb3dz
IHN1cHBvcnQgZm9yIHRoaXM/IDopIC0tPiAKICAgICA8L3RlbXBsYXRlPgogCisgICAgPHRlbXBs
YXRlIGlkPSJnZGsiPgorICAgICAgICA8aWYgY29uZD0iRk9STUFUPT0nZ251JyI+CisgICAgCSAg
IDxsZGZsYWdzPmBwa2ctY29uZmlnIC0tbGlicyBnZGstMi4wYDwvbGRmbGFncz4KKyAgICAJICAg
PGN4eGZsYWdzPmBwa2ctY29uZmlnIC0tY2ZsYWdzIGdkay0yLjBgPC9jeHhmbGFncz4KKyAgICAg
ICAgPC9pZj4KKyAgICAgICAgCisgICAgICAgIDwhLS0gICAgVE9ETzogbm9uLUN5Z3dpbiBXaW5k
b3dzIHN1cHBvcnQgZm9yIHRoaXM/IDopIC0tPiAKKyAgICA8L3RlbXBsYXRlPgogCiAgICAgPG9w
dGlvbiBuYW1lPSJYTUwyX0xJQlMiPgogICAgICAgICA8ZGVmYXVsdC12YWx1ZT4kKG9zLnBvcGVu
KCJ4bWwyLWNvbmZpZyAtLWxpYnMiKS5yZWFkKCkpPC9kZWZhdWx0LXZhbHVlPgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJQZW4uaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAi
VUNoYXIuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIApAQCAtNTYsNyArNTcsNiBA
QAogICAgIGNvbnN0IGludCBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybldpZHRoID0gNDsKICAgICBj
b25zdCBpbnQgY01pc3NwZWxsaW5nTGluZVBhdHRlcm5HYXBXaWR0aCA9IDE7CiAKLSAgICBjbGFz
cyBBZmZpbmVUcmFuc2Zvcm07CiAgICAgY2xhc3MgRm9udDsKICAgICBjbGFzcyBHcmFwaGljc0Nv
bnRleHRQcml2YXRlOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsK
QEAgLTcwLDYgKzcwLDExIEBACiAjZW5kaWYKIAogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dCA6
IE5vbmNvcHlhYmxlIHsKKyNpZiBQTEFURk9STShDQUlSTykKKworICAgICAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CisKKyNlbmRpZgogICAgIHB1YmxpYzoKICAgICAgICAg
R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgICAgIH5HcmFw
aGljc0NvbnRleHQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxv
YWRlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlTG9hZGVySW50ZXJuYWwuaAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw5IEBACiAjZW5kaWYKIAogI2lmIFVTRShDVVJMKQotdHlwZWRlZiB2b2lkIENVUkw7
CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPENTdHJpbmcuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC04OCw2ICs5MCwx
MSBAQAogI2VuZGlmCiAjaWYgVVNFKENVUkwpCiAgICAgICAgICAgICAsIG1faGFuZGxlKDApCisg
ICAgICAgICAgICAsIG1fdXJsKDApCisgICAgICAgICAgICAsIG1fdXNlU2ltcGxlKGZhbHNlKQor
ICAgICAgICAgICAgLCBtX2N1c3RvbUhlYWRlcigwKQorICAgICAgICAgICAgLCBtX2N1c3RvbVBv
c3RIZWFkZXIoMCkKKyAgICAgICAgICAgICwgbV9maWxlUG9zdCgwKQogI2VuZGlmCiAgICAgICAg
IHsKICAgICAgICAgfQpAQCAtMTMxLDYgKzEzOCwyMiBAQAogI2VuZGlmCiAjaWYgVVNFKENVUkwp
CiAgICAgICAgIENVUkwgKm1faGFuZGxlOworICAgICAgICBjaGFyICptX3VybDsKKyAgICAgICAg
LyoKKyAgICAgICAgICogZXhlY3V0ZSB0aGUgZnVsbCByZXF1ZXN0IG9uIGNhbGxiYWNrCisgICAg
ICAgICAqIGRvbid0IG11bHRpcGxleAorICAgICAgICAqLworICAgICAgICBib29sIG1fdXNlU2lt
cGxlOworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIGVudGlyZSByZXNwb25zZSBpZiBq
b2IgaXMgbV91c2VTaW1wbGUKKyAgICAgICAgICovCisgICAgICAgIFZlY3RvcjxjaGFyPiByZXN1
bHREYXRhOworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogbV9jdXN0b21IZWFkZXI7CisgICAg
ICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBtX2N1c3RvbVBvc3RIZWFkZXI7CisgICAgICAgIHN0cnVj
dCBjdXJsX2h0dHBwb3N0ICptX2ZpbGVQb3N0OworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9wb3N0
Qnl0ZXM7CisgICAgICAgIFZlY3RvcjxDU3RyaW5nPiBtX2NzdHJpbmdzOworICAgICAgICBQbGF0
Zm9ybVJlc3BvbnNlICBtX3Jlc3BvbnNlOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAg
ICAgIFFTdHJpbmcgbV9jaGFyc2V0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDYgKzQ3LDExIEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2VuZGlmCiAKKyNpZiBV
U0UoQ1VSTCkKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAiU2hhcmVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTY2LDYgKzcxLDE2IEBACiAKICAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtRGF0YTsK
ICAgICB0eXBlZGVmIFJlZlB0cjxQbGF0Zm9ybVJlc3BvbnNlUXQ+IFBsYXRmb3JtUmVzcG9uc2U7
CisjZWxpZiBVU0UoQ1VSTCkKKyAgICAgY2xhc3MgUGxhdGZvcm1SZXNwb25zZUN1cmwgOiBwdWJs
aWMgU2hhcmVkPFBsYXRmb3JtUmVzcG9uc2VDdXJsPiAgeworICAgICBwdWJsaWM6CisgICAgICAg
IFN0cmluZyB1cmw7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZTsKKyAgICAgICAgU3RyaW5nIGNo
YXJzZXQ7CisgICAgICAgIFN0cmluZyBkYXRhOworICAgICB9OworICAgICB0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtRGF0YTsKKyAgICAgdHlwZWRlZiBSZWZQdHI8UGxhdGZvcm1SZXNwb25zZUN1cmw+
IFBsYXRmb3JtUmVzcG9uc2U7CiAjZWxzZQogICAgIC8vIE5vdCBzdXJlIHdoYXQgdGhlIHN0cmF0
ZWd5IGZvciB0aGlzIHdpbGwgYmUgb24gb3RoZXIgcGxhdGZvcm1zLgogICAgIHR5cGVkZWYgc3Ry
dWN0IFBsYXRmb3JtRGF0YVN0cnVjdCogUGxhdGZvcm1EYXRhOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUxvYWRlck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5oCShyZXZp
c2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VMb2Fk
ZXJNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20g
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIy
LDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBSZXNvdXJjZUxvYWRlck1hbmFn
ZXJfSF8KQEAgLTMxLDI2ICszMSwzMCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBSZXNvdXJjZUxvYWRlck1hbmFnZXIgeworCitjbGFzcyBSZXNvdXJjZUxvYWRl
ck1hbmFnZXIKK3sKIHB1YmxpYzoKKyAgICBzdGF0aWMgY2hhciogZ2V0TWltZVR5cGUoU3RyaW5n
Jik7CiAgICAgc3RhdGljIFJlc291cmNlTG9hZGVyTWFuYWdlciogZ2V0KCk7CisgICAgdm9pZCBp
bml0Sm9iKFJlc291cmNlTG9hZGVyKik7CisgICAgVmVjdG9yPGNoYXI+IHJ1bkltbWVkaWF0ZWx5
KFJlc291cmNlTG9hZGVyKik7CiAgICAgdm9pZCBhZGQoUmVzb3VyY2VMb2FkZXIqKTsKICAgICB2
b2lkIGNhbmNlbChSZXNvdXJjZUxvYWRlciopOwogCi0gICAgLy8gSWYgdHJ1ZSwgZG9uJ3QgbXVs
dGlwbGV4IGRvd25sb2FkczogZG93bmxvYWQgY29tcGxldGVseSBvbmUgYXQgYSB0aW1lLgotICAg
IHZvaWQgdXNlU2ltcGxlVHJhbnNmZXIoYm9vbCB1c2VTaW1wbGUpOwotCiBwcml2YXRlOgogICAg
IFJlc291cmNlTG9hZGVyTWFuYWdlcigpOwogICAgIHZvaWQgZG93bmxvYWRUaW1lckNhbGxiYWNr
KFRpbWVyPFJlc291cmNlTG9hZGVyTWFuYWdlcj4qKTsKICAgICB2b2lkIHJlbW92ZShSZXNvdXJj
ZUxvYWRlciopOwotCi0gICAgYm9vbCBtX3VzZVNpbXBsZTsKLSAgICBIYXNoU2V0PFJlc291cmNl
TG9hZGVyKj4qIGpvYnM7CisgICAgdm9pZCBzZXR1cFBvc3QoUmVzb3VyY2VMb2FkZXIqKTsKKyAg
ICB2b2lkIHNldHVwUHV0KFJlc291cmNlTG9hZGVyKik7CisgICAgSGFzaFNldDxSZXNvdXJjZUxv
YWRlcio+IGpvYnM7CisgICAgSGFzaFNldDxSZXNvdXJjZUxvYWRlcio+IHNpbXBsZUpvYnM7CiAg
ICAgVGltZXI8UmVzb3VyY2VMb2FkZXJNYW5hZ2VyPiBtX2Rvd25sb2FkVGltZXI7CiAgICAgQ1VS
TE0qIGN1cmxNdWx0aUhhbmRsZTsgLy8gbm90IGZyZWVkCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9nZGsvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyQ3VybC5jcHAJKHJldmlzaW9u
IDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUxvYWRlckN1
cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
Miw3ICsyMiw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
QEAgLTMxLDIxICszMSw0OCBAQAogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIlJl
c291cmNlTG9hZGVySW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck1hbmFnZXIu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAKKworI2RlZmlu
ZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1F
TlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9f
KTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlc291cmNlTG9hZGVySW50
ZXJuYWw6On5SZXNvdXJjZUxvYWRlckludGVybmFsKCkKIHsKKyAgICBpZiAobV9oYW5kbGUpCisg
ICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKG1faGFuZGxlKTsKKyAgICBpZiAobV91cmwpCisgICAg
ICAgIGZyZWUobV91cmwpOworCisgICAgaWYgKG1fY3VzdG9tSGVhZGVyKQorICAgICAgICBjdXJs
X3NsaXN0X2ZyZWVfYWxsKG1fY3VzdG9tSGVhZGVyKTsKKworICAgIGlmIChtX2N1c3RvbVBvc3RI
ZWFkZXIpCisgICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9jdXN0b21Qb3N0SGVhZGVyKTsK
KworICAgIGlmIChtX2ZpbGVQb3N0KQorICAgICAgICBjdXJsX2Zvcm1mcmVlKG1fZmlsZVBvc3Qp
OworICAgIC8vZG9uJ3QgZGVsZXRlIHdlIHBhc3MgdGhpcyBvZmYgaW4gdGhlIGVuZAorICAgIGlm
IChtX3Jlc3BvbnNlKQorICAgICAgICBtX3Jlc3BvbnNlID0gMDsKIH0KIAogUmVzb3VyY2VMb2Fk
ZXI6On5SZXNvdXJjZUxvYWRlcigpCiB7Ci0gICAgY2FuY2VsKCk7CisgICAgZGVsZXRlIGQ7CiB9
CiAKIGJvb2wgUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KERvY0xvYWRlciogZG9jTG9hZGVyKQogewog
ICAgIHJlZigpOworICAgIGdldEludGVybmFsKCktPm1fbG9hZGluZyA9IHRydWU7CisgICAgZC0+
YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzID1mYWxzZTsKKyAgICBkLT5tX3Jlc3BvbnNlID0gbmV3
IFBsYXRmb3JtUmVzcG9uc2VDdXJsKCk7CisgICAgZC0+bV9yZXNwb25zZS0+dXJsPVN0cmluZyh1
cmwoKS51cmwoKSk7CiAgICAgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpnZXQoKS0+YWRkKHRoaXMp
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTUsNCArODIsMzYgQEAKICAgICBSZXNvdXJjZUxv
YWRlck1hbmFnZXI6OmdldCgpLT5jYW5jZWwodGhpcyk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OnJlY2VpdmVkUmVzcG9uc2UoUGxhdGZvcm1SZXNwb25zZSByZXNwb25zZSkKK3sKKyAgICBp
bnQgaW5kZXggPSByZXNwb25zZS0+ZGF0YS5maW5kKCc6Jyk7CisgICAgU3RyaW5nIG5hbWUgPSBy
ZXNwb25zZS0+ZGF0YS5zdWJzdHJpbmcoMCxpbmRleCsxKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICBTdHJpbmcgdmFsdWUgPSByZXNwb25zZS0+ZGF0YS5zdWJzdHJpbmcoaW5kZXgrMSkuc3RyaXBX
aGl0ZVNwYWNlKCk7CisKKyAgICBpZiAobmFtZSA9PSAiQ29udGVudC1UeXBlOiIpIHsKKyAgICAg
ICAgcmVzcG9uc2UtPm1pbWVUeXBlID0gdmFsdWU7CisgICAgICAgIFN0cmluZyBjaGFyc2V0Owor
ICAgICAgICAvL3RoZSBtaW1lIHN0cmluZyBjYW4gaGF2ZSB0eXBlOyBjaGFyc2V0CisgICAgICAg
IGluZGV4ID0gdmFsdWUuZmluZCgiOyIpOworICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKKyAg
ICAgICAgICAgIHJlc3BvbnNlLT5taW1lVHlwZSA9IHZhbHVlLmxlZnQoaW5kZXgpOworICAgICAg
ICAgICAgcmVzcG9uc2UtPmNoYXJzZXQgPSB2YWx1ZS5yaWdodChpbmRleCsxKTsKKyAgICAgICAg
ICAgIGQtPm1fcmVzcG9uc2VFbmNvZGluZyA9IGNoYXJzZXQ7CisgICAgICAgICAgICBkLT5tX3Jl
dHJpZXZlZFJlc3BvbnNlRW5jb2RpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGQt
PnJlc3BvbnNlSGVhZGVycyArPSByZXNwb25zZS0+ZGF0YS5kZXByZWNhdGVkU3RyaW5nKCk7Cisg
ICAgcmVzcG9uc2UtPmRhdGEgPSBTdHJpbmcoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6
YXNzZW1ibGVSZXNwb25zZUhlYWRlcnMoKSBjb25zdAoreworfQorCit2b2lkIFJlc291cmNlTG9h
ZGVyOjpyZXRyaWV2ZVJlc3BvbnNlRW5jb2RpbmcoKSBjb25zdAoreworICAgIGQtPm1fcmV0cmll
dmVkUmVzcG9uc2VFbmNvZGluZyA9IHRydWU7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9Mb2FkZXJGdW5jdGlvbnNDdXJs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL0xvYWRlckZ1
bmN0aW9uc0N1cmwuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2dkay9Mb2FkZXJGdW5jdGlvbnNDdXJsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIkNhY2hl
LmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPGNoYXI+IFNlcnZlU3luY2hyb25v
dXNSZXF1ZXN0KExvYWRlciosIERvY0xvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgS1VSTCYgZmluYWxVUkwsIERlcHJlY2F0ZWRTdHJpbmcmIGhlYWRlcnMpCit7CisjaWYg
MAorICAgIFJlc291cmNlTG9hZGVyTWFuYWdlciogbWdyID0gUmVzb3VyY2VMb2FkZXJNYW5hZ2Vy
OjpnZXQoKTsKKyAgICBSZXNvdXJlY2VMb2FkZXIgam9iID0gUmVzb3VyY2VMb2FkZXI6OmNyZWF0
ZShyZXF1ZXN0LDAsZG9jTG9hZGVyKTsKKyAgICBtZ3ItPmluaXRKb2IocmVxdWVzdC5qb2IpOwor
ICAgIFZlY3RvcjxjaGFyPiByZXN1bHRCdWZmZXIgPSBtZ3ItPnJ1bkltbWVkaWF0ZWx5KHJlcXVl
c3Quam9iKCkpOworICAgIHJldHVybiByZXN1bHRCdWZmZXI7CisjZW5kaWYKK30KKworaW50IE51
bWJlck9mUGVuZGluZ09yTG9hZGluZ1JlcXVlc3RzKERvY0xvYWRlciogZG9jTG9hZGVyKQorewor
ICAgIHJldHVybiBjYWNoZSgpLT5sb2FkZXIoKS0+bnVtUmVxdWVzdHMoZG9jTG9hZGVyKTsKK30K
KworYm9vbCBDaGVja0lmUmVsb2FkaW5nKFdlYkNvcmU6OkRvY0xvYWRlciogZG9jTG9hZGVyKQor
eworICAgIC8vIEZJWE1FOiBOZWVkcyBhIHJlYWwgaW1wbGVtZW50YXRpb24hCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiBkb2NM
b2FkZXIsIENhY2hlZFJlc291cmNlKiBjYWNoZWRPYmplY3QpCit7CisgICAgLy8gUmV0dXJuIGZy
b20gdGhlIGZ1bmN0aW9uIGZvciBvYmplY3RzIHRoYXQgd2UgZGlkbid0IGxvYWQgZnJvbSB0aGUg
Y2FjaGUuCisgICAgaWYgKCFjYWNoZWRPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIHN3
aXRjaCAoY2FjaGVkT2JqZWN0LT5zdGF0dXMoKSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkNhY2hlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Tm90Q2Fj
aGVkOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlVua25vd246CisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TmV3OgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlBlbmRpbmc6CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoY2FjaGVkT2JqZWN0LT5yZXNwb25zZSgpKTsK
KworICAgIC8vIEZJWE1FOiBOb3RpZnkgdGhlIGNhbGxlciB0aGF0IHdlICJsb2FkZWQiLgorfQor
Citib29sIElzUmVzcG9uc2VVUkxFcXVhbFRvVVJMKFBsYXRmb3JtUmVzcG9uc2UgcmVzcG9uc2Us
IGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmICghcmVzcG9uc2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiByZXNwb25zZS0+dXJsID09IHVybDsKK30KKworRGVwcmVj
YXRlZFN0cmluZyBSZXNwb25zZVVSTChQbGF0Zm9ybVJlc3BvbnNlIHJlc3BvbnNlKQoreworICAg
IGlmICghcmVzcG9uc2UpCisgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisKKyAg
ICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyhyZXNwb25zZS0+dXJsLmRlcHJlY2F0ZWRTdHJpbmco
KSk7Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgUmVzcG9uc2VNSU1FVHlwZShQbGF0Zm9ybVJlc3Bv
bnNlIHJlc3BvbnNlKQoreworICAgIGlmICghcmVzcG9uc2UpCisgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyhy
ZXNwb25zZS0+bWltZVR5cGUuZGVwcmVjYXRlZFN0cmluZygpKTsKK30KKworYm9vbCBSZXNwb25z
ZUlzTXVsdGlwYXJ0KFBsYXRmb3JtUmVzcG9uc2UgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJl
c3BvbnNlTUlNRVR5cGUocmVzcG9uc2UpID09ICJtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIjsK
K30KKwordGltZV90IENhY2hlT2JqZWN0RXhwaXJlc1RpbWUoRG9jTG9hZGVyKiwgUGxhdGZvcm1S
ZXNwb25zZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIQorICAgIHJldHVybiAwOwor
fQorCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShQbGF0Zm9ybVJlc3BvbnNlIHJl
c3BvbnNlKQoreworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKK30KKwordm9pZCBDYWNoZWRS
ZXNvdXJjZTo6c2V0QWxsRGF0YShQbGF0Zm9ybURhdGEgYWxsRGF0YSkKK3sKKyAgICBtX2FsbERh
dGEgPSBhbGxEYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUxvYWRlck1hbmFnZXIu
Y3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9nZGsvUmVz
b3VyY2VMb2FkZXJNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjIsMTQgKzIyLDIwIEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck1hbmFnZXIuaCIKIAogI2luY2x1
ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUxvYWRlckludGVybmFsLmgiCisjaW5jbHVkZSAiRm9ybURhdGEuaCIKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMTAgKzQz
LDE0IEBACiBjb25zdCBkb3VibGUgcG9sbFRpbWVTZWNvbmRzID0gMC4wNTsKIAogUmVzb3VyY2VM
b2FkZXJNYW5hZ2VyOjpSZXNvdXJjZUxvYWRlck1hbmFnZXIoKQotICAgIDogbV91c2VTaW1wbGUo
ZmFsc2UpCi0gICAgLCBqb2JzKG5ldyBIYXNoU2V0PFJlc291cmNlTG9hZGVyKj4pCi0gICAgLCBt
X2Rvd25sb2FkVGltZXIodGhpcywgJlJlc291cmNlTG9hZGVyTWFuYWdlcjo6ZG93bmxvYWRUaW1l
ckNhbGxiYWNrKQorICAgICAgICA6IGpvYnMoKQorICAgICAgICAsIHNpbXBsZUpvYnMoKQorICAg
ICAgICAsIG1fZG93bmxvYWRUaW1lcih0aGlzLCAmUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpkb3du
bG9hZFRpbWVyQ2FsbGJhY2spCiB7CisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJP
KCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKyAgICBtYXhmZCA9IDA7CiAgICAg
Y3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwogICAgIGN1cmxNdWx0aUhhbmRsZSA9
IGN1cmxfbXVsdGlfaW5pdCgpOwogfQpAQCAtNTMsNDcgKzYzLDUzIEBACiAgICAgcmV0dXJuIHNp
bmdsZXRvbjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnVzZVNpbXBsZVRyYW5z
ZmVyKGJvb2wgdXNlU2ltcGxlKQotewotICAgIG1fdXNlU2ltcGxlID0gdXNlU2ltcGxlOwotfQot
CiBzdGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJhY2sodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6
ZV90IG5tZW1iLCB2b2lkKiBvYmopCiB7CiAgICAgUmVzb3VyY2VMb2FkZXIqIGpvYiA9IHN0YXRp
Y19jYXN0PFJlc291cmNlTG9hZGVyKj4ob2JqKTsKKyAgICBpZiAoam9iLT5pc0Vycm9yUGFnZSgp
KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpv
Yi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBpZiAoIWQtPmFzc2VtYmxlZFJlc3BvbnNlSGVhZGVycykK
KyAgICAgICAgZC0+bV9jbGllbnQtPnJlY2VpdmVkUmVzcG9uc2Uoam9iLGQtPm1fcmVzcG9uc2Up
OwogICAgIGludCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7Ci0gICAgZC0+Y2xpZW50LT5kaWRS
ZWNlaXZlRGF0YShqb2IsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpLCB0b3RhbFNpemUpOworICAg
IGQtPm1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShqb2IsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIp
LCB0b3RhbFNpemUpOworICAgIGlmIChkLT5tX3VzZVNpbXBsZSkgeworICAgICAgICBkLT5yZXN1
bHREYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKKyAgICB9
CiAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKIH0KIAotc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFj
ayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCitzdGF0
aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBu
bWVtYiwgdm9pZCogb2JqKQogeworICAgIFJlc291cmNlTG9hZGVyKiBqb2IgPSBzdGF0aWNfY2Fz
dDxSZXNvdXJjZUxvYWRlcio+KG9iaik7CisgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9
IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKworICAgIGlmIChqb2ItPmlzRXJyb3JQYWdlKCkpCisgICAg
ICAgIHJldHVybiAtMTsKICAgICBpbnQgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOworICAgIGQt
Pm1fcmVzcG9uc2UtPmRhdGEgPSBTdHJpbmcocHRyLHRvdGFsU2l6ZSk7CisgICAgam9iLT5yZWNl
aXZlZFJlc3BvbnNlKGQtPm1fcmVzcG9uc2UpOwogICAgIHJldHVybiB0b3RhbFNpemU7CiB9CiAK
IHZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soVGltZXI8
UmVzb3VyY2VMb2FkZXJNYW5hZ2VyPiogdGltZXIpCiB7Ci0gICAgaWYgKGpvYnMtPmlzRW1wdHko
KSkgewotICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RvcCgpOworICAgIGlmIChqb2JzLmlzRW1w
dHkoKSYmIHNpbXBsZUpvYnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChtX3VzZVNpbXBsZSkgewotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVzb3VyY2VMb2FkZXIq
Pjo6aXRlcmF0b3IgaXQgPSBqb2JzLT5iZWdpbigpOyBpdCAhPSBqb2JzLT5lbmQoKTsgKytpdCkg
eworCisgICAgaWYgKCFzaW1wbGVKb2JzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKEhhc2hT
ZXQ8UmVzb3VyY2VMb2FkZXIqPjo6aXRlcmF0b3IgaXQgPSBzaW1wbGVKb2JzLmJlZ2luKCk7Cisg
ICAgICAgICAgICAgICAgaXQgIT0gc2ltcGxlSm9icy5lbmQoKTsgKytpdCkgewogICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkZXIqIGpvYiA9ICppdDsKICAgICAgICAgICAgIFJlc291cmNlTG9hZGVy
SW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CiAgICAgICAgICAgICBDVVJMY29kZSBy
ZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShkLT5tX2hhbmRsZSk7CiAgICAgICAgICAgICBpZiAocmVz
ICE9IENVUkxFX09LKQogICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgV0lUSCBKT0IgJWRc
biIsIHJlcyk7Ci0gICAgICAgICAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IsIDAp
OwotICAgICAgICAgICAgZC0+Y2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGpvYik7Ci0gICAgICAg
ICAgICBjdXJsX2Vhc3lfY2xlYW51cChkLT5tX2hhbmRsZSk7Ci0gICAgICAgICAgICBkLT5tX2hh
bmRsZSA9IDA7CisgICAgICAgICAgICByZW1vdmUoam9iKTsKICAgICAgICAgfQotICAgICAgICBq
b2JzLT5jbGVhcigpOwotICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RvcCgpOwotICAgIH0gZWxz
ZSB7CisgICAgfQorCisgICAgaWYgKCFqb2JzLmlzRW1wdHkoKSkgewogICAgICAgICBGRF9aRVJP
KCZmZHJlYWQpOwogICAgICAgICBGRF9aRVJPKCZmZHdyaXRlKTsKICAgICAgICAgRkRfWkVSTygm
ZmRleGNlcCk7CkBAIC0xMDUsMjMgKzEyMSwxNyBAQAogICAgICAgICB0aW1lb3V0LnR2X3VzZWMg
PSBzZWxlY3RUaW1lb3V0TVMgKiAxMDAwOyAgICAgICAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNv
bmRzCiAgICAgICAgIHJldHZhbCA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3Jp
dGUsICZmZGV4Y2VwLCAmdGltZW91dCk7CiAgICAgICAgIHN3aXRjaCAocmV0dmFsKSB7Ci0gICAg
ICAgICAgICBjYXNlIC0xOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBlcnJvcgot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzLCBzZWxlY3QgZXJyb3Io
JWQpXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLHJldHZhbCk7Ci0jZW5kaWYKLSAgICAgICAgICAg
ICAgICAvKiBmYWxsdGhyb3VnaCovCi0gICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAg
ICAvLyBzZWxlY3QgdGltZW91dAotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICAgICBwcmlu
dGYoIiVzLCBzZWxlY3QgdGltZW91dCAlZFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyxyZXR2YWwp
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2guIHRoaXMgY2FuIGJlIHRo
ZSBmaXJzdCBwZXJmb3JtIHRvIGJlIG1hZGUgKi8KLSAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gMSsgZGVzY3JpcHRvcnMgaGF2ZSBkYXRhCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9PSBjdXJsX211bHRpX3BlcmZv
cm0oY3VybE11bHRpSGFuZGxlLCAmbnJ1bm5pbmcpKQotICAgICAgICAgICAgICAgICAgICB7IH0K
KyAgICAgICAgY2FzZSAtMTovLyBzZWxlY3QgZXJyb3IKKyAgICAgICAgICAgIC8qIGZhbGx0aHJv
dWdoKi8KKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgLy8gc2VsZWN0IHRpbWVvdXQK
KyAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoLiB0aGlzIGNhbiBiZSB0aGUgZmlyc3QgcGVyZm9y
bSB0byBiZSBtYWRlICovCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gMSsgZGVzY3JpcHRvcnMgaGF2ZSBkYXRhCisgICAgICAgIHdoaWxlIChDVVJMTV9DQUxMX01V
TFRJX1BFUkZPUk0gPT0gY3VybF9tdWx0aV9wZXJmb3JtKGN1cmxNdWx0aUhhbmRsZSwgJm5ydW5u
aW5nKSkgeyB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBjaGVjayB0aGUgY3VybCBtZXNzYWdl
cyBpbmRpY2F0aW5nIGNvbXBsZXRlZCB0cmFuc2ZlcnMKICAgICAgICAgLy8gYW5kIGZyZWUgdGhl
aXIgcmVzb3VyY2VzCisgICAgICAgIFJlc291cmNlTG9hZGVyKiBqb2I7CiAgICAgICAgIGludCBu
bXNnczsKICAgICAgICAgd2hpbGUgKENVUkxNc2cqIG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFk
KGN1cmxNdWx0aUhhbmRsZSwgJm5tc2dzKSkgewogICAgICAgICAgICAgaWYgKG1zZy0+bXNnID09
IENVUkxNU0dfRE9ORSkgewpAQCAtMTMwLDYwICsxNDAsMTU4IEBACiAgICAgICAgICAgICAgICAg
YXNzZXJ0KGNoYW5kbGUpOwogICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZGVyICpqb2I7CiAg
ICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY2hhbmRsZSwgQ1VSTElORk9fUFJJVkFU
RSwgJmpvYik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGpvYik7IC8vZml4bWU6IGFzc2VydC0+
aWYgPwotICAgICAgICAgICAgICAgIC8vIGlmIGZvdW5kLCBkZWxldGUgaXQKLSAgICAgICAgICAg
ICAgICBpZiAoam9iKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZGVySW50ZXJu
YWwgKmQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
bXNnLT5kYXRhLnJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDVVJMRV9P
SzogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGlzIHRvIGF1dGhlbnRp
Y2F0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNwQ29kZSA9IC0xOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGQtPm1faGFuZGxlLCBD
VVJMSU5GT19SRVNQT05TRV9DT0RFLCAmcmVzcENvZGUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbW92ZShqb2IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkN1cmwgRVJST1IgJXNcbiIs
IGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgam9iLT5zZXRFcnJvcihtc2ctPmRhdGEucmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZW1vdmUoam9iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ3VybFJlcXVlc3Qgbm90IGZvdW5kLCBldmVu
dGhvdWdoIGN1cmwgZC0+bV9oYW5kbGUgZmluaXNoZWRcbiIpOwotICAgICAgICAgICAgICAgICAg
ICBhc3NlcnQoMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGpvYik7CisgICAgICAgICAgICAg
ICAgaWYgKG1zZy0+ZGF0YS5yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2hhciAqaGFuZGxlX3VybD0wOworICAgICAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0
aW5mbyhjaGFuZGxlLENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZoYW5kbGVfdXJsKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnRmKCJDdXJsIEVSUk9SIHVybD0lcyBlcnJvcjolc1xuIixoYW5k
bGVfdXJsLCBjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOworICAgICAgICAg
ICAgICAgICAgICBmcmVlKGhhbmRsZV91cmwpOworICAgICAgICAgICAgICAgICAgICBqb2ItPnNl
dEVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZW1vdmUoam9iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9CiAgICAgfQotICAg
IGlmICgham9icy0+aXNFbXB0eSgpKQorICAgIGlmICghbV9kb3dubG9hZFRpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNvbmRz
KTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRl
ciogam9iKQogeworICAgIC8vdGFrZSBvdXQgb2YgY3VybCBtdWx0aSBmaXJzdCAhCiAgICAgUmVz
b3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoIWQt
Pm1faGFuZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGpvYnMtPmNvbnRhaW5zKGpvYikp
Ci0gICAgICAgIGpvYnMtPnJlbW92ZShqb2IpOwotICAgIGlmIChqb2JzLT5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fZG93bmxvYWRUaW1lci5zdG9wKCk7Ci0gICAgZC0+Y2xpZW50LT5yZWNlaXZlZEFs
bERhdGEoam9iLCAwKTsKLSAgICBkLT5jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoam9iKTsKLSAg
ICBpZiAoZC0+bV9oYW5kbGUpIHsKKyAgICBpZiAoZC0+bV9oYW5kbGUpCiAgICAgICAgIGN1cmxf
bXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUsIGQtPm1faGFuZGxlKTsKLSAgICAg
ICAgY3VybF9lYXN5X2NsZWFudXAoZC0+bV9oYW5kbGUpOwotICAgICAgICBkLT5tX2hhbmRsZSA9
IE5VTEw7CisKKyAgICBpZiAoam9icy5jb250YWlucyhqb2IpKQorICAgICAgICBqb2JzLnJlbW92
ZShqb2IpOworCisgICAgaWYgKHNpbXBsZUpvYnMuY29udGFpbnMoam9iKSkKKyAgICAgICAgc2lt
cGxlSm9icy5yZW1vdmUoam9iKTsKKworICAgIGlmIChkLT5tX2NsaWVudCkgeworICAgICAgICAv
L2VtcHR5IHBhZ2UgaWYgdHJ1ZQorICAgICAgICBpZiAoIWQtPmFzc2VtYmxlZFJlc3BvbnNlSGVh
ZGVycykKKyAgICAgICAgICAgIGQtPm1fY2xpZW50LT5yZWNlaXZlZFJlc3BvbnNlKGpvYixkLT5t
X3Jlc3BvbnNlKTsKKyAgICAgICAgZC0+bV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoam9iKTsK
KyAgICAgICAgZC0+bV9jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IsMCk7CiAgICAgfQorICAg
IGRlbGV0ZSBqb2I7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjphZGQoUmVzb3Vy
Y2VMb2FkZXIqIGpvYikKK3ZvaWQgIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6c2V0dXBQdXQoUmVz
b3VyY2VMb2FkZXIqIGpvYikKIHsKLSAgICBib29sIHN0YXJ0VGltZXIgPSBqb2JzLT5pc0VtcHR5
KCk7CiAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsK
LSAgICBEZXByZWNhdGVkU3RyaW5nIHVybCA9IGQtPlVSTC51cmwoKTsKKyAgICBpZiAoam9iLT5t
ZXRob2QoKSAhPSAiUFVUIikKKyAgICAgICAgcmV0dXJuOworICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZC0+bV9oYW5kbGUsIENVUkxPUFRfVVBMT0FELCBUUlVFKSA7CisKKyAgICB7CisgICAgICAgIHN0
cnVjdCBjdXJsX3NsaXN0ICpzbGlzdD1OVUxMOworICAgICAgICAvL0ZJWE1FOiBobW1tIGRpc2Fi
bGUgRXhwZWN0OiAxMDAtY29udGludWUKKyAgICAgICAgLy9zbGlzdCA9IGN1cmxfc2xpc3RfYXBw
ZW5kKHNsaXN0LCJFeHBlY3Q6Iik7CisgICAgICAgIC8vanVzdCBzdXBwcm90IEh0dHAgMS4xIGNo
dW5ja2VkIGVuY29kaW5nIG5vdworICAgICAgICBzbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKHNs
aXN0LCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIpOworICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAgICAgICBkLT5t
X2N1c3RvbVBvc3RIZWFkZXIgPSBzbGlzdDsKKyAgICB9Cit9CisKK3ZvaWQgIFJlc291cmNlTG9h
ZGVyTWFuYWdlcjo6c2V0dXBQb3N0KFJlc291cmNlTG9hZGVyKiBqb2IpCit7CisgICAgUmVzb3Vy
Y2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBpZiAoam9iLT5t
ZXRob2QoKSAhPSAiUE9TVCIpCisgICAgICAgIHJldHVybjsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1QsdHJ1ZSk7CisgICAgLy9kaXNhYmxlIEV4cGVjdDog
MTAwLWNvbnRpbnVlCisgICAgeworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3Q9TlVM
TDsKKyAgICAgICAgc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwiRXhwZWN0OiIpOwor
ICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLENVUkxPUFRfSFRUUEhFQURFUiwg
c2xpc3QpOworICAgICAgICBkLT5tX2N1c3RvbVBvc3RIZWFkZXIgPSBzbGlzdDsKKyAgICB9CisK
KyAgICAvL2ZpcnN0IGFkZCBhbnkgZGF0YQorICAgIGpvYi0+cG9zdERhdGEoKS5mbGF0dGVuKGQt
Pm1fcG9zdEJ5dGVzKTsKKyAgICBpZiAoZC0+bV9wb3N0Qnl0ZXMuc2l6ZSgpICE9IDApIHsKKyAg
ICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERTLGQt
Pm1fcG9zdEJ5dGVzLmRhdGEoKSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfUE9TVEZJRUxEU0laRSxkLT5tX3Bvc3RCeXRlcy5zaXplKCkpOworICAgIH0K
KworICAgIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+IGVsZW1lbnRzID0gam9iLT5wb3N0RGF0YSgp
LmVsZW1lbnRzKCk7CisgICAgaW50IHNpemUgPSBlbGVtZW50cy5zaXplKCk7CisgICAgc3RydWN0
IGN1cmxfaHR0cHBvc3QgKmxhc3RwdHI9TlVMTDsKKworICAgIGZvciAoaW50IGkgPTA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm1fdHlwZSA9PSBGb3JtRGF0YUVs
ZW1lbnQ6OmVuY29kZWRGaWxlKSB7CisgICAgICAgICAgICBDU3RyaW5nIGNzdHJpbmcgPSAgZWxl
bWVudHNbaV0ubV9maWxlbmFtZS51dGY4KCk7CisgICAgICAgICAgICAvL2tlZXAgcmVmIGhlcmUg
c28gaXRzIG5vdCBmcmVlZAorICAgICAgICAgICAgZC0+bV9jc3RyaW5ncy5hcHBlbmQoY3N0cmlu
Zyk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IGNzdHJpbmcuZGF0YSgpOwor
CisgICAgICAgICAgICAvKiBGaWxsIGluIHRoZSBmaWxlIHVwbG9hZCBmaWVsZCAqLworICAgICAg
ICAgICAgY3VybF9mb3JtYWRkKCZkLT5tX2ZpbGVQb3N0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICZsYXN0cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1F
LCAic2VuZGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsIGZp
bGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisKKyAgICAg
ICAgICAgIC8qIEZpbGwgaW4gdGhlIGZpbGVuYW1lIGZpZWxkICovCisgICAgICAgICAgICBjdXJs
X2Zvcm1hZGQoJmQtPm1fZmlsZVBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmxhc3Rw
dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJmaWxlbmFt
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCBmaWxl
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworCisgICAgICAg
ICAgICAvKiBGaWxsIGluIHRoZSBzdWJtaXQgZmllbGQgdG9vLCBldmVuIGlmIHRoaXMgaXMgcmFy
ZWx5IG5lZWRlZCAqLworICAgICAgICAgICAgY3VybF9mb3JtYWRkKCZkLT5tX2ZpbGVQb3N0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICZsYXN0cHRyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIENVUkxGT1JNX0NPUFlOQU1FLCAic3VibWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsICJzZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBDVVJMRk9STV9FTkQpOworICAgICAgICB9CisgICAgfQorfQorVmVjdG9yPGNoYXI+IFJlc291
cmNlTG9hZGVyTWFuYWdlcjo6cnVuSW1tZWRpYXRlbHkoUmVzb3VyY2VMb2FkZXIqIGpvYikKK3sK
KyAgICBpZiAoam9icy5jb250YWlucyhqb2IpKQorICAgICAgICBqb2JzLnJlbW92ZShqb2IpOwor
CisgICAgaWYgKHNpbXBsZUpvYnMuY29udGFpbnMoam9iKSkKKyAgICAgICAgc2ltcGxlSm9icy5y
ZW1vdmUoam9iKTsKKworICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldElu
dGVybmFsKCk7CisgICAgLy9jYXVzZSBkYXRhIHRvIGJlIGNhY2hlZCBpbiByZXN1bHREYXRhCisg
ICAgZC0+bV91c2VTaW1wbGUgPSB0cnVlOworICAgIENVUkxjb2RlIHJlcyA9IGN1cmxfZWFzeV9w
ZXJmb3JtKGQtPm1faGFuZGxlKTsKKyAgICBpZiAocmVzICE9IENVUkxFX09LKQorICAgICAgICBw
cmludGYoIkVycm9yIFdJVEggSk9CICVkXG4iLCByZXMpOworICAgIFZlY3RvcjxjaGFyPiByZXN1
bHRzID0gVmVjdG9yPGNoYXI+KGQtPnJlc3VsdERhdGEpOworICAgIGQtPnJlc3VsdERhdGEuY2xl
YXIoKTsKKyAgICByZW1vdmUoam9iKTsKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRlck1hbmFnZXI6OmluaXRKb2IoUmVzb3VyY2VMb2FkZXIqam9iKQoreworICAg
IFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CisgICAgRGVw
cmVjYXRlZFN0cmluZyB1cmwgPSBqb2ItPnVybCgpLnVybCgpOworCisvL3ByaW50ZigiUmVzb3Vy
Y2VMb2FkZXJNYW5hZ2VyOjphZGQgU3RhcnRpbmcgam9iICVzXG4iLGpvYi0+dXJsKCkuYXNjaWko
KSk7CisgICAgLy9yZW1vdmUgYW55IHF1ZXJ5IHBhcnQgc2VudCB0byBhIGxvY2FsIGZpbGUKKyAg
ICAvL2FsbG93cyBodHRwIHN0eWxlIGdldCBvcHRpb25zIHRvIGJlIGhhbmRsZWQgYnkgYSBsb2Nh
bCBmaWxlCisgICAgaWYgKGpvYi0+dXJsKCkuaXNMb2NhbEZpbGUoKSkgeworICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIHF1ZXJ5ID0gam9iLT51cmwoKS5xdWVyeSgpOworICAgICAgICBpZiAoIXF1
ZXJ5LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkeCA9IHVybC5maW5k
KHF1ZXJ5KTsKKyAgICAgICAgICAgIHVybCA9IHVybC5sZWZ0KGlkeCk7CisgICAgICAgIH0KKyAg
ICB9CiAgICAgZC0+bV9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworICAgIC8vIHVybCBwdHIg
bXVzdCByZW1haW4gdmFsaWQgdGhyb3VnaCB0aGUgcmVxdWVzdAorICAgIGQtPm1fdXJsID0gIHN0
cmR1cCh1cmwuYXNjaWkoKSk7CisKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX1BSSVZBVEUsIGpvYik7CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwg
Q1VSTE9QVF9FUlJPUkJVRkZFUiwgZXJyb3JfYnVmZmVyKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlQ2FsbGJhY2spOwpAQCAt
MTkzLDMwICszMDEsNzQgQEAKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX01BWFJFRElSUywgMTApOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0FOWSk7Ci0gICAgLy8gdXJsIHB0ciBtdXN0
IHJlbWFpbiB2YWxpZCB0aHJvdWdoIHRoZSByZXF1ZXN0Ci0gICAgY3VybF9lYXN5X3NldG9wdChk
LT5tX2hhbmRsZSwgQ1VSTE9QVF9VUkwsIHVybC5hc2NpaSgpKTsKKyAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VSTCxkLT5tX3VybCk7CiAKLSAgICBpZiAobV91c2VT
aW1wbGUpCi0gICAgICAgIGpvYnMtPmFkZChqb2IpOwotICAgIGVsc2UgeworICAgIC8veG1sSHR0
cFJlcXVlc3Qgc2VlIHhtbC94bWxodHRwcmVxdWVzdC5jcHAKKyAgICBIVFRQSGVhZGVyTWFwICBj
dXN0b21IZWFkZXJzID0gIGQtPm1fcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CisgICAgaWYg
KCFjdXN0b21IZWFkZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAq
c2xpc3Q9TlVMTDsKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Y3VzdG9tSGVhZGVycy5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisK
KyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcg
dmFsdWUgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgU3RyaW5nIHBhaXIgPSBrZXkrIjogIit2
YWx1ZTsKKyAgICAgICAgICAgIENTdHJpbmcgY3N0cmluZyA9IHBhaXIudXRmOCgpOworICAgICAg
ICAgICAgLy9zYXZlIGZvciBsYXRlciBjbGVhbnVwCisgICAgICAgICAgICBkLT5tX2NzdHJpbmdz
LmFwcGVuZChjc3RyaW5nKTsKKyAgICAgICAgICAgIHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQo
c2xpc3QsY3N0cmluZy5kYXRhKCkpOworICAgICAgICB9CisgICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAgICAgICBkLT5t
X2N1c3RvbUhlYWRlciA9IHNsaXN0OworICAgIH0KKyAgICAvL2RlZmF1bHQgdG8gZ2V0CisgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IVFRQR0VULCBUUlVFKTsKKwor
ICAgIGlmIChqb2ItPm1ldGhvZCgpID09ICJQT1NUIikKKyAgICAgICAgc2V0dXBQb3N0KGpvYik7
CisgICAgZWxzZSBpZiAoam9iLT5tZXRob2QoKSA9PSAiUFVUIikKKyAgICAgICAgc2V0dXBQdXQo
am9iKTsKKyAgICBlbHNlIGlmIChqb2ItPm1ldGhvZCgpID09ICJIRUFEIikKKyAgICAgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9OT0JPRFksIFRSVUUpOworfQorCit2
b2lkIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6YWRkKFJlc291cmNlTG9hZGVyKiBqb2IpCit7Cisg
ICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBp
bml0Sm9iKGpvYik7CisKKyAgICBqb2JzLmFkZChqb2IpOworCisgICAgaWYgKGQtPm1fdXNlU2lt
cGxlKSB7CisgICAgICAgIHNpbXBsZUpvYnMuYWRkKGpvYik7CisgICAgfSBlbHNlIHsKICAgICAg
ICAgQ1VSTE1jb2RlIHJldCA9IGN1cmxfbXVsdGlfYWRkX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUs
IGQtPm1faGFuZGxlKTsKLSAgICAgICAgLy8gZG9uJ3QgY2FsbCBwZXJmb3JtLCBiZWNhdXNlIGV2
ZW50cyBtdXN0IGJlIGFzeW5jCi0gICAgICAgIC8vIHRpbWVvdXQgd2lsbCBvY2N1ciBhbmQgZG8g
Y3VybF9tdWx0aV9wZXJmb3JtCiAgICAgICAgIGlmIChyZXQgJiYgcmV0ICE9IENVUkxNX0NBTExf
TVVMVElfUEVSRk9STSkgewotICAgICAgICAgICAgcHJpbnRmKCJFcnJvciAlZCBzdGFydGluZyBq
b2IgJXNcbiIsIHJldCwgZC0+VVJMLnVybCgpLmFzY2lpKCkpOwotICAgICAgICAgICAgam9iLT5z
ZXRFcnJvcigxKTsKLSAgICAgICAgICAgIHN0YXJ0VGltZXIgPWZhbHNlOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGpvYnMtPmFkZChqb2IpOworICAgICAgICAgICAgcHJpbnRmKCJFcnJv
ciAlZCBzdGFydGluZyBqb2IgJXNcbiIsIHJldCwgam9iLT51cmwoKS51cmwoKS5hc2NpaSgpKTsK
KyAgICAgICAgICAgIGNhbmNlbChqb2IpOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChzdGFy
dFRpbWVyKQorICAgIGlmICghbV9kb3dubG9hZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1f
ZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNvbmRzKTsKIH0KIAogdm9pZCBS
ZXNvdXJjZUxvYWRlck1hbmFnZXI6OmNhbmNlbChSZXNvdXJjZUxvYWRlciogam9iKQogeworICAg
IGpvYi0+c2V0RXJyb3IoMSk7CiAgICAgcmVtb3ZlKGpvYik7Ci0gICAgam9iLT5zZXRFcnJvcigx
KTsKIH0KK2NoYXIqIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0TWltZVR5cGUoU3RyaW5nJiBp
blBhdGgpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyBwYXRoID0gaW5QYXRoLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKKyAgICBpZiAocGF0aC5lbmRzV2l0aCgiLnN2ZyIpKQorICAgICAgICByZXR1cm4g
ImltYWdlL3N2Zyt4bWwiOworICAgIGlmIChwYXRoLmVuZHNXaXRoKCIueG1sIikpCisgICAgICAg
IHJldHVybiAidGV4dC94bWwiOworICAgIGlmIChwYXRoLmVuZHNXaXRoKCIueHNsIikpCisgICAg
ICAgIHJldHVybiAidGV4dC94c2wiOworICAgIGlmIChwYXRoLmVuZHNXaXRoKCIuanMiKSkKKyAg
ICAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiOworICAgIHJldHVybiAidGV4
dC9odG1sIjsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYg
Kzc1LDcgQEAKIAogI2lmIFBMQVRGT1JNKEdESykKICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2
ZW50KEdka0V2ZW50Kik7CisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudChjb25zdCBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQmIGV2ZW50LGJvb2wgcmVwZWF0KTsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oUVQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlz
aW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCkBAIC00OCw3ICs0OCwxNSBAQAogLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBJbWFnZSBDbGFzcwogLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLwogCitJbWFnZTo6
SW1hZ2UoSW50U2l6ZSBzaXplKQoreworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9zb3VyY2Uu
c2V0U2l6ZShzaXplKTsKKyAgICBjYWNoZUZyYW1lKDApOworfQorCiAvLyBEcmF3aW5nIFJvdXRp
bmVzCiAKIHN0YXRpYyB2b2lkIHNldENvbXBvc2l0aW5nT3BlcmF0aW9uKGNhaXJvX3QqIGNvbnRl
eHQsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIGhhc0FscGhhKQpAQCAtNzcsMTIgKzg1LDEy
IEBACiAKICAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICAKKwogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJy
ZW50RnJhbWUpOwogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0
IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNlbGZT
aXplID0gc2l6ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgSW50U2l6ZSBzZWxmU2l6
ZSA9IHNpemUoKTsKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOwogICAgIEZsb2F0UmVjdCBk
c3RSZWN0KGRzdCk7CiAKQEAgLTkwLDcgKzk4LDcgQEAKIAogICAgIC8vIFNldCB0aGUgY29tcG9z
aXRpbmcgb3BlcmF0aW9uLgogICAgIHNldENvbXBvc2l0aW5nT3BlcmF0aW9uKGNvbnRleHQsIG9w
LCBmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOwotICAgIAorCiAgICAgLy8g
SWYgd2UncmUgZHJhd2luZyBhIHN1YiBwb3J0aW9uIG9mIHRoZSBpbWFnZSBvciBzY2FsaW5nIHRo
ZW4gY3JlYXRlCiAgICAgLy8gYSBwYXR0ZXJuIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBpbWFnZSBh
bmQgZHJhdyB0aGUgdHJhbnNmb3JtZWQgcGF0dGVybi4KICAgICAvLyBUZXN0IHVzaW5nIGV4YW1w
bGUgc2l0ZSBhdCBodHRwOi8vd3d3Lm1leWVyd2ViLmNvbS9lcmljL2Nzcy9lZGdlL2NvbXBsZXhz
cGlyYWwvZGVtby5odG1sCkBAIC0xMTMsOCArMTIxLDkgQEAKIAogfQogCisKIHZvaWQgSW1hZ2U6
OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsCi0gICAgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFt
X3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjMsMTcgKzEzMiwx
NyBAQAogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUg
YW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIGludHJpbnNpY0lt
YWdlU2l6ZSA9IHNpemUoKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgIEludFNpemUgaW50
cmluc2ljSW1hZ2VTaXplID0gc2l6ZSgpOwogICAgIEZsb2F0UmVjdCBzcmNSZWN0KHNyY1BvaW50
LCBpbnRyaW5zaWNJbWFnZVNpemUpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBzcmNQb2ludDsK
IAogICAgIC8vIENoZWNrIGFuZCBzZWUgaWYgYSBzaW5nbGUgZHJhdyBvZiB0aGUgaW1hZ2UgY2Fu
IGNvdmVyIHRoZSBlbnRpcmUgYXJlYSB3ZSBhcmUgc3VwcG9zZWQgdG8gdGlsZS4KICAgICBmbG9h
dCB0aWxlV2lkdGggPSBzaXplKCkud2lkdGgoKTsKICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gc2l6
ZSgpLmhlaWdodCgpOwotICAgIAorCiAgICAgLy8gSWYgdGhlIHNjYWxlIGlzIG5vdCBlcXVhbCB0
byB0aGUgaW50cmluc2ljIHNpemUgb2YgdGhlIGltYWdlLCBzZXQgdHJhbnNmb3JtIG1hdHJpeAog
ICAgIC8vIHRvIHRoZSBhcHByb3ByaWF0ZSBzY2FsYXIgbWF0cml4LCBzY2FsZSB0aGUgc291cmNl
IHBvaW50LCBhbmQgc2V0IHRoZSBzaXplIG9mIHRoZQotICAgIC8vIHNjYWxlZCB0aWxlLiAKKyAg
ICAvLyBzY2FsZWQgdGlsZS4KICAgICBmbG9hdCBzY2FsZVggPSAxLjA7CiAgICAgZmxvYXQgc2Nh
bGVZID0gMS4wOwogICAgIGNhaXJvX21hdHJpeF90IG1hdDsKQEAgLTE0Miw0NiArMTUxLDQ2IEBA
CiAgICAgICAgIHNjYWxlWCA9IGludHJpbnNpY0ltYWdlU2l6ZS53aWR0aCgpIC8gdGlsZVNpemUu
d2lkdGgoKTsKICAgICAgICAgc2NhbGVZID0gaW50cmluc2ljSW1hZ2VTaXplLmhlaWdodCgpIC8g
dGlsZVNpemUuaGVpZ2h0KCk7CiAgICAgICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKCZtYXQs
IHNjYWxlWCwgc2NhbGVZKTsKLSAgICAgICAgCisKICAgICAgICAgdGlsZVdpZHRoID0gdGlsZVNp
emUud2lkdGgoKTsKICAgICAgICAgdGlsZUhlaWdodCA9IHRpbGVTaXplLmhlaWdodCgpOwogICAg
IH0KLSAgIAorCiAgICAgLy8gV2UgY291bGQgZ2V0IGludGVyZXN0aW5nIHNvdXJjZSBvZmZzZXRz
IChuZWdhdGl2ZSBvbmVzIG9yIHBvc2l0aXZlIG9uZXMuICBEZWFsIHdpdGggYm90aAogICAgIC8v
IG91dCBvZiBib3VuZHMgY2FzZXMuCiAgICAgZmxvYXQgZHN0VGlsZVggPSBkc3RSZWN0LngoKSAr
IGZtb2RmKGZtb2RmKC1wb2ludC54KCksIHRpbGVXaWR0aCkgLSB0aWxlV2lkdGgsIHRpbGVXaWR0
aCk7CiAgICAgZmxvYXQgZHN0VGlsZVkgPSBkc3RSZWN0LnkoKSArIGZtb2RmKGZtb2RmKC1wb2lu
dC55KCksIHRpbGVIZWlnaHQpIC0gdGlsZUhlaWdodCwgdGlsZUhlaWdodCk7CiAgICAgRmxvYXRS
ZWN0IGRzdFRpbGVSZWN0KGRzdFRpbGVYLCBkc3RUaWxlWSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0
KTsKLSAgICAKKwogICAgIGZsb2F0IHNyY1ggPSBkc3RSZWN0LngoKSAtIGRzdFRpbGVSZWN0Lngo
KTsKICAgICBmbG9hdCBzcmNZID0gZHN0UmVjdC55KCkgLSBkc3RUaWxlUmVjdC55KCk7CisgICAg
eworICAgICAgICAvLyBJZiB0aGUgc2luZ2xlIGltYWdlIGRyYXcgY292ZXJzIHRoZSB3aG9sZSBh
cmVhLCB0aGVuIGp1c3QgZHJhdyBvbmNlLgorICAgICAgICBpZiAoZHN0VGlsZVJlY3QuY29udGFp
bnMoZHN0UmVjdCkpIHsKKyAgICAgICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwKKyAgICAgICAg
ICAgICAgICAgRmxvYXRSZWN0KHNyY1ggKiBzY2FsZVgsIHNyY1kgKiBzY2FsZVksIGRzdFJlY3Qu
d2lkdGgoKSAqIHNjYWxlWCwgZHN0UmVjdC5oZWlnaHQoKSAqIHNjYWxlWSksIG9wKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgLy8gSWYgdGhlIHNpbmdsZSBpbWFnZSBk
cmF3IGNvdmVycyB0aGUgd2hvbGUgYXJlYSwgdGhlbiBqdXN0IGRyYXcgb25jZS4KLSAgICBpZiAo
ZHN0VGlsZVJlY3QuY29udGFpbnMoZHN0UmVjdCkpIHsKLSAgICAgICAgZHJhdyhjdHh0LCBkc3RS
ZWN0LAotICAgICAgICAgICAgIEZsb2F0UmVjdChzcmNYICogc2NhbGVYLCBzcmNZICogc2NhbGVZ
LCBkc3RSZWN0LndpZHRoKCkgKiBzY2FsZVgsIGRzdFJlY3QuaGVpZ2h0KCkgKiBzY2FsZVkpLCBv
cCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIC8vIFdlIGhhdmUgdG8gdGlsZS4K
KyAgICAgICAgY2Fpcm9fdCogY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogCi0g
ICAgLy8gV2UgaGF2ZSB0byB0aWxlLgotICAgIGNhaXJvX3QqIGNvbnRleHQgPSBjdHh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY2Fpcm9fc2F2ZShjb250ZXh0KTsKIAotICAgIGNhaXJv
X3NhdmUoY29udGV4dCk7CisgICAgICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9u
LgorICAgICAgICBzZXRDb21wb3NpdGluZ09wZXJhdGlvbihjb250ZXh0LCBvcCwgZnJhbWVIYXNB
bHBoYUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKTsKIAotICAgIC8vIFNldCB0aGUgY29tcG9zaXRp
bmcgb3BlcmF0aW9uLgotICAgIHNldENvbXBvc2l0aW5nT3BlcmF0aW9uKGNvbnRleHQsIG9wLCBm
cmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgICAgICBjYWlyb190cmFu
c2xhdGUoY29udGV4dCwgZHN0VGlsZVJlY3QueCgpLCBkc3RUaWxlUmVjdC55KCkpOworICAgICAg
ICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3Vy
ZmFjZShpbWFnZSk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAm
bWF0KTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VY
VEVORF9SRVBFQVQpOwogCi0gICAgY2Fpcm9fdHJhbnNsYXRlKGNvbnRleHQsIGRzdFRpbGVSZWN0
LngoKSwgZHN0VGlsZVJlY3QueSgpKTsKLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBj
YWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShpbWFnZSk7Ci0gICAgY2Fpcm9fcGF0dGVy
bl9zZXRfbWF0cml4KHBhdHRlcm4sICZtYXQpOwotICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVu
ZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKLQotICAgIC8vIERyYXcgdGhlIGltYWdl
LgotICAgIGNhaXJvX3NldF9zb3VyY2UoY29udGV4dCwgcGF0dGVybik7Ci0gICAgY2Fpcm9fcmVj
dGFuZ2xlKGNvbnRleHQsIHNyY1gsIHNyY1ksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWln
aHQoKSk7Ci0gICAgY2Fpcm9fZmlsbChjb250ZXh0KTsKLSAgICBjYWlyb19yZXN0b3JlKGNvbnRl
eHQpOwotCisgICAgICAgIC8vIERyYXcgdGhlIGltYWdlLgorICAgICAgICBjYWlyb19zZXRfc291
cmNlKGNvbnRleHQsIHBhdHRlcm4pOworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwg
c3JjWCwgc3JjWSwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAg
Y2Fpcm9fZmlsbChjb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsKKyAg
ICB9CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9j
YWlyby9QYXR0ZXJuQ2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJv
L1BhdHRlcm5DYWlyby5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9Q
YXR0ZXJuQ2Fpcm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisJ
CQkJICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgorI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNp
bmNsdWRlIDxtYXRoLmg+CisKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBJ
bWFnZTsKKworY2xhc3MgUGF0dGVybkNhaXJvCit7CisKK3B1YmxpYzoKKworICAgIFBhdHRlcm5D
YWlybyhjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4pOm1fcGF0dGVybihwYXR0ZXJuKSB7fQorCisg
ICAgUGF0dGVybkNhaXJvKEZsb2F0UG9pbnQmIGdyYWRpZW50U3RhcnQKKwkgICAgLCBGbG9hdFBv
aW50JiBncmFkaWVudEVuZAorCSAgICAsIGNvbnN0IFZlY3RvcjxLQ0dyYWRpZW50U3RvcD4mIHN0
b3BzSW4KKwkgICAgLCBmbG9hdCBvcGFjaXR5CisJICAgICwgQWZmaW5lVHJhbnNmb3JtJiBncmFk
aWVudFRyYW5zZm9ybQorCSAgICAsIEtDR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9k
CisJICAgICwgRmxvYXRSZWN0JiBiYm94KTsKKworICAgIFBhdHRlcm5DYWlybyggRmxvYXRQb2lu
dCYgZ3JhZGllbnRDZW50ZXIKKwkgICAgLCBGbG9hdFBvaW50JiBncmFkaWVudEZvY2FsCisJICAg
ICwgZmxvYXQgZ3JhZGllbnRSYWRpdXMKKwkgICAgLCBjb25zdCBWZWN0b3I8S0NHcmFkaWVudFN0
b3A+JiBzdG9wc0luCisJICAgICwgZmxvYXQgb3BhY2l0eQorCSAgICAsIEFmZmluZVRyYW5zZm9y
bSYgZ3JhZGllbnRUcmFuc2Zvcm0KKwkgICAgLCBLQ0dyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVh
ZE1ldGhvZAorCSAgICAsIEFmZmluZVRyYW5zZm9ybSYgZGVzdFRyYW5zZm9ybQorCSAgICAsIEZs
b2F0UmVjdCYgYmJveCk7CisKKyAgICBQYXR0ZXJuQ2Fpcm8oSW1hZ2UqIGltZworCSAgICAsIGZs
b2F0IG9wYWNpdHkKKwkgICAgLCBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybQorCSAg
ICAsIEtDR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKTsKKworICAgIFBhdHRlcm5D
YWlybyhDb2xvciogY29sb3IsZmxvYXQgb3BhY2l0eSk7CisKKyAgICBQYXR0ZXJuQ2Fpcm8oSW50
U2l6ZSBzaXplCisJICAgICwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0KKwkgICAg
LCBLQ0dyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCk7CisKKyAgICB+UGF0dGVybkNh
aXJvKCk7CisKKyAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4oKSB7IHJldHVybiBtX3BhdHRl
cm47IH0KKworcHJpdmF0ZToKKyAgICBjYWlyb19wYXR0ZXJuX3QqIG1fcGF0dGVybjsKKworfTsK
KworfQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5j
cHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9JbWFnZVNvdXJj
ZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQAogCiBJbWFnZVNvdXJj
ZTo6fkltYWdlU291cmNlKCkKIHsKLSAgICBkZWxldGUgbV9kZWNvZGVyOworICAgIGlmKG1fZGVj
b2RlcikKKyAgICAgICAgZGVsZXRlIG1fZGVjb2RlcjsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6
aW5pdGlhbGl6ZWQoKSBjb25zdApAQCAtMTEzLDcgKzExNCw3IEBACiBib29sIEltYWdlU291cmNl
Ojppc1NpemVBdmFpbGFibGUoKQogewogICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIG1fZGVjb2Rlci0+
aXNTaXplQXZhaWxhYmxlKCk7CiB9CkBAIC0xMjEsNyArMTIyLDcgQEAKIEludFNpemUgSW1hZ2VT
b3VyY2U6OnNpemUoKSBjb25zdAogewogICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOworICAgICAgICByZXR1cm4gbV9zaXplOwogCiAgICAgcmV0dXJuIG1fZGVj
b2Rlci0+c2l6ZSgpOwogfQpAQCAtMTQxLDE4ICsxNDIsMTggQEAKIAogTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYg
KCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChtX2RlY29kZXIpIHsKKyAg
ICAgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7CisgICAgICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdC
QTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSR0JB
MzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsK
LSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVFbXB0eSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGVfZm9yX2RhdGEoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlci0+Ynl0ZXMoKS5kYXRh
KCksCisgICAgICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgo
dW5zaWduZWQgY2hhciopYnVmZmVyLT5ieXRlcygpLmRhdGEoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSgpLndpZHRoKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+
aGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemUoKS53aWR0aCgpKjQpOworICAgIH0KKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMixzaXplKCkud2lkdGgoKSxzaXplKCkuaGVpZ2h0
KCkpOwogfQogCiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjgsMjggKzI4
LDQyIEBACiAKICNpZiBQTEFURk9STShDQUlSTykKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENhaXJvLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQYXR0ZXJuQ2Fpcm8uaCIKICNpbmNsdWRlIDxj
YWlyby5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2lmIFdJTjMyCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KICNlbmRpZgorI2lmZGVmIFNWR19T
VVBQT1JUCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZUNhaXJvLmgiCisjZW5kaWYKIAogI2lm
bmRlZiBNX1BJCiAjZGVmaW5lIE1fUEkgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NgogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShHREspCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRm
KHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9f
TElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBu
b3RJbXBsZW1lbnRlZCgpCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlCit7CiBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKCk7CiAgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwogCiAgICAgY2Fp
cm9fdCogY29udGV4dDsKKyAgICBkb3VibGUgYWxwaGE7CisgICAgVmVjdG9yPGZsb2F0PiBsYXll
cnM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0Q29sb3IoY2Fpcm9fdCogY3IsIGNvbnN0
IENvbG9yJiBjb2wpCkBAIC02OSw5ICs4Myw4IEBACiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKLSAgICA6ICBjb250
ZXh0KDApCi17Ci19CisgICAgICAgIDogIGNvbnRleHQoMCkKK3t9CiAKIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCiB7CkBA
IC04MCw4ICs5Myw4IEBACiAKICNpZiBXSU4zMgogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0Nv
bnRleHQoSERDIGRjKQotICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSgpKQotICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCisg
ICAgICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQorICAgICAg
ICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQogewogICAgIGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1cmZhY2VfY3JlYXRlKGRjKTsK
ICAgICBtX2RhdGEtPmNvbnRleHQgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CkBAIC05MCwxMCAr
MTAzLDE0IEBACiAKICNpZiBQTEFURk9STShHREspIHx8IFdJTjMyCiBHcmFwaGljc0NvbnRleHQ6
OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6
IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShu
ZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQorICAgICAgICA6IG1fY29tbW9uKGNy
ZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAgICAgICAgLCBtX2RhdGEobmV3IEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKIHsKICAgICBtX2RhdGEtPmNvbnRleHQgPSBjYWly
b19yZWZlcmVuY2UoY29udGV4dCk7CisvL0ZJWE1FOiBhIGhhY2sgdGlsbCB0aGUgZml4IGZvciBy
ZWxhdGl2ZSBwYXRocyBpcyBjaGVja2VkIGluCisjaWYgUExBVEZPUk0oR0RLKQorICAgIGNhaXJv
X21vdmVfdG8oY29udGV4dCwwLDApOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTIzLDggKzE0
MCw5IEBACiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIAorCiAgICAgY2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWly
b19zYXZlKGNvbnRleHQpOwogICAgIGlmIChmaWxsQ29sb3IoKS5hbHBoYSgpKQogICAgICAgICBm
aWxsUmVjdFNvdXJjZU92ZXIoY29udGV4dCwgcmVjdCwgZmlsbENvbG9yKCkpOwogCkBAIC0xMzYs
NiArMTU0LDcgQEAKICAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY29udGV4dCwgMS4wKTsK
ICAgICAgICAgY2Fpcm9fc3Ryb2tlKGNvbnRleHQpOwogICAgIH0KKyAgICBjYWlyb19yZXN0b3Jl
KGNvbnRleHQpOwogfQogCiAvLyBGSVhNRTogTm93IHRoYXQgdGhpcyBpcyByZWZhY3RvcmVkLCBp
dCBzaG91bGQgYmUgc2hhcmVkIGJ5IGFsbCBjb250ZXh0cy4KQEAgLTE0OSwyMCArMTY4LDE4IEBA
CiAgICAgICAgIGlmIChwMS54KCkgPT0gcDIueCgpKSB7CiAgICAgICAgICAgICBwMS5zZXRZKHAx
LnkoKSArIHN0cm9rZVdpZHRoKTsKICAgICAgICAgICAgIHAyLnNldFkocDIueSgpIC0gc3Ryb2tl
V2lkdGgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgcDEuc2V0WChwMS54KCkgKyBzdHJva2VXaWR0aCk7CiAgICAgICAgICAgICBwMi5z
ZXRYKHAyLngoKSAtIHN0cm9rZVdpZHRoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAg
IGlmICgoKGludClzdHJva2VXaWR0aCklMikgewogICAgICAgICBpZiAocDEueCgpID09IHAyLngo
KSkgewogICAgICAgICAgICAgLy8gV2UncmUgYSB2ZXJ0aWNhbCBsaW5lLiAgQWRqdXN0IG91ciB4
LgogICAgICAgICAgICAgcDEuc2V0WChwMS54KCkgKyAwLjUpOwogICAgICAgICAgICAgcDIuc2V0
WChwMi54KCkgKyAwLjUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gV2UncmUgYSBob3Jpem9udGFsIGxpbmUuIEFkanVzdCBvdXIg
eS4KICAgICAgICAgICAgIHAxLnNldFkocDEueSgpICsgMC41KTsKICAgICAgICAgICAgIHAyLnNl
dFkocDIueSgpICsgMC41KTsKQEAgLTE4OSw3ICsyMDYsNyBAQAogICAgIEZsb2F0UG9pbnQgcDEg
PSBwb2ludDE7CiAgICAgRmxvYXRQb2ludCBwMiA9IHBvaW50MjsKICAgICBib29sIGlzVmVydGlj
YWxMaW5lID0gKHAxLngoKSA9PSBwMi54KCkpOwotICAgIAorCiAgICAgYWRqdXN0TGluZVRvUGl4
ZWxCb3VuZGVyaWVzKHAxLCBwMiwgd2lkdGgsIHBlblN0eWxlKTsKICAgICBjYWlyb19zZXRfbGlu
ZV93aWR0aChjb250ZXh0LCB3aWR0aCk7CiAKQEAgLTIwNyw5ICsyMjQsOSBAQAogICAgIH0KIAog
ICAgIHNldENvbG9yKGNvbnRleHQsIHBlbigpLmNvbG9yKCkpOwotICAgIAorCiAgICAgY2Fpcm9f
c2V0X2FudGlhbGlhcyhjb250ZXh0LCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Ci0gICAgCisKICAg
ICBpZiAocGF0V2lkdGgpIHsKICAgICAgICAgLy8gRG8gYSByZWN0IGZpbGwgb2Ygb3VyIGVuZHBv
aW50cy4gIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSB0aGUKICAgICAgICAgLy8gYXBwZWFy
YW5jZSBvZiBiZWluZyBhIGJvcmRlci4gIFdlIHRoZW4gZHJhdyB0aGUgYWN0dWFsIGRvdHRlZC9k
YXNoZWQgbGluZS4KQEAgLTIyMCw3ICsyMzcsNyBAQAogICAgICAgICAgICAgZmlsbFJlY3RTb3Vy
Y2VPdmVyKGNvbnRleHQsIEZsb2F0UmVjdChwMS54KCktd2lkdGgsIHAxLnkoKS13aWR0aC8yLCB3
aWR0aCwgd2lkdGgpLCBwZW4oKS5jb2xvcigpKTsKICAgICAgICAgICAgIGZpbGxSZWN0U291cmNl
T3Zlcihjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpLCBwMi55KCktd2lkdGgvMiwgd2lkdGgsIHdp
ZHRoKSwgcGVuKCkuY29sb3IoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8g
RXhhbXBsZTogODAgcGl4ZWxzIHdpdGggYSB3aWR0aCBvZiAzMCBwaXhlbHMuCiAgICAgICAgIC8v
IFJlbWFpbmRlciBpcyAyMC4gIFRoZSBtYXhpbXVtIHBpeGVscyBvZiBsaW5lIHdlIGNvdWxkIHBh
aW50CiAgICAgICAgIC8vIHdpbGwgYmUgNTAgcGl4ZWxzLgpAQCAtMjQxLDE2ICsyNTgsMTQgQEAK
ICAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHBh
dHRlcm5PZmZzZXQgKz0gcGF0V2lkdGggLSByZW1haW5kZXI7CiAgICAgICAgICAgICAgICAgICAg
IHBhdHRlcm5PZmZzZXQgKz0gcmVtYWluZGVyLzI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgcGF0dGVybk9mZnNldCA9IHBhdFdpZHRoLzI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmICghZXZlbk51bWJlck9mU2VnbWVudHMpIHsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIWV2ZW5OdW1iZXJPZlNlZ21lbnRzKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmRl
cikKICAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9mZnNldCA9IChwYXRXaWR0aCAtIHJlbWFp
bmRlcikvMjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBk
b3VibGUgZGFzaCA9IHBhdFdpZHRoOwogICAgICAgICBjYWlyb19zZXRfZGFzaChjb250ZXh0LCAm
ZGFzaCwgMSwgcGF0dGVybk9mZnNldCk7CiAgICAgfQpAQCAtMjY3LDcgKzI4Miw3IEBACiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAg
Y2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKICAgICBjYWlyb19zYXZlKGNvbnRl
eHQpOwogICAgIGZsb2F0IHlSYWRpdXMgPSAuNSAqIHJlY3QuaGVpZ2h0KCk7CkBAIC0yODQsNyAr
Mjk5LDcgQEAKICAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAg
IHNldENvbG9yKGNvbnRleHQsIHBlbigpLmNvbG9yKCkpOwogICAgICAgICB1bnNpZ25lZCBwZW5X
aWR0aCA9IHBlbigpLndpZHRoKCk7Ci0gICAgICAgIGlmIChwZW5XaWR0aCA9PSAwKSAKKyAgICAg
ICAgaWYgKHBlbldpZHRoID09IDApCiAgICAgICAgICAgICBwZW5XaWR0aCsrOwogICAgICAgICBj
YWlyb19zZXRfbGluZV93aWR0aChjb250ZXh0LCBwZW5XaWR0aCk7CiAgICAgICAgIGNhaXJvX3N0
cm9rZShjb250ZXh0KTsKQEAgLTI5NiwyMSArMzExLDIxIEBACiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaW50IHggPSByZWN0Lngo
KTsKICAgICBpbnQgeSA9IHJlY3QueSgpOwogICAgIGZsb2F0IHcgPSAoZmxvYXQpcmVjdC53aWR0
aCgpOwogICAgIGZsb2F0IGggPSAoZmxvYXQpcmVjdC5oZWlnaHQoKTsKICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IGggLyB3OwogICAgIGZsb2F0IHJldmVyc2VTY2FsZUZhY3RvciA9IHcgLyBoOwot
ICAgIAorCiAgICAgY2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKLSAgICBpZiAo
cGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7ICAgICAgICAKKyAgICBpZiAocGVuKCkuc3R5
bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgIGZsb2F0IHIgPSB3IC8gMjsKICAgICAgICAg
ZmxvYXQgZmEgPSBzdGFydEFuZ2xlOwogICAgICAgICBmbG9hdCBmYWxlbiA9ICBmYSArIGFuZ2xl
U3BhbjsKICAgICAgICAgY2Fpcm9fYXJjKGNvbnRleHQsIHggKyByLCB5ICsgciwgciwgLWZhICog
TV9QSS8xODAsIC1mYWxlbiAqIE1fUEkvMTgwKTsKLSAgICAgICAgCisKICAgICAgICAgc2V0Q29s
b3IoY29udGV4dCwgcGVuKCkuY29sb3IoKSk7CiAgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRo
KGNvbnRleHQsIHBlbigpLndpZHRoKCkpOwogICAgICAgICBjYWlyb19zdHJva2UoY29udGV4dCk7
CkBAIC0zODIsNyArMzk3LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIGludCByYWRpdXMgPSAo
Zm9jdXNSaW5nV2lkdGgoKSAtIDEpIC8gMjsKICAgICBpbnQgb2Zmc2V0ID0gcmFkaXVzICsgZm9j
dXNSaW5nT2Zmc2V0KCk7Ci0gICAgCisKICAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
ID0gZm9jdXNSaW5nUmVjdHMoKTsKICAgICB1bnNpZ25lZCByZWN0Q291bnQgPSByZWN0cy5zaXpl
KCk7CiAgICAgSW50UmVjdCBmaW5hbEZvY3VzUmVjdDsKQEAgLTM5Myw3ICs0MDgsNyBAQAogICAg
IH0KICAgICAvLyBGSVhNRTogVGhlc2UgcmVjdHMgc2hvdWxkIGJlIHJvdW5kZWQKICAgICBjYWly
b19yZWN0YW5nbGUobV9kYXRhLT5jb250ZXh0LCBmaW5hbEZvY3VzUmVjdC54KCksIGZpbmFsRm9j
dXNSZWN0LnkoKSwgZmluYWxGb2N1c1JlY3Qud2lkdGgoKSwgZmluYWxGb2N1c1JlY3QuaGVpZ2h0
KCkpOwotICAgIAorCiAgICAgLy8gRm9yY2UgdGhlIGFscGhhIHRvIDUwJS4gIFRoaXMgbWF0Y2hl
cyB3aGF0IHRoZSBNYWMgZG9lcyB3aXRoIG91dGxpbmUgcmluZ3MuCiAgICAgQ29sb3IgcmluZ0Nv
bG9yKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIDEyNyk7CiAgICAg
c2V0Q29sb3IobV9kYXRhLT5jb250ZXh0LCByaW5nQ29sb3IpOwpAQCAtNDAxLDEyICs0MTYsMTAg
QEAKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZvY3VzUmluZ0NsaXAoY29uc3QgSW50
UmVjdCYpCi17Ci19Cit7fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJGb2N1c1JpbmdD
bGlwKCkKLXsKLX0KK3t9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQo
Y29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgeU9mZnNldCwgaW50IHdpZHRoLCBib29sIHByaW50
aW5nKQogewpAQCAtNDE4LDcgKzQzMSw3IEBACiAgICAgZHJhd0xpbmUob3JpZ2luLCBlbmRQb2lu
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nKGNv
bnN0IEludFBvaW50JiBwb2ludCwgaW50IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmIHBvaW50LCBp
bnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQpA
QCAtNDQzLDcgKzQ1Niw3IEBACiAgICAgY2Fpcm9fZGV2aWNlX3RvX3VzZXJfZGlzdGFuY2UoY29u
dGV4dCwmeCwmeSk7CiAgICAgcmVzdWx0LnNldFdpZHRoKChmbG9hdCl4KTsKICAgICByZXN1bHQu
c2V0SGVpZ2h0KChmbG9hdCl5KTsKLSAgICByZXR1cm4gcmVzdWx0OyAKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCkBAIC00NTcsMTMgKzQ3MCw1ODYgQEAKICAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7CiAg
ICAgY2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKICAgICBjYWlyb19nZXRfbWF0
cml4KGNvbnRleHQsICZtYXRyaXgpOwotICAgIHJldHVybiBJbnRQb2ludChtYXRyaXgueDAsIG1h
dHJpeC55MCk7CisgICAgcmV0dXJuIEludFBvaW50KChpbnQpbWF0cml4LngwLCAoaW50KW1hdHJp
eC55MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtV
UkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQore30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVXaWR0aChmbG9hdCB3aWR0aCkKIHsKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGggKG1fZGF0
YS0+Y29udGV4dCx3aWR0aCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2Fw
KExpbmVDYXAgbGMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2Fpcm9fbGluZV9jYXBfdCBjYXAgPSBDQUlST19MSU5FX0NBUF9CVVRUOwor
CisgICAgc3dpdGNoIChsYykgeworICAgIGNhc2UgUm91bmRDYXA6CisgICAgICAgIGNhcCA9IENB
SVJPX0xJTkVfQ0FQX1JPVU5EOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNxdWFyZUNhcDoK
KyAgICAgICAgY2FwID0gQ0FJUk9fTElORV9DQVBfU1FVQVJFOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2Fpcm9fc2V0X2xpbmVfY2FwKG1fZGF0YS0+Y29udGV4dCxjYXApOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGopCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX2xpbmVfam9p
bl90IGpvaW4gPSBDQUlST19MSU5FX0pPSU5fTUlURVI7CisKKyAgICBzd2l0Y2ggKGxqKSB7Cisg
ICAgY2FzZSBSb3VuZEpvaW46CisgICAgICAgIGpvaW4gPSBDQUlST19MSU5FX0pPSU5fUk9VTkQ7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmV2ZWxKb2luOgorICAgICAgICBqb2luID0gQ0FJ
Uk9fTElORV9KT0lOX1JPVU5EOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fpcm9fc2V0
X2xpbmVfam9pbihtX2RhdGEtPmNvbnRleHQsam9pbik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQobV9kYXRh
LT5jb250ZXh0LG1pdGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZs
b2F0IGFscGhhKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAvL0ZJWE1FIG1lIHVzZSB0aGlzIGFscGhhIGhvdyA/CisgICAgbV9kYXRhLT5hbHBo
YSA9IGFscGhhOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAg
ICBjYWlyb19vcGVyYXRvcl90IGNvcCA9IENBSVJPX09QRVJBVE9SX0NMRUFSOworCisgICAgLy9u
b3Qgc3VwcG9ydGVkID8KKyAgICAvL2NvcCA9IENBSVJPX09QRVJBVE9SX0RFU1Q7CisgICAgLy9j
b3AgPSBDQUlST19PUEVSQVRPUl9BREQ7CisgICAgLy8gY29wID0gQ0FJUk9fT1BFUkFUT1JfU0FU
VVJBVEU7CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIC8vY2FzZSBDb21wb3NpdGVDbGVh
cjoKKyAgICBjYXNlIENvbXBvc2l0ZUNvcHk6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9S
X1NPVVJDRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgor
ICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9PVkVSOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvbXBvc2l0ZVNvdXJjZUluOgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9JTjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6CisgICAgICAgIGNv
cCA9IENBSVJPX09QRVJBVE9SX09VVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3Np
dGVTb3VyY2VBdG9wOgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9BVE9QOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoKKyAgICAgICAgY29w
ID0gQ0FJUk9fT1BFUkFUT1JfREVTVF9PVkVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENv
bXBvc2l0ZURlc3RpbmF0aW9uSW46CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX0RFU1Rf
SU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQ6Cisg
ICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX0RFU1RfT1VUOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcDoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BF
UkFUT1JfREVTVF9BVE9QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVhPUjoK
KyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfWE9SOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvbXBvc2l0ZVBsdXNEYXJrZXI6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX09W
RVI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlSGlnaGxpZ2h0OgorICAgICAg
ICBjb3AgPSBDQUlST19PUEVSQVRPUl9PVkVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENv
bXBvc2l0ZVBsdXNMaWdodGVyOgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9PVkVSOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLGNvcCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcCA9IHBhdGgucGxhdGZvcm1Q
YXRoKCk7CisgICAgY2Fpcm9fYXBwZW5kX3BhdGgoY3IscCk7CisgICAgY2Fpcm9fY2xpcChjcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNh
aXJvX3NjYWxlKG1fZGF0YS0+Y29udGV4dCxzaXplLndpZHRoKCksc2l6ZS5oZWlnaHQoKSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJv
X3JvdGF0ZShtX2RhdGEtPmNvbnRleHQsYW5nbGVJblJhZGlhbnMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBt
X2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgY2Fpcm9fc2V0X29wZXJh
dG9yKGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcmVjdGFuZ2xlIChjciwg
cmVjdC54KCkscmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fp
cm9fZmlsbCAoY3IpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGZsb2F0IHdpZHRoKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190
KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKworICAgIGlmIChwZW4oKS5zdHlsZSgpICE9IFBlbjo6
Tm9QZW4pIHsKKyAgICAgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgICAgIHNldENvbG9yKGNyLCBw
ZW4oKS5jb2xvcigpKTsKKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByLngoKSwgci55KCks
IHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNy
LHdpZHRoKTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKKyAgICAgICAgY2Fpcm9fcmVzdG9y
ZShjcik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBhbHBoYSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fp
cm9fcHVzaF9ncm91cCAoY3IpOworICAgIG1fZGF0YS0+bGF5ZXJzLmFwcGVuZChhbHBoYSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UgKGNyKTsK
KyAgICBmbG9hdCBhbHBoYSA9IG1fZGF0YS0+bGF5ZXJzLmxhc3QoKTsKKyAgICBtX2RhdGEtPmxh
eWVycy5yZW1vdmVMYXN0KCk7CisgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYSAoY3IsYWxwaGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgd29ybGRNYXRyaXgpCit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7
CisgICAgY2Fpcm9fbWF0cml4X3QgY19tYXRyaXggPSBjYWlyb19tYXRyaXhfdCh3b3JsZE1hdHJp
eCk7CisgICAgY2Fpcm9fdHJhbnNmb3JtKGNyLCZjX21hdHJpeCk7Cit9CisKKworCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KEludFNpemUgY29uc3QmLCBpbnQsIENvbG9yIGNvbnN0
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xlYXJTaGFkb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
SW50U2l6ZSYgdG9wTGVmdCwKKyAgICAgICAgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsY29uc3Qg
SW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpCit7CisgICAg
Ly9GSVhNRTogY2FsbGVkIG9mdGVuCisgICAgLy9ub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYg
cmVjdCwgaW50IHRoaWNrbmVzcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWZk
ZWYgU1ZHX1NVUFBPUlQKK0tSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6
OmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKQoreworICAgIEdyYXBoaWNzQ29udGV4dENh
aXJvKiBjdHggPSBzdGF0aWNfY2FzdDxHcmFwaGljc0NvbnRleHRDYWlybyo+KHRoaXMpOworICAg
IHJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyhjdHgpOworfQorI2VuZGlm
CisKK0dyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgOkdyYXBoaWNzQ29udGV4dChjb250ZXh0
KQoreworICAgIC8vbWFueSBjYWlybyBjYWxscyBkbyBkbyBub3QgZnVuY3Rpb24gY29ycmVjdGx5
CisgICAgLy93aXRob3V0IGEgcGF0aCBmb3IgZXhhbXBsZSB0cmFuc2Zvcm0gbm90IHVzZWQgaW4g
ZHJhd2luZyBwb2ludAorICAgIG1vdmVUbyhGbG9hdFBvaW50KDAuMCwwLjApKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YXBwZW5kKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAg
Ly9GSVhNRTogY2Fpcm8gc2hvdWxkIGhhdmUgYSB3YXkgdG8gZG8gdGhpcworICAgIC8vd2l0aG91
dCBjb3B5aW5nCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcCA9
IHBhdGgucGxhdGZvcm1QYXRoKCk7CisgICAgY2Fpcm9fYXBwZW5kX3BhdGgoY3IscCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsZWFyQ2xpcCgpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRh
LT5jb250ZXh0OworICAgIGNhaXJvX3Jlc2V0X2NsaXAoY3IpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpzZXRGaWxsUnVsZShXaW5kUnVsZSBydWxlKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0
YS0+Y29udGV4dDsKKyAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLHJ1bGUgPT0gUlVMRV9FVkVO
T0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5fT0REIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0RGFzaGVzKGRvdWJsZSogZGFzaGVzLGludCBudW1fZGFzaGVzLGRvdWJsZSBvZmZzZXQp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNh
aXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3NldF9kYXNoKGNyLGRhc2hl
cyxudW1fZGFzaGVzLG9mZnNldCk7CisKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICBjYWlyb190
KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBpZiAocGVu
KCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKQorICAgICAgICBzZXRDb2xvcihjciwgcGVuKCkuY29s
b3IoKSk7CisgICAgcmV0dXJuIGNhaXJvX2luX3N0cm9rZShjciwoZG91YmxlKXAueCgpLChkb3Vi
bGUpcC55KCkpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCitGbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnN0cm9rZUJvdW5kaW5nUmVjdCgpIGNvbnN0Cit7CisgICAgY2Fpcm9f
dCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgZG91YmxlIHgsIHksIHcsIGg7CisgICAgY2Fp
cm9fc3Ryb2tlX2V4dGVudHMoY3IsJngsJnksJncsJmgpOworICAgIHJldHVybiBGbG9hdFJlY3Qo
eCx5LHcsaCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fp
cm9fbWF0cml4X3QgbSA9IChjYWlyb19tYXRyaXhfdCl0cmFuc2Zvcm07CisgICAgY2Fpcm9fc2V0
X21hdHJpeChjciwmbSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRDYWly
bzo6Z2V0Q1RNKCkKK3sKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBj
YWlyb19tYXRyaXhfdCBtYXRyaXg7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwmbWF0cml4KTsK
KyAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKG1hdHJpeCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OnN0cm9rZSgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNh
aXJvX3N0cm9rZShjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGwoKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19maWxsKGNyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0U291cmNlUGF0dGVybihjYWlyb19wYXR0ZXJuX3Qq
IHBhdCkgCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3NldF9zb3VyY2Uo
Y3IscGF0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0U291cmNlUGF0dGVy
bihQYXR0ZXJuQ2Fpcm8mIHBhdCkgCit7CisgICAgc2V0U291cmNlUGF0dGVybihwYXQucGF0dGVy
bigpKTsKK30KKworY2Fpcm9fcGF0dGVybl90KiBHcmFwaGljc0NvbnRleHRDYWlybzo6c291cmNl
UGF0dGVybigpIGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7Cisg
ICAgcmV0dXJuIGNhaXJvX2dldF9zb3VyY2UoY3IpOworfQorCitHcmFwaGljc0NvbnRleHQqIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQoreworICAgIGNhaXJv
X3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZSA9
IGNhaXJvX2dldF90YXJnZXQgKGNyKTsKKyAgICBjYWlyb190KiBuZXdDciA9IGNhaXJvX2NyZWF0
ZShzdXJmYWNlKTsKKyAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dENhaXJvKG5ld0NyKTsK
K30KKworR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjcmVhdGVQ
YXRoR3JhcGhpY3NDb250ZXh0KCkKK3sKKyAgICBzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBwYXRo
U3VyZmFjZTsKKyAgICBpZiAoIXBhdGhTdXJmYWNlKQorICAgICAgICBwYXRoU3VyZmFjZSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BOCwxLDEpOworICAgIGNhaXJv
X3QqIGNyID0gY2Fpcm9fY3JlYXRlKHBhdGhTdXJmYWNlKTsKKyAgICByZXR1cm4gbmV3IEdyYXBo
aWNzQ29udGV4dENhaXJvKGNyKTsKK30KKworR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpjcmVhdGVDb250ZXh0Rm9ySW1hZ2UoSW1hZ2UqIGltYWdlLCBzaXplX3Qg
ZnJhbWVJbmRleCkKK3sKKyAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gaW1hZ2UtPmZy
YW1lQXRJbmRleChmcmFtZUluZGV4KTsKKyAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUo
c3VyZmFjZSk7CisgICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oY3IpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclBhdGgoKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0
YS0+Y29udGV4dDsKKyAgICBjYWlyb19uZXdfcGF0aChjcik7Cit9CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmlzUGF0aEVtcHR5KCkgY29uc3QKK3sKKyAgICBjYWlyb190KiBjciA9IG1f
ZGF0YS0+Y29udGV4dDsKKyAgICAvL2lmL3doZW4gdGhlIHBhdGNoIHRvIGdldCBjdXJyZW50IHB0
IHJldHVybiBzdGF0dXMgaXMgYXBwbGllZAorICAgIC8vcmV0dXJuIGNhaXJvX2dldF9jdXJyZW50
X3BvaW50KGNyLCZkeCwmZHkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9k
YXRhLT5jb250ZXh0OworICAgIGNhaXJvX21vdmVfdG8oY3IsIHAueCgpLCBwLnkoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBw
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBj
YWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19saW5lX3RvKGNyLCBwLngo
KSwgcC55KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9f
cmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFkZFF1YWRDdXJ2ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJv
X3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGRvdWJsZSB4LCB5OworICAgIGRvdWJsZSB4
MSA9IGNvbnRyb2xQb2ludC54KCk7CisgICAgZG91YmxlIHkxID0gY29udHJvbFBvaW50LnkoKTsK
KyAgICBkb3VibGUgeDIgPSBwb2ludC54KCk7CisgICAgZG91YmxlIHkyID0gcG9pbnQueSgpOwor
ICAgIGNhaXJvX2dldF9jdXJyZW50X3BvaW50IChjciwgJngsICZ5KTsKKyAgICBjYWlyb19jdXJ2
ZV90byAoY3IsCisgICAgICAgICAgICAgICAgICAgIHggICsgMi4wLzMuMCAqICh4MSAtIHgpLCAg
eSAgKyAyLjAvMy4wICogKHkxIC0geSksCisgICAgICAgICAgICAgICAgICAgIHgyICsgMi4wLzMu
MCAqICh4MSAtIHgyKSwgeTIgKyAyLjAvMy4wICogKHkxIC0geTIpLAorICAgICAgICAgICAgICAg
ICAgICB4MiwgeTIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRCZXppZXJD
dXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IGNvbnRyb2xQb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDMpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX2N1cnZlX3RvKGNyLGNvbnRyb2xQb2ludDEu
eCgpLCBjb250cm9sUG9pbnQxLnkoKSwKKyAgICAgICAgICAgICAgICAgICBjb250cm9sUG9pbnQy
LngoKSwgY29udHJvbFBvaW50Mi55KCksY29udHJvbFBvaW50My54KCksIGNvbnRyb2xQb2ludDMu
eSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YWRkQXJjKGNvbnN0IEZsb2F0
UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhLCBmbG9hdCBlYSwgYm9vbCBjbG9ja3dpc2UpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJv
X3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGlmIChjbG9ja3dpc2UpCisgICAgICAgIGNh
aXJvX2FyYyhjcixwLngoKSxwLnkoKSxyLHNhLGVhKTsKKyAgICBlbHNlCisgICAgICAgIGNhaXJv
X2FyY19uZWdhdGl2ZShjcixwLngoKSxwLnkoKSxyLHNhLGVhKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAg
IC8vRklYTUU6IGNhaXJvX2FyY190byBub3QgeWV0IGluIGNhaXJvIHNlZSBjYWlyby5oCisgICAg
Ly9jYWlyb19hcmNfdG8oY3IscDEueCgpLHAxLnkoKSxwMi54KCkscDIueSgpKTsKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAg
Y2Fpcm9fc2F2ZShjcik7CisgICAgZmxvYXQgeVJhZGl1cyA9IC41ICogcmVjdC5oZWlnaHQoKTsK
KyAgICBmbG9hdCB4UmFkaXVzID0gLjUgKiByZWN0LndpZHRoKCk7CisgICAgY2Fpcm9fdHJhbnNs
YXRlKGNyLCByZWN0LngoKSArIHhSYWRpdXMsIHJlY3QueSgpICsgeVJhZGl1cyk7CisgICAgY2Fp
cm9fc2NhbGUoY3IsIHhSYWRpdXMsIHlSYWRpdXMpOworICAgIGNhaXJvX2FyYyhjciwgMC4sIDAu
LCAxLiwgMC4sIDIgKiBNX1BJKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNv
bnRleHQ7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjcik7Cit9CisKKworRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dENhaXJvOjpib3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIGRvdWJsZSB4LCB5
LCB3LCBoOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX2Zp
bGxfZXh0ZW50cyhjciwmeCwmeSwmdywmaCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCh4LHksdyxo
KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y29udGFpbnMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY3IgPSBt
X2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fZmlsbF9ydWxlX3QgY3VyID0gY2Fpcm9fZ2V0X2Zp
bGxfcnVsZShjcik7CisgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjcixydWxlID09IFJVTEVfRVZF
Tk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6CisgICAgICAgICAgICAgICAgICAgICAg
ICBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CisgICAgYm9vbCBjb250YWlucyA9ICBjYWlyb19p
bl9maWxsKGNyLChkb3VibGUpcG9pbnQueCgpLChkb3VibGUpcG9pbnQueSgpKTsKKyAgICBjYWly
b19zZXRfZmlsbF9ydWxlKGNyLGN1cik7CisgICAgcmV0dXJuIGNvbnRhaW5zOworfQorCitQbGF0
Zm9ybVBhdGgqIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybVBhdGgoKSBjb25zdAorewor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIHJldHVybiBjYWlyb19jb3B5
X3BhdGgoY3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseSh2b2lkKiBp
bmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdAoreworICAgIGludCBpOwor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcGF0
aCA9ICBjYWlyb19jb3B5X3BhdGggKGNyKTsKKyAgICBjYWlyb19wYXRoX2RhdGFfdCogZGF0YTsK
KyAgICBQYXRoRWxlbWVudCBwZWxlbWVudDsKKyAgICBGbG9hdFBvaW50IHBvaW50c1szXTsKKyAg
ICBwZWxlbWVudC5wb2ludHMgPSBwb2ludHM7CisKKyAgICBmb3IgKGk9MDsgaSA8IHBhdGgtPm51
bV9kYXRhOyBpICs9IHBhdGgtPmRhdGFbaV0uaGVhZGVyLmxlbmd0aCkgeworICAgICAgICBkYXRh
ID0gJnBhdGgtPmRhdGFbaV07CisgICAgICAgIHN3aXRjaCAoZGF0YS0+aGVhZGVyLnR5cGUpIHsK
KyAgICAgICAgY2FzZSBDQUlST19QQVRIX01PVkVfVE86CisgICAgICAgICAgICBwZWxlbWVudC50
eXBlID0gUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50
c1swXSA9IEZsb2F0UG9pbnQoZGF0YVsxXS5wb2ludC54LGRhdGFbMV0ucG9pbnQueSk7CisgICAg
ICAgICAgICBmdW5jdGlvbihpbmZvLCAmcGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ0FJUk9fUEFUSF9MSU5FX1RPOgorICAgICAgICAgICAgcGVsZW1lbnQudHlw
ZSA9IFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ7CisgICAgICAgICAgICBwZWxlbWVudC5wb2lu
dHNbMF0gPSBGbG9hdFBvaW50KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOworICAg
ICAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENBSVJPX1BBVEhfQ1VSVkVfVE86CisgICAgICAgICAgICBwZWxlbWVudC50
eXBlID0gUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ7CisgICAgICAgICAgICBwZWxlbWVudC5w
b2ludHNbMF0gPSBGbG9hdFBvaW50KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOwor
ICAgICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzFdID0gRmxvYXRQb2ludChkYXRhWzJdLnBvaW50
LngsZGF0YVsyXS5wb2ludC55KTsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1syXSA9IEZs
b2F0UG9pbnQoZGF0YVszXS5wb2ludC54LGRhdGFbM10ucG9pbnQueSk7CisgICAgICAgICAgICBm
dW5jdGlvbihpbmZvLCAmcGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ0FJUk9fUEFUSF9DTE9TRV9QQVRIOgorICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBh
dGhFbGVtZW50Q2xvc2VTdWJwYXRoOworICAgICAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVt
ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3Bh
dGhfZGVzdHJveSAocGF0aCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRDYWlybzo6cGF0
aERlYnVnU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgc3RyaW5nPSIiOworICAgIGludCBp
OworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAq
cGF0aCA9ICBjYWlyb19jb3B5X3BhdGggKGNyKTsKKyAgICBjYWlyb19wYXRoX2RhdGFfdCogZGF0
YTsKKyAgICBpZiAocGF0aC0+bnVtX2RhdGEgPT0gMCkKKyAgICAgICAgc3RyaW5nID0gIkVNUFRZ
IjsKKyAgICBmb3IgKGk9MDsgaSA8IHBhdGgtPm51bV9kYXRhOyBpICs9IHBhdGgtPmRhdGFbaV0u
aGVhZGVyLmxlbmd0aCkgeworICAgICAgICBkYXRhID0gJnBhdGgtPmRhdGFbaV07CisgICAgICAg
IHN3aXRjaCAoZGF0YS0+aGVhZGVyLnR5cGUpIHsKKyAgICAgICAgY2FzZSBDQUlST19QQVRIX01P
VkVfVE86CisgICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nOjpzcHJpbnRmKCJNICUuMmYsJS4y
ZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0ucG9pbnQu
eCwgZGF0YVsxXS5wb2ludC55KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENB
SVJPX1BBVEhfTElORV9UTzoKKyAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmc6OnNwcmludGYo
IkwgJS4yZiwlLjJmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVsxXS5wb2ludC54LCBkYXRhWzFdLnBvaW50LnkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ0FJUk9fUEFUSF9DVVJWRV9UTzoKKyAgICAgICAgICAgIHN0cmluZyArPSBTdHJp
bmc6OnNwcmludGYoIkMgJS4yZiwlLjJmLCUuMmYsJS4yZiwlLjJmLCUuMmYiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdLnBvaW50LngsIGRhdGFbMV0ucG9p
bnQueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXS5wb2lu
dC54LCBkYXRhWzJdLnBvaW50LnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFbM10ucG9pbnQueCwgZGF0YVszXS5wb2ludC55KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENBSVJPX1BBVEhfQ0xPU0VfUEFUSDoKKyAgICAgICAgICAgIHN0cmlu
ZyArPSAiWCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYWly
b19wYXRoX2Rlc3Ryb3kgKHBhdGgpOworICAgIHJldHVybiBzdHJpbmc7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JNKENBSVJPKQorLy8gdmltOiB0cz00
IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAg
ICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAg
ICAgICAgICAgICAgIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKwkJCQkgIDIwMDYgTWljaGFl
bCBFbW1lbCA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdHRlcm5D
YWlyby5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl
IDxtYXRoLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxDb2xvckFycmF5KGNhaXJvX3BhdHRlcm5fdCAq
cGF0dGVybiwgY29uc3QgVmVjdG9yPEtDR3JhZGllbnRTdG9wPiYgc3RvcHMsIGZsb2F0IG9wYWNp
dHkpCit7CisJZG91YmxlIHIsIGcsIGIsIGE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0b3BzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBvZmZzZXQgPSAoZG91YmxlKXN0
b3BzW2ldLmZpcnN0OworICAgICAgICBDb2xvciBjb2xvciA9IHN0b3BzW2ldLnNlY29uZDsKKwkJ
Y29sb3IuZ2V0UkdCQShyLGcsYixhKTsKKyAgICAgICAJYSA9IGEqb3BhY2l0eTsgCisJCWNhaXJv
X3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJuLG9mZnNldCxyLGcsYixhKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcE9mZnNldChjb25zdCBLQ0dy
YWRpZW50U3RvcCYgZmlyc3QsIGNvbnN0IEtDR3JhZGllbnRTdG9wJiBzZWNvbmQpCit7CisgICAg
cmV0dXJuIGZpcnN0LmZpcnN0IDwgc2Vjb25kLmZpcnN0OworfQorCisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBzZXRUcmFuc0FuZFJlcGVhdChjYWlyb19wYXR0ZXJuX3QgKnBhdHRlcm4sCisJQWZmaW5l
VHJhbnNmb3JtJiB0cmFucyxLQ0dyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCApCit7
CisgICAgaWYgKHNwcmVhZE1ldGhvZCA9PSBTUFJFQURNRVRIT0RfUkVQRUFUKSB7CisJCWNhaXJv
X3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLENBSVJPX0VYVEVORF9SRVBFQVQpOworICAgIH0g
ZWxzZSBpZiAoc3ByZWFkTWV0aG9kID09IFNQUkVBRE1FVEhPRF9SRUZMRUNUKSB7CisJCWNhaXJv
X3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLENBSVJPX0VYVEVORF9SRUZMRUNUKTsKKyAgICB9
IGVsc2UgeworCQljYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybixDQUlST19FWFRFTkRf
UEFEKTsKKyAgICB9CisJY2Fpcm9fbWF0cml4X3QgbT0gKGNhaXJvX21hdHJpeF90KXRyYW5zOwor
CWNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCZtKTsKK30KKworCitQYXR0ZXJuQ2Fp
cm86OlBhdHRlcm5DYWlybyhGbG9hdFBvaW50JiBncmFkaWVudFN0YXJ0CisJLCBGbG9hdFBvaW50
JiBncmFkaWVudEVuZAorCSwgY29uc3QgVmVjdG9yPEtDR3JhZGllbnRTdG9wPiYgc3RvcHNJbgor
CSwgZmxvYXQgb3BhY2l0eQorCSwgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFRyYW5zZm9ybQor
CSwgS0NHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QKKwksIEZsb2F0UmVjdCYgYmJv
eCkKK3sKKyAgICBkb3VibGUgeDEsIHgyLCB5MSwgeTI7CisKKwlWZWN0b3I8S0NHcmFkaWVudFN0
b3A+IHN0b3BzID0gc3RvcHNJbjsKKyAJc3RkOjpzb3J0KHN0b3BzLmJlZ2luKCksc3RvcHMuZW5k
KCksIGNvbXBhcmVTdG9wT2Zmc2V0KTsKKworCS8vRklYTUU6IGNvcGllZCBmcm9tIHF0CisgICAg
aWYgKCFiYm94LmlzRW1wdHkoKSkgeworICAgICAgICB4MSA9IGRvdWJsZShiYm94LngoKSkgKyAo
ZG91YmxlKGdyYWRpZW50U3RhcnQueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lkdGgoKSkp
OworICAgICAgICB5MSA9IGRvdWJsZShiYm94LnkoKSkgKyAoZG91YmxlKGdyYWRpZW50U3RhcnQu
eSgpIC8gMTAwLjApICogZG91YmxlKGJib3guaGVpZ2h0KCkpKTsKKyAgICAgICAgeDIgPSBkb3Vi
bGUoYmJveC53aWR0aCgpKSArIChkb3VibGUoZ3JhZGllbnRFbmQueCgpIC8gMTAwLjApICAqIGRv
dWJsZShiYm94LndpZHRoKCkpKTsKKyAgICAgICAgeTIgPSBkb3VibGUoYmJveC5oZWlnaHQoKSkg
KyAoZG91YmxlKGdyYWRpZW50RW5kLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgp
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeDEgPSBncmFkaWVudFN0YXJ0LngoKTsKKyAgICAg
ICAgeTEgPSBncmFkaWVudFN0YXJ0LnkoKTsKKyAgICAgICAgeDIgPSBncmFkaWVudEVuZC54KCk7
CisgICAgICAgIHkyID0gZ3JhZGllbnRFbmQueSgpOworICAgIH0KKworCW1fcGF0dGVybiA9IGNh
aXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhciAoeDEseTEseDIseTIpOworICAgIGZpbGxDb2xvckFy
cmF5KG1fcGF0dGVybixzdG9wcyxvcGFjaXR5KTsKKwlzZXRUcmFuc0FuZFJlcGVhdChtX3BhdHRl
cm4sZ3JhZGllbnRUcmFuc2Zvcm0sc3ByZWFkTWV0aG9kKTsKK30KKworUGF0dGVybkNhaXJvOjpQ
YXR0ZXJuQ2Fpcm8oIEZsb2F0UG9pbnQmIGdyYWRpZW50Q2VudGVyCisJLCBGbG9hdFBvaW50JiBn
cmFkaWVudEZvY2FsCisJLCBmbG9hdCBncmFkaWVudFJhZGl1cworCSwgY29uc3QgVmVjdG9yPEtD
R3JhZGllbnRTdG9wPiYgc3RvcHNJbgorCSwgZmxvYXQgb3BhY2l0eQorCSwgQWZmaW5lVHJhbnNm
b3JtJiBncmFkaWVudFRyYW5zZm9ybQorCSwgS0NHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRN
ZXRob2QKKwksIEFmZmluZVRyYW5zZm9ybSYgZGVzdFRyYW5zZm9ybQorCSwgRmxvYXRSZWN0JiBi
Ym94KQoreworCisgICAgZG91YmxlIGN4LCBmeCwgY3ksIGZ5LCByOworCisJVmVjdG9yPEtDR3Jh
ZGllbnRTdG9wPiBzdG9wcyA9IHN0b3BzSW47CisgCXN0ZDo6c29ydChzdG9wcy5iZWdpbigpLHN0
b3BzLmVuZCgpLCBjb21wYXJlU3RvcE9mZnNldCk7CisKKwkvL1hYWCBGSVhNRTogdGhpcyBpcyBw
cm9iYWJseSBhbGwgd3JvbmcgY29waWVkIGZyb20gcXQKKyAgICBpZiAoIWJib3guaXNFbXB0eSgp
KSB7CisgICAgICAgIGN4ID0gZG91YmxlKGJib3gueCgpKSArIChkb3VibGUoZ3JhZGllbnRDZW50
ZXIueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lkdGgoKSkpOworICAgICAgICBjeSA9IGRv
dWJsZShiYm94LnkoKSkgKyAoZG91YmxlKGdyYWRpZW50Q2VudGVyLnkoKSAvIDEwMC4wKSAqIGRv
dWJsZShiYm94LmhlaWdodCgpKSk7CisgICAgICAgIGZ4ID0gZG91YmxlKGJib3gud2lkdGgoKSkg
KyAoZG91YmxlKGdyYWRpZW50Rm9jYWwueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lkdGgo
KSkpIC0gY3g7CisgICAgICAgIGZ5ID0gZG91YmxlKGJib3guaGVpZ2h0KCkpICsgKGRvdWJsZShn
cmFkaWVudEZvY2FsLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSkgLSBjeTsK
KyAgICAgICAgciA9IGRvdWJsZShncmFkaWVudFJhZGl1cy8gMTAwLjApICogKHNxcnQocG93KGJi
b3gud2lkdGgoKSwgMikgKyBwb3coYmJveC5oZWlnaHQoKSwgMikpKTsKKworICAgICAgICBmbG9h
dCB3aWR0aCA9IGJib3gud2lkdGgoKTsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gYmJveC5oZWln
aHQoKTsKKworICAgICAgICBpbnQgZGlmZiA9IGludCh3aWR0aCAtIGhlaWdodCk7IC8vIGFsbG93
IHNsaWdodCB0b2xlcmFuY2UKKyAgICAgICAgaWYgKCEoZGlmZiA+IC0yICYmIGRpZmYgPCAyKSkg
eworICAgICAgICAgICAgLy8gbWFrZSBlbGxpcHRpY2FsIG9yIGNpcmN1bGFyIGRlcGVuZGluZyBv
biBiYm94IGFzcGVjdCByYXRpbworICAgICAgICAgICAgZmxvYXQgcmF0aW9YID0gKHdpZHRoIC8g
aGVpZ2h0KTsKKyAgICAgICAgICAgIGZsb2F0IHJhdGlvWSA9IChoZWlnaHQgLyB3aWR0aCk7Cisg
ICAgICAgICAgICBkZXN0VHJhbnNmb3JtLnNjYWxlKCh3aWR0aCA+IGhlaWdodCkgPyAxIDogcmF0
aW9YLCAod2lkdGggPiBoZWlnaHQpID8gcmF0aW9ZIDogMSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBjeCA9IGdyYWRpZW50Q2VudGVyLngoKTsKKyAgICAgICAgY3kgPSBncmFk
aWVudENlbnRlci55KCk7CisKKyAgICAgICAgZnggPSBncmFkaWVudEZvY2FsLngoKTsKKyAgICAg
ICAgZnkgPSBncmFkaWVudEZvY2FsLnkoKTsKKworICAgICAgICBmeCAtPSBjeDsKKyAgICAgICAg
ZnkgLT0gY3k7CisKKyAgICAgICAgciA9IGdyYWRpZW50UmFkaXVzOworICAgIH0KKworICAgIGlm
IChzcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KSA+IHIpIHsKKyAgICAgICAgLy8gU3BlYzogSWYgKGZ4
LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5KSBhbmQgciwg
c2V0IChmeCwgZnkpCisgICAgICAgIC8vIHRvIHRoZSBwb2ludCBvZiBpbnRlcnNlY3Rpb24gb2Yg
dGhlIGxpbmUgdGhyb3VnaCAoZngsIGZ5KSBhbmQgdGhlIGNpcmNsZS4KKyAgICAgICAgZG91Ymxl
IGFuZ2xlID0gYXRhbjIoZnksIGZ4KTsKKyAgICAgICAgZnggPSBpbnQoY29zKGFuZ2xlKSAqIHIp
IC0gMTsKKyAgICAgICAgZnkgPSBpbnQoc2luKGFuZ2xlKSAqIHIpIC0gMTsKKyAgICB9CisKKwlt
X3BhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yYWRpYWwgKGN4LGN5LHIsZngsZnkscik7
CisKKyAgICBmaWxsQ29sb3JBcnJheShtX3BhdHRlcm4sc3RvcHMsb3BhY2l0eSk7CisJc2V0VHJh
bnNBbmRSZXBlYXQobV9wYXR0ZXJuLGdyYWRpZW50VHJhbnNmb3JtLHNwcmVhZE1ldGhvZCk7Cit9
CisKK1BhdHRlcm5DYWlybzo6UGF0dGVybkNhaXJvKEltYWdlKiBpbWcKKwksIGZsb2F0IG9wYWNp
dHkKKwksIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtCisJLCBLQ0dyYWRpZW50U3By
ZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKK3sKKyAgIAljYWlyb19zdXJmYWNlX3QqIHN1cmZhY2Ug
PSBpbWctPmZyYW1lQXRJbmRleCgwKTsKKyAgIAlpZighc3VyZmFjZSkgeworICAgICAgICByZXR1
cm47CisgICAJfQorCQorICAgCW1fcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9z
dXJmYWNlKHN1cmZhY2UpOworCisJaWYoIG9wYWNpdHkgIT0gMS4wMCApIHsKKwkJaW50IHdpZHRo
ID0gaW1nLT5zaXplKCkud2lkdGgoKTsKKwkJaW50IGhlaWdodCA9IGltZy0+c2l6ZSgpLmhlaWdo
dCgpOworICAgIAljYWlyb19zdXJmYWNlX3QqIGlzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMix3aWR0aCxoZWlnaHQpOworCQljYWlyb190KiBj
ciA9IGNhaXJvX2NyZWF0ZShpc3VyZmFjZSk7CisgICAJCWNhaXJvX3NldF9zb3VyY2VfcmdiYShj
ciwxLjAsMS4wLDEuMCwxLjApOworICAgIAljYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsd2lkdGgs
aGVpZ2h0KTsKKyAgICAJY2Fpcm9fZmlsbChjcik7CisgICAJCWNhaXJvX3NldF9zb3VyY2UoY3Is
bV9wYXR0ZXJuKTsKKyAgICAJY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLHdpZHRoLGhlaWdodCk7
CisgICAgCWNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3Isb3BhY2l0eSk7CisgICAgICAgIGNhaXJv
X3BhdHRlcm5fZGVzdHJveShtX3BhdHRlcm4pOworCQljYWlyb19kZXN0cm95KGNyKTsKKwkJbV9w
YXR0ZXJuID0gIGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9zdXJmYWNlKGlzdXJmYWNlKTsKKwkJ
CisJfQorCXNldFRyYW5zQW5kUmVwZWF0KG1fcGF0dGVybixwYXR0ZXJuVHJhbnNmb3JtLHNwcmVh
ZE1ldGhvZCk7Cit9CisKKworUGF0dGVybkNhaXJvOjpQYXR0ZXJuQ2Fpcm8oQ29sb3IqIGNvbG9y
LGZsb2F0IG9wYWNpdHkpCit7CisJZG91YmxlICByLCBnLCBiLCBhOworCWFzc2VydChjb2xvcik7
CisJY29sb3ItPmdldFJHQkEocixnLGIsYSk7CisJLy9GSVhNRTogaXMgdGhpcyB0cnVlID8KKwlh
ID0gYSpvcGFjaXR5OworCW1fcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYmEocixn
LGIsYSk7Cit9CisKK1BhdHRlcm5DYWlybzo6UGF0dGVybkNhaXJvKEludFNpemUgc2l6ZQorCSwg
QWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0KKwksIEtDR3JhZGllbnRTcHJlYWRNZXRo
b2Qgc3ByZWFkTWV0aG9kKQoreworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsc2l6ZS53aWR0aCgpLHNp
emUuaGVpZ2h0KCkpOworICAgIG1fcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9z
dXJmYWNlKHN1cmZhY2UpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKwlz
ZXRUcmFuc0FuZFJlcGVhdChtX3BhdHRlcm4scGF0dGVyblRyYW5zZm9ybSxzcHJlYWRNZXRob2Qp
OworfQorCitQYXR0ZXJuQ2Fpcm86On5QYXR0ZXJuQ2Fpcm8oKQoreworICAgIGlmKG1fcGF0dGVy
bikKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KG1fcGF0dGVybik7CisJbV9wYXR0ZXJu
ID0wOwkKK30KKworfQorLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvUGFnZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGFnZUdk
ay5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGFnZUdkay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIyLDcgQEAKICAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzEsNTEgKzMxLDU3
IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAiRnJhbWVHZGsu
aCIKKyNpbmNsdWRlICJXaW5kb3dHZGsuaCIKIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRv
IHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9f
RklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBHZGtEcmF3YWJsZSogcm9vdFdpbmRvd0ZvckZyYW1l
KEZyYW1lKiBmcmFtZSkKK1BhZ2U6OlBhZ2UoKQorICAgICAgICA6IG1fZnJhbWVDb3VudCgwKQor
ICAgICAgICAsIG1fZHJhZ0NhcmV0Q29udHJvbGxlcigwLCB0cnVlKQogewotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUt
PnZpZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgR2Rr
RHJhd2FibGUqIGRyYXdhYmxlID0gZnJhbWVWaWV3LT5kcmF3YWJsZSgpOwotICAgIGlmICghZHJh
d2FibGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghR0RLX1dJTkRPVyhkcmF3YWJsZSkp
Ci0gICAgICAgIHJldHVybiBkcmF3YWJsZTsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19X
SU5ET1coZHJhd2FibGUpOwotICAgIHJldHVybiBnZGtfd2luZG93X2dldF90b3BsZXZlbCh3aW5k
b3cpOworICAgIGluaXQoKTsKIH0KIAogRmxvYXRSZWN0IFBhZ2U6OndpbmRvd1JlY3QoKSBjb25z
dAogewotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IHJvb3RXaW5kb3dGb3JGcmFtZShtYWlu
RnJhbWUoKSk7Ci0gICAgaWYgKCFkcmF3YWJsZSkKKyAgICBGcmFtZUdkayogZnJhbWUgPSBzdGF0
aWNfY2FzdDxGcmFtZUdkayo+KG1haW5GcmFtZSgpKTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQsIGRl
cHRoOworICAgIEludFJlY3QgcmVjdDsKIAotICAgIGlmICghR0RLX0lTX1dJTkRPVyhkcmF3YWJs
ZSkpIHsKLSAgICAgICAgZ2RrX2RyYXdhYmxlX2dldF9zaXplKGRyYXdhYmxlLCAmd2lkdGgsICZo
ZWlnaHQpOwotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwot
ICAgIH0KLQotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0g
ICAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkod2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdo
dCwgJmRlcHRoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
ICAgIGlmIChmcmFtZS0+d2luZG93KCkpCisgICAgICAgIHJlY3QgPSBmcmFtZS0+d2luZG93KCkt
Pmdlb21ldHJ5KCk7CisgICAgZWxzZQorICAgICAgICByZWN0ID0gZnJhbWUtPnZpZXcoKS0+ZnJh
bWVHZW9tZXRyeSgpOworICAgIHJldHVybiBGbG9hdFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgUGFn
ZTo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgR2RrRHJhd2FibGUq
IGRyYXdhYmxlID0gcm9vdFdpbmRvd0ZvckZyYW1lKG1haW5GcmFtZSgpKTsKLSAgICBpZiAoIWRy
YXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKKyAgICBGcmFtZUdkayogZnJhbWUg
PSBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KG1haW5GcmFtZSgpKTsKKyAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdh
YmxlKTsKLSAgICBnZGtfd2luZG93X21vdmVfcmVzaXplKHdpbmRvdywgKGludClyLngoKSwgKGlu
dClyLnkoKSwgKGludClyLndpZHRoKCksIChpbnQpci5oZWlnaHQoKSk7CisgICAgSW50UmVjdCBy
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyKTsKKyAgICBpZiAoZnJhbWUtPndpbmRvdygpKQorICAg
ICAgICBmcmFtZS0+d2luZG93KCktPnNldEdlb21ldHJ5KHJlY3QpOwogfQogCitib29sIFBhZ2U6
OmNhblJ1bk1vZGFsKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7CiB9Citib29sIFBhZ2U6OmNhblJ1
bk1vZGFsTm93KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGFnZTo6cnVuTW9k
YWwoKQoreworCit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAkocmV2
aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9DdXJzb3JHZGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3ICsyMiw3IEBACiAgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTMyLDE1ICszMiwxOCBAQAogI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCisjZGVmaW5l
IG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVO
VEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18p
OyB9IHdoaWxlKDApCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ3Vyc29yOjpDdXJzb3IoY29u
c3QgQ3Vyc29yJiBvdGhlcikKLSAgICA6IG1faW1wbChvdGhlci5tX2ltcGwpCisgICAgICAgIDog
bV9pbXBsKG90aGVyLm1faW1wbCkKIHsKICAgICBpZiAobV9pbXBsKQogICAgICAgICBnZGtfY3Vy
c29yX3JlZihtX2ltcGwpOwogfQogCisKIEN1cnNvcjo6fkN1cnNvcigpCiB7CiAgICAgaWYgKG1f
aW1wbCkKQEAgLTU2LDcgKzU5LDcgQEAKIH0KIAogQ3Vyc29yOjpDdXJzb3IoR2RrQ3Vyc29yKiBj
KQotICAgIDogbV9pbXBsKGMpCisgICAgICAgIDogbV9pbXBsKGMpCiB7CiAgICAgbV9pbXBsID0g
YzsKICAgICBBU1NFUlQoYyk7CkBAIC0xNzcsNCArMTgwLDEwIEBACiAgICAgcmV0dXJuIGM7CiB9
CiAKK2NvbnN0IEN1cnNvciYgcG9pbnRlckN1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNvciBj
ID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0FSUk9XKTsKKyAgICByZXR1cm4gYzsKIH0KKworfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaE1hcEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1t
ZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTgsMTMgKzgsMTMgQEAKICAqIGFyZSBtZXQ6CiAgKgogICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCiAgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dkay9JbWFnZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvSW1hZ2VHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL0ltYWdlR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEgKzIwLDEyIEBACiAg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpZiBQTEFURk9STShDQUlSTykK
ICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtMzIsMzEgKzMzLDMyIEBACiAjZXJyb3IgIkdESyBwb3J0
IHJlcXVpcmVzIFBMQVRGT1JNKENBSVJPKSIKICNlbmRpZgogCisjZGVmaW5lIG5vdEltcGxlbWVu
dGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAl
c1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDAp
CisKIC8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0CiBWZWN0b3I8
Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0gICAgdm9pZCBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgpCi0gICAgewotICAg
IH0KK3ZvaWQgSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEoKQore30KIAotICAgIHZvaWQgSW1hZ2U6
OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQotICAgIHsKLSAgICB9Cit2b2lkIEltYWdlOjppbnZh
bGlkYXRlUGxhdGZvcm1EYXRhKCkKK3t9CiAKLSAgICBJbWFnZSogSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCi0gICAgewotICAgICAgICBWZWN0b3I8Y2hhcj4g
YXJyID0gbG9hZFJlc291cmNlSW50b0FycmF5KG5hbWUpOwotICAgICAgICBJbWFnZSogaW1nID0g
bmV3IEltYWdlOwotICAgICAgICBpbWctPnNldE5hdGl2ZURhdGEoJmFyciwgdHJ1ZSk7Ci0gICAg
ICAgIHJldHVybiBpbWc7Ci0gICAgfQorSW1hZ2UqIEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZShjb25zdCBjaGFyICpuYW1lKQoreworICAgIFZlY3RvcjxjaGFyPiBhcnIgPSBsb2FkUmVzb3Vy
Y2VJbnRvQXJyYXkobmFtZSk7CisgICAgSW1hZ2UqIGltZyA9IG5ldyBJbWFnZTsKKyAgICBpbWct
PnNldE5hdGl2ZURhdGEoJmFyciwgdHJ1ZSk7CisgICAgcmV0dXJuIGltZzsKK30KIAotICAgIGJv
b2wgSW1hZ2U6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorYm9v
bCBJbWFnZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlw
ZSA9PSAiaW1hZ2UvanBlZyIgfHwgdHlwZSA9PSAiaW1hZ2UvcG5nIikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9XaWRnZXRQcml2YXRlR2RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvV2lkZ2V0UHJpdmF0ZUdkay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvV2lkZ2V0UHJpdmF0ZUdkay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIERvY3VtZW50OworY2xhc3MgV2lkZ2V0OworY2xhc3MgTm9kZTsKK2NsYXNzIFdpZGdl
dENsaWVudDsKK2NsYXNzIFJlc291cmNlTG9hZGVyOworY2xhc3MgRm9ybURhdGE7CitjbGFzcyBG
cmFtZVZpZXc7CisKKworY2xhc3MgV2lkZ2V0UHJpdmF0ZSA6IFJlc291cmNlTG9hZGVyQ2xpZW50
Cit7CisKK3B1YmxpYzoKKyAgICBXaWRnZXRQcml2YXRlKFdpZGdldCopOworICAgIHZpcnR1YWwg
fldpZGdldFByaXZhdGUoKTsKKyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQor
ICAgIHsKKyAgICAgICAgdGhpcy0+bV9uYW1lID0gbmFtZTsKKyAgICB9CisgICAgU3RyaW5nIG5h
bWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbmFtZTsKKyAgICB9CisgICAgdm9pZCBjcmVh
dGVWaWV3KEtVUkwgdXJsKTsKKyAgICBib29sIG9wZW5VUkwoY29uc3QgS1VSTCYgdXJsKTsKKyAg
ICB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgRm9ybURhdGEqIHBvc3REYXRhKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURh
dGEoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUxvYWRlciopOworICAgIHZpcnR1YWwgdm9pZCByZWNl
aXZlZFJlZGlyZWN0KFJlc291cmNlTG9hZGVyKiwgY29uc3QgS1VSTCYpOworICAgIHZpcnR1YWwg
dm9pZCByZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlTG9hZGVyKiwgUGxhdGZvcm1SZXNwb25zZSk7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wRG9jdW1lbnQoKTsKKyNlbmRpZgorcHVi
bGljOgorICAgIFN0cmluZyBtX25hbWU7CisgICAgS1VSTCBtX3VybDsKKyAgICBib29sIHZpc2li
bGU7CisgICAgYm9vbCBlbmFibGVkOworICAgIGJvb2wgc2VsZWN0ZWQ7CisgICAgYm9vbCBoYXNG
b2N1czsKKyAgICBJbnRSZWN0IGdlb21ldHJ5OworICAgIEZvbnQgZm9udDsKKyAgICBXaWRnZXRD
bGllbnQqIGNsaWVudDsKKyAgICBXaWRnZXQqIG1fd2lkZ2V0OworICAgIFdpZGdldCogbV9vd25l
cjsKKyAgICBXaWRnZXQqIG1fcGFyZW50OworICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmlldzsK
KyAgICBib29sIG1faGFzU2Nyb2xsYmFyczsKKyAgICBib29sIG1fYm91bmQ7CisgICAgYm9vbCBt
X2lzRXJyb3I7Cit9OworCit9CisvLyB2aW06IHRzPTQgc3c9NCBldAorCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3
ICszLDcgQEAKICAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCiAgKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM0LDEyICszNCwxNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgeworY2xhc3MgRm9udFBsYXRm
b3JtRGF0YQorewogcHVibGljOgotICAgIGNsYXNzIERlbGV0ZWQge307Ci0gICAgRm9udFBsYXRm
b3JtRGF0YShEZWxldGVkKSA6IG1fcGF0dGVybigoRmNQYXR0ZXJuKiktMSkgeyB9CisgICAgY2xh
c3MgRGVsZXRlZAorICAgICAgICB7fTsKKyAgICBGb250UGxhdGZvcm1EYXRhKERlbGV0ZWQpIDog
bV9wYXR0ZXJuKChGY1BhdHRlcm4qKS0xKQorICAgIHsgfQogCi0gICAgRm9udFBsYXRmb3JtRGF0
YSgpIDogbV9wYXR0ZXJuKDApIHsgfQorICAgIEZvbnRQbGF0Zm9ybURhdGEoKSA6IG1fcGF0dGVy
bigwKQorICAgIHsgfQogCiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAgICAgfkZvbnRQbGF0Zm9ybURhdGEo
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Jyb3dzZXJFeHRlbnNpb25HZGsuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Ccm93c2VyRXh0ZW5zaW9uR2RrLmgJKHJl
dmlzaW9uIDE3Mjk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQnJvd3NlckV4dGVuc2lvbkdk
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw0MSArMjIsMjIgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBCcm93c2VyRXh0ZW5zaW9uR2RrX0hfCi0j
ZGVmaW5lIEJyb3dzZXJFeHRlbnNpb25HZGtfSF8KLQorI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkJyb3dzZXJFeHRlbnNpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBGcmFtZTsKLWNsYXNzIEZyYW1lR2RrOwogCi1jbGFzcyBCcm93c2VyRXh0ZW5zaW9uR2RrIDog
cHVibGljIEJyb3dzZXJFeHRlbnNpb24geworY2xhc3MgQnJvd3NlckV4dGVuc2lvbkdkazogcHVi
bGljIEJyb3dzZXJFeHRlbnNpb24KK3sKIHB1YmxpYzoKLSAgICBCcm93c2VyRXh0ZW5zaW9uR2Rr
KEZyYW1lKik7CisgICAgQnJvd3NlckV4dGVuc2lvbkdkaygpe30KKyAgICB+QnJvd3NlckV4dGVu
c2lvbkdkaygpe30KKyAgICB2b2lkIGNyZWF0ZU5ld1dpbmRvdyhjb25zdCBGcmFtZUxvYWRSZXF1
ZXN0JiwgY29uc3QgV2luZG93RmVhdHVyZXMmLCBGcmFtZSomKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVOZXdXaW5kb3coY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYpOwotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVOZXdXaW5kb3coY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdpbmRv
d0ZlYXR1cmVzJiwgRnJhbWUqJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvblVSTChjb25z
dCBLVVJMJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFR5cGVkSWNvblVSTChjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiB0eXBlKTsKLQotICAgIHZpcnR1YWwgaW50IGdldEhpc3RvcnlMZW5ndGgo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZ29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSk7Ci0gICAg
dmlydHVhbCBLVVJMIGhpc3RvcnlVUkwoaW50IGRpc3RhbmNlKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBjYW5SdW5Nb2RhbCgpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5Nb2RhbE5vdygpOwotICAg
IHZpcnR1YWwgdm9pZCBydW5Nb2RhbCgpOwotCi1wcml2YXRlOgotICAgIEZyYW1lR2RrKiBtX2Zy
YW1lOwogfTsKIAogfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9s
bFZpZXdHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZp
ZXdHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9s
bFZpZXdHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBKdXN0aW4g
SGF5Z29vZCA8amhheWdvb2RAc3BzdS5lZHU+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yMiw5MyArMjEsMTEyIEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNs
dWRlICJXaWRnZXRQcml2YXRlR2RrLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCi0jaW5jbHVkZSAiYXNzZXJ0LmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJjYWlyby5oIgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAKKyNkZWZpbmUgbm90
SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6
ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0g
d2hpbGUoMCkKKworI2RlZmluZSBJTkNSRU1FTlQgMjAKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vL2hhY2sgdG8gc2ltdWxhdGUgc2Nyb2xsIGJhcnMK
LWNvbnN0IGludCBzY3JvbGxiYXJTaXplID0gMTA7Ci0KLWNsYXNzIFNjcm9sbFZpZXc6OlNjcm9s
bFZpZXdQcml2YXRlCitjbGFzcyBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZSA6IHB1Ymxp
YyBTY3JvbGxiYXJDbGllbnQKIHsKIHB1YmxpYzoKICAgICBTY3JvbGxWaWV3UHJpdmF0ZSgpCi0g
ICAgICAgIDogaGFzU3RhdGljQmFja2dyb3VuZChmYWxzZSksIHN1cHByZXNzU2Nyb2xsYmFycyhm
YWxzZSkKLSAgICAgICAgLCB2U2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKSwgaFNjcm9sbGJh
ck1vZGUoU2Nyb2xsYmFyQXV0bykKLSAgICB7IH0KKyAgICAgICAgICAgIDogaGFzU3RhdGljQmFj
a2dyb3VuZChmYWxzZSkKKyAgICAgICAgICAgICwgc3VwcHJlc3NTY3JvbGxiYXJzKGZhbHNlKQor
ICAgICAgICAgICAgLCB2U2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQorICAgICAgICAgICAg
LCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQorICAgICAgICAgICAgLCB2U2Nyb2xsYmFy
KDApCisgICAgICAgICAgICAsIGhTY3JvbGxiYXIoMCkKKyAgICAgICAgICAgICwgdmlldygwKQor
ICAgIHt9CisgICAgdmlydHVhbCB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHt9CisgICAgdmly
dHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQorICAgIHt9CiAKKyAgICB2aXJ0dWFs
IEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKKyAgICB9CisKICAgICBJbnRTaXplIHNjcm9sbE9mZnNldDsKICAgICBJbnRTaXpl
IGNvbnRlbnRzU2l6ZTsKICAgICBib29sIGhhc1N0YXRpY0JhY2tncm91bmQ7CiAgICAgYm9vbCBz
dXBwcmVzc1Njcm9sbGJhcnM7CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyTW9kZTsKICAg
ICBTY3JvbGxiYXJNb2RlIGhTY3JvbGxiYXJNb2RlOwotICAgIEludFJlY3QgdmlzaWJsZUNvbnRl
bnRBcmVhOwotICAgIEludFJlY3Qgdmlld3BvcnRBcmVhOwotICAgIEludFJlY3Qgc2Nyb2xsVmll
d0FyZWE7CisgICAgUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiBoU2Nyb2xsYmFyOworICAgIFJl
ZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gdlNjcm9sbGJhcjsKKyAgICBTY3JvbGxWaWV3KiB2aWV3
OwogfTsKIAotCiBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKLSAgICA6IG1fZGF0YShuZXcgU2Ny
b2xsVmlld1ByaXZhdGUpCi17fQorICAgICAgICA6IG1fZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZh
dGUoKSkKK3sKKyAgICBtX2RhdGEtPnZpZXcgPSB0aGlzOworfQogCiBTY3JvbGxWaWV3Ojp+U2Ny
b2xsVmlldygpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp1
cGRhdGVWaWV3KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KQotewotICAgIEdk
a1JlY3RhbmdsZSByZWN0ID0geyB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0
ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSB9OwotICAgIEdka0RyYXdhYmxlKiBn
ZGtkcmF3YWJsZSA9IFdpZGdldDo6ZHJhd2FibGUoKTsKLSAgICBpZiAoR0RLX0lTX1dJTkRPVyhn
ZGtkcmF3YWJsZSkpIHsKLSAgICAgICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGdk
a2RyYXdhYmxlKTsKLSAgICAgICAgZ2RrX3dpbmRvd19pbnZhbGlkYXRlX3JlY3Qod2luZG93LCAm
cmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChub3cpCi0gICAgICAgICAgICBnZGtfd2luZG93X3By
b2Nlc3NfdXBkYXRlcyh3aW5kb3csIHRydWUpOwotICAgIH0KLX0KLQogdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKIHsK
ICAgICBJbnRSZWN0IGFkanVzdGVkRGlydHlSZWN0KHVwZGF0ZVJlY3QpOwogICAgIGFkanVzdGVk
RGlydHlSZWN0Lm1vdmUoLW1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKLSAgICB1cGRhdGVWaWV3KGFk
anVzdGVkRGlydHlSZWN0LCBub3cpOworICAgIHJlcGFpbnQoYWRqdXN0ZWREaXJ0eVJlY3Qsbm93
KTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZGF0YS0+dmlld3BvcnRBcmVhLndpZHRoKCk7CisgICAgSW50UmVjdCByID0gZW5jbG9z
aW5nSW50UmVjdCh2aXNpYmxlQ29udGVudFJlY3QoKSk7CisgICAgcmV0dXJuIHIud2lkdGgoKTsK
IH0KIAogaW50IFNjcm9sbFZpZXc6OnZpc2libGVIZWlnaHQoKSBjb25zdAogewotICAgIHJldHVy
biBtX2RhdGEtPnZpZXdwb3J0QXJlYS5oZWlnaHQoKTsKKyAgICBJbnRSZWN0IHIgPSBlbmNsb3Np
bmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKTsKKyAgICByZXR1cm4gci5oZWlnaHQoKTsK
IH0KIAotLy8gUmVnaW9uIG9mIHRoZSBjb250ZW50IGN1cnJlbnRseSB2aXNpYmxlIGluIHRoZSB2
aWV3cG9ydCBpbiB0aGUgY29udGVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiBGbG9hdFJl
Y3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKIHsKLSAgICBGbG9hdFJl
Y3QgY29udGVudFJlY3QgPSBGbG9hdFJlY3QobV9kYXRhLT52aWV3cG9ydEFyZWEpOwotICAgIGNv
bnRlbnRSZWN0Lm1vdmUobV9kYXRhLT5zY3JvbGxPZmZzZXQpOwotICAgIHJldHVybiBjb250ZW50
UmVjdDsKKyAgICBJbnRSZWN0IHZpc1JlY3QgPSBJbnRSZWN0KDAsMCx3aWR0aCgpLGhlaWdodCgp
KTsKKyAgICBpZiAobV9kYXRhLT52U2Nyb2xsYmFyKQorICAgICAgICB2aXNSZWN0LnNldFdpZHRo
KHZpc1JlY3Qud2lkdGgoKSAtIG1fZGF0YS0+dlNjcm9sbGJhci0+d2lkdGgoKSk7CisgICAgaWYg
KG1fZGF0YS0+aFNjcm9sbGJhcikKKyAgICAgICAgdmlzUmVjdC5zZXRIZWlnaHQodmlzUmVjdC5o
ZWlnaHQoKSAtIG1fZGF0YS0+aFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAgIHZpc1JlY3QubW92
ZShtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KHZpc1JlY3Qp
OwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldENvbnRlbnRzUG9zKGludCBuZXdYLCBpbnQgbmV3
WSkKQEAgLTExOCw5ICsxMzYsOSBAQAogICAgIHNjcm9sbEJ5KGR4LCBkeSk7CiB9CiAKLXZvaWQg
U2Nyb2xsVmlldzo6cmVzaXplQ29udGVudHMoaW50IHcsIGludCBoKQordm9pZCBTY3JvbGxWaWV3
OjpyZXNpemVDb250ZW50cyhpbnQgdyxpbnQgaCkKIHsKLSAgICBJbnRTaXplIG5ld1NpemUodywg
aCk7CisgICAgSW50U2l6ZSBuZXdTaXplKHcsaCk7CiAgICAgaWYgKG1fZGF0YS0+Y29udGVudHNT
aXplICE9IG5ld1NpemUpIHsKICAgICAgICAgbV9kYXRhLT5jb250ZW50c1NpemUgPSBuZXdTaXpl
OwogICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CkBAIC0xNDcsMjIgKzE2NSwzMyBAQAogICAg
IHJldHVybiBtX2RhdGEtPmNvbnRlbnRzU2l6ZS5oZWlnaHQoKTsKIH0KIAorSW50UG9pbnQgU2Ny
b2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7
CisgICAgSW50UG9pbnQgcmVzdWx0ID0gcG9pbnQ7CisgICAgSW50UG9pbnQgZ2xvYmFsID0gbG9j
YXRpb25JbldpbmRvdygpOworICAgIHJlc3VsdC5tb3ZlKGdsb2JhbC54KCksZ2xvYmFsLnkoKSk7
CisgICAgcmV0dXJuIHJlc3VsdCArIHNjcm9sbE9mZnNldCgpOworfQorCitJbnRQb2ludCBTY3Jv
bGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sK
KyAgICBJbnRQb2ludCByZXN1bHQgPSBwb2ludDsKKyAgICBJbnRQb2ludCBnbG9iYWwgPSBsb2Nh
dGlvbkluV2luZG93KCk7CisgICAgcmVzdWx0Lm1vdmUoLWdsb2JhbC54KCksLWdsb2JhbC55KCkp
OworICAgIHJldHVybiByZXN1bHQgLSBzY3JvbGxPZmZzZXQoKTsKK30KKwogSW50U2l6ZSBTY3Jv
bGxWaWV3OjpzY3JvbGxPZmZzZXQoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEtPnNjcm9s
bE9mZnNldDsKIH0KIAotSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsKCkgY29uc3QK
LXsKLSAgICBJbnRTaXplIGRlbHRhID0gbV9kYXRhLT5jb250ZW50c1NpemUgLSBtX2RhdGEtPnNj
cm9sbE9mZnNldDsKLSAgICBkZWx0YS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0gICAgcmV0dXJu
IGRlbHRhOwogCi19CiB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbEJ5KGludCBkeCwgaW50IGR5KQog
ewogICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0ID0gbV9kYXRhLT5zY3JvbGxPZmZzZXQ7Ci0gICAg
SW50U2l6ZSBtYXhTY3JvbGwgPSBtYXhpbXVtU2Nyb2xsKCk7CisgICAgSW50U2l6ZSBtYXhTY3Jv
bGwgPSBtX2RhdGEtPmNvbnRlbnRzU2l6ZSAtIEludFNpemUodmlzaWJsZVdpZHRoKCksdmlzaWJs
ZUhlaWdodCgpKTsKKyAgICBtYXhTY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogICAgIElu
dFNpemUgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsgSW50U2l6ZShkeCwgZHkpOwog
ICAgIG5ld1Njcm9sbE9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAgICAgbmV3U2Nyb2xs
T2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0LnNocnVua1RvKG1heFNjcm9sbCk7CkBAIC0xNzAsMjcg
KzE5OSwyMyBAQAogICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KSB7CiAg
ICAgICAgIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0OwogICAgICAgICB1
cGRhdGVTY3JvbGxiYXJzKCk7Ci0gICAgICAgIC8vIFNjcm9sbGJhciB1cGRhdGVzIGNhbiBmYWls
LCBzbyB3ZSBjaGVjayB0aGUgZmluYWwgZGVsdGEgYmVmb3JlIHNjcm9sbGluZwotICAgICAgICBJ
bnRTaXplIHNjcm9sbERlbHRhID0gbV9kYXRhLT5zY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQ7
Ci0gICAgICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRTaXplKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmIChpc0ZyYW1lVmlldygpKSB7Ci0gICAgICAgICAgICBGcmFtZVZpZXcq
IGYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlzKTsKLSAgICAgICAgICAgIGYtPmZyYW1l
KCktPnJlbmRlcmVyKCktPmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0Ci0gICAgICAgICAgICAgICAg
KG5ld1Njcm9sbE9mZnNldC53aWR0aCgpLCBuZXdTY3JvbGxPZmZzZXQuaGVpZ2h0KCksIHRydWUs
IHRydWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmKCJGSVhNRSBTY3Jv
bGxWaWV3R2RrIFVuc3VwcG9ydGVkIFNjcm9sbCBvcGVyYXRpb24gISEhXG4iKTsKLSAgICAgICAg
ICAgIHVwZGF0ZVZpZXcobV9kYXRhLT52aWV3cG9ydEFyZWEsIHRydWUpOwotICAgICAgICB9Cisg
ICAgICAgIGZyYW1lVmlldygpLT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKKyAgICAgICAg
cmVwYWludChmYWxzZSk7CiAgICAgfQogfQogCi1TY3JvbGxiYXJNb2RlIFNjcm9sbFZpZXc6OmhT
Y3JvbGxiYXJNb2RlKCkgY29uc3QKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUG9pbnRSZWN1cnNp
dmVseShpbnQgZHgsIGludCBkeSkKIHsKKyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIHBhcmVu
dCgpLT5mcmFtZVZpZXcoKS0+c2Nyb2xsQnkoZHgsZHkpOworfQorCitXZWJDb3JlOjpTY3JvbGxi
YXJNb2RlIFNjcm9sbFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKK3sKICAgICByZXR1cm4g
bV9kYXRhLT5oU2Nyb2xsYmFyTW9kZTsKIH0KIAotU2Nyb2xsYmFyTW9kZSBTY3JvbGxWaWV3Ojp2
U2Nyb2xsYmFyTW9kZSgpIGNvbnN0CitXZWJDb3JlOjpTY3JvbGxiYXJNb2RlIFNjcm9sbFZpZXc6
OnZTY3JvbGxiYXJNb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhLT52U2Nyb2xsYmFy
TW9kZTsKIH0KQEAgLTIyOSwyNSArMjU0LDI3MyBAQAogICAgIG1fZGF0YS0+aGFzU3RhdGljQmFj
a2dyb3VuZCA9IGZsYWc7CiB9CiAKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBj
aGlsZCkKK3sKKyAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMpOworfQorCisKK3ZvaWQgU2Nyb2xs
Vmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKK3sKKyAgICBjaGlsZC0+c2V0UGFyZW50
KDApOworICAgIHJlcGFpbnQoZmFsc2UpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNj
cm9sbGJhcnMoKQoreworICAgIGJvb2wgaGFzVmVydGljYWwgPSBmYWxzZTsKKyAgICBib29sIGhh
c0hvcml6b250YWwgPSBmYWxzZTsKKyAgICBpbnQgcGFzcyA9MDsKKworICAgIC8vbGF5b3V0IGZp
cnN0IGlmIGF1dG8gc2Nyb2xsYmFycyBzY3JvbGwgYmFycworICAgIGlmICghbV9kYXRhLT5zdXBw
cmVzc1Njcm9sbGJhcnMgJiYKKyAgICAgICAgICAgIChtX2RhdGEtPmhTY3JvbGxiYXJNb2RlID09
IFNjcm9sbGJhckF1dG8gfHxtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID09IFNjcm9sbGJhckF1dG8p
KSB7CisgICAgICAgIGZyYW1lVmlldygpLT5sYXlvdXQoKTsKKyAgICB9CisKKyAgICAvL01ha2Ug
dHdvIHBhc3NlcyB0byBkZWFsIHdpdGggaW50ZXIgYmFyIGRlcGVuZGVuY2llcworICAgIGZvciAo
aW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisKKyAgICAgICAgaWYgKG1fZGF0YS0+
c3VwcHJlc3NTY3JvbGxiYXJzIHx8IG1fZGF0YS0+dlNjcm9sbGJhck1vZGUgPT0gU2Nyb2xsYmFy
QWx3YXlzT2ZmKQorICAgICAgICAgICAgaGFzVmVydGljYWwgPSBmYWxzZTsKKyAgICAgICAgZWxz
ZSBpZiAobV9kYXRhLT52U2Nyb2xsYmFyTW9kZSA9PSBTY3JvbGxiYXJBbHdheXNPbikKKyAgICAg
ICAgICAgIGhhc1ZlcnRpY2FsID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9kYXRhLT52U2Ny
b2xsYmFyTW9kZSA9PSBTY3JvbGxiYXJBdXRvKSB7CisgICAgICAgICAgICBpbnQgaCA9IGhhc0hv
cml6b250YWwgPyBoZWlnaHQoKSAtIFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCk6IGhlaWdodCgpOworICAgICAgICAgICAgaGFzVmVydGljYWwgPSAgKGNvbnRl
bnRzSGVpZ2h0KCkgPiBoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2RhdGEtPnN1cHBy
ZXNzU2Nyb2xsYmFycyB8fCBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlID09IFNjcm9sbGJhckFsd2F5
c09mZikKKyAgICAgICAgICAgIGhhc0hvcml6b250YWwgPSBmYWxzZTsKKyAgICAgICAgZWxzZSBp
ZiAobV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9PSBTY3JvbGxiYXJBbHdheXNPbikKKyAgICAgICAg
ICAgIGhhc0hvcml6b250YWwgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX2RhdGEtPmhTY3Jv
bGxiYXJNb2RlID09IFNjcm9sbGJhckF1dG8pIHsKKyAgICAgICAgICAgIGludCB3ID0gaGFzVmVy
dGljYWwgPyB3aWR0aCgpIC0gUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKTogd2lkdGgoKTsKKyAgICAgICAgICAgIGhhc0hvcml6b250YWw9IChjb250ZW50c1dpZHRo
KCkgPiB3KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChoYXNWZXJ0aWNhbCAmJiAhbV9k
YXRhLT52U2Nyb2xsYmFyKSB7CisgICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhciA9IG5ldyBQbGF0
Zm9ybVNjcm9sbGJhcihtX2RhdGEsVmVydGljYWxTY3JvbGxiYXIsUmVndWxhclNjcm9sbGJhcik7
CisgICAgICAgIGFkZENoaWxkKG1fZGF0YS0+dlNjcm9sbGJhci5nZXQoKSk7CisgICAgfSBlbHNl
IGlmICghaGFzVmVydGljYWwgJiYgbV9kYXRhLT52U2Nyb2xsYmFyKSB7CisgICAgICAgIHJlbW92
ZUNoaWxkKG1fZGF0YS0+dlNjcm9sbGJhci5nZXQoKSk7CisgICAgICAgIG1fZGF0YS0+dlNjcm9s
bGJhciA9IDA7CisgICAgfQorCisgICAgaWYgKGhhc0hvcml6b250YWwgJiYgIW1fZGF0YS0+aFNj
cm9sbGJhcikgeworICAgICAgICBtX2RhdGEtPmhTY3JvbGxiYXIgPSBuZXcgUGxhdGZvcm1TY3Jv
bGxiYXIobV9kYXRhLEhvcml6b250YWxTY3JvbGxiYXIsUmVndWxhclNjcm9sbGJhcik7CisgICAg
ICAgIGFkZENoaWxkKG1fZGF0YS0+aFNjcm9sbGJhci5nZXQoKSk7CisgICAgfSBlbHNlIGlmICgh
aGFzSG9yaXpvbnRhbCAmJiBtX2RhdGEtPmhTY3JvbGxiYXIpIHsKKyAgICAgICAgcmVtb3ZlQ2hp
bGQobV9kYXRhLT5oU2Nyb2xsYmFyLmdldCgpKTsKKyAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFy
ID0gMDsKKyAgICB9CisKKyAgICAvL2xheW91dCBzY3JvbGxiYXJzCisgICAgaWYgKG1fZGF0YS0+
dlNjcm9sbGJhcikgeworICAgICAgICBpbnQgaCA9IGhlaWdodCgpOworICAgICAgICBpZiAobV9k
YXRhLT5oU2Nyb2xsYmFyKQorICAgICAgICAgICAgaCAtPSBtX2RhdGEtPnZTY3JvbGxiYXItPndp
ZHRoKCk7CisgICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhci0+c2V0RnJhbWVHZW9tZXRyeShJbnRS
ZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoKCktbV9kYXRhLT52U2Nyb2xsYmFyLT53aWR0aCgpLDAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsbV9kYXRhLT52U2Nyb2xsYmFyLT53aWR0aCgp
LGgpKTsKKyAgICB9CisKKyAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKSB7CisgICAgICAgIGlu
dCB3ID0gd2lkdGgoKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhcikKKyAgICAgICAg
ICAgIHcgLT0gbV9kYXRhLT52U2Nyb2xsYmFyLT53aWR0aCgpOworICAgICAgICBtX2RhdGEtPmhT
Y3JvbGxiYXItPnNldEZyYW1lR2VvbWV0cnkoSW50UmVjdCgwLGhlaWdodCgpIC0gbV9kYXRhLT5o
U2Nyb2xsYmFyLT5oZWlnaHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLHcsbV9kYXRhLT5oU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOworICAgIH0KK30KKwor
UGxhdGZvcm1TY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhclVuZGVyTW91c2UoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQoreworICAgIFBsYXRmb3JtU2Nyb2xsYmFy
KiBiYXIgPSBtX2RhdGEtPmhTY3JvbGxiYXIuZ2V0KCk7CisgICAgaWYgKGJhcikgeworICAgICAg
ICBJbnRQb2ludCBwID0gYmFyLT5sb2NhdGlvbkluV2luZG93KCk7CisgICAgICAgIEludFJlY3Qg
Z2VvbSA9IEludFJlY3QocC54KCkscC55KCksYmFyLT53aWR0aCgpLGJhci0+aGVpZ2h0KCkpOwor
ICAgICAgICBpZiAoZ2VvbS5jb250YWlucyhtb3VzZUV2ZW50LnBvcygpKSkKKyAgICAgICAgICAg
IHJldHVybiBiYXI7CisKKyAgICB9CisgICAgYmFyID0gbV9kYXRhLT52U2Nyb2xsYmFyLmdldCgp
OworICAgIGlmIChiYXIpIHsKKyAgICAgICAgSW50UG9pbnQgcCA9IGJhci0+bG9jYXRpb25Jbldp
bmRvdygpOworICAgICAgICBJbnRSZWN0IGdlb20gPSBJbnRSZWN0KHAueCgpLHAueSgpLGJhci0+
d2lkdGgoKSxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgaWYgKGdlb20uY29udGFpbnMobW91c2VF
dmVudC5wb3MoKSkpCisgICAgICAgICAgICByZXR1cm4gYmFyOworCisgICAgfQorICAgIHJldHVy
biAwOworfQorCitib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QKK3sKKyAgICAvL2Fy
ZSB3ZSB2aXNpYmxlID8KKyAgICAvL2JhZCBtZXRob2QgbmFtZQorICAgIC8vaGlkZGVuIHRhYiBt
aW5pbWl6ZWQgZXRjID8/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6
d2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNv
bnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCit7CisKKyAgICBpZiAoa2V5RXZl
bnQuaXNLZXlVcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTZWxlY3Rpb25Db250cm9sbGVy
KiBjb250cm9sbGVyID0gZnJhbWVWaWV3KCktPmZyYW1lKCktPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KTsKKyAgICBOb2RlKiBzdGFydCA9IGNvbnRyb2xsZXItPnN0YXJ0KCkubm9kZSgpOworICAgIGlm
IChzdGFydCAmJiBzdGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgeworCisgICAgICAgIHN3aXRj
aCAoa2V5RXZlbnQuV2luZG93c0tleUNvZGUoKSkgeworICAgICAgICBjYXNlIFZLX0JBQ0s6Cisg
ICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKGZyYW1lVmlldygpLT5m
cmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZL
X0RFTEVURToKKyAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVz
c2VkKGZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgICAgICBjb250cm9sbGVyLT5tb2RpZnko
U2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTZWxlY3Rpb25Db250cm9sbGVyOjpMRUZULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAgICAgIGNvbnRy
b2xsZXItPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0ZXJHcmFu
dWxhcml0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19VUDoKKyAgICAg
ICAgICAgIGNvbnRyb2xsZXItPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJE
LCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBWS19ET1dOOgorICAgICAgICAgICAgY29udHJvbGxlci0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6Rk9SV0FSRCwgUGFyYWdyYXBoR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRU
ZXh0KGZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLCBrZXlFdmVudC50ZXh0KCksIGZh
bHNlKTsKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVy
OjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OlJJR0hULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisKKyAgICBzd2l0Y2ggKGtleUV2ZW50LldpbmRvd3NLZXlDb2RlKCkp
IHsKKyAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgIHNjcm9sbEJ5KC1JTkNSRU1FTlQsMCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgIHNjcm9sbEJ5KElOQ1JF
TUVOVCwwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19VUDoKKyAgICAgICAgc2Nyb2xs
QnkoMCwtSU5DUkVNRU5UKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19ET1dOOgorICAg
ICAgICBzY3JvbGxCeSgwLElOQ1JFTUVOVCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktf
UFJJT1I6CisgICAgICAgIC8vcmV0dXJuIFNCX1BBR0VVUDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBWS19ORVhUOgorICAgICAgICAvL3JldHVybiBTQl9QQUdFRE9XTjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBWS19IT01FOgorICAgICAgICBpZiAoaXNGcmFtZVZpZXcoKSkgeworICAg
ICAgICAgICAgc2V0Q29udGVudHNQb3MoMCwwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIFZLX0VORDoKKyAgICAgICAgaWYgKGlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAg
ICAgIHNldENvbnRlbnRzUG9zKDAsY29udGVudHNIZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBWS19TUEFDRToKKyAgICAgICAgaWYgKGtleUV2ZW50LnNoaWZ0
S2V5KCkpCisgICAgICAgICAgICBzY3JvbGxCeSgwLC1JTkNSRU1FTlQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzY3JvbGxCeSgwLElOQ1JFTUVOVCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVj
dCYgcikKIHsKLSAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkocik7Ci0gICAgbV9kYXRhLT5z
Y3JvbGxWaWV3QXJlYSA9IEludFJlY3QoMCwgMCwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKLSAg
ICBtX2RhdGEtPnZpZXdwb3J0QXJlYSA9IEludFJlY3QoMCwgMCwgci53aWR0aCgpIC0gc2Nyb2xs
YmFyU2l6ZSwgci5oZWlnaHQoKSAtIHNjcm9sbGJhclNpemUpOworICAgIGlmIChwcml2YXRlRGF0
YSgpLT5nZW9tZXRyeSA9PSByKQorICAgICAgICByZXR1cm47CisgICAgcHJpdmF0ZURhdGEoKS0+
Z2VvbWV0cnkgPSByOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICBEb2N1bWVudCogZG9j
ID0gZnJhbWVWaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKGRvYykgeworICAg
ICAgICBSZW5kZXJWaWV3ICpyb290ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVmlldyo+KGRvYy0+cmVu
ZGVyZXIoKSk7CisgICAgICAgIGlmIChyb290KQorICAgICAgICAgICAgcm9vdC0+c2V0TmVlZHNM
YXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICB9CisgICAgZnJhbWVWaWV3KCktPmxheW91dChm
YWxzZSk7CisgICAgZnJhbWVWaWV3KCktPmxheW91dCh0cnVlKTsKKyAgICBmcmFtZVZpZXcoKS0+
ZnJhbWUoKS0+c2VuZFJlc2l6ZUV2ZW50KCk7CisgICAgZnJhbWVWaWV3KCktPmZyYW1lKCktPnNl
bmRTY3JvbGxFdmVudCgpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnNldERyYXdhYmxlKEdka0Ry
YXdhYmxlKiBnZGtkcmF3YWJsZSkKK3ZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIFdpZGdldDo6c2V0RHJh
d2FibGUoZ2RrZHJhd2FibGUpOwotICAgIGlmICghR0RLX0lTX1dJTkRPVyhnZGtkcmF3YWJsZSkp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJpbWFnZSBzY3JvbGx2aWV3IG5vdCBzdXBwb3J0ZWQiKTsK
KyAgICAvL3N1YndpZGdldHMgY2FuIGNhdXNlIGEgcGFpbnQgYmVmb3JlIHdlIGFyZSBsb2FkZWQK
KyAgICBpZiAoIWZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpIHx8ICFmcmFtZVZpZXco
KS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOworICAg
IEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPXN0YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4dENh
aXJvKj4oY29udGV4dCk7CisgICAgSW50UmVjdCBnZW9tID0gZnJhbWVHZW9tZXRyeSgpOworICAg
IEludFNpemUgb2Zmc2V0ID0gbV9kYXRhLT5zY3JvbGxPZmZzZXQ7CisKKworICAgIC8vZm9yIG5v
dyBubyBvdGhlciBzdWJjbGFzc2VzCisgICAgYXNzZXJ0KGZyYW1lVmlldygpID09IHRoaXMpOwor
ICAgIGN0eC0+c2F2ZSgpOworICAgIEludFJlY3QgZGlydHk9IHJlY3Q7CisgICAgSW50UG9pbnQg
cCA9IGxvY2F0aW9uSW5XaW5kb3coKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnMgPSBjdHgt
PmdldENUTSgpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBJbnRSZWN0KDAsMCx3aWR0aCgp
LGhlaWdodCgpKTsKKyAgICBJbnRSZWN0IHZDUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodmlzaWJs
ZUNvbnRlbnRSZWN0KCkpOworCisgICAgY3R4LT50cmFuc2xhdGUoLW9mZnNldC53aWR0aCgpLC1v
ZmZzZXQuaGVpZ2h0KCkpOworICAgIEludFJlY3QgY2xpcCA9IGVuY2xvc2luZ0ludFJlY3Qodmlz
aWJsZUNvbnRlbnRSZWN0KCkpOworICAgIGN0eC0+Y2xlYXJDbGlwKCk7CisgICAgY3R4LT5jbGlw
KGNsaXApOworICAgIGNhaXJvX3QqIGNyID0gY3R4LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBm
cmFtZVZpZXcoKS0+ZnJhbWUoKS0+cGFpbnQoY3R4LGNsaXApOworICAgIGN0eC0+cmVzdG9yZSgp
OworCisgICAgaWYgKG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKSB7CisgICAgICAgIEludFJlY3QgciA9IG1f
ZGF0YS0+aFNjcm9sbGJhci0+ZnJhbWVHZW9tZXRyeSgpOworICAgICAgICBjdHgtPnNhdmUoKTsK
KyAgICAgICAgY3R4LT5jbGVhckNsaXAoKTsKKyAgICAgICAgY3R4LT50cmFuc2xhdGUoci54KCks
ci55KCkpOworICAgICAgICBjbGlwID0gSW50UmVjdCgwLDAsci53aWR0aCgpLHIuaGVpZ2h0KCkp
OworICAgICAgICBjdHgtPmNsaXAoY2xpcCk7CisgICAgICAgIHRyYW5zID0gY3R4LT5nZXRDVE0o
KTsKKyAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyLT5wYWludChjdHgsY2xpcCk7CisgICAgICAg
IGN0eC0+cmVzdG9yZSgpOwogICAgIH0KLSAgICBHZGtXaW5kb3cqIGZyYW1lID0gR0RLX1dJTkRP
VyhnZGtkcmF3YWJsZSk7Ci0gICAgZ2ludCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aDsKLSAg
ICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShmcmFtZSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQs
ICZkZXB0aCk7Ci0gICAgbV9kYXRhLT5zY3JvbGxWaWV3QXJlYSA9IEludFJlY3QoMCwgMCwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgbV9kYXRhLT52aWV3cG9ydEFyZWEgPSBJbnRSZWN0KDAsIDAsIHdp
ZHRoIC0gc2Nyb2xsYmFyU2l6ZSwgaGVpZ2h0IC0gc2Nyb2xsYmFyU2l6ZSk7CisgICAgaWYgKG1f
ZGF0YS0+dlNjcm9sbGJhcikgeworICAgICAgICBJbnRSZWN0IHIgPSBtX2RhdGEtPnZTY3JvbGxi
YXItPmZyYW1lR2VvbWV0cnkoKTsKKyAgICAgICAgY3R4LT5zYXZlKCk7CisgICAgICAgIGN0eC0+
Y2xlYXJDbGlwKCk7CisgICAgICAgIGN0eC0+dHJhbnNsYXRlKHIueCgpLHIueSgpKTsKKyAgICAg
ICAgY2xpcCA9IEludFJlY3QoMCwwLHIud2lkdGgoKSxyLmhlaWdodCgpKTsKKyAgICAgICAgY3R4
LT5jbGlwKGNsaXApOworICAgICAgICB0cmFucyA9IGN0eC0+Z2V0Q1RNKCk7CisgICAgICAgIG1f
ZGF0YS0+dlNjcm9sbGJhci0+cGFpbnQoY3R4LGNsaXApOworICAgICAgICBjdHgtPnJlc3RvcmUo
KTsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUdk
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNw
cAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250Q2FjaGVHZGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04LDEzICs4LDEzIEBACiAg
KiBhcmUgbWV0OgogICoKICAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgog
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCiAgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgogICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQogICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRApAQCAtMzMsNiArMzMsOCBAQAogCiAjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1
ZGUgPGFzc2VydC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvS2V5RXZlbnRHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0yMiw3ICsyMiw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVk
ZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8YXNz
ZXJ0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNDI0ICs0Miw0NzIgQEAKIHN0
YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZ3VpbnQga2V5Q29kZSkKIHsK
ICAgICBzd2l0Y2ggKGtleUNvZGUpIHsKLSAgICAgICAgY2FzZSBHREtfTWVudToKLSAgICAgICAg
Y2FzZSBHREtfQWx0X0w6Ci0gICAgICAgIGNhc2UgR0RLX0FsdF9SOgotICAgICAgICAgICAgcmV0
dXJuICJBbHQiOwotICAgICAgICBjYXNlIEdES19DbGVhcjoKLSAgICAgICAgICAgIHJldHVybiAi
Q2xlYXIiOwotICAgICAgICBjYXNlIEdES19Eb3duOgotICAgICAgICAgICAgcmV0dXJuICJEb3du
IjsKLSAgICAgICAgICAgIC8vICJFbmQiCi0gICAgICAgIGNhc2UgR0RLX0VuZDoKLSAgICAgICAg
ICAgIHJldHVybiAiRW5kIjsKLSAgICAgICAgICAgIC8vICJFbnRlciIKLSAgICAgICAgY2FzZSBH
REtfSVNPX0VudGVyOgotICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKLSAgICAgICAgICAgIHJl
dHVybiAiRW50ZXIiOwotICAgICAgICBjYXNlIEdES19FeGVjdXRlOgotICAgICAgICAgICAgcmV0
dXJuICJFeGVjdXRlIjsKLSAgICAgICAgY2FzZSBHREtfRjE6Ci0gICAgICAgICAgICByZXR1cm4g
IkYxIjsKLSAgICAgICAgY2FzZSBHREtfRjI6Ci0gICAgICAgICAgICByZXR1cm4gIkYyIjsKLSAg
ICAgICAgY2FzZSBHREtfRjM6Ci0gICAgICAgICAgICByZXR1cm4gIkYzIjsKLSAgICAgICAgY2Fz
ZSBHREtfRjQ6Ci0gICAgICAgICAgICByZXR1cm4gIkY0IjsKLSAgICAgICAgY2FzZSBHREtfRjU6
Ci0gICAgICAgICAgICByZXR1cm4gIkY1IjsKLSAgICAgICAgY2FzZSBHREtfRjY6Ci0gICAgICAg
ICAgICByZXR1cm4gIkY2IjsKLSAgICAgICAgY2FzZSBHREtfRjc6Ci0gICAgICAgICAgICByZXR1
cm4gIkY3IjsKLSAgICAgICAgY2FzZSBHREtfRjg6Ci0gICAgICAgICAgICByZXR1cm4gIkY4IjsK
LSAgICAgICAgY2FzZSBHREtfRjk6Ci0gICAgICAgICAgICByZXR1cm4gIkY5IjsKLSAgICAgICAg
Y2FzZSBHREtfRjEwOgotICAgICAgICAgICAgcmV0dXJuICJGMTAiOwotICAgICAgICBjYXNlIEdE
S19GMTE6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMSI7Ci0gICAgICAgIGNhc2UgR0RLX0YxMjoK
LSAgICAgICAgICAgIHJldHVybiAiRjEyIjsKLSAgICAgICAgY2FzZSBHREtfRjEzOgotICAgICAg
ICAgICAgcmV0dXJuICJGMTMiOwotICAgICAgICBjYXNlIEdES19GMTQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkYxNCI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNToKLSAgICAgICAgICAgIHJldHVybiAi
RjE1IjsKLSAgICAgICAgY2FzZSBHREtfRjE2OgotICAgICAgICAgICAgcmV0dXJuICJGMTYiOwot
ICAgICAgICBjYXNlIEdES19GMTc6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNyI7Ci0gICAgICAg
IGNhc2UgR0RLX0YxODoKLSAgICAgICAgICAgIHJldHVybiAiRjE4IjsKLSAgICAgICAgY2FzZSBH
REtfRjE5OgotICAgICAgICAgICAgcmV0dXJuICJGMTkiOwotICAgICAgICBjYXNlIEdES19GMjA6
Ci0gICAgICAgICAgICByZXR1cm4gIkYyMCI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMToKLSAgICAg
ICAgICAgIHJldHVybiAiRjIxIjsKLSAgICAgICAgY2FzZSBHREtfRjIyOgotICAgICAgICAgICAg
cmV0dXJuICJGMjIiOwotICAgICAgICBjYXNlIEdES19GMjM6Ci0gICAgICAgICAgICByZXR1cm4g
IkYyMyI7Ci0gICAgICAgIGNhc2UgR0RLX0YyNDoKLSAgICAgICAgICAgIHJldHVybiAiRjI0IjsK
LSAgICAgICAgY2FzZSBHREtfSGVscDoKLSAgICAgICAgICAgIHJldHVybiAiSGVscCI7Ci0gICAg
ICAgIGNhc2UgR0RLX0hvbWU6Ci0gICAgICAgICAgICByZXR1cm4gIkhvbWUiOwotICAgICAgICBj
YXNlIEdES19JbnNlcnQ6Ci0gICAgICAgICAgICByZXR1cm4gIkluc2VydCI7Ci0gICAgICAgIGNh
c2UgR0RLX0xlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gIkxlZnQiOwotICAgICAgICBjYXNlIEdE
S19QYWdlX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gIlBhZ2VEb3duIjsKLSAgICAgICAgY2Fz
ZSBHREtfUGFnZV9VcDoKLSAgICAgICAgICAgIHJldHVybiAiUGFnZVVwIjsKLSAgICAgICAgY2Fz
ZSBHREtfUGF1c2U6Ci0gICAgICAgICAgICByZXR1cm4gIlBhdXNlIjsKLSAgICAgICAgY2FzZSBH
REtfMzI3MF9QcmludFNjcmVlbjoKLSAgICAgICAgICAgIHJldHVybiAiUHJpbnRTY3JlZW4iOwot
ICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAgICAgICAgIHJldHVybiAiUmlnaHQiOwotICAg
ICAgICBjYXNlIEdES19TZWxlY3Q6Ci0gICAgICAgICAgICByZXR1cm4gIlNlbGVjdCI7Ci0gICAg
ICAgIGNhc2UgR0RLX1VwOgotICAgICAgICAgICAgcmV0dXJuICJVcCI7Ci0gICAgICAgICAgICAv
LyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDAwN0YuCi0gICAgICAgIGNhc2Ug
R0RLX0RlbGV0ZToKLSAgICAgICAgICAgIHJldHVybiAiVSswMDAwN0YiOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6c3ByaW50ZigiVSslMDZYIiwgdG91cHBl
cihrZXlDb2RlKSk7CisgICAgY2FzZSBHREtfTWVudToKKyAgICBjYXNlIEdES19BbHRfTDoKKyAg
ICBjYXNlIEdES19BbHRfUjoKKyAgICAgICAgcmV0dXJuICJBbHQiOworICAgIGNhc2UgR0RLX0Ns
ZWFyOgorICAgICAgICByZXR1cm4gIkNsZWFyIjsKKyAgICBjYXNlIEdES19Eb3duOgorICAgICAg
ICByZXR1cm4gIkRvd24iOworICAgICAgICAvLyAiRW5kIgorICAgIGNhc2UgR0RLX0VuZDoKKyAg
ICAgICAgcmV0dXJuICJFbmQiOworICAgICAgICAvLyAiRW50ZXIiCisgICAgY2FzZSBHREtfSVNP
X0VudGVyOgorICAgIGNhc2UgR0RLX0tQX0VudGVyOgorICAgICAgICByZXR1cm4gIkVudGVyIjsK
KyAgICBjYXNlIEdES19FeGVjdXRlOgorICAgICAgICByZXR1cm4gIkV4ZWN1dGUiOworICAgIGNh
c2UgR0RLX0YxOgorICAgICAgICByZXR1cm4gIkYxIjsKKyAgICBjYXNlIEdES19GMjoKKyAgICAg
ICAgcmV0dXJuICJGMiI7CisgICAgY2FzZSBHREtfRjM6CisgICAgICAgIHJldHVybiAiRjMiOwor
ICAgIGNhc2UgR0RLX0Y0OgorICAgICAgICByZXR1cm4gIkY0IjsKKyAgICBjYXNlIEdES19GNToK
KyAgICAgICAgcmV0dXJuICJGNSI7CisgICAgY2FzZSBHREtfRjY6CisgICAgICAgIHJldHVybiAi
RjYiOworICAgIGNhc2UgR0RLX0Y3OgorICAgICAgICByZXR1cm4gIkY3IjsKKyAgICBjYXNlIEdE
S19GODoKKyAgICAgICAgcmV0dXJuICJGOCI7CisgICAgY2FzZSBHREtfRjk6CisgICAgICAgIHJl
dHVybiAiRjkiOworICAgIGNhc2UgR0RLX0YxMDoKKyAgICAgICAgcmV0dXJuICJGMTAiOworICAg
IGNhc2UgR0RLX0YxMToKKyAgICAgICAgcmV0dXJuICJGMTEiOworICAgIGNhc2UgR0RLX0YxMjoK
KyAgICAgICAgcmV0dXJuICJGMTIiOworICAgIGNhc2UgR0RLX0YxMzoKKyAgICAgICAgcmV0dXJu
ICJGMTMiOworICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgcmV0dXJuICJGMTQiOworICAgIGNh
c2UgR0RLX0YxNToKKyAgICAgICAgcmV0dXJuICJGMTUiOworICAgIGNhc2UgR0RLX0YxNjoKKyAg
ICAgICAgcmV0dXJuICJGMTYiOworICAgIGNhc2UgR0RLX0YxNzoKKyAgICAgICAgcmV0dXJuICJG
MTciOworICAgIGNhc2UgR0RLX0YxODoKKyAgICAgICAgcmV0dXJuICJGMTgiOworICAgIGNhc2Ug
R0RLX0YxOToKKyAgICAgICAgcmV0dXJuICJGMTkiOworICAgIGNhc2UgR0RLX0YyMDoKKyAgICAg
ICAgcmV0dXJuICJGMjAiOworICAgIGNhc2UgR0RLX0YyMToKKyAgICAgICAgcmV0dXJuICJGMjEi
OworICAgIGNhc2UgR0RLX0YyMjoKKyAgICAgICAgcmV0dXJuICJGMjIiOworICAgIGNhc2UgR0RL
X0YyMzoKKyAgICAgICAgcmV0dXJuICJGMjMiOworICAgIGNhc2UgR0RLX0YyNDoKKyAgICAgICAg
cmV0dXJuICJGMjQiOworICAgIGNhc2UgR0RLX0hlbHA6CisgICAgICAgIHJldHVybiAiSGVscCI7
CisgICAgY2FzZSBHREtfSG9tZToKKyAgICAgICAgcmV0dXJuICJIb21lIjsKKyAgICBjYXNlIEdE
S19JbnNlcnQ6CisgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKKyAgICBjYXNlIEdES19MZWZ0Ogor
ICAgICAgICByZXR1cm4gIkxlZnQiOworICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoKKyAgICAgICAg
cmV0dXJuICJQYWdlRG93biI7CisgICAgY2FzZSBHREtfUGFnZV9VcDoKKyAgICAgICAgcmV0dXJu
ICJQYWdlVXAiOworICAgIGNhc2UgR0RLX1BhdXNlOgorICAgICAgICByZXR1cm4gIlBhdXNlIjsK
KyAgICBjYXNlIEdES18zMjcwX1ByaW50U2NyZWVuOgorICAgICAgICByZXR1cm4gIlByaW50U2Ny
ZWVuIjsKKyAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgcmV0dXJuICJSaWdodCI7CisgICAg
Y2FzZSBHREtfU2VsZWN0OgorICAgICAgICByZXR1cm4gIlNlbGVjdCI7CisgICAgY2FzZSBHREtf
VXA6CisgICAgICAgIHJldHVybiAiVXAiOworICAgICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQg
REVMIGJlY29tZXMgVSswMDAwN0YuCisgICAgY2FzZSBHREtfRGVsZXRlOgorICAgICAgICByZXR1
cm4gIlUrMDAwMDdGIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU3RyaW5nOjpzcHJp
bnRmKCJVKyUwNlgiLCB0b3VwcGVyKGtleUNvZGUpKTsKICAgICB9CiB9CiAKIHN0YXRpYyBpbnQg
d2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBpbnQga2V5Y29kZSkKIHsKICAgICBz
d2l0Y2ggKGtleWNvZGUpIHsKLSAgICAgICAgY2FzZSBHREtfS1BfMDoKLSAgICAgICAgICAgIHJl
dHVybiBWS19OVU1QQUQwOy8vICg2MCkgTnVtZXJpYyBrZXlwYWQgMCBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfS1BfMToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQxOy8vICg2MSkgTnVtZXJp
YyBrZXlwYWQgMSBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfMjoKLSAgICAgICAgICAgIHJldHVy
biAgVktfTlVNUEFEMjsgLy8gKDYyKSBOdW1lcmljIGtleXBhZCAyIGtleQotICAgICAgICBjYXNl
IEdES19LUF8zOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDM7IC8vICg2MykgTnVtZXJp
YyBrZXlwYWQgMyBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNDoKLSAgICAgICAgICAgIHJldHVy
biBWS19OVU1QQUQ0OyAvLyAoNjQpIE51bWVyaWMga2V5cGFkIDQga2V5Ci0gICAgICAgIGNhc2Ug
R0RLX0tQXzU6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENTsgLy8oNjUpIE51bWVyaWMg
a2V5cGFkIDUga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzY6Ci0gICAgICAgICAgICByZXR1cm4g
VktfTlVNUEFENjsgLy8gKDY2KSBOdW1lcmljIGtleXBhZCA2IGtleQotICAgICAgICBjYXNlIEdE
S19LUF83OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDc7IC8vICg2NykgTnVtZXJpYyBr
ZXlwYWQgNyBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfODoKLSAgICAgICAgICAgIHJldHVybiBW
S19OVU1QQUQ4OyAvLyAoNjgpIE51bWVyaWMga2V5cGFkIDgga2V5Ci0gICAgICAgIGNhc2UgR0RL
X0tQXzk6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEOTsgLy8gKDY5KSBOdW1lcmljIGtl
eXBhZCA5IGtleQotICAgICAgICBjYXNlIEdES19LUF9NdWx0aXBseToKLSAgICAgICAgICAgIHJl
dHVybiBWS19NVUxUSVBMWTsgLy8gKDZBKSBNdWx0aXBseSBrZXkKLSAgICAgICAgY2FzZSBHREtf
S1BfQWRkOgotICAgICAgICAgICAgcmV0dXJuIFZLX0FERDsgLy8gKDZCKSBBZGQga2V5Ci0gICAg
ICAgIGNhc2UgR0RLX0tQX1N1YnRyYWN0OgotICAgICAgICAgICAgcmV0dXJuIFZLX1NVQlRSQUNU
OyAvLyAoNkQpIFN1YnRyYWN0IGtleQotICAgICAgICBjYXNlIEdES19LUF9EZWNpbWFsOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1hbCBrZXkKLSAgICAgICAg
Y2FzZSBHREtfS1BfRGl2aWRlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RJVklERTsgLy8gKDZG
KSBEaXZpZGUga2V5CisgICAgY2FzZSBHREtfS1BfMDoKKyAgICAgICAgcmV0dXJuIFZLX05VTVBB
RDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgIGNhc2UgR0RLX0tQXzE6CisgICAg
ICAgIHJldHVybiBWS19OVU1QQUQxOy8vICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkKKyAgICBj
YXNlIEdES19LUF8yOgorICAgICAgICByZXR1cm4gIFZLX05VTVBBRDI7IC8vICg2MikgTnVtZXJp
YyBrZXlwYWQgMiBrZXkKKyAgICBjYXNlIEdES19LUF8zOgorICAgICAgICByZXR1cm4gVktfTlVN
UEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgIGNhc2UgR0RLX0tQXzQ6Cisg
ICAgICAgIHJldHVybiBWS19OVU1QQUQ0OyAvLyAoNjQpIE51bWVyaWMga2V5cGFkIDQga2V5Cisg
ICAgY2FzZSBHREtfS1BfNToKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDU7IC8vKDY1KSBOdW1l
cmljIGtleXBhZCA1IGtleQorICAgIGNhc2UgR0RLX0tQXzY6CisgICAgICAgIHJldHVybiBWS19O
VU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5CisgICAgY2FzZSBHREtfS1BfNzoK
KyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDc7IC8vICg2NykgTnVtZXJpYyBrZXlwYWQgNyBrZXkK
KyAgICBjYXNlIEdES19LUF84OgorICAgICAgICByZXR1cm4gVktfTlVNUEFEODsgLy8gKDY4KSBO
dW1lcmljIGtleXBhZCA4IGtleQorICAgIGNhc2UgR0RLX0tQXzk6CisgICAgICAgIHJldHVybiBW
S19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5CisgICAgY2FzZSBHREtfS1Bf
TXVsdGlwbHk6CisgICAgICAgIHJldHVybiBWS19NVUxUSVBMWTsgLy8gKDZBKSBNdWx0aXBseSBr
ZXkKKyAgICBjYXNlIEdES19LUF9BZGQ6CisgICAgICAgIHJldHVybiBWS19BREQ7IC8vICg2Qikg
QWRkIGtleQorICAgIGNhc2UgR0RLX0tQX1N1YnRyYWN0OgorICAgICAgICByZXR1cm4gVktfU1VC
VFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5CisgICAgY2FzZSBHREtfS1BfRGVjaW1hbDoKKyAg
ICAgICAgcmV0dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1hbCBrZXkKKyAgICBjYXNlIEdE
S19LUF9EaXZpZGU6CisgICAgICAgIHJldHVybiBWS19ESVZJREU7IC8vICg2RikgRGl2aWRlIGtl
eQogCi0gICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKLSAgICAgICAgICAgIHJldHVybiBWS19C
QUNLOyAvLyAoMDgpIEJBQ0tTUEFDRSBrZXkKLSAgICAgICAgY2FzZSBHREtfVGFiOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5Ci0gICAgICAgIGNhc2UgR0RLX0Ns
ZWFyOgotICAgICAgICAgICAgcmV0dXJuIFZLX0NMRUFSOyAvLyAoMEMpIENMRUFSIGtleQotICAg
ICAgICBjYXNlIEdES19SZXR1cm46Ci0gICAgICAgICAgICByZXR1cm4gVktfUkVUVVJOOyAvLygw
RCkgUmV0dXJuIGtleQotICAgICAgICBjYXNlIEdES19TaGlmdF9MOgotICAgICAgICBjYXNlIEdE
S19TaGlmdF9SOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NISUZUOyAvLyAoMTApIFNISUZUIGtl
eQotICAgICAgICBjYXNlIEdES19Db250cm9sX0w6Ci0gICAgICAgIGNhc2UgR0RLX0NvbnRyb2xf
UjoKLSAgICAgICAgICAgIHJldHVybiBWS19DT05UUk9MOyAvLyAoMTEpIENUUkwga2V5Ci0gICAg
ICAgIGNhc2UgR0RLX01lbnU6Ci0gICAgICAgIGNhc2UgR0RLX0FsdF9MOgotICAgICAgICBjYXNl
IEdES19BbHRfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19NRU5VOyAvLyAoMTIpIEFMVCBrZXkK
KyAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgIHJldHVybiBWS19CQUNLOyAvLyAoMDgp
IEJBQ0tTUEFDRSBrZXkKKyAgICBjYXNlIEdES19UYWI6CisgICAgICAgIHJldHVybiBWS19UQUI7
IC8vICgwOSkgVEFCIGtleQorICAgIGNhc2UgR0RLX0NsZWFyOgorICAgICAgICByZXR1cm4gVktf
Q0xFQVI7IC8vICgwQykgQ0xFQVIga2V5CisgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICBy
ZXR1cm4gVktfUkVUVVJOOyAvLygwRCkgUmV0dXJuIGtleQorICAgIGNhc2UgR0RLX1NoaWZ0X0w6
CisgICAgY2FzZSBHREtfU2hpZnRfUjoKKyAgICAgICAgcmV0dXJuIFZLX1NISUZUOyAvLyAoMTAp
IFNISUZUIGtleQorICAgIGNhc2UgR0RLX0NvbnRyb2xfTDoKKyAgICBjYXNlIEdES19Db250cm9s
X1I6CisgICAgICAgIHJldHVybiBWS19DT05UUk9MOyAvLyAoMTEpIENUUkwga2V5CisgICAgY2Fz
ZSBHREtfTWVudToKKyAgICBjYXNlIEdES19BbHRfTDoKKyAgICBjYXNlIEdES19BbHRfUjoKKyAg
ICAgICAgcmV0dXJuIFZLX01FTlU7IC8vICgxMikgQUxUIGtleQogCi0gICAgICAgIGNhc2UgR0RL
X1BhdXNlOgotICAgICAgICAgICAgcmV0dXJuIFZLX1BBVVNFOyAvLyAoMTMpIFBBVVNFIGtleQot
ICAgICAgICBjYXNlIEdES19DYXBzX0xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gVktfQ0FQSVRB
TDsgLy8gKDE0KSBDQVBTIExPQ0sga2V5Ci0gICAgICAgIGNhc2UgR0RLX0thbmFfTG9jazoKLSAg
ICAgICAgY2FzZSBHREtfS2FuYV9TaGlmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19LQU5BOyAv
LyAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElNRSkgS2FuYSBtb2RlCi0gICAgICAgIGNhc2Ug
R0RLX0hhbmd1bDoKLSAgICAgICAgICAgIHJldHVybiBWS19IQU5HVUw7IC8vIFZLX0hBTkdVTCAo
MTUpIElNRSBIYW5ndWwgbW9kZQotICAgICAgICAgICAgLy8gVktfSlVOSkEgKDE3KSBJTUUgSnVu
amEgbW9kZQotICAgICAgICAgICAgLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwgbW9kZQotICAg
ICAgICBjYXNlIEdES19IYW5ndWxfSGFuamE6Ci0gICAgICAgICAgICByZXR1cm4gVktfSEFOSkE7
IC8vICgxOSkgSU1FIEhhbmphIG1vZGUKLSAgICAgICAgY2FzZSBHREtfS2Fuamk6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfS0FOSkk7IC8vICgxOSkgSU1FIEthbmppIG1vZGUKLSAgICAgICAgY2Fz
ZSBHREtfRXNjYXBlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VTQ0FQRTsgLy8gKDFCKSBFU0Mg
a2V5Ci0gICAgICAgICAgICAvLyBWS19DT05WRVJUICgxQykgSU1FIGNvbnZlcnQKLSAgICAgICAg
ICAgIC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29udmVydAotICAgICAgICAgICAgLy8g
VktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAotICAgICAgICAgICAgLy8gVktfTU9ERUNIQU5HRSAo
MUYpIElNRSBtb2RlIGNoYW5nZSByZXF1ZXN0Ci0gICAgICAgIGNhc2UgR0RLX3NwYWNlOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX1NQQUNFOyAvLyAoMjApIFNQQUNFQkFSCi0gICAgICAgIGNhc2Ug
R0RLX1BhZ2VfVXA6Ci0gICAgICAgICAgICByZXR1cm4gVktfUFJJT1I7IC8vICgyMSkgUEFHRSBV
UCBrZXkKLSAgICAgICAgY2FzZSBHREtfUGFnZV9Eb3duOgotICAgICAgICAgICAgcmV0dXJuIFZL
X05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQotICAgICAgICBjYXNlIEdES19FbmQ6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKLSAgICAgICAgY2FzZSBHREtf
SG9tZToKLSAgICAgICAgICAgIHJldHVybiBWS19IT01FOyAvLyAoMjQpIEhPTUUga2V5Ci0gICAg
ICAgIGNhc2UgR0RLX0xlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBM
RUZUIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19VcDoKLSAgICAgICAgICAgIHJldHVybiBW
S19VUDsgLy8gKDI2KSBVUCBBUlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfUmlnaHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cga2V5Ci0gICAgICAg
IGNhc2UgR0RLX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8gKDI4KSBET1dO
IEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19TZWxlY3Q6Ci0gICAgICAgICAgICByZXR1cm4g
VktfU0VMRUNUOyAvLyAoMjkpIFNFTEVDVCBrZXkKLSAgICAgICAgY2FzZSBHREtfUHJpbnQ6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfUFJJTlQ7IC8vICgyQSkgUFJJTlQga2V5Ci0gICAgICAgIGNh
c2UgR0RLX0V4ZWN1dGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRVhFQ1VURTsvLyAoMkIpIEVY
RUNVVEUga2V5Ci0gICAgICAgICAgICAvL2R1bm5vIG9uIHRoaXMKLSAgICAgICAgICAgIC8vY2Fz
ZSBHREtfUHJpbnRTY3JlZW46Ci0gICAgICAgICAgICAvLyAgICAgIHJldHVybiBWS19TTkFQU0hP
VDsgLy8gKDJDKSBQUklOVCBTQ1JFRU4ga2V5Ci0gICAgICAgIGNhc2UgR0RLX0luc2VydDoKLSAg
ICAgICAgICAgIHJldHVybiBWS19JTlNFUlQ7IC8vICgyRCkgSU5TIGtleQotICAgICAgICBjYXNl
IEdES19EZWxldGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfREVMRVRFOyAvLyAoMkUpIERFTCBr
ZXkKLSAgICAgICAgY2FzZSBHREtfSGVscDoKLSAgICAgICAgICAgIHJldHVybiBWS19IRUxQOyAv
LyAoMkYpIEhFTFAga2V5Ci0gICAgICAgIGNhc2UgR0RLXzA6Ci0gICAgICAgIGNhc2UgR0RLX3Bh
cmVubGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS18wOyAgICAvLyAgKDMwKSAwKSBrZXkKLSAg
ICAgICAgY2FzZSBHREtfMToKLSAgICAgICAgICAgIHJldHVybiBWS18xOyAvLyAgKDMxKSAxICEg
a2V5Ci0gICAgICAgIGNhc2UgR0RLXzI6Ci0gICAgICAgIGNhc2UgR0RLX2F0OgotICAgICAgICAg
ICAgcmV0dXJuIFZLXzI7IC8vICAoMzIpIDIgJiBrZXkKLSAgICAgICAgY2FzZSBHREtfMzoKLSAg
ICAgICAgY2FzZSBHREtfbnVtYmVyc2lnbjoKLSAgICAgICAgICAgIHJldHVybiBWS18zOyAvL2Nh
c2UgJzMnOiBjYXNlICcjJzsKLSAgICAgICAgY2FzZSBHREtfNDoKLSAgICAgICAgY2FzZSBHREtf
ZG9sbGFyOiAvLyAgKDM0KSA0IGtleSAnJCc7Ci0gICAgICAgICAgICByZXR1cm4gVktfNDsKLSAg
ICAgICAgY2FzZSBHREtfNToKLSAgICAgICAgY2FzZSBHREtfcGVyY2VudDoKLSAgICAgICAgICAg
IHJldHVybiBWS181OyAvLyAgKDM1KSA1IGtleSAgJyUnCi0gICAgICAgIGNhc2UgR0RLXzY6Ci0g
ICAgICAgIGNhc2UgR0RLX2FzY2lpY2lyY3VtOgotICAgICAgICAgICAgcmV0dXJuIFZLXzY7IC8v
ICAoMzYpIDYga2V5ICAnXicKLSAgICAgICAgY2FzZSBHREtfNzoKLSAgICAgICAgY2FzZSBHREtf
YW1wZXJzYW5kOgotICAgICAgICAgICAgcmV0dXJuIFZLXzc7IC8vICAoMzcpIDcga2V5ICBjYXNl
ICcmJwotICAgICAgICBjYXNlIEdES184OgotICAgICAgICBjYXNlIEdES19hc3RlcmlzazoKLSAg
ICAgICAgICAgIHJldHVybiBWS184OyAvLyAgKDM4KSA4IGtleSAgJyonCi0gICAgICAgIGNhc2Ug
R0RLXzk6Ci0gICAgICAgIGNhc2UgR0RLX3BhcmVucmlnaHQ6Ci0gICAgICAgICAgICByZXR1cm4g
VktfOTsgLy8gICgzOSkgOSBrZXkgJygnCi0gICAgICAgIGNhc2UgR0RLX2E6Ci0gICAgICAgIGNh
c2UgR0RLX0E6Ci0gICAgICAgICAgICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAn
YSc6IGNhc2UgJ0EnOiByZXR1cm4gMHg0MTsKLSAgICAgICAgY2FzZSBHREtfYjoKLSAgICAgICAg
Y2FzZSBHREtfQjoKLSAgICAgICAgICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNl
ICdiJzogY2FzZSAnQic6IHJldHVybiAweDQyOwotICAgICAgICBjYXNlIEdES19jOgotICAgICAg
ICBjYXNlIEdES19DOgotICAgICAgICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNh
c2UgJ2MnOiBjYXNlICdDJzogcmV0dXJuIDB4NDM7Ci0gICAgICAgIGNhc2UgR0RLX2Q6Ci0gICAg
ICAgIGNhc2UgR0RLX0Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkg
Y2FzZSAnZCc6IGNhc2UgJ0QnOiByZXR1cm4gMHg0NDsKLSAgICAgICAgY2FzZSBHREtfZToKLSAg
ICAgICAgY2FzZSBHREtfRToKLSAgICAgICAgICAgIHJldHVybiBWS19FOyAvLyAgKDQ1KSBFIGtl
eSBjYXNlICdlJzogY2FzZSAnRSc6IHJldHVybiAweDQ1OwotICAgICAgICBjYXNlIEdES19mOgot
ICAgICAgICBjYXNlIEdES19GOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYg
a2V5IGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7Ci0gICAgICAgIGNhc2UgR0RLX2c6
Ci0gICAgICAgIGNhc2UgR0RLX0c6Ci0gICAgICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0Nykg
RyBrZXkgY2FzZSAnZyc6IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsKLSAgICAgICAgY2FzZSBHREtf
aDoKLSAgICAgICAgY2FzZSBHREtfSDoKLSAgICAgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4
KSBIIGtleSBjYXNlICdoJzogY2FzZSAnSCc6IHJldHVybiAweDQ4OwotICAgICAgICBjYXNlIEdE
S19pOgotICAgICAgICBjYXNlIEdES19JOgotICAgICAgICAgICAgcmV0dXJuIFZLX0k7IC8vICAo
NDkpIEkga2V5IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4NDk7Ci0gICAgICAgIGNhc2Ug
R0RLX2o6Ci0gICAgICAgIGNhc2UgR0RLX0o6Ci0gICAgICAgICAgICByZXR1cm4gVktfSjsgLy8g
ICg0QSkgSiBrZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKLSAgICAgICAgY2Fz
ZSBHREtfazoKLSAgICAgICAgY2FzZSBHREtfSzoKLSAgICAgICAgICAgIHJldHVybiBWS19LOyAv
LyAgKDRCKSBLIGtleSBjYXNlICdrJzogY2FzZSAnSyc6IHJldHVybiAweDRCOwotICAgICAgICBj
YXNlIEdES19sOgotICAgICAgICBjYXNlIEdES19MOgotICAgICAgICAgICAgcmV0dXJuIFZLX0w7
IC8vICAoNEMpIEwga2V5IGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7Ci0gICAgICAg
IGNhc2UgR0RLX206Ci0gICAgICAgIGNhc2UgR0RLX006Ci0gICAgICAgICAgICByZXR1cm4gVktf
TTsgLy8gICg0RCkgTSBrZXkgY2FzZSAnbSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKLSAgICAg
ICAgY2FzZSBHREtfbjoKLSAgICAgICAgY2FzZSBHREtfTjoKLSAgICAgICAgICAgIHJldHVybiBW
S19OOyAvLyAgKDRFKSBOIGtleSBjYXNlICduJzogY2FzZSAnTic6IHJldHVybiAweDRFOwotICAg
ICAgICBjYXNlIEdES19vOgotICAgICAgICBjYXNlIEdES19POgotICAgICAgICAgICAgcmV0dXJu
IFZLX087IC8vICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7Ci0g
ICAgICAgIGNhc2UgR0RLX3A6Ci0gICAgICAgIGNhc2UgR0RLX1A6Ci0gICAgICAgICAgICByZXR1
cm4gVktfUDsgLy8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsK
LSAgICAgICAgY2FzZSBHREtfcToKLSAgICAgICAgY2FzZSBHREtfUToKLSAgICAgICAgICAgIHJl
dHVybiBWS19ROyAvLyAgKDUxKSBRIGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUx
OwotICAgICAgICBjYXNlIEdES19yOgotICAgICAgICBjYXNlIEdES19SOgotICAgICAgICAgICAg
cmV0dXJuIFZLX1I7IC8vICAoNTIpIFIga2V5IGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4
NTI7Ci0gICAgICAgIGNhc2UgR0RLX3M6Ci0gICAgICAgIGNhc2UgR0RLX1M6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6IGNhc2UgJ1MnOiByZXR1cm4g
MHg1MzsKLSAgICAgICAgY2FzZSBHREtfdDoKLSAgICAgICAgY2FzZSBHREtfVDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19UOyAvLyAgKDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6IHJldHVy
biAweDU0OwotICAgICAgICBjYXNlIEdES191OgotICAgICAgICBjYXNlIEdES19VOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0
dXJuIDB4NTU7Ci0gICAgICAgIGNhc2UgR0RLX3Y6Ci0gICAgICAgIGNhc2UgR0RLX1Y6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfVjsgLy8gICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiBy
ZXR1cm4gMHg1NjsKLSAgICAgICAgY2FzZSBHREtfdzoKLSAgICAgICAgY2FzZSBHREtfVzoKLSAg
ICAgICAgICAgIHJldHVybiBWS19XOyAvLyAgKDU3KSBXIGtleSBjYXNlICd3JzogY2FzZSAnVyc6
IHJldHVybiAweDU3OwotICAgICAgICBjYXNlIEdES194OgotICAgICAgICBjYXNlIEdES19YOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdY
JzogcmV0dXJuIDB4NTg7Ci0gICAgICAgIGNhc2UgR0RLX3k6Ci0gICAgICAgIGNhc2UgR0RLX1k6
Ci0gICAgICAgICAgICByZXR1cm4gVktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2Ug
J1knOiByZXR1cm4gMHg1OTsKLSAgICAgICAgY2FzZSBHREtfejoKLSAgICAgICAgY2FzZSBHREtf
WjoKLSAgICAgICAgICAgIHJldHVybiBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2Fz
ZSAnWic6IHJldHVybiAweDVBOwotICAgICAgICBjYXNlIEdES19NZXRhX0w6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0
dXJhbCBrZXlib2FyZCkKLSAgICAgICAgY2FzZSBHREtfTWV0YV9SOgotICAgICAgICAgICAgcmV0
dXJuIFZLX1JXSU47IC8vICg1QykgUmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQp
Ci0gICAgICAgICAgICAvLyBWS19BUFBTICg1RCkgQXBwbGljYXRpb25zIGtleSAoTmF0dXJhbCBr
ZXlib2FyZCkKLSAgICAgICAgICAgIC8vIFZLX1NMRUVQICg1RikgQ29tcHV0ZXIgU2xlZXAga2V5
Ci0gICAgICAgICAgICAvLyBWS19TRVBBUkFUT1IgKDZDKSBTZXBhcmF0b3Iga2V5Ci0gICAgICAg
ICAgICAvLyBWS19TVUJUUkFDVCAoNkQpIFN1YnRyYWN0IGtleQotICAgICAgICAgICAgLy8gVktf
REVDSU1BTCAoNkUpIERlY2ltYWwga2V5Ci0gICAgICAgICAgICAvLyBWS19ESVZJREUgKDZGKSBE
aXZpZGUga2V5Ci0gICAgICAgICAgICAvLyBoYW5kbGVkIGJ5IGtleSBjb2RlIGFib3ZlCisgICAg
Y2FzZSBHREtfUGF1c2U6CisgICAgICAgIHJldHVybiBWS19QQVVTRTsgLy8gKDEzKSBQQVVTRSBr
ZXkKKyAgICBjYXNlIEdES19DYXBzX0xvY2s6CisgICAgICAgIHJldHVybiBWS19DQVBJVEFMOyAv
LyAoMTQpIENBUFMgTE9DSyBrZXkKKyAgICBjYXNlIEdES19LYW5hX0xvY2s6CisgICAgY2FzZSBH
REtfS2FuYV9TaGlmdDoKKyAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0
aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKKyAgICBjYXNlIEdES19IYW5ndWw6CisgICAgICAg
IHJldHVybiBWS19IQU5HVUw7IC8vIFZLX0hBTkdVTCAoMTUpIElNRSBIYW5ndWwgbW9kZQorICAg
ICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgICAgIC8vIFZLX0ZJTkFM
ICgxOCkgSU1FIGZpbmFsIG1vZGUKKyAgICBjYXNlIEdES19IYW5ndWxfSGFuamE6CisgICAgICAg
IHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9kZQorICAgIGNhc2UgR0RLX0th
bmppOgorICAgICAgICByZXR1cm4gVktfS0FOSkk7IC8vICgxOSkgSU1FIEthbmppIG1vZGUKKyAg
ICBjYXNlIEdES19Fc2NhcGU6CisgICAgICAgIHJldHVybiBWS19FU0NBUEU7IC8vICgxQikgRVND
IGtleQorICAgICAgICAvLyBWS19DT05WRVJUICgxQykgSU1FIGNvbnZlcnQKKyAgICAgICAgLy8g
VktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0CisgICAgICAgIC8vIFZLX0FDQ0VQVCAo
MUUpIElNRSBhY2NlcHQKKyAgICAgICAgLy8gVktfTU9ERUNIQU5HRSAoMUYpIElNRSBtb2RlIGNo
YW5nZSByZXF1ZXN0CisgICAgY2FzZSBHREtfc3BhY2U6CisgICAgICAgIHJldHVybiBWS19TUEFD
RTsgLy8gKDIwKSBTUEFDRUJBUgorICAgIGNhc2UgR0RLX1BhZ2VfVXA6CisgICAgICAgIHJldHVy
biBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoK
KyAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQorICAgIGNhc2Ug
R0RLX0VuZDoKKyAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5CisgICAgY2Fz
ZSBHREtfSG9tZToKKyAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKKyAg
ICBjYXNlIEdES19MZWZ0OgorICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBMRUZUIEFS
Uk9XIGtleQorICAgIGNhc2UgR0RLX1VwOgorICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikg
VVAgQVJST1cga2V5CisgICAgY2FzZSBHREtfUmlnaHQ6CisgICAgICAgIHJldHVybiBWS19SSUdI
VDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19Eb3duOgorICAgICAgICBy
ZXR1cm4gVktfRE9XTjsgLy8gKDI4KSBET1dOIEFSUk9XIGtleQorICAgIGNhc2UgR0RLX1NlbGVj
dDoKKyAgICAgICAgcmV0dXJuIFZLX1NFTEVDVDsgLy8gKDI5KSBTRUxFQ1Qga2V5CisgICAgY2Fz
ZSBHREtfUHJpbnQ6CisgICAgICAgIHJldHVybiBWS19QUklOVDsgLy8gKDJBKSBQUklOVCBrZXkK
KyAgICBjYXNlIEdES19FeGVjdXRlOgorICAgICAgICByZXR1cm4gVktfRVhFQ1VURTsvLyAoMkIp
IEVYRUNVVEUga2V5CisgICAgICAgIC8vZHVubm8gb24gdGhpcworICAgICAgICAvL2Nhc2UgR0RL
X1ByaW50U2NyZWVuOgorICAgICAgICAvLyAgICAgIHJldHVybiBWS19TTkFQU0hPVDsgLy8gKDJD
KSBQUklOVCBTQ1JFRU4ga2V5CisgICAgY2FzZSBHREtfSW5zZXJ0OgorICAgICAgICByZXR1cm4g
VktfSU5TRVJUOyAvLyAoMkQpIElOUyBrZXkKKyAgICBjYXNlIEdES19EZWxldGU6CisgICAgICAg
IHJldHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVMIGtleQorICAgIGNhc2UgR0RLX0hlbHA6Cisg
ICAgICAgIHJldHVybiBWS19IRUxQOyAvLyAoMkYpIEhFTFAga2V5CisgICAgY2FzZSBHREtfMDoK
KyAgICBjYXNlIEdES19wYXJlbmxlZnQ6CisgICAgICAgIHJldHVybiBWS18wOyAgICAvLyAgKDMw
KSAwKSBrZXkKKyAgICBjYXNlIEdES18xOgorICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkg
MSAhIGtleQorICAgIGNhc2UgR0RLXzI6CisgICAgY2FzZSBHREtfYXQ6CisgICAgICAgIHJldHVy
biBWS18yOyAvLyAgKDMyKSAyICYga2V5CisgICAgY2FzZSBHREtfMzoKKyAgICBjYXNlIEdES19u
dW1iZXJzaWduOgorICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNlICczJzogY2FzZSAnIyc7Cisg
ICAgY2FzZSBHREtfNDoKKyAgICBjYXNlIEdES19kb2xsYXI6IC8vICAoMzQpIDQga2V5ICckJzsK
KyAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAgY2FzZSBHREtfNToKKyAgICBjYXNlIEdES19wZXJj
ZW50OgorICAgICAgICByZXR1cm4gVktfNTsgLy8gICgzNSkgNSBrZXkgICclJworICAgIGNhc2Ug
R0RLXzY6CisgICAgY2FzZSBHREtfYXNjaWljaXJjdW06CisgICAgICAgIHJldHVybiBWS182OyAv
LyAgKDM2KSA2IGtleSAgJ14nCisgICAgY2FzZSBHREtfNzoKKyAgICBjYXNlIEdES19hbXBlcnNh
bmQ6CisgICAgICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKKyAgICBj
YXNlIEdES184OgorICAgIGNhc2UgR0RLX2FzdGVyaXNrOgorICAgICAgICByZXR1cm4gVktfODsg
Ly8gICgzOCkgOCBrZXkgICcqJworICAgIGNhc2UgR0RLXzk6CisgICAgY2FzZSBHREtfcGFyZW5y
aWdodDoKKyAgICAgICAgcmV0dXJuIFZLXzk7IC8vICAoMzkpIDkga2V5ICcoJworICAgIGNhc2Ug
R0RLX2E6CisgICAgY2FzZSBHREtfQToKKyAgICAgICAgcmV0dXJuIFZLX0E7IC8vICAoNDEpIEEg
a2V5IGNhc2UgJ2EnOiBjYXNlICdBJzogcmV0dXJuIDB4NDE7CisgICAgY2FzZSBHREtfYjoKKyAg
ICBjYXNlIEdES19COgorICAgICAgICByZXR1cm4gVktfQjsgLy8gICg0MikgQiBrZXkgY2FzZSAn
Yic6IGNhc2UgJ0InOiByZXR1cm4gMHg0MjsKKyAgICBjYXNlIEdES19jOgorICAgIGNhc2UgR0RL
X0M6CisgICAgICAgIHJldHVybiBWS19DOyAvLyAgKDQzKSBDIGtleSBjYXNlICdjJzogY2FzZSAn
Qyc6IHJldHVybiAweDQzOworICAgIGNhc2UgR0RLX2Q6CisgICAgY2FzZSBHREtfRDoKKyAgICAg
ICAgcmV0dXJuIFZLX0Q7IC8vICAoNDQpIEQga2V5IGNhc2UgJ2QnOiBjYXNlICdEJzogcmV0dXJu
IDB4NDQ7CisgICAgY2FzZSBHREtfZToKKyAgICBjYXNlIEdES19FOgorICAgICAgICByZXR1cm4g
VktfRTsgLy8gICg0NSkgRSBrZXkgY2FzZSAnZSc6IGNhc2UgJ0UnOiByZXR1cm4gMHg0NTsKKyAg
ICBjYXNlIEdES19mOgorICAgIGNhc2UgR0RLX0Y6CisgICAgICAgIHJldHVybiBWS19GOyAvLyAg
KDQ2KSBGIGtleSBjYXNlICdmJzogY2FzZSAnRic6IHJldHVybiAweDQ2OworICAgIGNhc2UgR0RL
X2c6CisgICAgY2FzZSBHREtfRzoKKyAgICAgICAgcmV0dXJuIFZLX0c7IC8vICAoNDcpIEcga2V5
IGNhc2UgJ2cnOiBjYXNlICdHJzogcmV0dXJuIDB4NDc7CisgICAgY2FzZSBHREtfaDoKKyAgICBj
YXNlIEdES19IOgorICAgICAgICByZXR1cm4gVktfSDsgLy8gICg0OCkgSCBrZXkgY2FzZSAnaCc6
IGNhc2UgJ0gnOiByZXR1cm4gMHg0ODsKKyAgICBjYXNlIEdES19pOgorICAgIGNhc2UgR0RLX0k6
CisgICAgICAgIHJldHVybiBWS19JOyAvLyAgKDQ5KSBJIGtleSBjYXNlICdpJzogY2FzZSAnSSc6
IHJldHVybiAweDQ5OworICAgIGNhc2UgR0RLX2o6CisgICAgY2FzZSBHREtfSjoKKyAgICAgICAg
cmV0dXJuIFZLX0o7IC8vICAoNEEpIEoga2V5IGNhc2UgJ2onOiBjYXNlICdKJzogcmV0dXJuIDB4
NEE7CisgICAgY2FzZSBHREtfazoKKyAgICBjYXNlIEdES19LOgorICAgICAgICByZXR1cm4gVktf
SzsgLy8gICg0QikgSyBrZXkgY2FzZSAnayc6IGNhc2UgJ0snOiByZXR1cm4gMHg0QjsKKyAgICBj
YXNlIEdES19sOgorICAgIGNhc2UgR0RLX0w6CisgICAgICAgIHJldHVybiBWS19MOyAvLyAgKDRD
KSBMIGtleSBjYXNlICdsJzogY2FzZSAnTCc6IHJldHVybiAweDRDOworICAgIGNhc2UgR0RLX206
CisgICAgY2FzZSBHREtfTToKKyAgICAgICAgcmV0dXJuIFZLX007IC8vICAoNEQpIE0ga2V5IGNh
c2UgJ20nOiBjYXNlICdNJzogcmV0dXJuIDB4NEQ7CisgICAgY2FzZSBHREtfbjoKKyAgICBjYXNl
IEdES19OOgorICAgICAgICByZXR1cm4gVktfTjsgLy8gICg0RSkgTiBrZXkgY2FzZSAnbic6IGNh
c2UgJ04nOiByZXR1cm4gMHg0RTsKKyAgICBjYXNlIEdES19vOgorICAgIGNhc2UgR0RLX086Cisg
ICAgICAgIHJldHVybiBWS19POyAvLyAgKDRGKSBPIGtleSBjYXNlICdvJzogY2FzZSAnTyc6IHJl
dHVybiAweDRGOworICAgIGNhc2UgR0RLX3A6CisgICAgY2FzZSBHREtfUDoKKyAgICAgICAgcmV0
dXJuIFZLX1A7IC8vICAoNTApIFAga2V5IGNhc2UgJ3AnOiBjYXNlICdQJzogcmV0dXJuIDB4NTA7
CisgICAgY2FzZSBHREtfcToKKyAgICBjYXNlIEdES19ROgorICAgICAgICByZXR1cm4gVktfUTsg
Ly8gICg1MSkgUSBrZXkgY2FzZSAncSc6IGNhc2UgJ1EnOiByZXR1cm4gMHg1MTsKKyAgICBjYXNl
IEdES19yOgorICAgIGNhc2UgR0RLX1I6CisgICAgICAgIHJldHVybiBWS19SOyAvLyAgKDUyKSBS
IGtleSBjYXNlICdyJzogY2FzZSAnUic6IHJldHVybiAweDUyOworICAgIGNhc2UgR0RLX3M6Cisg
ICAgY2FzZSBHREtfUzoKKyAgICAgICAgcmV0dXJuIFZLX1M7IC8vICAoNTMpIFMga2V5IGNhc2Ug
J3MnOiBjYXNlICdTJzogcmV0dXJuIDB4NTM7CisgICAgY2FzZSBHREtfdDoKKyAgICBjYXNlIEdE
S19UOgorICAgICAgICByZXR1cm4gVktfVDsgLy8gICg1NCkgVCBrZXkgY2FzZSAndCc6IGNhc2Ug
J1QnOiByZXR1cm4gMHg1NDsKKyAgICBjYXNlIEdES191OgorICAgIGNhc2UgR0RLX1U6CisgICAg
ICAgIHJldHVybiBWS19VOyAvLyAgKDU1KSBVIGtleSBjYXNlICd1JzogY2FzZSAnVSc6IHJldHVy
biAweDU1OworICAgIGNhc2UgR0RLX3Y6CisgICAgY2FzZSBHREtfVjoKKyAgICAgICAgcmV0dXJu
IFZLX1Y7IC8vICAoNTYpIFYga2V5IGNhc2UgJ3YnOiBjYXNlICdWJzogcmV0dXJuIDB4NTY7Cisg
ICAgY2FzZSBHREtfdzoKKyAgICBjYXNlIEdES19XOgorICAgICAgICByZXR1cm4gVktfVzsgLy8g
ICg1NykgVyBrZXkgY2FzZSAndyc6IGNhc2UgJ1cnOiByZXR1cm4gMHg1NzsKKyAgICBjYXNlIEdE
S194OgorICAgIGNhc2UgR0RLX1g6CisgICAgICAgIHJldHVybiBWS19YOyAvLyAgKDU4KSBYIGtl
eSBjYXNlICd4JzogY2FzZSAnWCc6IHJldHVybiAweDU4OworICAgIGNhc2UgR0RLX3k6CisgICAg
Y2FzZSBHREtfWToKKyAgICAgICAgcmV0dXJuIFZLX1k7IC8vICAoNTkpIFkga2V5IGNhc2UgJ3kn
OiBjYXNlICdZJzogcmV0dXJuIDB4NTk7CisgICAgY2FzZSBHREtfejoKKyAgICBjYXNlIEdES19a
OgorICAgICAgICByZXR1cm4gVktfWjsgLy8gICg1QSkgWiBrZXkgY2FzZSAneic6IGNhc2UgJ1on
OiByZXR1cm4gMHg1QTsKKyAgICBjYXNlIEdES19GMToKKyAgICAgICAgcmV0dXJuIFZLX0YxOwor
ICAgIGNhc2UgR0RLX0YyOgorICAgICAgICByZXR1cm4gVktfRjI7CisgICAgY2FzZSBHREtfRjM6
CisgICAgICAgIHJldHVybiBWS19GMzsKKyAgICBjYXNlIEdES19GNDoKKyAgICAgICAgcmV0dXJu
IFZLX0Y0OworICAgIGNhc2UgR0RLX0Y1OgorICAgICAgICByZXR1cm4gVktfRjU7CisgICAgY2Fz
ZSBHREtfRjY6CisgICAgICAgIHJldHVybiBWS19GNjsKKyAgICBjYXNlIEdES19GNzoKKyAgICAg
ICAgcmV0dXJuIFZLX0Y3OworICAgIGNhc2UgR0RLX0Y4OgorICAgICAgICByZXR1cm4gVktfRjg7
CisgICAgY2FzZSBHREtfRjk6CisgICAgICAgIHJldHVybiBWS19GOTsKKyAgICBjYXNlIEdES19G
MTA6CisgICAgICAgIHJldHVybiBWS19GMTA7CisgICAgY2FzZSBHREtfRjExOgorICAgICAgICBy
ZXR1cm4gVktfRjExOworICAgIGNhc2UgR0RLX0YxMjoKKyAgICAgICAgcmV0dXJuIFZLX0YxMjsK
KyAgICBjYXNlIEdES19GMTM6CisgICAgICAgIHJldHVybiBWS19GMTM7CisgICAgY2FzZSBHREtf
RjE0OgorICAgICAgICByZXR1cm4gVktfRjE0OworICAgIGNhc2UgR0RLX0YxNToKKyAgICAgICAg
cmV0dXJuIFZLX0YxNTsKKyAgICBjYXNlIEdES19GMTY6CisgICAgICAgIHJldHVybiBWS19GMTY7
CisgICAgY2FzZSBHREtfRjE3OgorICAgICAgICByZXR1cm4gVktfRjE3OworICAgIGNhc2UgR0RL
X0YxODoKKyAgICAgICAgcmV0dXJuIFZLX0YxODsKKyAgICBjYXNlIEdES19GMTk6CisgICAgICAg
IHJldHVybiBWS19GMTk7CisgICAgY2FzZSBHREtfRjIwOgorICAgICAgICByZXR1cm4gVktfRjIw
OworICAgIGNhc2UgR0RLX0YyMToKKyAgICAgICAgcmV0dXJuIFZLX0YyMTsKKyAgICBjYXNlIEdE
S19GMjI6CisgICAgICAgIHJldHVybiBWS19GMjI7CisgICAgY2FzZSBHREtfRjIzOgorICAgICAg
ICByZXR1cm4gVktfRjIzOworICAgIGNhc2UgR0RLX0YyNDoKKyAgICAgICAgcmV0dXJuIFZLX0Yy
NDsKKyAgICBjYXNlIEdES19NZXRhX0w6CisgICAgICAgIHJldHVybiBWS19MV0lOOyAvLyAoNUIp
IExlZnQgV2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFsIGtleWJvYXJkKQorICAgIGNhc2Ug
R0RLX01ldGFfUjoKKyAgICAgICAgcmV0dXJuIFZLX1JXSU47IC8vICg1QykgUmlnaHQgV2luZG93
cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAgIC8vIFZLX0FQUFMgKDVEKSBBcHBsaWNh
dGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgICAgICAvLyBWS19TTEVFUCAoNUYpIENv
bXB1dGVyIFNsZWVwIGtleQorICAgICAgICAvLyBWS19TRVBBUkFUT1IgKDZDKSBTZXBhcmF0b3Ig
a2V5CisgICAgICAgIC8vIFZLX1NVQlRSQUNUICg2RCkgU3VidHJhY3Qga2V5CisgICAgICAgIC8v
IFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorICAgICAgICAvLyBWS19ESVZJREUgKDZGKSBE
aXZpZGUga2V5CisgICAgICAgIC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJvdmUKIAotICAgICAg
ICBjYXNlIEdES19OdW1fTG9jazoKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1MT0NLOyAvLyAo
OTApIE5VTSBMT0NLIGtleQorICAgIGNhc2UgR0RLX051bV9Mb2NrOgorICAgICAgICByZXR1cm4g
VktfTlVNTE9DSzsgLy8gKDkwKSBOVU0gTE9DSyBrZXkKIAotICAgICAgICBjYXNlIEdES19TY3Jv
bGxfTG9jazoKLSAgICAgICAgICAgIHJldHVybiBWS19TQ1JPTEw7IC8vICg5MSkgU0NST0xMIExP
Q0sga2V5CisgICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6CisgICAgICAgIHJldHVybiBWS19TQ1JP
TEw7IC8vICg5MSkgU0NST0xMIExPQ0sga2V5CiAKLSAgICAgICAgICAgIC8vIFZLX0xTSElGVCAo
QTApIExlZnQgU0hJRlQga2V5Ci0gICAgICAgICAgICAvLyBWS19SU0hJRlQgKEExKSBSaWdodCBT
SElGVCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xDT05UUk9MIChBMikgTGVmdCBDT05UUk9MIGtl
eQotICAgICAgICAgICAgLy8gVktfUkNPTlRST0wgKEEzKSBSaWdodCBDT05UUk9MIGtleQotICAg
ICAgICAgICAgLy8gVktfTE1FTlUgKEE0KSBMZWZ0IE1FTlUga2V5Ci0gICAgICAgICAgICAvLyBW
S19STUVOVSAoQTUpIFJpZ2h0IE1FTlUga2V5Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX0JB
Q0sgKEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKLSAgICAgICAgICAgIC8v
IFZLX0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJk
IGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAw
L1hQOiBCcm93c2VyIFJlZnJlc2gga2V5Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1Ag
KEE5KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKLSAgICAgICAgICAgIC8vIFZL
X0JST1dTRVJfU0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkK
LSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQ
OiBCcm93c2VyIEZhdm9yaXRlcyBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfSE9NRSAo
QUMpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdGFydCBhbmQgSG9tZSBrZXkKLSAgICAgICAg
ICAgIC8vIFZLX1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBr
ZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQOiBW
b2x1bWUgRG93biBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3Mg
MjAwMC9YUDogVm9sdW1lIFVwIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFD
SyAoQjApIFdpbmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKLSAgICAgICAgICAgIC8vIFZL
X01FRElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtl
eQotICAgICAgICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3Rv
cCBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5k
b3dzIDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVO
Q0hfTUFJTCAoQjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKLSAgICAgICAgICAg
IC8vIFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBN
ZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2luZG93cyAyMDAw
L1hQOiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQotICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQ
UDIgKEI3KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5CisgICAgICAg
IC8vIFZLX0xTSElGVCAoQTApIExlZnQgU0hJRlQga2V5CisgICAgICAgIC8vIFZLX1JTSElGVCAo
QTEpIFJpZ2h0IFNISUZUIGtleQorICAgICAgICAvLyBWS19MQ09OVFJPTCAoQTIpIExlZnQgQ09O
VFJPTCBrZXkKKyAgICAgICAgLy8gVktfUkNPTlRST0wgKEEzKSBSaWdodCBDT05UUk9MIGtleQor
ICAgICAgICAvLyBWS19MTUVOVSAoQTQpIExlZnQgTUVOVSBrZXkKKyAgICAgICAgLy8gVktfUk1F
TlUgKEE1KSBSaWdodCBNRU5VIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBX
aW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKKyAgICAgICAgLy8gVktfQlJPV1NFUl9G
T1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZvcndhcmQga2V5CisgICAgICAg
IC8vIFZLX0JST1dTRVJfUkVGUkVTSCAoQTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZy
ZXNoIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgU3RvcCBrZXkKKyAgICAgICAgLy8gVktfQlJPV1NFUl9TRUFSQ0ggKEFBKSBXaW5k
b3dzIDIwMDAvWFA6IEJyb3dzZXIgU2VhcmNoIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX0ZB
Vk9SSVRFUyAoQUIpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZvcml0ZXMga2V5CisgICAg
ICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdGFy
dCBhbmQgSG9tZSBrZXkKKyAgICAgICAgLy8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dzIDIw
MDAvWFA6IFZvbHVtZSBNdXRlIGtleQorICAgICAgICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdp
bmRvd3MgMjAwMC9YUDogVm9sdW1lIERvd24ga2V5CisgICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAo
QUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQorICAgICAgICAvLyBWS19NRURJQV9O
RVhUX1RSQUNLIChCMCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQorICAgICAgICAv
LyBWS19NRURJQV9QUkVWX1RSQUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQcmV2aW91cyBUcmFj
ayBrZXkKKyAgICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3Rv
cCBNZWRpYSBrZXkKKyAgICAgICAgLy8gVktfTUVESUFfUExBWV9QQVVTRSAoQjMpIFdpbmRvd3Mg
MjAwMC9YUDogUGxheS9QYXVzZSBNZWRpYSBrZXkKKyAgICAgICAgLy8gVktfTEFVTkNIX01BSUwg
KEI0KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwga2V5CisgICAgICAgIC8vIFZLX0xBVU5D
SF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKKyAg
ICAgICAgLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxp
Y2F0aW9uIDEga2V5CisgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAyIChCNykgV2luZG93cyAyMDAw
L1hQOiBTdGFydCBBcHBsaWNhdGlvbiAyIGtleQogCi0gICAgICAgICAgICAvLyBWS19PRU1fMSAo
QkEpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5
Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhl
ICc7Oicga2V5Ci0gICAgICAgIGNhc2UgR0RLX3NlbWljb2xvbjoKLSAgICAgICAgY2FzZSBHREtf
Y29sb246Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzE7IC8vY2FzZSAnOyc6IGNhc2UgJzon
OiByZXR1cm4gMHhCQTsKLSAgICAgICAgICAgIC8vIFZLX09FTV9QTFVTIChCQikgV2luZG93cyAy
MDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJysnIGtleQotICAgICAgICBjYXNl
IEdES19wbHVzOgotICAgICAgICBjYXNlIEdES19lcXVhbDoKLSAgICAgICAgICAgIHJldHVybiBW
S19PRU1fUExVUzsgLy9jYXNlICc9JzogY2FzZSAnKyc6IHJldHVybiAweEJCOwotICAgICAgICAg
ICAgLy8gVktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkv
cmVnaW9uLCB0aGUgJywnIGtleQotICAgICAgICBjYXNlIEdES19jb21tYToKLSAgICAgICAgY2Fz
ZSBHREtfbGVzczoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fQ09NTUE7IC8vY2FzZSAnLCc6
IGNhc2UgJzwnOiByZXR1cm4gMHhCQzsKLSAgICAgICAgICAgIC8vIFZLX09FTV9NSU5VUyAoQkQp
IFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKLSAg
ICAgICAgY2FzZSBHREtfbWludXM6Ci0gICAgICAgIGNhc2UgR0RLX3VuZGVyc2NvcmU6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfT0VNX01JTlVTOyAvL2Nhc2UgJy0nOiBjYXNlICdfJzogcmV0dXJu
IDB4QkQ7Ci0gICAgICAgICAgICAvLyBWS19PRU1fUEVSSU9EIChCRSkgV2luZG93cyAyMDAwL1hQ
OiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy4nIGtleQotICAgICAgICBjYXNlIEdES19w
ZXJpb2Q6Ci0gICAgICAgIGNhc2UgR0RLX2dyZWF0ZXI6Ci0gICAgICAgICAgICByZXR1cm4gVktf
T0VNX1BFUklPRDsgLy9jYXNlICcuJzogY2FzZSAnPic6IHJldHVybiAweEJFOwotICAgICAgICAg
ICAgLy8gVktfT0VNXzIgKEJGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0
IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRh
cmQga2V5Ym9hcmQsIHRoZSAnLz8nIGtleQotICAgICAgICBjYXNlIEdES19zbGFzaDoKLSAgICAg
ICAgY2FzZSBHREtfcXVlc3Rpb246Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzI7IC8vY2Fz
ZSAnLyc6IGNhc2UgJz8nOiByZXR1cm4gMHhCRjsKLSAgICAgICAgICAgIC8vIFZLX09FTV8zIChD
MCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXli
b2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUg
J2B+JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYXNjaWl0aWxkZToKLSAgICAgICAgY2FzZSBHREtf
cXVvdGVsZWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8zOyAvL2Nhc2UgJ2AnOiBjYXNl
ICd+JzogcmV0dXJuIDB4QzA7Ci0gICAgICAgICAgICAvLyBWS19PRU1fNCAoREIpIFVzZWQgZm9y
IG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRv
d3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdbeycga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX2JyYWNrZXRsZWZ0OgotICAgICAgICBjYXNlIEdES19icmFjZWxlZnQ6
Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzQ7IC8vY2FzZSAnWyc6IGNhc2UgJ3snOiByZXR1
cm4gMHhEQjsKLSAgICAgICAgICAgIC8vIFZLX09FTV81IChEQykgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQ
OiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfYmFja3NsYXNoOgotICAgICAgICBjYXNlIEdES19iYXI6Ci0gICAgICAgICAgICByZXR1
cm4gVktfT0VNXzU7IC8vY2FzZSAnXFwnOiBjYXNlICd8JzogcmV0dXJuIDB4REM7Ci0gICAgICAg
ICAgICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsg
aXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFu
ZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNrZXRyaWdo
dDoKLSAgICAgICAgY2FzZSBHREtfYnJhY2VyaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS19P
RU1fNjsgLy8gY2FzZSAnXSc6IGNhc2UgJ30nOiByZXR1cm4gMHhERDsKLSAgICAgICAgICAgIC8v
IFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4g
dmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtl
eWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtleQotICAgICAgICBjYXNl
IEdES19xdW90ZXJpZ2h0OgotICAgICAgICBjYXNlIEdES19xdW90ZWRibDoKLSAgICAgICAgICAg
IHJldHVybiBWS19PRU1fNzsgLy8gY2FzZSAnXCcnOiBjYXNlICciJzogcmV0dXJuIDB4REU7Ci0g
ICAgICAgICAgICAvLyBWS19PRU1fOCAoREYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFj
dGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuCi0gICAgICAgICAgICAvLyBWS19PRU1fMTAy
IChFMikgV2luZG93cyAyMDAwL1hQOiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQga2V5IG9yIHRo
ZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBSVCAxMDIta2V5IGtleWJvYXJkCi0gICAgICAgICAgICAv
LyBWS19QUk9DRVNTS0VZIChFNSkgV2luZG93cyA5NS85OC9NZSwgV2luZG93cyBOVCA0LjAsIFdp
bmRvd3MgMjAwMC9YUDogSU1FIFBST0NFU1Mga2V5Ci0gICAgICAgICAgICAvLyBWS19QQUNLRVQg
KEU3KSBXaW5kb3dzIDIwMDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMgYXMg
aWYgdGhleSB3ZXJlIGtleXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cgd29y
ZCBvZiBhIDMyLWJpdCBWaXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQgaW5w
dXQgbWV0aG9kcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJTlBV
VCxTZW5kSW5wdXQsIFdNX0tFWURPV04sIGFuZCBXTV9LRVlVUAotICAgICAgICAgICAgLy8gVktf
QVRUTiAoRjYpIEF0dG4ga2V5Ci0gICAgICAgICAgICAvLyBWS19DUlNFTCAoRjcpIENyU2VsIGtl
eQotICAgICAgICAgICAgLy8gVktfRVhTRUwgKEY4KSBFeFNlbCBrZXkKLSAgICAgICAgICAgIC8v
IFZLX0VSRU9GIChGOSkgRXJhc2UgRU9GIGtleQotICAgICAgICAgICAgLy8gVktfUExBWSAoRkEp
IFBsYXkga2V5Ci0gICAgICAgICAgICAvLyBWS19aT09NIChGQikgWm9vbSBrZXkKLSAgICAgICAg
ICAgIC8vIFZLX05PTkFNRSAoRkMpIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCi0gICAgICAgICAg
ICAvLyBWS19QQTEgKEZEKSBQQTEga2V5Ci0gICAgICAgICAgICAvLyBWS19PRU1fQ0xFQVIgKEZF
KSBDbGVhciBrZXkKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsg
aXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFu
ZGFyZCBrZXlib2FyZCwgdGhlICc7Oicga2V5CisgICAgY2FzZSBHREtfc2VtaWNvbG9uOgorICAg
IGNhc2UgR0RLX2NvbG9uOgorICAgICAgICByZXR1cm4gVktfT0VNXzE7IC8vY2FzZSAnOyc6IGNh
c2UgJzonOiByZXR1cm4gMHhCQTsKKyAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dz
IDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5CisgICAgY2FzZSBH
REtfcGx1czoKKyAgICBjYXNlIEdES19lcXVhbDoKKyAgICAgICAgcmV0dXJuIFZLX09FTV9QTFVT
OyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7CisgICAgICAgIC8vIFZLX09FTV9D
T01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcs
JyBrZXkKKyAgICBjYXNlIEdES19jb21tYToKKyAgICBjYXNlIEdES19sZXNzOgorICAgICAgICBy
ZXR1cm4gVktfT0VNX0NPTU1BOyAvL2Nhc2UgJywnOiBjYXNlICc8JzogcmV0dXJuIDB4QkM7Cisg
ICAgICAgIC8vIFZLX09FTV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3Vu
dHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKKyAgICBjYXNlIEdES19taW51czoKKyAgICBjYXNlIEdE
S191bmRlcnNjb3JlOgorICAgICAgICByZXR1cm4gVktfT0VNX01JTlVTOyAvL2Nhc2UgJy0nOiBj
YXNlICdfJzogcmV0dXJuIDB4QkQ7CisgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5CisgICAgY2Fz
ZSBHREtfcGVyaW9kOgorICAgIGNhc2UgR0RLX2dyZWF0ZXI6CisgICAgICAgIHJldHVybiBWS19P
RU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7CisgICAgICAgIC8v
IFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4g
dmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtl
eWJvYXJkLCB0aGUgJy8/JyBrZXkKKyAgICBjYXNlIEdES19zbGFzaDoKKyAgICBjYXNlIEdES19x
dWVzdGlvbjoKKyAgICAgICAgcmV0dXJuIFZLX09FTV8yOyAvL2Nhc2UgJy8nOiBjYXNlICc/Jzog
cmV0dXJuIDB4QkY7CisgICAgICAgIC8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQ
OiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKKyAgICBjYXNlIEdE
S19hc2NpaXRpbGRlOgorICAgIGNhc2UgR0RLX3F1b3RlbGVmdDoKKyAgICAgICAgcmV0dXJuIFZL
X09FTV8zOyAvL2Nhc2UgJ2AnOiBjYXNlICd+JzogcmV0dXJuIDB4QzA7CisgICAgICAgIC8vIFZL
X09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFy
eSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJv
YXJkLCB0aGUgJ1t7JyBrZXkKKyAgICBjYXNlIEdES19icmFja2V0bGVmdDoKKyAgICBjYXNlIEdE
S19icmFjZWxlZnQ6CisgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdbJzogY2FzZSAn
eyc6IHJldHVybiAweERCOworICAgICAgICAvLyBWS19PRU1fNSAoREMpIFVzZWQgZm9yIG1pc2Nl
bGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAw
MC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5CisgICAgY2Fz
ZSBHREtfYmFja3NsYXNoOgorICAgIGNhc2UgR0RLX2JhcjoKKyAgICAgICAgcmV0dXJuIFZLX09F
TV81OyAvL2Nhc2UgJ1xcJzogY2FzZSAnfCc6IHJldHVybiAweERDOworICAgICAgICAvLyBWS19P
RU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkg
Ynkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2Fy
ZCwgdGhlICddfScga2V5CisgICAgY2FzZSBHREtfYnJhY2tldHJpZ2h0OgorICAgIGNhc2UgR0RL
X2JyYWNlcmlnaHQ6CisgICAgICAgIHJldHVybiBWS19PRU1fNjsgLy8gY2FzZSAnXSc6IGNhc2Ug
J30nOiByZXR1cm4gMHhERDsKKyAgICAgICAgLy8gVktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNj
ZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIw
MDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2Rv
dWJsZS1xdW90ZScga2V5CisgICAgY2FzZSBHREtfcXVvdGVyaWdodDoKKyAgICBjYXNlIEdES19x
dW90ZWRibDoKKyAgICAgICAgcmV0dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyIn
OiByZXR1cm4gMHhERTsKKyAgICAgICAgLy8gVktfT0VNXzggKERGKSBVc2VkIGZvciBtaXNjZWxs
YW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLgorICAgICAgICAvLyBW
S19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQOiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQg
a2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBSVCAxMDIta2V5IGtleWJvYXJkCisgICAg
ICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5UIDQu
MCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKKyAgICAgICAgLy8gVktfUEFDS0VU
IChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJzIGFz
IGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0aGUgbG93IHdv
cmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtleWJvYXJkIGlu
cHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJESU5Q
VVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKKyAgICAgICAgLy8gVktfQVRU
TiAoRjYpIEF0dG4ga2V5CisgICAgICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5CisgICAg
ICAgIC8vIFZLX0VYU0VMIChGOCkgRXhTZWwga2V5CisgICAgICAgIC8vIFZLX0VSRU9GIChGOSkg
RXJhc2UgRU9GIGtleQorICAgICAgICAvLyBWS19QTEFZIChGQSkgUGxheSBrZXkKKyAgICAgICAg
Ly8gVktfWk9PTSAoRkIpIFpvb20ga2V5CisgICAgICAgIC8vIFZLX05PTkFNRSAoRkMpIFJlc2Vy
dmVkIGZvciBmdXR1cmUgdXNlCisgICAgICAgIC8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKKyAgICAg
ICAgLy8gVktfT0VNX0NMRUFSIChGRSkgQ2xlYXIga2V5CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCiB9CiAKIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1L
ZXlib2FyZEV2ZW50KEdka0V2ZW50KiBldmVudCkKIHsKLSAgICBtX2lzS2V5VXAgPSBldmVudC0+
dHlwZSA9PSBHREtfS0VZX1JFTEVBU0U7CisgICAgbV9pc0tleVVwID0gKGV2ZW50LT50eXBlID09
IEdES19LRVlfUkVMRUFTRSk7CiAgICAgbV9zaGlmdEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBH
REtfU0hJRlRfTUFTSyAhPSAwOwogICAgIG1fY3RybEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBH
REtfQ09OVFJPTF9NQVNLICE9IDA7CiAgICAgbV9hbHRLZXkgPSBldmVudC0+a2V5LnN0YXRlICYg
R0RLX01PRDFfTUFTSyAhPSAwOwpAQCAtNDY3LDYgKzUxNiw5IEBACiAgICAgbV91bm1vZGlmaWVk
VGV4dCA9IGV2ZW50LT5rZXkuc3RyaW5nOwogICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50
aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXkua2V5dmFsKTsKICAgICBtX1dpbmRvd3NLZXlD
b2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5LmtleXZhbCk7CisgICAg
aWYgKG1fV2luZG93c0tleUNvZGUgPT0gMCkKKyAgICAgICAgcHJpbnRmKCIgQkFEIEtFWSBQUkVT
UyAlZCBcbiIsZXZlbnQtPmtleS5rZXl2YWwpOworICAgIGFzc2VydChtX1dpbmRvd3NLZXlDb2Rl
ICE9IDApOwogICAgIG1fYXV0b1JlcGVhdCA9IGZhbHNlOwogICAgIG1faXNLZXlwYWQgPSBmYWxz
ZTsKIApAQCAtNDc2LDQgKzUyOCwyMiBAQAogICAgIH0KIH0KIAorUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBw
YXJlbnQsIGJvb2wgcmVwZWF0KQoreworICAgIG1faXNLZXlVcCA9IHBhcmVudC5tX2lzS2V5VXA7
CisgICAgbV9zaGlmdEtleSA9IHBhcmVudC5tX3NoaWZ0S2V5OworICAgIG1fY3RybEtleSA9IHBh
cmVudC5tX2N0cmxLZXk7CisgICAgbV9hbHRLZXkgPSBwYXJlbnQubV9hbHRLZXk7CisgICAgbV9t
ZXRhS2V5ID0gcGFyZW50Lm1fbWV0YUtleTsKKyAgICBtX3RleHQgPSBwYXJlbnQubV90ZXh0Owor
ICAgIG1fdW5tb2RpZmllZFRleHQgPSBwYXJlbnQubV91bm1vZGlmaWVkVGV4dDsKKyAgICBtX2tl
eUlkZW50aWZpZXIgPSBwYXJlbnQubV9rZXlJZGVudGlmaWVyOworICAgIG1fV2luZG93c0tleUNv
ZGUgPSBwYXJlbnQubV9XaW5kb3dzS2V5Q29kZTsKKyAgICBtX2lzS2V5cGFkID0gcGFyZW50Lm1f
aXNLZXlwYWQ7CisgICAgbV90ZXh0ID0gcGFyZW50Lm1fdGV4dDsKKyAgICBtX2F1dG9SZXBlYXQg
PSByZXBlYXQ7CiB9CisKK30KKy8vIHZpbTp0cz00OmV0CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL01vdXNlRXZlbnRHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20gCisqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjEsNyArMjEs
NyBAQAogKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0zMiw1MyArMzIs
NTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQ6
OkN1cnJlbnRFdmVudFRhZyBQbGF0Zm9ybU1vdXNlRXZlbnQ6OmN1cnJlbnRFdmVudCA9IHt9Owor
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50OjpDdXJyZW50RXZlbnRUYWcgUGxhdGZvcm1Nb3VzZUV2
ZW50OjpjdXJyZW50RXZlbnQgPQorICAgIHt9OwogCiAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBi
ZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBtb2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdh
eXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KIAogUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1v
dXNlRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsK
LSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgICAgIG1fcG9zaXRpb24g
PSBJbnRQb2ludCgoaW50KWV2ZW50LT5tb3Rpb24ueCwgKGludClldmVudC0+bW90aW9uLnkpOwot
ICAgICAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPm1vdGlv
bi54X3Jvb3QsIChpbnQpZXZlbnQtPm1vdGlvbi55X3Jvb3QpOwotICAgICAgICAgICAgbV9idXR0
b24gPSAoTW91c2VCdXR0b24pKC0xKTsKLSAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0g
ICAgICAgICAgICBtX3NoaWZ0S2V5ID0gIGV2ZW50LT5tb3Rpb24uc3RhdGUgJiBHREtfU0hJRlRf
TUFTSyAhPSAwOwotICAgICAgICAgICAgbV9jdHJsS2V5ID0gZXZlbnQtPm1vdGlvbi5zdGF0ZSAm
IEdES19DT05UUk9MX01BU0sgIT0gMDsKLSAgICAgICAgICAgIG1fYWx0S2V5ID0gIGV2ZW50LT5t
b3Rpb24uc3RhdGUgJiBHREtfTU9EMV9NQVNLICE9IDA7Ci0gICAgICAgICAgICBtX21ldGFLZXkg
PSBldmVudC0+bW90aW9uLnN0YXRlICYgR0RLX01PRDJfTUFTSyAhPSAwOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICAgICAgbV9wb3NpdGlvbiA9
IEludFBvaW50KChpbnQpZXZlbnQtPm1vdGlvbi54LCAoaW50KWV2ZW50LT5tb3Rpb24ueSk7Cisg
ICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT5tb3Rpb24ueF9y
b290LCAoaW50KWV2ZW50LT5tb3Rpb24ueV9yb290KTsKKyAgICAgICAgbV9idXR0b24gPSAoTW91
c2VCdXR0b24pKC0xKTsKKyAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAgICAgbV9zaGlm
dEtleSA9ICBldmVudC0+bW90aW9uLnN0YXRlICYgR0RLX1NISUZUX01BU0sgIT0gMDsKKyAgICAg
ICAgbV9jdHJsS2V5ID0gZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19DT05UUk9MX01BU0sgIT0g
MDsKKyAgICAgICAgbV9hbHRLZXkgPSAgZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19NT0QxX01B
U0sgIT0gMDsKKyAgICAgICAgbV9tZXRhS2V5ID0gZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19N
T0QyX01BU0sgIT0gMDsKKyAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBHREtfQlVUVE9O
X1BSRVNTOgotICAgICAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgotICAgICAgICBjYXNlIEdE
S18zQlVUVE9OX1BSRVNTOgotICAgICAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKLSAgICAg
ICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTKQotICAgICAgICAgICAg
ICAgIG1fY2xpY2tDb3VudCA9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9
PSBHREtfMkJVVFRPTl9QUkVTUykKLSAgICAgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAyOwot
ICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCi0g
ICAgICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsKKyAgICBjYXNlIEdES19CVVRUT05fUFJF
U1M6CisgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18zQlVUVE9OX1BS
RVNTOgorICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNFOgorICAgICAgICBpZiAoZXZlbnQtPnR5
cGUgPT0gR0RLX0JVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDE7Cisg
ICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKQorICAgICAg
ICAgICAgbV9jbGlja0NvdW50ID0gMjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0g
R0RLXzNCVVRUT05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAzOwogCi0gICAg
ICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMSkKLSAgICAgICAgICAgICAgICBt
X2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9u
LmJ1dHRvbiA9PSAyKQotICAgICAgICAgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwot
ICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMykKLSAgICAgICAg
ICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRv
bi5idXR0b24gPT0gMSkKKyAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKKyAgICAg
ICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMikKKyAgICAgICAgICAgIG1fYnV0
dG9uID0gTWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRv
biA9PSAzKQorICAgICAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKIAotICAgICAgICAg
ICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPmJ1dHRvbi54LCAoaW50KWV2ZW50
LT5idXR0b24ueSk7Ci0gICAgICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGlu
dClldmVudC0+YnV0dG9uLnhfcm9vdCwgKGludClldmVudC0+YnV0dG9uLnlfcm9vdCk7Ci0gICAg
ICAgICAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19TSElGVF9NQVNL
ICE9IDA7Ci0gICAgICAgICAgICBtX2N0cmxLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RL
X0NPTlRST0xfTUFTSyAhPSAwOwotICAgICAgICAgICAgbV9hbHRLZXkgPSBldmVudC0+YnV0dG9u
LnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOwotICAgICAgICAgICAgbV9tZXRhS2V5ID0gZXZl
bnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKLSAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+YnV0dG9uLngsIChp
bnQpZXZlbnQtPmJ1dHRvbi55KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50
KChpbnQpZXZlbnQtPmJ1dHRvbi54X3Jvb3QsIChpbnQpZXZlbnQtPmJ1dHRvbi55X3Jvb3QpOwor
ICAgICAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19TSElGVF9NQVNL
ICE9IDA7CisgICAgICAgIG1fY3RybEtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUgJiBHREtfQ09O
VFJPTF9NQVNLICE9IDA7CisgICAgICAgIG1fYWx0S2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAm
IEdES19NT0QxX01BU0sgIT0gMDsKKyAgICAgICAgbV9tZXRhS2V5ID0gZXZlbnQtPmJ1dHRvbi5z
dGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBtb3VzZSBldmVudFxu
Iik7Ci0gICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJVbmtub3duIG1vdXNlIGV2ZW50XG4iKTsKKyAgICAgICAgYXNzZXJ0KDApOwog
ICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDE3
ICsyMiwxNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
KyNkZWZpbmUgV0lOMzJfQ09NUElMRV9IQUNLCisKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAj
aW5jbHVkZSAiVGV4dEZpZWxkLmgiCi0jaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKICNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiTGlzdEJveC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCkBA
IC00MSwxMSArNDEsNyBAQAogI2luY2x1ZGUgIlNsaWRlci5oIgogI2luY2x1ZGUgIkN1cnNvci5o
IgogI2luY2x1ZGUgImxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUg
IktVUkwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgotI2luY2x1ZGUgIlNjcm9s
bEJhci5oIgotI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJTY3JlZW4uaCIKQEAgLTU1LDMz
NyArNTEsNTU0IEBACiAjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkJyb3dzZXJFeHRl
bnNpb25HZGsuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVGhlbWVHZGsuaCIKICNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5oIgogI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgotI2luY2x1ZGUgIkljb24u
aCIKLSNpbmNsdWRlICJJY29uTG9hZGVyLmgiCi0jaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgi
CisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJTU0xLZXlHZW5l
cmF0b3IuaCIKKyNpbmNsdWRlICJTb3VuZC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotbmFtZXNwYWNlIFdlYkNvcmUgewotc3RydWN0IFBsYXRmb3JtRGF0YVN0cnVjdAorCisjZGVm
aW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExF
TUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9O
X18pOyB9IHdoaWxlKDApCisKK1dpZGdldCogRnJhbWVHZGs6OmNyZWF0ZUphdmFBcHBsZXRXaWRn
ZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYpCiB7Ci19OworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLXN0
cnVjdCBQbGF0Zm9ybVJlc3BvbnNlU3RydWN0Cit2b2lkIFRleHRGaWVsZDo6c2VsZWN0QWxsKCkK
IHsKLX07CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KK3ZvaWQgVGV4dEZpZWxkOjphZGRTZWFy
Y2hSZXN1bHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitpbnQgVGV4dEZpZWxkOjpz
ZWxlY3Rpb25TdGFydCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KK2Jvb2wgVGV4dEZpZWxkOjpoYXNTZWxlY3RlZFRleHQoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CitTdHJpbmcgVGV4dEZpZWxkOjpz
ZWxlY3RlZFRleHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQordm9pZCBUZXh0RmllbGQ6OnNldEF1dG9TYXZlTmFtZShTdHJpbmcgY29u
c3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Citib29sIFRleHRGaWVsZDo6Y2hlY2tz
RGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9Cit2b2lkIFRleHRGaWVsZDo6c2V0U2VsZWN0aW9uKGludCwgaW50
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lkIFRleHRGaWVsZDo6c2V0TWF4UmVz
dWx0cyhpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK2Jvb2wgVGV4dEZpZWxkOjpl
ZGl0ZWQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CiAKLSNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6
IFVOSU1QTEVNRU5URUQ6ICVzIGluICVzOiVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBf
X0xJTkVfXyk7IH0gd2hpbGUoMCkKK1NsaWRlcjo6U2xpZGVyKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorSW50U2l6ZSBTbGlkZXI6OnNpemVIaW50KCkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRTaXplKCk7Cit9Cit2b2lkIFNsaWRlcjo6c2V0
VmFsdWUoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lkIFNsaWRlcjo6
c2V0TWF4VmFsdWUoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lkIFNs
aWRlcjo6c2V0TWluVmFsdWUoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitT
bGlkZXI6On5TbGlkZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lkIFNsaWRl
cjo6c2V0Rm9udChXZWJDb3JlOjpGb250IGNvbnN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorZG91YmxlIFNsaWRlcjo6dmFsdWUoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLXZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVCb3JkZXIoKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VQcmVzc0V2ZW50
VG9TY3JvbGxiYXIoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIFBsYXRmb3JtU2Nyb2xs
YmFyKikgeyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VQcmVzc0V2
ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJhbWUqKSB7IHJl
dHVybiB0cnVlOyB9Ci1ib29sIEZyYW1lVmlldzo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJm
cmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJhbWUqKSB7IHJldHVybiB0cnVl
OyB9Ci1ib29sIEZyYW1lVmlldzo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJhbWUqKSB7IHJldHVybiB0cnVlOyB9Ci1ib29sIEZy
YW1lVmlldzo6cGFzc1doZWVsRXZlbnRUb1N1YmZyYW1lKFBsYXRmb3JtV2hlZWxFdmVudCYsIEZy
YW1lKikgeyByZXR1cm4gdHJ1ZTsgfQordm9pZCBMaXN0Qm94OjpzZXRTZWxlY3RlZChpbnQsIGJv
b2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK0ludFNpemUgTGlzdEJveDo6c2l6ZUZv
ck51bWJlck9mTGluZXMoaW50KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIEludFNpemUoKTsKK30KK2Jvb2wgTGlzdEJveDo6aXNTZWxlY3RlZChpbnQpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK3ZvaWQgTGlzdEJv
eDo6YXBwZW5kSXRlbShEZXByZWNhdGVkU3RyaW5nIGNvbnN0JiwgTGlzdEJveEl0ZW1UeXBlLCBi
b29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lkIExpc3RCb3g6OmRvbmVBcHBl
bmRpbmdJdGVtcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgTGlzdEJveDo6
c2V0V3JpdGluZ0RpcmVjdGlvbihUZXh0RGlyZWN0aW9uKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9Cit2b2lkIExpc3RCb3g6OnNldEVuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQordm9pZCBMaXN0Qm94OjpjbGVhcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KK2Jvb2wgTGlzdEJveDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAotdm9pZCBXaWRnZXQ6
OmVuYWJsZUZsdXNoRHJhd2luZygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBXaWRnZXQ6
OmlzRW5hYmxlZCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVdpZGdl
dDo6Rm9jdXNQb2xpY3kgV2lkZ2V0Ojpmb2N1c1BvbGljeSgpIGNvbnN0IHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIE5vRm9jdXM7IH0KLXZvaWQgV2lkZ2V0OjpkaXNhYmxlRmx1c2hEcmF3aW5n
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1HcmFwaGljc0NvbnRleHQqIFdpZGdldDo6bG9ja0Ry
YXdpbmdGb2N1cygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgV2lkZ2V0
Ojp1bmxvY2tEcmF3aW5nRm9jdXMoR3JhcGhpY3NDb250ZXh0KikgeyBub3RJbXBsZW1lbnRlZCgp
OyB9Ci12b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgpIHsgfQogCi12b2lkIFRleHRGaWVs
ZDo6c2VsZWN0QWxsKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFRleHRGaWVsZDo6YWRk
U2VhcmNoUmVzdWx0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1pbnQgVGV4dEZpZWxkOjpzZWxl
Y3Rpb25TdGFydCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wg
VGV4dEZpZWxkOjpoYXNTZWxlY3RlZFRleHQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiAwOyB9Ci1TdHJpbmcgVGV4dEZpZWxkOjpzZWxlY3RlZFRleHQoKSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQotdm9pZCBUZXh0RmllbGQ6OnNldEF1dG9T
YXZlTmFtZShTdHJpbmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgVGV4dEZp
ZWxkOjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRTZWxlY3Rpb24oaW50LCBpbnQp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBUZXh0RmllbGQ6OnNldE1heFJlc3VsdHMoaW50
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgVGV4dEZpZWxkOjplZGl0ZWQoKSBjb25zdCB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CitXaWRnZXQ6OkZvY3VzUG9saWN5IFNsaWRl
cjo6Zm9jdXNQb2xpY3koKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIENsaWNrRm9jdXM7Cit9CitXaWRnZXQ6OkZvY3VzUG9saWN5IExpc3RCb3g6OmZvY3VzUG9s
aWN5KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBDbGlja0Zv
Y3VzOworfQorV2lkZ2V0OjpGb2N1c1BvbGljeSBUZXh0RmllbGQ6OmZvY3VzUG9saWN5KCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBDbGlja0ZvY3VzOworfQog
Ci1TbGlkZXI6OlNsaWRlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotSW50U2l6ZSBTbGlkZXI6
OnNpemVIaW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gSW50U2l6ZSgpOyB9
Ci12b2lkIFNsaWRlcjo6c2V0VmFsdWUoZG91YmxlKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZv
aWQgU2xpZGVyOjpzZXRNYXhWYWx1ZShkb3VibGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9p
ZCBTbGlkZXI6OnNldE1pblZhbHVlKGRvdWJsZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1TbGlk
ZXI6On5TbGlkZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgU2xpZGVyOjpzZXRGb250
KFdlYkNvcmU6OkZvbnQgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWRvdWJsZSBTbGlk
ZXI6OnZhbHVlKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorQ3Vyc29y
OjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KIAotdm9pZCBMaXN0Qm94OjpzZXRTZWxlY3RlZChpbnQsIGJvb2wpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQotSW50U2l6ZSBMaXN0Qm94OjpzaXplRm9yTnVtYmVyT2ZMaW5lcyhpbnQpIGNv
bnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFNpemUoKTsgfQotYm9vbCBMaXN0Qm94
Ojppc1NlbGVjdGVkKGludCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQot
dm9pZCBMaXN0Qm94OjphcHBlbmRJdGVtKERlcHJlY2F0ZWRTdHJpbmcgY29uc3QmLCBMaXN0Qm94
SXRlbVR5cGUsIGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBMaXN0Qm94Ojpkb25l
QXBwZW5kaW5nSXRlbXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgTGlzdEJveDo6c2V0
V3JpdGluZ0RpcmVjdGlvbihUZXh0RGlyZWN0aW9uKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZv
aWQgTGlzdEJveDo6c2V0RW5hYmxlZChib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQg
TGlzdEJveDo6Y2xlYXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgTGlzdEJveDo6Y2hl
Y2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KK1BsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IEN1cnJl
bnRFdmVudFRhZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK1N0cmluZyBXZWJDb3Jl
OjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQogCi1XaWRnZXQ6OkZvY3VzUG9saWN5IFNsaWRlcjo6
Zm9jdXNQb2xpY3koKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBOb0ZvY3VzOyB9
Ci1XaWRnZXQ6OkZvY3VzUG9saWN5IExpc3RCb3g6OmZvY3VzUG9saWN5KCkgY29uc3QgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gTm9Gb2N1czsgfQotV2lkZ2V0OjpGb2N1c1BvbGljeSBUZXh0
RmllbGQ6OmZvY3VzUG9saWN5KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9G
b2N1czsgfQoraW50IFdlYkNvcmU6OmZpbmROZXh0U2VudGVuY2VGcm9tSW5kZXgoVUNoYXIgY29u
c3QqLCBpbnQsIGludCwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQordm9pZCBXZWJDb3JlOjpmaW5kU2VudGVuY2VCb3VuZGFyeShVQ2hhciBjb25zdCos
IGludCwgaW50LCBpbnQqLCBpbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitpbnQg
V2ViQ29yZTo6ZmluZE5leHRXb3JkRnJvbUluZGV4KFVDaGFyIGNvbnN0KiwgaW50LCBpbnQsIGJv
b2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAotQ3Vyc29y
OjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQog
Ci1QbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChjb25zdCBDdXJyZW50RXZl
bnRUYWcmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVN0cmluZyBXZWJDb3JlOjpzZWFyY2hhYmxl
SW5kZXhJbnRyb2R1Y3Rpb24oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsg
fQordm9pZCBGcmFtZUdkazo6Zm9jdXNXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9Cit2b2lkIEZyYW1lR2RrOjp1bmZvY3VzV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorYm9vbCBGcmFtZUdkazo6bG9jYXRpb25iYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQordm9pZCBGcmFtZUdkazo6aXNzdWVSZWRv
Q29tbWFuZCh2b2lkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitLSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZSogRnJhbWVHZGs6OmdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCAq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CitLSlM6OkJpbmRp
bmdzOjpJbnN0YW5jZSogRnJhbWVHZGs6OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0
ICopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK0tKUzo6Qmlu
ZGluZ3M6OlJvb3RPYmplY3QqIEZyYW1lR2RrOjpiaW5kaW5nUm9vdE9iamVjdCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVHZGs6OmNhblJl
ZG8oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Citi
b29sIEZyYW1lR2RrOjpjYW5VbmRvKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQordm9pZCBGcmFtZUdkazo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhQ
YXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorYm9vbCBGcmFtZUdkazo6cnVuSmF2YVNjcmlwdFByb21wdChTdHJpbmcgY29uc3QmLCBT
dHJpbmcgY29uc3QmLCBTdHJpbmcgJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorYm9vbCBGcmFtZUdkazo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9Cit2b2lkIEZyYW1l
R2RrOjpwcmludCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK0tKUzo6QmluZGluZ3M6
Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQordm9pZCBGcmFtZUdk
azo6aXNzdWVDdXRDb21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBG
cmFtZUdkazo6aXNzdWVDb3B5Q29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
K3ZvaWQgRnJhbWVHZGs6Omlzc3VlVW5kb0NvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9Cit2b2lkIEZyYW1lR2RrOjppc3N1ZVBhc3RlQ29tbWFuZCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KK3ZvaWQgRnJhbWVHZGs6OnNjaGVkdWxlQ2xvc2UoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9Citib29sIEZyYW1lR2RrOjptZW51YmFyVmlzaWJsZSgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVHZGs6OnBl
cnNvbmFsYmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KK2Jvb2wgRnJhbWVHZGs6OnN0YXR1c2JhclZpc2libGUoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Citib29sIEZyYW1lR2RrOjp0b29sYmFyVmlzaWJs
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK3ZvaWQgRnJh
bWVHZGs6Omlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KK2Jvb2wgRnJhbWVHZGs6OmNhblBhc3RlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQogCi1pbnQgV2ViQ29yZTo6ZmluZE5leHRTZW50ZW5jZUZy
b21JbmRleChVQ2hhciBjb25zdCosIGludCwgaW50LCBib29sKSB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiAwOyB9Ci12b2lkIFdlYkNvcmU6OmZpbmRTZW50ZW5jZUJvdW5kYXJ5KFVDaGFyIGNv
bnN0KiwgaW50LCBpbnQsIGludCosIGludCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotaW50IFdl
YkNvcmU6OmZpbmROZXh0V29yZEZyb21JbmRleChVQ2hhciBjb25zdCosIGludCwgaW50LCBib29s
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CitlbnVtIFdlYkNvcmU6Ok9iamVjdENv
bnRlbnRUeXBlIEZyYW1lR2RrOjpvYmplY3RDb250ZW50VHlwZShLVVJMIGNvbnN0JiwgU3RyaW5n
IGNvbnN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAoT2JqZWN0Q29u
dGVudFR5cGUpMDsKK30KK2Jvb2wgRnJhbWVHZGs6OmNhbkdvQmFja09yRm9yd2FyZChpbnQpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAotbmFtZXNw
YWNlIFdlYkNvcmUgewordm9pZCBGcmFtZUdkazo6Z29CYWNrT3JGb3J3YXJkKGludCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQogCi1WZWN0b3I8Y2hhcj4gU2VydmVTeW5jaHJvbm91c1Jl
cXVlc3QoTG9hZGVyKixEb2NMb2FkZXIqLFJlc291cmNlTG9hZGVyKixLVVJMJixEZXByZWNhdGVk
U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPGNoYXI+KCk7IH0KK2lu
dCBGcmFtZUdkazo6Z2V0SGlzdG9yeUxlbmd0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KIAorS1VSTCBGcmFtZUdkazo6aGlzdG9yeVVSTChpbnQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gS1VSTCgpOwogfQogCi12b2lkIEZyYW1l
R2RrOjpmb2N1c1dpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUdkazo6
dW5mb2N1c1dpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBGcmFtZUdkazo6bG9j
YXRpb25iYXJWaXNpYmxlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBG
cmFtZUdkazo6aXNzdWVSZWRvQ29tbWFuZCh2b2lkKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0T2JqZWN0SW5zdGFuY2VGb3JXaWRn
ZXQoV2lkZ2V0ICopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLUtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0RW1iZWRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQg
KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotS0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogRnJhbWVHZGs6OmJpbmRpbmdSb290T2JqZWN0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQotV2lkZ2V0KiBGcmFtZUdkazo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25z
dCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JikgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6Y2FuUmVkbygpIGNv
bnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6OmNhblVu
ZG8oKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZyYW1lR2Rr
OjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVHZGs6OnJ1bkphdmFTY3JpcHRQcm9t
cHQoU3RyaW5nIGNvbnN0JiwgU3RyaW5nIGNvbnN0JiwgU3RyaW5nICYpIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6OnNob3VsZEludGVycnVwdEphdmFTY3Jp
cHQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBGcmFtZUdkazo6
cHJpbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBG
cmFtZUdkazo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6cGFzc01vdXNlRG93bkV2ZW50VG9X
aWRnZXQoV2lkZ2V0KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFt
ZUdkazo6aXNzdWVDdXRDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1l
R2RrOjppc3N1ZUNvcHlDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1l
R2RrOjppc3N1ZVVuZG9Db21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1TdHJpbmcgRnJh
bWVHZGs6Om1pbWVUeXBlRm9yRmlsZU5hbWUoU3RyaW5nIGNvbnN0JikgY29uc3QgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLXZvaWQgRnJhbWVHZGs6Omlzc3VlUGFzdGVD
b21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjpzY2hlZHVsZUNs
b3NlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjptYXJrTWlzc3BlbGxp
bmdzKFdlYkNvcmU6OlNlbGVjdGlvbiBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9v
bCBGcmFtZUdkazo6bWVudWJhclZpc2libGUoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAw
OyB9Ci1ib29sIEZyYW1lR2RrOjpwZXJzb25hbGJhclZpc2libGUoKSB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiAwOyB9Ci1ib29sIEZyYW1lR2RrOjpzdGF0dXNiYXJWaXNpYmxlKCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6dG9vbGJhclZpc2libGUo
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZyYW1lR2RrOjppc3N1ZVRy
YW5zcG9zZUNvbW1hbmQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVHZGs6OmNh
blBhc3RlKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotZW51bSBXZWJD
b3JlOjpPYmplY3RDb250ZW50VHlwZSBGcmFtZUdkazo6b2JqZWN0Q29udGVudFR5cGUoS1VSTCBj
b25zdCYsIFN0cmluZyBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIChPYmplY3RD
b250ZW50VHlwZSkwOyB9Ci1ib29sIEZyYW1lR2RrOjpjYW5Hb0JhY2tPckZvcndhcmQoaW50KSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZyYW1lR2RrOjppc3N1
ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wg
RnJhbWVHZGs6OmlzTG9hZFR5cGVSZWxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBm
YWxzZTsgfQotS1VSTCBGcmFtZUdkazo6b3JpZ2luYWxSZXF1ZXN0VVJMKCkgY29uc3QgeyByZXR1
cm4gS1VSTCgpOyB9Ci1QbHVnaW4qIEZyYW1lR2RrOjpjcmVhdGVQbHVnaW4oRWxlbWVudCosIEtV
UkwgY29uc3QmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
U3RyaW5nIGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQordm9pZCBGcmFt
ZUdkazo6aXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorUGx1Z2luKiBGcmFtZUdkazo6Y3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBLVVJM
IGNvbnN0JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFN0
cmluZyBjb25zdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
IAotYm9vbCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpjYW5SdW5Nb2RhbCgpIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6Y3JlYXRlTmV3V2lu
ZG93KHN0cnVjdCBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1ZXN0IGNvbnN0Jiwgc3RydWN0IFdlYkNv
cmU6OldpbmRvd0ZlYXR1cmVzIGNvbnN0JiwgRnJhbWUqJikgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Ci12b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OmNyZWF0ZU5ld1dpbmRvdyhzdHJ1Y3QgV2ViQ29y
ZTo6RnJhbWVMb2FkUmVxdWVzdCBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBC
cm93c2VyRXh0ZW5zaW9uR2RrOjpjYW5SdW5Nb2RhbE5vdygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6cnVuTW9kYWwoKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6Z29CYWNrT3JGb3J3YXJk
KGludCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1LVVJMIEJyb3dzZXJFeHRlbnNpb25HZGs6Omhp
c3RvcnlVUkwoaW50IGRpc3RhbmNlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBLVVJMKCk7
IH0KLUJyb3dzZXJFeHRlbnNpb25HZGs6OkJyb3dzZXJFeHRlbnNpb25HZGsoV2ViQ29yZTo6RnJh
bWUqKSB7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6c2V0VHlwZWRJY29uVVJMKEtVUkwg
Y29uc3QmLCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6c2V0
SWNvblVSTChLVVJMIGNvbnN0JikgeyB9Ci1pbnQgQnJvd3NlckV4dGVuc2lvbkdkazo6Z2V0SGlz
dG9yeUxlbmd0aCgpIHsgcmV0dXJuIDA7IH0KK2ludCBXZWJDb3JlOjpzY3JlZW5EZXB0aFBlckNv
bXBvbmVudChjb25zdCBQYWdlKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorYm9vbCBXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUoY29uc3QgUGFnZSopCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLWludCBXZWJD
b3JlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudChjb25zdCBQYWdlKikgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDsgfQotYm9vbCBXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUoY29uc3Qg
UGFnZSopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0KIC8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIENvbXBs
ZXRlbHkgZW1wdHkgc3R1YnMgKG1vc3RseSB0byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KIC8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0
YXRpYyBDdXJzb3IgbG9jYWxDdXJzb3I7Ci1jb25zdCBDdXJzb3ImIFdlYkNvcmU6Om1vdmVDdXJz
b3IoKSB7IHJldHVybiBsb2NhbEN1cnNvcjsgfQorY29uc3QgQ3Vyc29yJiBXZWJDb3JlOjptb3Zl
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gbG9jYWxDdXJzb3I7Cit9CiAKIGJvb2wgQVhPYmplY3RD
YWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiAKLWJvb2wgV2ViQ29yZTo6aGlz
dG9yeUNvbnRhaW5zKERlcHJlY2F0ZWRTdHJpbmcgY29uc3QmKSB7IHJldHVybiBmYWxzZTsgfQot
U3RyaW5nIFdlYkNvcmU6OnN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpIHsgcmV0dXJuICJTdWJt
aXQiOyB9Ci1TdHJpbmcgV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4dCgpIHsgcmV0dXJuIERl
cHJlY2F0ZWRTdHJpbmcoKTsgfQotU3RyaW5nIFdlYkNvcmU6OnJlc2V0QnV0dG9uRGVmYXVsdExh
YmVsKCkgeyByZXR1cm4gIlJlc2V0IjsgfQotU3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0b25DaG9v
c2VGaWxlTGFiZWwoKSB7IHJldHVybiAiQnJvd3NlLi4uIjsgfQotU3RyaW5nIFdlYkNvcmU6OmZp
bGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK2Jvb2wg
V2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKERlcHJlY2F0ZWRTdHJpbmcgY29uc3QmKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KK1N0cmluZyBXZWJDb3JlOjpzdWJtaXRCdXR0b25EZWZhdWx0TGFi
ZWwoKQoreworICAgIHJldHVybiAiU3VibWl0IjsKK30KK1N0cmluZyBXZWJDb3JlOjppbnB1dEVs
ZW1lbnRBbHRUZXh0KCkKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworfQorU3Ry
aW5nIFdlYkNvcmU6OnJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkKK3sKKyAgICByZXR1cm4gIlJl
c2V0IjsKK30KK1N0cmluZyBXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UoKQoreworICAgIHJldHVy
biAiZW4iOworfQorU3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwoKQor
eworICAgIHJldHVybiAiQ2hvb3NlIEZpbGUiOworfQogCi1TdHJpbmcgV2ViQ29yZTo6ZGVmYXVs
dExhbmd1YWdlKCkgeyByZXR1cm4gImVuIjsgfQordm9pZCBXZWJDb3JlOjpmaW5kV29yZEJvdW5k
YXJ5KFVDaGFyIGNvbnN0KiBzdHIsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwg
aW50KiBlbmQpCit7CisgICAgKnN0YXJ0ID0gcG9zaXRpb247CisgICAgKmVuZCA9IHBvc2l0aW9u
OworfQogCi12b2lkIFdlYkNvcmU6OmZpbmRXb3JkQm91bmRhcnkoVUNoYXIgY29uc3QqIHN0ciwg
aW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkgeypzdGFydCA9IHBv
c2l0aW9uOyAqZW5kID0gcG9zaXRpb247IH0KK1BsdWdpbkluZm8qUGx1Z0luSW5mb1N0b3JlOjpj
cmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkKK3sKKyAgICByZXR1cm4g
MDsKK30KK3Vuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAorewor
ICAgIHJldHVybiAwOworfQorYm9vbCBXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRz
TUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
Cit2b2lkIFdlYkNvcmU6OnJlZnJlc2hQbHVnaW5zKGJvb2wpCit7IH0KIAotUGx1Z2luSW5mbypQ
bHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVk
KSB7IHJldHVybiAwO30KLXVuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBj
b25zdCB7IHJldHVybiAwOyB9Ci1ib29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9yZTo6c3VwcG9y
dHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmKSB7IHJldHVybiBmYWxzZTsgfQotdm9p
ZCBXZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IH0KK3ZvaWQgRnJhbWVHZGs6OnJlc3Rv
cmVEb2N1bWVudFN0YXRlKCkKK3sgfQordm9pZCBGcmFtZUdkazo6cGFydENsZWFyZWRJbkJlZ2lu
KCkKK3sgfQordm9pZCBGcmFtZUdkazo6Y3JlYXRlRW1wdHlEb2N1bWVudCgpCit7IH0KK1N0cmlu
ZyBGcmFtZUdkazo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KK3ZvaWQgRnJhbWVHZGs6OmhhbmRsZWRPbmxvYWRFdmVudHMoKQoreyB9CitSYW5n
ZSogRnJhbWVHZGs6Om1hcmtlZFRleHRSYW5nZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9
Citib29sIEZyYW1lR2RrOjpsYXN0RXZlbnRJc01vdXNlVXAoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KK3ZvaWQgRnJhbWVHZGs6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoU3RyaW5nIGNv
bnN0JiwgdW5zaWduZWQgaW50LCBTdHJpbmcgY29uc3QmKQoreyB9CiAKLXZvaWQgV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXI6OmFzc2VtYmxlUmVzcG9uc2VIZWFkZXJzKCkgY29uc3QgeyB9Ci12b2lk
IFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpyZXRyaWV2ZUNoYXJzZXQoKSBjb25zdCB7IH0KK3Zv
aWQgRnJhbWVHZGs6OnNhdmVEb2N1bWVudFN0YXRlKCkKK3sgfQordm9pZCBGcmFtZUdkazo6cmVn
aXN0ZXJDb21tYW5kRm9yVW5kbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikKK3sg
fQordm9pZCBGcmFtZUdkazo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnModm9pZCkKK3sgfQorU3Ry
aW5nIEZyYW1lR2RrOjppbmNvbWluZ1JlZmVycmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9Cit2b2lkIEZyYW1lR2RrOjptYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRz
KFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiBjb25zdCYpCit7IH0KIAotdm9pZCBGcmFtZUdkazo6
cmVzdG9yZURvY3VtZW50U3RhdGUoKSB7IH0KLXZvaWQgRnJhbWVHZGs6OnBhcnRDbGVhcmVkSW5C
ZWdpbigpIHsgfQotdm9pZCBGcmFtZUdkazo6Y3JlYXRlRW1wdHlEb2N1bWVudCgpIHsgfQotU3Ry
aW5nIEZyYW1lR2RrOjpvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygp
OyB9Ci12b2lkIEZyYW1lR2RrOjpoYW5kbGVkT25sb2FkRXZlbnRzKCkgeyB9Ci1SYW5nZSogRnJh
bWVHZGs6Om1hcmtlZFRleHRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVH
ZGs6Omxhc3RFdmVudElzTW91c2VVcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIEZy
YW1lR2RrOjphZGRNZXNzYWdlVG9Db25zb2xlKFN0cmluZyBjb25zdCYsIHVuc2lnbmVkIGludCwg
U3RyaW5nIGNvbnN0JikgeyB9Ci1ib29sIEZyYW1lR2RrOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24o
Y29uc3QgU2VsZWN0aW9uJiwgY29uc3QgU2VsZWN0aW9uJiwgV2ViQ29yZTo6RUFmZmluaXR5LCBi
b29sKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci1ib29sIEZyYW1lR2RrOjpzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotdm9pZCBG
cmFtZUdkazo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihXZWJDb3JlOjpTZWxlY3Rpb24gY29u
c3QmLCBib29sKSB7IH0KLUZyYW1lKiBGcmFtZUdkazo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3Ry
aW5nJiByZWZlcnJlcikgeyByZXR1cm4gMDsgfQogCi12b2lkIEZyYW1lR2RrOjpzYXZlRG9jdW1l
bnRTdGF0ZSgpIHsgfQotdm9pZCBGcmFtZUdkazo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhQYXNz
UmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikgeyB9Ci12b2lkIEZyYW1lR2RrOjpjbGVhclVu
ZG9SZWRvT3BlcmF0aW9ucyh2b2lkKSB7IH0KLVN0cmluZyBGcmFtZUdkazo6aW5jb21pbmdSZWZl
cnJlcigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIEZyYW1lR2RrOjptYXJrTWlz
c3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiBjb25zdCYp
IHsgfQotdm9pZCBGcmFtZUdkazo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFNlbGVj
dGlvbiYpIHsgfQorVGV4dEZpZWxkOjpUZXh0RmllbGQoVGV4dEZpZWxkOjpUeXBlKQoreyB9CitU
ZXh0RmllbGQ6On5UZXh0RmllbGQoKQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0Rm9udChXZWJD
b3JlOjpGb250IGNvbnN0JikKK3sgfQordm9pZCBUZXh0RmllbGQ6OnNldEFsaWdubWVudChIb3Jp
em9udGFsQWxpZ25tZW50KQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0V3JpdGluZ0RpcmVjdGlv
bihUZXh0RGlyZWN0aW9uKQoreyB9CitpbnQgVGV4dEZpZWxkOjptYXhMZW5ndGgoKSBjb25zdAor
eworICAgIHJldHVybiAwOworfQordm9pZCBUZXh0RmllbGQ6OnNldE1heExlbmd0aChpbnQpCit7
IH0KK1N0cmluZyBUZXh0RmllbGQ6OnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmco
KTsKK30KK3ZvaWQgVGV4dEZpZWxkOjpzZXRUZXh0KFN0cmluZyBjb25zdCYpCit7IH0KK2ludCBU
ZXh0RmllbGQ6OmN1cnNvclBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KK3Zv
aWQgVGV4dEZpZWxkOjpzZXRDdXJzb3JQb3NpdGlvbihpbnQpCit7IH0KK3ZvaWQgVGV4dEZpZWxk
OjpzZXRFZGl0ZWQoYm9vbCkKK3sgfQordm9pZCBUZXh0RmllbGQ6OnNldFJlYWRPbmx5KGJvb2wp
Cit7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRQbGFjZWhvbGRlclN0cmluZyhTdHJpbmcgY29uc3Qm
KQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0Q29sb3JzKENvbG9yIGNvbnN0JiwgQ29sb3IgY29u
c3QmKQoreyB9CitJbnRTaXplIFRleHRGaWVsZDo6c2l6ZUZvckNoYXJhY3RlcldpZHRoKGludCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZSgpOworfQoraW50IFRleHRGaWVsZDo6YmFzZWxp
bmVQb3NpdGlvbihpbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIFRleHRGaWVs
ZDo6c2V0TGl2ZVNlYXJjaChib29sKQoreyB9CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK0xpc3RC
b3g6Okxpc3RCb3goKQoreyB9CitMaXN0Qm94Ojp+TGlzdEJveCgpCit7IH0KK3ZvaWQgTGlzdEJv
eDo6c2V0U2VsZWN0aW9uTW9kZShMaXN0Qm94OjpTZWxlY3Rpb25Nb2RlKQoreyB9Cit2b2lkIExp
c3RCb3g6OnNldEZvbnQoV2ViQ29yZTo6Rm9udCBjb25zdCYpCit7IH0KIAotYm9vbCBDaGVja0lm
UmVsb2FkaW5nKERvY0xvYWRlciopIHsgcmV0dXJuIGZhbHNlOyB9Ci10aW1lX3QgQ2FjaGVPYmpl
Y3RFeHBpcmVzVGltZShEb2NMb2FkZXIqLCBQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiAwOyB9
Ci12b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2Uq
KSB7IH0KLURlcHJlY2F0ZWRTdHJpbmcgUmVzcG9uc2VVUkwoUGxhdGZvcm1SZXNwb25zZSkgeyBy
ZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOyB9Ci1ib29sIElzUmVzcG9uc2VVUkxFcXVhbFRvVVJM
KFBsYXRmb3JtUmVzcG9uc2UgLCBjb25zdCBTdHJpbmcmIFVSTCkgeyByZXR1cm4gZmFsc2U7IH0K
LWJvb2wgUmVzcG9uc2VJc011bHRpcGFydChQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiBmYWxz
ZTsgfQotRGVwcmVjYXRlZFN0cmluZyBSZXNwb25zZU1JTUVUeXBlKFBsYXRmb3JtUmVzcG9uc2Up
IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsgfQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0
UmVzcG9uc2UoUGxhdGZvcm1SZXNwb25zZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIENh
Y2hlZFJlc291cmNlOjpzZXRBbGxEYXRhKFBsYXRmb3JtRGF0YSkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9Ci0KK0NvbG9yIFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkKK3sKKyAgICByZXR1cm4gMHhG
RjAwMDBGRjsKIH0KK3ZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlv
bih2b2lkICgqKSgpKQoreyB9CiAKLXZvaWQgV2lkZ2V0OjpzZXRFbmFibGVkKGJvb2wpIHsgfQot
dm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QgY29uc3QmKSB7IH0K
LXZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpIHsgfQotdm9pZCBXaWRnZXQ6OmludmFs
aWRhdGUoKSB7IH0KLXZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBy
KSB7IH0KK3ZvaWQgRnJhbWU6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCit7IH0KIAotdm9pZCBT
Y3JvbGxWaWV3OjphZGRDaGlsZChXaWRnZXQqKSB7IH0KLXZvaWQgU2Nyb2xsVmlldzo6cmVtb3Zl
Q2hpbGQoV2lkZ2V0KikgeyB9Ci12b2lkIFNjcm9sbFZpZXc6OnNjcm9sbFBvaW50UmVjdXJzaXZl
bHkoaW50IHgsIGludCB5KSB7IH0KLWJvb2wgU2Nyb2xsVmlldzo6aW5XaW5kb3coKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci12b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1XaGVl
bEV2ZW50JikgeyB9Ci12b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoKSB7IH0KLWlu
dCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxJbmZvKHNob3J0IHR5cGUsIGludCBjdXJyZW50LCBp
bnQgbWF4LCBpbnQgcGFnZVNpemUpIHsgcmV0dXJuIDA7IH0KLUludFBvaW50IFNjcm9sbFZpZXc6
OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBw
b2ludDsgfQotSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyhjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIHBvaW50OyB9Ci1QbGF0Zm9ybVNjcm9sbGJhciog
U2Nyb2xsVmlldzo6c2Nyb2xsYmFyVW5kZXJNb3VzZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IG1vdXNlRXZlbnQpIHsgcmV0dXJuIDA7IH0KK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBUaWxlUnVsZSwg
VGlsZVJ1bGUsIENvbXBvc2l0ZU9wZXJhdG9yKQoreyB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
dG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCi0gICAgICAgIGNvbnN0IEludFNpemUm
IGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25z
dCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coSW50U2l6ZSBjb25zdCYsIGludCwgQ29sb3Ig
Y29uc3QmKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpIHsgfQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIHsgfQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkgeyB9Ci12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIHsgfQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVXaWR0aChmbG9hdCkgeyB9Ci12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lSm9pbihMaW5lSm9pbikgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1p
dChmbG9hdCkgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQpIHsgfQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvcikgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJikgeyB9Ci12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0KSB7IH0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmKSB7IH0KK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNv
bnN0IEludFBvaW50JiwgaW50KSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30K
K3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25G
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgaW50LCBib29s
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLVBh
dGg6OlBhdGgoKXsgfQotUGF0aDo6flBhdGgoKXsgfQotUGF0aDo6UGF0aChjb25zdCBQYXRoJil7
IH0KLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIFdpbmRSdWxlIHJ1bGUp
IGNvbnN0eyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0
U2l6ZSYpeyB9Ci1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QgeyByZXR1cm4g
RmxvYXRSZWN0KCk7IH0KLVBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJil7IHJldHVy
biAqIHRoaXM7IH0KLXZvaWQgUGF0aDo6Y2xlYXIoKSB7IH0KLXZvaWQgUGF0aDo6bW92ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmKSB7IH0KLXZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9p
bnQmKSB7IH0KLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSB7IH0KLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KLXZv
aWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBm
bG9hdCkgeyB9Ci12b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpIHsgfQotdm9pZCBQYXRoOjphZGRB
cmMoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wpIHsgfQotdm9p
ZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotdm9pZCBQYXRoOjphZGRFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIHsgfQorbmFtZXNwYWNlIFdlYkNvcmUgeworVmVjdG9yPFN0
cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CitTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nICZjaGFsbGVu
Z2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVybCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CiAK
LVRleHRGaWVsZDo6VGV4dEZpZWxkKFRleHRGaWVsZDo6VHlwZSkgeyB9Ci1UZXh0RmllbGQ6On5U
ZXh0RmllbGQoKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRGb250KFdlYkNvcmU6OkZvbnQgY29u
c3QmKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRBbGlnbm1lbnQoSG9yaXpvbnRhbEFsaWdubWVu
dCkgeyB9Ci12b2lkIFRleHRGaWVsZDo6c2V0V3JpdGluZ0RpcmVjdGlvbihUZXh0RGlyZWN0aW9u
KSB7IH0KLWludCBUZXh0RmllbGQ6Om1heExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLXZv
aWQgVGV4dEZpZWxkOjpzZXRNYXhMZW5ndGgoaW50KSB7IH0KLVN0cmluZyBUZXh0RmllbGQ6OnRl
eHQoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotdm9pZCBUZXh0RmllbGQ6OnNldFRleHQo
U3RyaW5nIGNvbnN0JikgeyB9Ci1pbnQgVGV4dEZpZWxkOjpjdXJzb3JQb3NpdGlvbigpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRDdXJzb3JQb3NpdGlvbihpbnQpIHsg
fQotdm9pZCBUZXh0RmllbGQ6OnNldEVkaXRlZChib29sKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpz
ZXRSZWFkT25seShib29sKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRQbGFjZWhvbGRlclN0cmlu
ZyhTdHJpbmcgY29uc3QmKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRDb2xvcnMoQ29sb3IgY29u
c3QmLCBDb2xvciBjb25zdCYpIHsgfQotSW50U2l6ZSBUZXh0RmllbGQ6OnNpemVGb3JDaGFyYWN0
ZXJXaWR0aChpbnQpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQotaW50IFRleHRGaWVsZDo6
YmFzZWxpbmVQb3NpdGlvbihpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLXZvaWQgVGV4dEZpZWxk
OjpzZXRMaXZlU2VhcmNoKGJvb2wpIHsgfQordm9pZCBzeXN0ZW1CZWVwKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQogCi1QbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIo
U2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgOiBTY3JvbGxiYXIoY2xpZW50LCBv
cmllbnRhdGlvbiwgY29udHJvbFNpemUpIHsgfQotUGxhdGZvcm1TY3JvbGxiYXI6On5QbGF0Zm9y
bVNjcm9sbGJhcigpIHsgfQotaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KLWludCBQbGF0Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gMDsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0RW5hYmxlZChib29sKSB7IH0KLXZv
aWQgUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QpIHsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQ
b3NpdGlvbigpIHsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQcm9wb3J0
aW9uKCkgeyB9Ci12b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3Qm
KSB7IH0KIAotTGlzdEJveDo6TGlzdEJveCgpIHsgfQotTGlzdEJveDo6fkxpc3RCb3goKSB7IH0K
LXZvaWQgTGlzdEJveDo6c2V0U2VsZWN0aW9uTW9kZShMaXN0Qm94OjpTZWxlY3Rpb25Nb2RlKSB7
IH0KLXZvaWQgTGlzdEJveDo6c2V0Rm9udChXZWJDb3JlOjpGb250IGNvbnN0JikgeyB9Ci0KLUZp
bGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihEb2N1bWVudCosIFJlbmRlckZpbGVVcGxvYWRDb250cm9s
KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1GaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9Ci1QYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBGaWxlQ2hvb3Nlcjo6
Y3JlYXRlKERvY3VtZW50KiwgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqKSB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNob29zZXIoKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0KLVN0cmluZyBGaWxlQ2hvb3Nlcjo6YmFzZW5hbWVGb3JXaWR0
aChpbnQgd2lkdGgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9
Ci12b2lkIEZpbGVDaG9vc2VyOjpkaXNjb25uZWN0VXBsb2FkQ29udHJvbCgpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQotdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVuYW1lKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQotQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5n
Q29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9Ci12b2lkIFdlYkNvcmU6OnNldEZvY3VzUmlu
Z0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9Ci0KLXZvaWQgRnJhbWU6OnNldE5l
ZWRzUmVhcHBseVN0eWxlcygpIHsgfQotCi12b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgVGlsZVJ1bGUsIFRp
bGVSdWxlLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9Ci0KLXZvaWQgUmVuZGVyVGhlbWVHZGs6OnNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQotYm9vbCBSZW5kZXJUaGVtZUdk
azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgUmVuZGVyVGhlbWVH
ZGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQotdm9pZCBSZW5kZXJUaGVt
ZUdkazo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCogZSkgY29uc3Qge30KLWJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLUljb246Okljb24oKSB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KLUljb246On5JY29uKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1QYXNzUmVmUHRy
PEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFBhc3NSZWZQdHI8SWNvbj4obmV3IEljb24oKSk7IH0KLXZv
aWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotCi12b2lkIEljb25Mb2FkZXI6OnN0b3BMb2FkaW5nKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9IAotdm9pZCBJY29uTG9hZGVyOjpzdGFydExvYWRpbmcoKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0gCi1JY29uTG9hZGVyKiBJY29uTG9hZGVyOjpjcmVhdGVGb3JGcmFtZShGcmFt
ZSAqZnJhbWUpIHsgcmV0dXJuIDA7IH0gCi0KLWJvb2wgSWNvbkRhdGFiYXNlOjppc0ljb25FeHBp
cmVkRm9ySWNvblVSTChjb25zdCBTdHJpbmcmIHVybCkgeyByZXR1cm4gZmFsc2U7IH0KLWJvb2wg
SWNvbkRhdGFiYXNlOjpoYXNFbnRyeUZvckljb25VUkwoY29uc3QgU3RyaW5nJiB1cmwpIHsgcmV0
dXJuIGZhbHNlOyB9Ci1JY29uRGF0YWJhc2UqIEljb25EYXRhYmFzZTo6c2hhcmVkSWNvbkRhdGFi
YXNlKCkgeyByZXR1cm4gMDsgfQotYm9vbCBJY29uRGF0YWJhc2U6OnNldEljb25VUkxGb3JQYWdl
VVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKSB7IHJldHVy
biBmYWxzZTsgfQotCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBJbnRQb2ludCYsIGludCkg
Y29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25z
dCBGbG9hdFBvaW50JikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1mbG9hdCBGb250Ojpm
bG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYp
IGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWludCBGb250OjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUm
LCBpbnQsIGJvb2wpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMoKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9Ci1TdHJpbmcgc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3Qg
U3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVybCkgeyByZXR1cm4gU3RyaW5n
KCk7IH0KLQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU3lzdGVtVGltZUxpbnV4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TeXN0ZW1UaW1lTGludXguY3Bw
CShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1N5c3RlbVRpbWVMaW51
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU3lzdGVtVGltZS5oIgotCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1kb3VibGUgY3VycmVudFRpbWUoKQotewotICBzdHJ1Y3QgdGltZXZhbCBhVGlt
ZXZhbDsKLSAgc3RydWN0IHRpbWV6b25lIGFUaW1lem9uZTsKLSAKLSAgZ2V0dGltZW9mZGF5KCAm
YVRpbWV2YWwsICZhVGltZXpvbmUgKTsKLSAgcmV0dXJuIChkb3VibGUpYVRpbWV2YWwudHZfc2Vj
ICsgKGRvdWJsZSkoYVRpbWV2YWwudHZfdXNlYyAvIDEwMDAwMDAuMCApOwotfQotCi19CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsuaAkocmV2aXNpb24gMTcz
OTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNv
cmUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBSRU5ERVJfUE9QVVBNRU5VX0dES19ICi0jZGVmaW5lIFJFTkRFUl9QT1BVUE1FTlVfR0RL
X0gKLQotI2luY2x1ZGUgIlBvcHVwTWVudS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEhUTUxPcHRpb25FbGVtZW50OwotY2xhc3MgSFRNTE9wdEdyb3VwRWxlbWVudDsKLQotY2xh
c3MgUG9wdXBNZW51R2RrIDogcHVibGljIFBvcHVwTWVudSB7Ci1wdWJsaWM6Ci0gICAgUG9wdXBN
ZW51R2RrKE5vZGUqLCAgUmVuZGVyTWVudUxpc3QqKTsKLSAgICB+UG9wdXBNZW51R2RrKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGUoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2hvd1BvcHVwKGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBp
bnQgaW5kZXgpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlUG9wdXAoKTsKLSAgICAKLXByb3RlY3Rl
ZDoKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU2VwYXJhdG9yKCk7Ci0gICAgdmlydHVhbCB2b2lkIGFk
ZEdyb3VwTGFiZWwoSFRNTE9wdEdyb3VwRWxlbWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBhZGRP
cHRpb24oSFRNTE9wdGlvbkVsZW1lbnQqKTsKLQotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvRnJhbWVHZGsuaAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9GcmFtZUdkay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3
MCArMjIsNTAgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBGcmFtZUdka19IXwog
I2RlZmluZSBGcmFtZUdka19IXwogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJXaW5k
b3dHZGsuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgPGdk
ay9nZGsuaD4KKyNpbmNsdWRlICJ3dGYvUmVmUHRyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYW1lR2RrOworY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBHcmFwaGljc0NvbnRleHRDYWlybzsKK2NsYXNzIFdpbmRvd0dkazsKK2NsYXNzIFBsYXRmb3Jt
V2hlZWxFdmVudDsKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKK2NsYXNzIFBsYXRmb3JtS2V5
Ym9hcmRFdmVudDsKK2NsYXNzIFBsYXRmb3JtU2Nyb2xsQmFyOworY2xhc3MgRWRpdG9yQ2xpZW50
OworY2xhc3MgRXZlbnQ7CiAKLWNsYXNzIEZyYW1lR2RrQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5GcmFtZUdka0NsaWVudCgpIHt9OwogCi0gICAgdmlydHVhbCB2b2lkIHNldEZyYW1l
KGNvbnN0IEZyYW1lR2RrKikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIG9wZW5VUkwoY29uc3Qg
S1VSTCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBTdHJpbmcmIG1l
dGhvZCwgY29uc3QgS1VSTCYsIGNvbnN0IEZvcm1EYXRhKikgPSAwOwotfTsKLQotY2xhc3MgRnJh
bWVHZGtDbGllbnREZWZhdWx0IDogcHVibGljIEZyYW1lR2RrQ2xpZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljICBSZXNvdXJjZUxvYWRlckNsaWVudCAKK2NsYXNzIEZy
YW1lR2RrIDogcHVibGljIEZyYW1lLCBSZXNvdXJjZUxvYWRlckNsaWVudAogewogcHVibGljOgot
Ci0gICAgRnJhbWVHZGtDbGllbnREZWZhdWx0KCk7Ci0gICAgdmlydHVhbCB+RnJhbWVHZGtDbGll
bnREZWZhdWx0KCk7Ci0KLSAgICAvLyBGcmFtZUdka0NsaWVudAotICAgIHZpcnR1YWwgdm9pZCBz
ZXRGcmFtZShjb25zdCBGcmFtZUdkayopOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuVVJMKGNvbnN0
IEtVUkwmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgY29uc3QgS1VSTCYsIGNvbnN0IEZvcm1EYXRhKik7Ci0KLSAgICAvLyBSZXNvdXJjZUxvYWRl
ckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlTG9hZGVy
KiwgUGxhdGZvcm1SZXNwb25zZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJl
c291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlY2Vp
dmVkQWxsRGF0YShSZXNvdXJjZUxvYWRlciosIFBsYXRmb3JtRGF0YSk7Ci0KLXByaXZhdGU6Ci0g
ICAgRnJhbWVHZGsqIG1fZnJhbWU7Ci0gICAgYm9vbCBtX2JlZ2luQ2FsbGVkIDogMTsKLQotfTsK
LQotY2xhc3MgRnJhbWVHZGsgOiBwdWJsaWMgRnJhbWUgewotcHVibGljOgotICAgIEZyYW1lR2Rr
KFBhZ2UqLCBFbGVtZW50Kik7Ci0gICAgRnJhbWVHZGsoR2RrRHJhd2FibGUqKTsKKyAgICBGcmFt
ZUdkayhQYWdlKiwgRWxlbWVudCosIFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PixXaW5kb3dHZGsq
IHdpbmRvdyk7CiAgICAgdmlydHVhbCB+RnJhbWVHZGsoKTsKLQotICAgIHZvaWQgaGFuZGxlR2Rr
RXZlbnQoR2RrRXZlbnQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlblVSTChjb25zdCBLVVJMJik7
CisgICAgdmlydHVhbCB2b2lkIG9wZW5VUkxSZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmKTsK
LQorICAgIHZpcnR1YWwgdm9pZCB1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jixj
b25zdCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUo
Y29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3Im
IGN1cnNvcik7CiAKICAgICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRU
eXBlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKICAgICB2aXJ0dWFsIFBs
dWdpbiogY3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpOwogCisgICAgdmly
dHVhbCBib29sIGlzTG9hZFR5cGVSZWxvYWQoKTsKKworICAgIHZpcnR1YWwgS1VSTCBvcmlnaW5h
bFJlcXVlc3RVUkwoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNsb3NlKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1c1dpbmRvdygpOwpAQCAtMTE1LDEyICs5NSwxMyBA
QAogICAgIHZpcnR1YWwgU3RyaW5nIG1pbWVUeXBlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJikg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3Jk
cyhjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxs
aW5ncyhjb25zdCBTZWxlY3Rpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5n
cyhjb25zdCBTZWxlY3Rpb24mKQorICAgIHt9CiAKICAgICB2aXJ0dWFsIGJvb2wgbGFzdEV2ZW50
SXNNb3VzZVVwKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFzc1N1YmZyYW1lRXZlbnRU
b1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgJiwgRnJhbWUqIHN1YmZyYW1l
ID0gMCk7CiAgICAgdmlydHVhbCBib29sIHBhc3NXaGVlbEV2ZW50VG9DaGlsZFdpZGdldChOb2Rl
Kik7CisgICAgdmlydHVhbCBib29sIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCop
OwogCiAgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdDsKIApAQCAt
MTM5LDEzICsxMjAsMjIgQEAKICAgICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUNvbW1hbmQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCk7CiAgICAg
dmlydHVhbCB2b2lkIGlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBi
b29sIGNsb3NlVHlwaW5nKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKGNvbnN0IFNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25z
dCBTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxs
U2VsZWN0aW5nKSBjb25zdDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBT
ZWxlY3Rpb24mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZykKKyAg
ICB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFNl
bGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQorICAgIHt9OworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFNl
bGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKwogICAg
IHZpcnR1YWwgdm9pZCBwYXJ0Q2xlYXJlZEluQmVnaW4oKTsKIAogICAgIHZpcnR1YWwgYm9vbCBj
YW5Hb0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
Z29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkgOworICAgIHZpcnR1YWwgaW50IGdldEhpc3Rv
cnlMZW5ndGgoKTsKKyAgICB2aXJ0dWFsIEtVUkwgaGlzdG9yeVVSTChpbnQgZGlzdGFuY2UpOwor
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZWRPbmxvYWRFdmVudHMoKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBjYW5QYXN0ZSgpIGNvbnN0OwpAQCAtMTUzLDI1ICsxNDMsNDUgQEAKICAgICB2aXJ0dWFs
IGJvb2wgY2FuVW5kbygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwcmludCgpOwogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7CisgICAgdmlydHVhbCBib29s
IGRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiwgY29uc3QgUGxhdGZvcm1LZXli
b2FyZEV2ZW50Kik7CiAKLSAgICBib29sIGtleVByZXNzKGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRF
dmVudCYpOwotICAgIHZpcnR1YWwgS1VSTCBvcmlnaW5hbFJlcXVlc3RVUkwoKSBjb25zdDsKLQot
ICAgIEludFJlY3QgZnJhbWVHZW9tZXRyeSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RnJhbWVHZW9t
ZXRyeShjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBGcmFtZSogY3JlYXRlRnJhbWUoY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25z
dCBTdHJpbmcmIHJlZmVycmVyKTsKICAgICBXaWRnZXQqIGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQo
Y29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYp
OwotCisgICAgLy9HZGsgc3BlY2lmaWMKKyAgICBzdGF0aWMgdm9pZCBzZXRJbnN0YWxsTG9jYXRp
b24oY29uc3QgY2hhciAqKTsKKyAgICBzdGF0aWMgU3RyaW5nIGluc3RhbGxMb2NhdGlvbigpOwor
ICAgIGJvb2wgaXNUb3BMZXZlbCgpCisgICAgeworICAgICAgICByZXR1cm4gbV93aW5kb3cuZ2V0
KCkgIT0gMDsKKyAgICB9CisgICAgdm9pZCBwcm9jZXNzUGxhdGZvcm1Gb2N1c0NoYW5nZShib29s
IGZvY3VzZWQpOworICAgIHZvaWQgcHJvY2Vzc1BsYXRmb3JtV2hlZWxFdmVudChQbGF0Zm9ybVdo
ZWVsRXZlbnQgZXZlbnQpOworICAgIHZvaWQgcHJvY2Vzc1BsYXRmb3JtS2V5Ym9hcmRFdmVudChQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQsIGNvbnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUp
OworICAgIHZvaWQgcHJvY2Vzc1BsYXRmb3JtTW91c2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQg
ZXZlbnQsIGNvbnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUpOworICAgIEZyYW1lR2RrKiBnZXRS
b290RnJhbWUoKTsKKyAgICAvL3ZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYsIGJvb2wg
ZnJvbVN5c3RlbSk7CisgICAgLy9JbnRSZWN0IGZyYW1lR2VvbWV0cnkoKSBjb25zdDsKKyAgICAv
L3ZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgRnJhbWVHZGsqIHBh
cmVudCgpOworICAgIHZvaWQgc2V0UGFyZW50KEZyYW1lR2RrKik7CisgICAgdm9pZCByZXBhaW50
KGJvb2wgbm93KTsKKyAgICB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwg
Ym9vbCBub3cpOworICAgIC8vSW50UG9pbnQgZ2V0QWJzb2x1dGVQb3NpdGlvbigpOworICAgIEdy
YXBoaWNzQ29udGV4dENhaXJvKiBjcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBHcmFwaGlj
c0NvbnRleHRDYWlybyogYmVnaW5QYWludGluZyhjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBl
bmRQYWludGluZyhHcmFwaGljc0NvbnRleHRDYWlybyopOworICAgIFdpbmRvd0dkayogd2luZG93
KCkKKyAgICB7CisgICAgICAgIHJldHVybiAgbV93aW5kb3cuZ2V0KCk7CisgICAgfQorICAgIHZv
aWQgICAgYXR0YWNoV2luZG93KFdpbmRvd0dkayopOworICAgIHZvaWQgICAgZGV0YWNoV2luZG93
KCk7Citwcm90ZWN0ZWQ6CisgICAgQXRvbWljU3RyaW5nICAgIG1fZXZlbnRUeXBlOwogcHJpdmF0
ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkVHlwZVJlbG9hZCgpOwotICAgIHZpcnR1YWwgYm9v
bCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKLQotICAgIEZyYW1lR2RrQ2xp
ZW50KiBtX2NsaWVudDsKLSAgICBHZGtEcmF3YWJsZSogbV9kcmF3YWJsZTsKKyAgICBSZWZQdHI8
V2luZG93R2RrPiBtX3dpbmRvdzsKIH07CiAKLWlubGluZSBGcmFtZUdkayogV2luKEZyYW1lKiBm
cmFtZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVHZGsqPihmcmFtZSk7IH0KLWlubGluZSBj
b25zdCBGcmFtZUdkayogV2luKGNvbnN0IEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgRnJhbWVHZGsqPihmcmFtZSk7IH0KIAogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVt
bWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjIsNyArMjIsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCkBAIC0zMSw5ICszMSwxOSBAQAogI2luY2x1ZGUgIlN5c3RlbVRpbWUu
aCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNs
dWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorZG91YmxlIGN1cnJlbnRUaW1lKCkKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCBhVGlt
ZXZhbDsKKyAgICBzdHJ1Y3QgdGltZXpvbmUgYVRpbWV6b25lOworICAgIGdldHRpbWVvZmRheSgm
YVRpbWV2YWwsICZhVGltZXpvbmUpOworICAgIHJldHVybiAoZG91YmxlKWFUaW1ldmFsLnR2X3Nl
YyArIChkb3VibGUpKGFUaW1ldmFsLnR2X3VzZWMgLyAxMDAwMDAwLjApOworfQorCiBzdGF0aWMg
Z3VpbnQgc2hhcmVkVGltZXI7CiBzdGF0aWMgdm9pZCAoKnNoYXJlZFRpbWVyRmlyZWRGdW5jdGlv
bikoKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJKHJldmlz
aW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvQ29va2llSmFyR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9Db29raWVKYXJHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0Nvb2tpZUphckdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTIyLDcgKzIyLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5oCShyZXZpc2lvbiAxNzM5
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHBy
b2plY3QuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI5LDI2ICsyOSwzNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBUaGVtZURhdGEgewotICAgIFRoZW1l
RGF0YSgpIDogbV9wYXJ0KDApLCBtX3N0YXRlKDApIHt9CitzdHJ1Y3QgVGhlbWVEYXRhCit7Cisg
ICAgVGhlbWVEYXRhKCkgOiBtX3BhcnQoMCksIG1fc3RhdGUoMCkKKyAgICB7fQogCiAgICAgdW5z
aWduZWQgbV9wYXJ0OwogICAgIHVuc2lnbmVkIG1fc3RhdGU7CiB9OwogCi1jbGFzcyBSZW5kZXJU
aGVtZUdkayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CitjbGFzcyBSZW5kZXJUaGVtZUdkayA6IHB1
YmxpYyBSZW5kZXJUaGVtZQorewogcHVibGljOgotICAgIFJlbmRlclRoZW1lR2RrKCkgOiBSZW5k
ZXJUaGVtZSgpIHsgfQorICAgIFJlbmRlclRoZW1lR2RrKCkgOiBSZW5kZXJUaGVtZSgpCisgICAg
eyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0
dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi0gICAgeyByZXR1cm4gcGFp
bnRCdXR0b24obywgaSwgcik7IH0KKyAgICB7CisgICAgICAgIHJldHVybiBwYWludEJ1dHRvbihv
LCBpLCByKTsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikKLSAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxi
YXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbGJh
ci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxi
YXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFBsYXRmb3JtU2Nyb2xsYmFyX2gKKyNkZWZpbmUgUGxhdGZvcm1TY3JvbGxi
YXJfaAorCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiU2Nyb2xsQmFyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBwdWJsaWMgV2lk
Z2V0LCBwdWJsaWMgU2Nyb2xsYmFyCit7CitwdWJsaWM6CisgICAgUGxhdGZvcm1TY3JvbGxiYXIo
U2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xT
aXplKTsKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybVNjcm9sbGJhcigpOworCisgICAgdmlydHVhbCBi
b29sIGlzV2lkZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgaGVpZ2h0
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFs
IEludFJlY3QgZnJhbWVHZW9tZXRyeSgpOworCisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAg
ICBzdGF0aWMgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIDE3OworICAgIH0KKyAgICBzdGF0aWMgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE3OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRodW1iUHJvcG9ydGlvbigpOworfTsKKworfQorCisjZW5kaWYgLy8gUGxhdGZvcm1TY3JvbGxi
YXJfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dkay9XaW5kb3dHZGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdpbmRvd0dka19IXworI2RlZmluZSBXaW5kb3dHZGtfSF8KKyNpbmNsdWRlICJTaGFyZWQuaCIK
KyNpbmNsdWRlICJCcm93c2VyRXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMu
aCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RWxlbWVudDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOworY2xhc3MgQ3Vyc29yOworY2xh
c3MgSW50UG9pbnQ7CitjbGFzcyBJbnRTaXplOworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEZyYW1l
R2RrOworY2xhc3MgU3RyaW5nOworCisKK2NsYXNzIFdpbmRvd0dkayA6ICBwdWJsaWMgU2hhcmVk
PFdpbmRvd0dkaz4KK3sKKworcHVibGljOgorICAgIFdpbmRvd0dkaygpOworICAgIFdpbmRvd0dk
ayhHZGtXaW5kb3cqKTsKKyAgICBXaW5kb3dHZGsoY29uc3QgV2luZG93RmVhdHVyZXMmKTsKKyAg
ICB2aXJ0dWFsIH5XaW5kb3dHZGsoKTsKKyAgICBzdGF0aWMgV2luZG93R2RrKiBmaW5kV2luZG93
KEdka1dpbmRvdyopOworICAgIHZvaWQgaGFuZGxlR2RrRXZlbnQoR2RrRXZlbnQqKTsKKyAgICB2
b2lkIHNldEZyYW1lKEZyYW1lR2RrKiBmcmFtZSkKKyAgICB7CisgICAgICAgIG1fZnJhbWUgPSBm
cmFtZTsKKyAgICB9CisgICAgRnJhbWVHZGsqIGZyYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2ZyYW1lOworICAgIH0KKyAgICB2b2lkIHNldElzQWN0aXZlKGJvb2wgZmxhZyk7CisgICAg
dm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3Qg
Q3Vyc29yJiBjdXJzb3IpOworICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CisgICAg
dm9pZCBzZXRGdWxsU2NyZWVuKGJvb2wpOworICAgIHZvaWQgc2V0TWF4aW1pemVkKGJvb2wpOwor
ICAgIFdpbmRvd0dkayogZ2V0UG9pbnRlckluZm8oSW50UG9pbnQmLCAvKnBvc2l0aW9uIHJlbGF0
aXZlIHRvIHRoaXMgd2luZG93Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wm
IHNoaWZ0S2V5LGJvb2wmIGN0cmxLZXksIGJvb2wmIGFsdEtleSwgYm9vbCYgbWV0YUtleSk7Cisg
ICAgV2luZG93R2RrKiB3aW5kb3dBdFBvaW50ZXIoKTsKKyAgICBJbnRSZWN0IGdlb21ldHJ5KCkg
Y29uc3Q7CisgICAgSW50UG9pbnQgcG9zaXRpb24oKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemUo
KSBjb25zdDsKKyAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lk
IHJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBub3cpOworICAgIEdka1dp
bmRvdyogd2luZG93KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dpbmRvdzsKKyAgICB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIEdy
YXBoaWNzQ29udGV4dENhaXJvKiAgYmVnaW5QYWludGluZyhjb25zdCBJbnRSZWN0Jik7CisgICAg
dm9pZCBlbmRQYWludGluZyhHcmFwaGljc0NvbnRleHRDYWlybyopOworICAgIEludFBvaW50IGdl
dEFic29sdXRlUG9zaXRpb24oKSBjb25zdDsKKyAgICBXaW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0
dXJlcygpCisgICAgeworICAgICAgICByZXR1cm4gbV93aW5kb3dGZWF0dXJlczsKKyAgICB9Citw
cml2YXRlOgorICAgIGJvb2wgbV9jcmVhdGVkRHJhd2FibGU7CisgICAgR2RrV2luZG93KiBtX3dp
bmRvdzsKKyAgICBXaW5kb3dGZWF0dXJlcyBtX3dpbmRvd0ZlYXR1cmVzOworICAgIEZyYW1lR2Rr
KiBtX2ZyYW1lOworfTsKKworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9XaWRnZXRQcml2YXRlR2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0UHJpdmF0ZUdkay5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZGVyTWFuYWdlci5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJGcmFtZUdkay5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2lmbmRlZiBO
REVCVUcKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4
dC5oIgorI2VuZGlmCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3Rk
ZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5F
X18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKworCit1c2luZyBuYW1lc3BhY2Ug
S0pTOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKworV2lkZ2V0UHJpdmF0ZTo6V2lkZ2V0UHJp
dmF0ZShXaWRnZXQqIHdpZGdldCkKKyAgICAgICAgOiBSZXNvdXJjZUxvYWRlckNsaWVudCgpCisg
ICAgICAgICwgbV9uYW1lKCJfYmxhbmsiKQorICAgICAgICAsIG1fdXJsKCkKKyAgICAgICAgLCB2
aXNpYmxlKGZhbHNlKQorICAgICAgICAsIGVuYWJsZWQoZmFsc2UpCisgICAgICAgICwgc2VsZWN0
ZWQoZmFsc2UpCisgICAgICAgICwgaGFzRm9jdXMoZmFsc2UpCisgICAgICAgICwgZ2VvbWV0cnko
KQorICAgICAgICAsIGZvbnQoKQorICAgICAgICAsIGNsaWVudCgwKQorICAgICAgICAsIG1fd2lk
Z2V0KHdpZGdldCkKKyAgICAgICAgLCBtX293bmVyKDApCisgICAgICAgICwgbV9wYXJlbnQoMCkK
KyAgICAgICAgLCBtX3ZpZXcoMCkKKyAgICAgICAgLCBtX2hhc1Njcm9sbGJhcnModHJ1ZSkKKyAg
ICAgICAgLCBtX2lzRXJyb3IoZmFsc2UpCit7fQorCitXaWRnZXRQcml2YXRlOjp+V2lkZ2V0UHJp
dmF0ZSgpCit7CisgICAgaWYgKG1fdmlldy5nZXQoKSkKKyAgICAgICAgbV92aWV3LT5wcml2YXRl
RGF0YSgpLT5tX293bmVyID0gMDsKKyAgICBtX3BhcmVudCA9IDA7CisgICAgbV93aWRnZXQgPSAw
OworICAgIG1fdmlldyA9IDA7CisgICAgY2xpZW50ID0gMDsKK30KKwordm9pZCBXaWRnZXRQcml2
YXRlOjpjcmVhdGVWaWV3KEtVUkwgdXJsKQoreworICAgIG1fdXJsID0gdXJsOworICAgIG1fbmFt
ZSA9IFN0cmluZyh1cmwudXJsKCkpOworICAgIC8vYSByZWJpbmQKKyAgICBpZiAobV92aWV3KSB7
CisgICAgICAgIGRlbGV0ZSBtX3ZpZXctPmZyYW1lKCk7CisgICAgICAgIG1fdmlldyA9IDA7Cisg
ICAgfQorICAgIFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3I7CisgICAgRnJhbWVHZGsq
IHRtcCA9IG5ldyBGcmFtZUdkayhuZXcgUGFnZSgpLDAsZWRpdG9yLDApOworICAgIHRtcC0+dHJl
ZSgpLT5zZXROYW1lKG1fdXJsLnVybCgpKTsKKyAgICBtX3ZpZXcgPSB0bXAtPnZpZXcoKTsKKwor
ICAgIC8vaW1wb3J0YW50IG9yIHdlIGhhdmUgcmVjdXJzaW9uCisgICAgbV92aWV3LT5wcml2YXRl
RGF0YSgpLT5tX2hhc1Njcm9sbGJhcnMgPSBtX2hhc1Njcm9sbGJhcnM7CisgICAgbV92aWV3LT5w
cml2YXRlRGF0YSgpLT5tX25hbWUgPSBtX25hbWUrIlt2aWV3XSI7CisgICAgbV92aWV3LT5zZXRP
d25lcih0aGlzLT5tX3dpZGdldCk7CisKKyAgICBpZiAoIW1faGFzU2Nyb2xsYmFycykgeworICAg
ICAgICBtX3ZpZXctPnN1cHByZXNzU2Nyb2xsYmFycyh0cnVlLGZhbHNlKTsKKyAgICAgICAgbV92
aWV3LT5zZXRWU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBbHdheXNPZmYpOworICAgICAgICBtX3Zp
ZXctPnNldEhTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckFsd2F5c09mZik7CisgICAgfQorICAgIHRt
cC0+b3BlblVSTChtX3VybCk7Cit9CisKK2Jvb2wgV2lkZ2V0UHJpdmF0ZTo6b3BlblVSTChjb25z
dCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCFtX293bmVyKQorICAgICAgICBtX25hbWU9U3RyaW5n
KHVybC51cmwoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKKyAgICBEb2NM
b2FkZXIqIGRvY0xvYWRlciA9IG1fdmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSA/CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmRvY3VtZW50KCktPmRvY0xvYWRl
cigpOiAwOworICAgIFJlc291cmNlTG9hZGVyOjpjcmVhdGUocmVxdWVzdCx0aGlzLGRvY0xvYWRl
cik7CisgICAgLy9GSVhNRTogd2h5IGlzIHRoaXMgc2V0IHRvIHRydWUgYnkgZGVmYXVsdCA/Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2lkZ2V0UHJpdmF0ZTo6c3VibWl0Rm9ybShjb25z
dCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBGb3JtRGF0YSogcG9zdERh
dGEpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKKyAgICByZXF1ZXN0LnNl
dEhUVFBNZXRob2QobWV0aG9kKTsKKyAgICByZXF1ZXN0LnNldEhUVFBCb2R5KCpwb3N0RGF0YSk7
CisKKyAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IG1fdmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmRvY3VtZW50
KCktPmRvY0xvYWRlcigpOiAwOworICAgIFJlc291cmNlTG9hZGVyOjpjcmVhdGUocmVxdWVzdCx0
aGlzLGRvY0xvYWRlcik7Cit9CisKK3ZvaWQgV2lkZ2V0UHJpdmF0ZTo6cmVjZWl2ZWRSZWRpcmVj
dChSZXNvdXJjZUxvYWRlciogam9iLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgam9iLT5jYW5j
ZWwoKTsKKyAgICBvcGVuVVJMKHVybCk7Cit9CisKKy8qCisgKiBEYXRhIGlzIHRoZSBmdWxsIHNl
dCBvZiBoZWFkZXJzCisgKiBDYWxsZWQgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IHJlY2lldmVkIGRh
dGEgb3IgYWxsIGRhdGEKKyAqLwordm9pZCBXaWRnZXRQcml2YXRlOjpyZWNlaXZlZFJlc3BvbnNl
KFJlc291cmNlTG9hZGVyKiBqb2IsIFBsYXRmb3JtUmVzcG9uc2UgZGF0YSkKK3sKKyAgICBSZXNv
dXJjZUxvYWRlckludGVybmFsKiBpbnRlcm5hbCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBp
bnRlcm5hbC0+YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzID0gdHJ1ZTsKKworICAgIEZyYW1lKiBm
cmFtZSA9IG1fdmlldy0+ZnJhbWUoKTsKKworICAgIFN0cmluZyBtaW1lVHlwZSA9IGRhdGEtPm1p
bWVUeXBlOworCisgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkgeworICAgICAgICBTdHJpbmcg
cGF0aCA9ICBTdHJpbmcoam9iLT51cmwoKS5wYXRoKCkpOworICAgICAgICBtaW1lVHlwZSA9IFJl
c291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0TWltZVR5cGUocGF0aCk7CisgICAgfQorCisgICAgZnJh
bWUtPnNldFJlc3BvbnNlTUlNRVR5cGUobWltZVR5cGUpOworICAgIFN0cmluZyBjaGFyc2V0ID0g
ZGF0YS0+Y2hhcnNldDsKKworICAgIG1fdmlldy0+ZnJhbWUoKS0+YWRkTWV0YURhdGEoIkhUVFAt
SGVhZGVycyIsU3RyaW5nKGludGVybmFsLT5yZXNwb25zZUhlYWRlcnMpKTsKKworICAgIC8vIHNl
dEVuY29kaW5nIGNhbGxzIGJlZ2luKCkgZm9yIHVzLCBkZXNwaXRlIHRoZSBtaXNsZWFkaW5nIG5h
bWUKKyAgICBpZiAoIWNoYXJzZXQuaXNFbXB0eSgpKQorICAgICAgICBmcmFtZS0+c2V0RW5jb2Rp
bmcoY2hhcnNldCx0cnVlKTsKKyAgICBlbHNlCisgICAgICAgIGZyYW1lLT5zZXRFbmNvZGluZyht
X3ZpZXctPmZyYW1lKCktPmVuY29kaW5nKCksZmFsc2UpOworfQorCit2b2lkIFdpZGdldFByaXZh
dGU6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlTG9hZGVyKiBqb2IsIGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGgpCit7CisgICAgbV92aWV3LT5mcmFtZSgpLT5hZGREYXRhKGRhdGEsIGxlbmd0
aCk7Cit9CisKK3ZvaWQgV2lkZ2V0UHJpdmF0ZTo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUxv
YWRlciogam9iKQoreworCisgICAgbV9pc0Vycm9yID0gam9iLT5pc0Vycm9yUGFnZSgpOworICAg
IG1fdmlldy0+ZnJhbWUoKS0+ZW5kKCk7CisgICAgbV92aWV3LT5yZXBhaW50KGZhbHNlKTsKK30K
KworI2lmbmRlZiBOREVCVUcKK3ZvaWQgV2lkZ2V0UHJpdmF0ZTo6ZHVtcERvY3VtZW50KCkKK3sK
KyAgICBEZXByZWNhdGVkU3RyaW5nIHM7CisgICAgRG9jdW1lbnQgKmRvYyA9IG1fdmlldy0+ZnJh
bWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBUZXh0U3RyZWFtIHRzKCZzKTsKKyAgICBkb2MtPmR1bXAo
JnRzLERlcHJlY2F0ZWRTdHJpbmcoIiAiKSk7CisgICAgcHJpbnRmKCJXSURHRVQgTk9ERVM6JXNc
biVzXG4iLG1fbmFtZS5kZXByZWNhdGVkU3RyaW5nKCkuYXNjaWkoKSxzLmFzY2lpKCkpOworICAg
IHByaW50ZigiRU5EX05PREVTXG4iKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHN0ID0gZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihkb2MtPnJlbmRlcmVyKCkpOworICAgIHByaW50ZigiV0lER0VUICVz
IFJFTkRFUkVTOlxuJXNcbiIsbV9uYW1lLmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgpLHN0LmFz
Y2lpKCkpOworICAgIHByaW50ZigiRU5EX1JFTkRFUkVTXG4iKTsKK30KKyNlbmRpZgorCit9Cisv
LyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2NyZWVuR2Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JlZW5HZGsuY3BwCShy
ZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1NjcmVlbkdkay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDMwICsyMiw0MyBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyZWVuLmgi
Ci0KICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
V2lkZ2V0LmgiCisjaW5jbHVkZSAiRnJhbWVHZGsuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2lu
Y2x1ZGUgIldpZGdldC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogCisjZGVmaW5lIG5vdEltcGxlbWVudGVk
KCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xu
IiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEdka0RyYXdhYmxlKiBkcmF3YWJsZUZvclBh
Z2UoY29uc3QgUGFnZSogcGFnZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSAocGFnZSA/IHBhZ2Ut
Pm1haW5GcmFtZSgpIDogMCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgRnJhbWVHZGsqIGlmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4oZnJhbWUpOworICAg
IEZyYW1lR2RrKiByb290ID0gaWZyYW1lLT5nZXRSb290RnJhbWUoKTsKKyAgICBpZiAoIXJvb3Qg
fHwgIXJvb3QtPndpbmRvdygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiByb290
LT53aW5kb3coKS0+d2luZG93KCk7Cit9CisKK3N0YXRpYyBXaWRnZXQqIHdpZGdldEZvclBhZ2Uo
Y29uc3QgUGFnZSogcGFnZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSAocGFnZSA/IHBhZ2UtPm1h
aW5GcmFtZSgpIDogMCk7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSAoZnJhbWUgPyBmcmFt
ZS0+dmlldygpIDogMCk7Ci0gICAgCiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVy
biAwOwotICAgIAotICAgIHJldHVybiBmcmFtZVZpZXctPmRyYXdhYmxlKCk7CisgICAgcmV0dXJu
IGZyYW1lVmlldzsKIH0KIAogRmxvYXRSZWN0IHNjcmVlblJlY3QoY29uc3QgUGFnZSogcGFnZSkK
QEAgLTY1LDE1ICs3OCwxNSBAQAogICAgIHJldHVybiBnZGtfZHJhd2FibGVfZ2V0X2RlcHRoKGRy
YXdhYmxlKTsKIH0KIAotRmxvYXRSZWN0IHVzYWJsZVNjcmVlblJlY3QoY29uc3QgUGFnZSogcGFn
ZSkKK2Zsb2F0IHNjYWxlRmFjdG9yKGNvbnN0IFBhZ2UqKQogewotICAgIHJldHVybiBzY3JlZW5S
ZWN0KHBhZ2UpOworICAgIHJldHVybiAxLjBmOwogfQogCi1mbG9hdCBzY2FsZUZhY3Rvcihjb25z
dCBQYWdlKikKK0Zsb2F0UmVjdCB1c2FibGVTY3JlZW5SZWN0KGNvbnN0IFBhZ2UqIHBhZ2UpCiB7
Ci0gICAgcmV0dXJuIDEuMGY7Ci0KKyAgICByZXR1cm4gc2NyZWVuUmVjdChwYWdlKTsKIH0KIAog
fQorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Jyb3dzZXJFeHRl
bnNpb25HZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Jyb3dzZXJF
eHRlbnNpb25HZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQnJv
d3NlckV4dGVuc2lvbkdkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQnJvd3NlckV4dGVuc2lvbkdkay5oIgorI2luY2x1ZGUgIldpbmRvd0Zl
YXR1cmVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgp
IGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIs
IF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisKK3ZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6Y3JlYXRlTmV3
V2luZG93KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYsIEZy
YW1lKiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQorCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1dpZGdldEdkay5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvV2lkZ2V0R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MjIsNTIgKzIyLDg2IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJXaWRnZXQuaCIKLQorI2luY2x1ZGUgIldpZGdldFByaXZhdGVHZGsuaCIK
KyNpbmNsdWRlICJGcmFtZUdkay5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgogI2luY2x1ZGUgIkZv
bnQuaCIKLSNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENhaXJvLmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAiUmVuZGVyUGFydC5o
IgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8bWF0aC5oPgog
CisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBV
TklNUExFTUVOVEVEOiAlczolZCAlc1xuIixcCisgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyxf
X1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFdpZGdldFByaXZhdGUgewotcHVibGljOgotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJs
ZTsKLSAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBJbnRSZWN0IGdlb21ldHJ5OwotICAg
IEZvbnQgZm9udDsKLX07CiAKKworc3RhdGljIEZyYW1lR2RrKiBpZnJhbWVQYXJlbnQoY29uc3Qg
V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGNvbnN0IEZyYW1lVmlldyogdmlldyA9IHN0YXRpY19jYXN0PGNv
bnN0IEZyYW1lVmlldyo+KHdpZGdldCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lR2Rr
Kj4odmlldy0+ZnJhbWUoKSk7Cit9CisKIFdpZGdldDo6V2lkZ2V0KCkKLSAgICA6IGRhdGEobmV3
IFdpZGdldFByaXZhdGUpCisgICAgICAgIDogZGF0YShuZXcgV2lkZ2V0UHJpdmF0ZSh0aGlzKSkK
K3t9CisKK0ZyYW1lVmlldyogV2lkZ2V0OjpmcmFtZVZpZXcoKSBjb25zdAogewotICAgIGRhdGEt
PmRyYXdhYmxlID0gMDsKKyAgICByZXR1cm4gZGF0YS0+bV92aWV3LmdldCgpOwogfQogCi1XaWRn
ZXQ6OldpZGdldChHZGtEcmF3YWJsZSogZHJhd2FibGUpCi0gICAgOiBkYXRhKG5ldyBXaWRnZXRQ
cml2YXRlKQordm9pZCBXaWRnZXQ6OnNldEZyYW1lVmlldyhGcmFtZVZpZXcqIHZpZXcpCiB7Ci0g
ICAgc2V0RHJhd2FibGUoZHJhd2FibGUpOworICAgIGRhdGEtPm1fdmlldyA9IHZpZXc7CisgICAg
dmlldy0+ZGF0YS0+Z2VvbWV0cnkgPSBkYXRhLT5nZW9tZXRyeTsKKyAgICB2aWV3LT5kYXRhLT5t
X3BhcmVudCA9IGRhdGEtPm1fcGFyZW50OwogfQogCi1HZGtEcmF3YWJsZSogV2lkZ2V0OjpkcmF3
YWJsZSgpIGNvbnN0Cit2b2lkIFdpZGdldDo6c2V0T3duZXIoV2lkZ2V0KiBwKQogewotICAgIHJl
dHVybiBkYXRhLT5kcmF3YWJsZTsKKyAgICBkYXRhLT5tX293bmVyID0gcDsKIH0KIAotdm9pZCBX
aWRnZXQ6OnNldERyYXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSkKK1dpZGdldCogV2lkZ2V0
Ojpvd25lcigpIGNvbnN0CiB7Ci0gICAgZGF0YS0+ZHJhd2FibGUgPSBkcmF3YWJsZTsKKyAgICBy
ZXR1cm4gZGF0YS0+bV9vd25lcjsKIH0KIAorV2lkZ2V0KiBXaWRnZXQ6OnBhcmVudCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGRhdGEtPm1fcGFyZW50OworfQorCit2b2lkIFdpZGdldDo6c2V0UGFy
ZW50KFdpZGdldCogcCkKK3sKKyAgICBkYXRhLT5tX3BhcmVudCA9IHA7CisgICAgaWYgKHApCisg
ICAgICAgIHJlcGFpbnQoZmFsc2UpOworfQorCit2b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVu
dCgpCit7CisgICAgZGF0YS0+bV9wYXJlbnQ9MDsKK30KKwogV2lkZ2V0Ojp+V2lkZ2V0KCkKIHsK
ICAgICBkZWxldGUgZGF0YTsKQEAgLTgzLDYgKzExNyw1OSBAQAogICAgIHJldHVybiBkYXRhLT5j
bGllbnQ7CiB9CiAKK3ZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBJbnRSZWN0IHIo
MCwwLGRhdGEtPmdlb21ldHJ5LndpZHRoKCksZGF0YS0+Z2VvbWV0cnkuaGVpZ2h0KCkpOworICAg
IGludmFsaWRhdGVSZWN0KHIpOworfQorCit2b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYgcikKK3sKKworICAgIHJlcGFpbnQocixmYWxzZSk7Cit9CisKK3ZvaWQgV2lk
Z2V0OjpyZXBhaW50KGJvb2wgbm93KQoreworICAgIEludFJlY3QgcigwLDAsZGF0YS0+Z2VvbWV0
cnkud2lkdGgoKSxkYXRhLT5nZW9tZXRyeS5oZWlnaHQoKSk7CisgICAgcmVwYWludChyLG5vdyk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpyZXBhaW50KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJv
b2wgbm93KQoreworICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIC8vaWYgd2UgYXJlIG93bmVkIGxldCBvd25lciByZXBhaW50CisgICAgaWYgKG93bmVy
KCkgIT0gMCkgeworICAgICAgICBvd25lcigpLT5yZXBhaW50KHVwZGF0ZVJlY3Qsbm93KTsKKyAg
ICB9IGVsc2UgaWYgKGlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAgRnJhbWVWaWV3KiB2ID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyk7CisgICAgICAgIEZyYW1lR2RrKiBmcmFtZSA9IHN0
YXRpY19jYXN0PEZyYW1lR2RrKj4odi0+ZnJhbWUoKSk7CisgICAgICAgIEludFJlY3QgZGlydHkg
PSB1cGRhdGVSZWN0OworICAgICAgICBkaXJ0eS5tb3ZlKEludFNpemUoZGF0YS0+Z2VvbWV0cnku
eCgpLGRhdGEtPmdlb21ldHJ5LnkoKSkpOworICAgICAgICBmcmFtZS0+cmVwYWludChkaXJ0eSxu
b3cpOworICAgIH0gZWxzZSBpZiAocGFyZW50KCkgIT0gMCkgeworICAgICAgICBJbnRSZWN0IGRp
cnR5ID0gdXBkYXRlUmVjdDsKKyAgICAgICAgZGlydHkubW92ZShJbnRTaXplKGRhdGEtPmdlb21l
dHJ5LngoKSxkYXRhLT5nZW9tZXRyeS55KCkpKTsKKyAgICAgICAgcGFyZW50KCktPnJlcGFpbnQo
ZGlydHksbm93KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NlcnQoMCk7CisgICAgfQorfQor
CisvKgorICogU2luY2Ugd2UgY2FsbCByZXBhaW50IG9uIHRoZSByb290IGZyYW1lIHRoZSByZWN0
IGNvbWVzCisgKiBiYWNrIHRvIHVzIGluIHRoZSByb290IGZyYW1lIGNvb3JkaW5hdGUgc3lzdGVt
CisgKiBub3QgdGhlIHdpZGdldHMKKyAqLwordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY3R4LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghZnJhbWVWaWV3KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBhc3NlcnQoZnJhbWVWaWV3KCkgIT0gdGhpcyk7CisgICAg
ZnJhbWVWaWV3KCktPnBhaW50KGN0eCxyZWN0KTsKK30KKwogSW50UmVjdCBXaWRnZXQ6OmZyYW1l
R2VvbWV0cnkoKSBjb25zdAogewogICAgIHJldHVybiBkYXRhLT5nZW9tZXRyeTsKQEAgLTkwLDIw
ICsxNzcsMTcgQEAKIAogYm9vbCBXaWRnZXQ6Omhhc0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGRhdGEtPmhhc0ZvY3VzOwogfQogCiB2b2lkIFdpZGdldDo6
c2V0Rm9jdXMoKQogewotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IGRhdGEtPmRyYXdhYmxl
OwotICAgIGlmICghZHJhd2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAg
ICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsK
LSAgICBnZGtfd2luZG93X2ZvY3VzKHdpbmRvdywgR0RLX0NVUlJFTlRfVElNRSk7CisgICAgZGF0
YS0+aGFzRm9jdXM9IHRydWU7CiB9CiAKIHZvaWQgV2lkZ2V0OjpjbGVhckZvY3VzKCkKIHsKKyAg
ICBkYXRhLT5oYXNGb2N1cz0gZmFsc2U7CiB9CiAKIGNvbnN0IEZvbnQmIFdpZGdldDo6Zm9udCgp
IGNvbnN0CkBAIC0xMTgsNDQgKzIwMiwxMTIgQEAKIAogdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihj
b25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICBHZGtDdXJzb3IqIHBjdXIgPSBjdXJzb3IuaW1w
bCgpOwotICAgIGlmICghcGN1cikKLSAgICAgICAgcmV0dXJuOwogCi0gICAgR2RrRHJhd2FibGUq
IGRyYXdhYmxlID0gZGF0YS0+ZHJhd2FibGU7Ci0gICAgaWYgKCFkcmF3YWJsZSB8fCAhR0RLX0lT
X1dJTkRPVyhkcmF3YWJsZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRv
dyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfc2V0X2N1cnNvcih3aW5k
b3csIHBjdXIpOworICAgIEZyYW1lR2RrKiBmcmFtZSA9IGlmcmFtZVBhcmVudCh0aGlzKTsKIAor
ICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJhbWUtPnNldEN1cnNvcihjdXJzb3IpOworICAgIGVs
c2UgaWYgKHBhcmVudCgpKQorICAgICAgICBwYXJlbnQoKS0+c2V0Q3Vyc29yKGN1cnNvcik7CiB9
CiAKIHZvaWQgV2lkZ2V0OjpzaG93KCkKIHsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBk
YXRhLT5kcmF3YWJsZTsKLSAgICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdh
YmxlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRP
VyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdpbmRvdyk7CisgICAgZGF0YS0+dmlz
aWJsZSA9IHRydWU7CiB9CiAKKwogdm9pZCBXaWRnZXQ6OmhpZGUoKQogewotICAgIEdka0RyYXdh
YmxlKiBkcmF3YWJsZSA9IGRhdGEtPmRyYXdhYmxlOwotICAgIGlmICghZHJhd2FibGUgfHwgIUdE
S19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3
aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X2hpZGUod2luZG93
KTsKKyAgICBkYXRhLT52aXNpYmxlID0gZmFsc2U7CiB9CiAKK0ludFBvaW50IFdpZGdldDo6bG9j
YXRpb25JbldpbmRvdygpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcCgwLDApOworICAgIFdpZGdl
dCogd2lkZ2V0ID0gY29uc3RfY2FzdDxXaWRnZXQqPih0aGlzKTsKKworICAgIHdoaWxlICh3aWRn
ZXQpIHsKKyAgICAgICAgUmVuZGVyUGFydCogcmVuZGVyZXIgPSAgd2lkZ2V0LT5mcmFtZVZpZXco
KS0+ZnJhbWUoKS0+b3duZXJSZW5kZXJlcigpOworICAgICAgICBpZiAod2lkZ2V0LT5vd25lcigp
KSB7CisgICAgICAgICAgICB3aWRnZXQgPSB3aWRnZXQtPm93bmVyKCk7CisgICAgICAgICAgICBJ
bnRSZWN0IHIgPSB3aWRnZXQtPmZyYW1lR2VvbWV0cnkoKTsKKyAgICAgICAgfSBlbHNlIGlmICh3
aWRnZXQtPmlzRnJhbWVWaWV3KCkgJiYgcmVuZGVyZXIpIHsKKyAgICAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSB0eCA9IHJlbmRlcmVyLT5hYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgICAgICAgICAg
cC5tb3ZlKChpbnQpdHguZHgoKSwoaW50KXR4LmR5KCkpOworICAgICAgICAgICAgd2lkZ2V0ID0g
d2lkZ2V0LT5wYXJlbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEludFJlY3Qg
ciA9IHdpZGdldC0+ZnJhbWVHZW9tZXRyeSgpOworICAgICAgICAgICAgcC5tb3ZlKHIueCgpLHIu
eSgpKTsKKyAgICAgICAgICAgIHdpZGdldCA9IHdpZGdldC0+cGFyZW50KCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKwogdm9pZCBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0
cnkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBkYXRhLT5nZW9tZXRyeSA9IHI7Ci0gICAgR2Rr
RHJhd2FibGUqIGRyYXdhYmxlID0gZGF0YS0+ZHJhd2FibGU7Ci0gICAgaWYgKCFkcmF3YWJsZSB8
fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCisgICAgaWYgKGRhdGEtPmdlb21ldHJ5ID09IHIp
CiAgICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJh
d2FibGUpOwotICAgIGdka193aW5kb3dfbW92ZV9yZXNpemUod2luZG93LCByLngoKSwgci55KCks
IHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgZGF0YS0+Z2VvbWV0cnk9cjsKKyAgICBpZiAo
ZnJhbWVWaWV3KCkgJiYgZnJhbWVWaWV3KCkgIT0gdGhpcykKKyAgICAgICAgZnJhbWVWaWV3KCkt
PnNldEZyYW1lR2VvbWV0cnkocik7CiB9CiAKK3ZvaWQgV2lkZ2V0OjpzZXRFbmFibGVkKGJvb2wg
YikKK3sKKyAgICBkYXRhLT5lbmFibGVkID0gYjsKIH0KKworYm9vbCBXaWRnZXQ6OmlzRW5hYmxl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPmVuYWJsZWQ7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpzZXRJc1NlbGVjdGVkKGJvb2wgYikKK3sKKyAgICBkYXRhLT5zZWxlY3RlZCA9IGI7Cit9CisK
KworV2lkZ2V0OjpGb2N1c1BvbGljeSBXaWRnZXQ6OmZvY3VzUG9saWN5KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQ2xpY2tGb2N1czsKK30KKwordm9pZCBXaWRnZXQ6OmRpc2FibGVGbHVzaERyYXdp
bmcoKQore30KKwordm9pZCBXaWRnZXQ6OmVuYWJsZUZsdXNoRHJhd2luZygpCit7fQorCitHcmFw
aGljc0NvbnRleHQqIFdpZGdldDo6bG9ja0RyYXdpbmdGb2N1cygpCit7CisgICAgV2lkZ2V0KiBw
ciA9IHRoaXM7CisgICAgSW50UmVjdCByZWN0KDAsMCxkYXRhLT5nZW9tZXRyeS53aWR0aCgpLGRh
dGEtPmdlb21ldHJ5LmhlaWdodCgpKTsKKworICAgIHdoaWxlIChwcikgeworICAgICAgICBGcmFt
ZUdkayogaWZyYW1lID0gaWZyYW1lUGFyZW50KHByKTsKKyAgICAgICAgaWYgKGlmcmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBpZnJhbWUtPmJlZ2luUGFpbnRpbmcocmVjdCk7CisgICAgICAgIHJl
Y3QubW92ZShwci0+ZGF0YS0+Z2VvbWV0cnkueCgpLHByLT5kYXRhLT5nZW9tZXRyeS55KCkpOwor
ICAgICAgICBwciA9IHByLT5wYXJlbnQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgV2lkZ2V0Ojp1bmxvY2tEcmF3aW5nRm9jdXMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQor
eworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBzdGF0aWNfY2FzdDxHcmFwaGljc0Nv
bnRleHRDYWlybyo+KGNvbnRleHQpOworICAgIFdpZGdldCogcHIgPSB0aGlzOworICAgIHdoaWxl
IChwcikgeworICAgICAgICBGcmFtZUdkayogaWZyYW1lID0gaWZyYW1lUGFyZW50KHByKTsKKyAg
ICAgICAgaWYgKGlmcmFtZSkKKyAgICAgICAgICAgIGlmcmFtZS0+ZW5kUGFpbnRpbmcoY3R4KTsK
KyAgICAgICAgcHIgPSBwci0+cGFyZW50KCk7CisgICAgfQorfQorCit9CisvLyB2aW06IHRzPTQg
c3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxiYXJHZGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsYmFy
R2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Ny
b2xsYmFyR2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJXaWRnZXRQcml2YXRlR2RrLmgiCisjaW5j
bHVkZSAiRnJhbWVHZGsuaCIKKyNpbmNsdWRlICJTY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVNjcm9sbGJhci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNs
dWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdTVkdF
bGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisK
KworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTog
VU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9G
VU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy9GSVhNRTogaGFjayB0aWxsIHdlIGhhdmUgYSByZWFsIHByaXZh
dGUgY29uZmlnICBwYWdlIGJyb3dzZXJDb25maWcueG1sCitzdGF0aWMgU3RyaW5nIGltcGxVUkwo
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgaWYgKG9yaWVudGF0aW9u
ID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCIvU2Nyb2xsYmFy
L1Njcm9sbGJhci5zdmc/dmVydGljYWwiKTsKKworICAgIHJldHVybiBTdHJpbmcoIi9TY3JvbGxi
YXIvU2Nyb2xsYmFyLnN2Zz9ob3Jpem9udGFsIik7Cit9CisKKworc3RhdGljIHZvaWQgZG9TY3Jv
bGwoY29uc3QgUmVuZGVyT2JqZWN0KiByLCBib29sIGlzSG9yaXpvbnRhbCwgaW50IG11bHRpcGxp
ZXIpCit7CisgICAgLy8gRklYTUU6IFRoZSBzY3JvbGxpbmcgZG9uZSBoZXJlIHNob3VsZCBiZSBk
b25lIGluIHRoZSBkZWZhdWx0IGhhbmRsZXJzCisgICAgLy8gb2YgdGhlIGVsZW1lbnRzIHJhdGhl
ciB0aGFuIGhlcmUgaW4gdGhlIHBhcnQuCisgICAgaWYgKCFyKQorICAgICAgICByZXR1cm47CisK
KyAgICAvL2Jyb2tlbiBzaW5jZSBpdCBjYWxscyBzY3JvbGwgb24gc2Nyb2xsYmFycworICAgIC8v
YW5kIHdlIGhhdmUgbm9uZSBub3cKKyAgICAvL3ItPnNjcm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5
V2hlZWwsIG11bHRpcGxpZXIpOworICAgIGlmICghci0+bGF5ZXIoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGludCB4ID0gci0+bGF5ZXIoKS0+c2Nyb2xsWE9mZnNldCgpOworICAgIGludCB5ID0g
ci0+bGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgpOworICAgIGlmIChpc0hvcml6b250YWwpCisgICAg
ICAgIHggKz0gbXVsdGlwbGllcjsKKyAgICBlbHNlCisgICAgICAgIHkgKz0gbXVsdGlwbGllcjsK
KyAgICByLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCh4LCB5LCB0cnVlLCB0cnVlKTsKK30KKwor
CitQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBj
bGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24sU2Nyb2xsYmFyQ29udHJvbFNpemUgY3NpemUpIDoKKyAgICAg
ICAgU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sY3NpemUpLFdpZGdldCgpCit7CisgICAg
cHJpdmF0ZURhdGEoKS0+bV9oYXNTY3JvbGxiYXJzID0gZmFsc2U7CisgICAgU3RyaW5nIHVybCA9
IEZyYW1lR2RrOjppbnN0YWxsTG9jYXRpb24oKTsKKyAgICBTdHJpbmcgbm0gPSBpbXBsVVJMKG9y
aWVudGF0aW9uKTsKKyAgICB1cmwgKz0gbm07CisgICAgcHJpdmF0ZURhdGEoKS0+Y3JlYXRlVmll
dyhLVVJMKHVybC5kZXByZWNhdGVkU3RyaW5nKCkpKTsKK30KKworUGxhdGZvcm1TY3JvbGxiYXI6
On5QbGF0Zm9ybVNjcm9sbGJhcigpCit7fQorCitJbnRSZWN0ICBQbGF0Zm9ybVNjcm9sbGJhcjo6
ZnJhbWVHZW9tZXRyeSgpCit7CisgICAgSW50UmVjdCByID0gV2lkZ2V0OjpmcmFtZUdlb21ldHJ5
KCk7CisgICAgaWYgKHIuaXNFbXB0eSgpKQorICAgICAgICByID0gSW50UmVjdCgwLDAsaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCgpLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7CisgICAg
cmV0dXJuIHI7Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6d2lkdGgoKSBjb25zdAorewor
ICAgIGludCB3aWR0aCA9IFdpZGdldDo6d2lkdGgoKTsKKyAgICBpZiAod2lkdGggPT0gMCB8fCBv
cmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpOy8vRklYTUU6IGhhY2sgZm9yIG5vdworICAgIHJldHVybiB3aWR0
aDsKKworfQorCitpbnQgUGxhdGZvcm1TY3JvbGxiYXI6OmhlaWdodCgpIGNvbnN0Cit7CisgICAg
aW50IGhlaWdodCA9IFdpZGdldDo6aGVpZ2h0KCk7CisgICAgaWYgKGhlaWdodCA9PSAwIHx8IG9y
aWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQoKTsvL2hhY2sgZm9yIG5vdworICAgIHJldHVybiBoZWlnaHQ7
Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQor
eworICAgIFdpZGdldDo6c2V0RW5hYmxlZChlbmFibGVkKTsKK30KKwordm9pZCBQbGF0Zm9ybVNj
cm9sbGJhcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QpCit7CisgICAgV2lkZ2V0OjpwYWludChjdHgsZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBp
ZiAoZnJhbWVHZW9tZXRyeSgpID09IHJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7CisgICAgRnJhbWVWaWV3KiB2ID0gZnJhbWVWaWV3KCk7CisgICAgLyoKKyAg
ICBpZih2KSB7CisgICAgICAgIERvY3VtZW50KiBkb2MgPSB2LT5mcmFtZSgpLT5kb2N1bWVudCgp
OworICAgICAgICBpZighZG9jKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTVkdTVkdF
bGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4oZG9jLT5nZXRFbGVtZW50
QnlJZCgibWFpbiIpKTsKKyAgICAgICAgaWYoIXN2ZykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgc3ZnLT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cixTdHJpbmc6Om51bWJl
cihyZWN0LndpZHRoKCkpKTsKKyAgICAgICAgc3ZnLT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6Omhl
aWdodEF0dHIsU3RyaW5nOjpudW1iZXIocmVjdC5oZWlnaHQoKSkpOworICAgICAgICBzdmctPndp
ZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlKHJlY3Qud2lkdGgoKSk7CisgICAgICAgIHN2Zy0+aGVp
Z2h0QmFzZVZhbHVlKCktPnNldFZhbHVlKHJlY3QuaGVpZ2h0KCkpOworICAgIH0KKyAgICAqLwor
ICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShyZWN0KTsKK30KKwordm9pZCBQbGF0Zm9ybVNj
cm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQcm9wb3J0aW9uKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1BvcHVwTWVudUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
UG9wdXBNZW51R2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Bv
cHVwTWVudUdkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlvbiBmb3IgPHNlbGVj
dD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb3B1cE1lbnUu
aCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7
IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVf
XywgX19MSU5FX18pOyB9IHdoaWxlKDApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUG9wdXBN
ZW51OjpQb3B1cE1lbnUoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0KQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1BvcHVwTWVudTo6flBvcHVwTWVudSgpCit7fQorCit2b2lkIFBvcHVw
TWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50IGluZGV4KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51OjpoaWRlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBvcHVwTWVudTo6dXBkYXRlRnJvbUVsZW1lbnQo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KKwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUmVuZGVyUG9wdXBNZW51R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclBvcHVwTWVudUdkay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBt
ZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgotICoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw
LAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQb3B1cE1lbnUuaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0K
LSNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVO
SU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdoaWxlKDApCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUG9wdXBNZW51OjpQb3B1cE1lbnUoUmVuZGVyTWVudUxp
c3QqIG1lbnVMaXN0KQotewotfQotCi1Qb3B1cE1lbnU6On5Qb3B1cE1lbnUoKQotewotfQotCi12
b2lkIFBvcHVwTWVudTo6Y2xlYXIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgUG9wdXBNZW51Ojpwb3B1bGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyosIGludCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBvcHVwTWVudTo6aGlkZSgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQb3B1cE1lbnU6OmFkZFNlcGFyYXRvcigp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQb3B1cE1lbnU6OmFkZEdyb3Vw
TGFiZWwoSFRNTE9wdEdyb3VwRWxlbWVudCopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBQb3B1cE1lbnU6OmFkZE9wdGlvbihIVE1MT3B0aW9uRWxlbWVudCopCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQotCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9J
Y29uR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9JY29uR2RrLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ljb25HZGsuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgIkljb24uaCIKKyNpbmNsdWRlICJJY29uTG9h
ZGVyLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisKKworI2RlZmluZSBub3RJbXBsZW1l
bnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQg
JXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgw
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgSWNvbkxvYWRlcjo6cmVjZWl2ZWRSZXNw
b25zZShSZXNvdXJjZUxvYWRlciosIFBsYXRmb3JtUmVzcG9uc2UpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBJY29uTG9hZGVyOjpub3RpZnlJY29uQ2hhbmdlZChjb25zdCBL
VVJMJiBpY29uVVJMKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworSWNvbjo6SWNv
bigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSWNvbjo6fkljb24oKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6bmV3SWNvbkZv
ckZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBQYXNzUmVmUHRyPEljb24+KDApOworfQorCit2b2lkIEljb246OnBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0ZyYW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFt
ZUdkay5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVH
ZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiwxNyArMjIsMjQg
QEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xp
ZW50LmgiCisjaW5jbHVkZSAiV2lkZ2V0UHJpdmF0ZUdkay5oIgorI2luY2x1ZGUgIkZyYW1lTG9h
ZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbGJhci5oIgogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRn
ZXQuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50
YXRpb24uaCIKICNpbmNsdWRlICJCcm93c2VyRXh0ZW5zaW9uR2RrLmgiCkBAIC00MCw4ICs0Nywx
MiBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVk
ZSAiRnJhbWVQcml2YXRlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck1hbmFnZXIuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVySW50
ZXJuYWwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKQEAgLTUyLDkgKzYzLDEy
IEBACiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIlNTTEtleUdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRSZXF1
ZXN0LmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3Rk
ZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5F
X18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKIAogLy8gVGhpcyBmdW5jdGlvbiBs
b2FkcyByZXNvdXJjZXMgZnJvbSBXZWJLaXQKIC8vIFRoaXMgZG9lcyBub3QgYmVsb25nIGhlcmUg
YW5kIEknbSBub3Qgc3VyZSB3aGVyZQpAQCAtNzEsMTU4ICs4NSwxNjEgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GcmFtZUdka0NsaWVudERlZmF1bHQ6OkZyYW1lR2RrQ2xpZW50RGVmYXVs
dCgpCi0gICAgOiBSZXNvdXJjZUxvYWRlckNsaWVudCgpCi0gICAgLCBtX2ZyYW1lKDApCi0gICAg
LCBtX2JlZ2luQ2FsbGVkKGZhbHNlKQotewotfQordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotRnJhbWVHZGtDbGllbnREZWZhdWx0Ojp+RnJhbWVHZGtDbGllbnREZWZhdWx0KCkKLXsKLX0K
K3N0YXRpYyBjaGFyKiBpbnN0YWxsUGF0aDsKK3N0YXRpYyBGcmFtZUdkayogZm9jdXNGcmFtZTsK
IAotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OnNldEZyYW1lKGNvbnN0IEZyYW1lR2RrKiBm
cmFtZSkKK3ZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVCb3JkZXIoKQogewotICAgIG1fZnJhbWUgPSBj
b25zdF9jYXN0PEZyYW1lR2RrKj4oZnJhbWUpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgRnJhbWVHZGtDbGllbnREZWZhdWx0OjpvcGVuVVJMKGNvbnN0IEtVUkwmIHVybCkKK2Jv
b2wgRnJhbWVWaWV3OjpwYXNzTW91c2VQcmVzc0V2ZW50VG9TY3JvbGxiYXIoTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgaGl0LCBQbGF0Zm9ybVNjcm9sbGJhciogYmFyKQogewotICAgIG1f
ZnJhbWUtPmRpZE9wZW5VUkwodXJsKTsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7Ci0KLSAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRl
cj4gbG9hZGVyID0gUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShyZXF1ZXN0LCB0aGlzLCAwKTsKKyAg
ICBGcmFtZSogZnJhbWUgPSBiYXItPmZyYW1lVmlldygpLT5mcmFtZSgpOworICAgIGlmIChmcmFt
ZSkgeworICAgICAgICBmcmFtZS0+dmlldygpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoaGl0LmV2
ZW50KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6c3VibWl0Rm9ybShjb25zdCBTdHJpbmcm
IG1ldGhvZCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBGb3JtRGF0YSogcG9zdERhdGEpCitib29s
IEZyYW1lVmlldzo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyYgaGl0LCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9iZWdpbkNhbGxlZCA9
IGZhbHNlOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSAgICByZXF1ZXN0
LnNldEhUVFBNZXRob2QobWV0aG9kKTsKLSAgICByZXF1ZXN0LnNldEhUVFBCb2R5KCpwb3N0RGF0
YSk7Ci0KLSAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFJlc291cmNlTG9hZGVy
OjpjcmVhdGUocmVxdWVzdCwgdGhpcywgMCk7CisgICAgaWYgKGZvY3VzRnJhbWUgJiYgZm9jdXNG
cmFtZSAhPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAgIGZvY3VzRnJhbWUtPmludmFsaWRhdGVT
ZWxlY3Rpb24oKTsKKyAgICAgICAgZm9jdXNGcmFtZS0+c2V0SXNBY3RpdmUoZmFsc2UpOworICAg
ICAgICBmb2N1c0ZyYW1lLT5zZXRXaW5kb3dIYXNGb2N1cyhmYWxzZSk7CisgICAgfQorICAgIGZv
Y3VzRnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KGZyYW1lKTsKKyAgICBmb2N1c0ZyYW1l
LT5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICBmb2N1c0ZyYW1lLT5zZXRXaW5kb3dIYXNGb2N1cyh0
cnVlKTsKKyAgICBmb2N1c0ZyYW1lLT52aWV3KCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChoaXQu
ZXZlbnQoKSk7CisgICAgZm9jdXNGcmFtZS0+aW52YWxpZGF0ZVNlbGVjdGlvbigpOworICAgIHJl
dHVybiB0cnVlOwogfQotCi12b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6cmVjZWl2ZWRSZXNw
b25zZShSZXNvdXJjZUxvYWRlciosIFBsYXRmb3JtUmVzcG9uc2UpCitib29sIEZyYW1lVmlldzo6
cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzJiBoaXQsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICAvLyBuby1vcAorICAgIGZyYW1lLT52aWV3
KCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGhpdC5ldmVudCgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OmRpZFJlY2VpdmVEYXRhKFJlc291
cmNlTG9hZGVyKiBqb2IsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCitib29sIEZyYW1l
Vmlldzo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBoaXQsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fYmVnaW5DYWxsZWQpIHsK
LSAgICAgICAgbV9iZWdpbkNhbGxlZCA9IHRydWU7Ci0KLSNpZiAwICAvLyBGSVhNRTogVGhpcyBp
cyBmcm9tIFF0IHZlcnNpb24sIG5lZWQgdG8gYmUgcmVtb3ZlZCBvciBHZGsgZXF1aXZhbGVudCB3
cml0dGVuCi0gICAgICAgIC8vIEFzc2lnbiBjb3JyZWN0IG1pbWV0eXBlIF9iZWZvcmVfIGNhbGxp
bmcgYmVnaW4oKSEKLSAgICAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0
SW50ZXJuYWwoKTsKLSAgICAgICAgaWYgKGQpIHsKLSAgICAgICAgICAgIFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0KG1fZnJhbWUtPnJlc291cmNlUmVxdWVzdCgpKTsKLSAgICAgICAgICAgIHJlcXVl
c3QubV9yZXNwb25zZU1JTUVUeXBlID0gZC0+bV9taW1ldHlwZTsKLSAgICAgICAgICAgIG1fZnJh
bWUtPnNldFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAg
ICAgIG1fZnJhbWUtPmJlZ2luKGpvYi0+dXJsKCkpOwotICAgIH0KLQotICAgIG1fZnJhbWUtPndy
aXRlKGRhdGEsIGxlbmd0aCk7CisgICAgZnJhbWUtPnZpZXcoKS0+aGFuZGxlTW91c2VNb3ZlRXZl
bnQoaGl0LmV2ZW50KCkpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZyYW1lR2RrQ2xp
ZW50RGVmYXVsdDo6cmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlTG9hZGVyKiBqb2IsIFBsYXRmb3Jt
RGF0YSBkYXRhKQorYm9vbCBGcmFtZVZpZXc6OnBhc3NXaGVlbEV2ZW50VG9TdWJmcmFtZShQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBtX2ZyYW1l
LT5lbmQoKTsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7CisgICAgZnJhbWUtPnZpZXcoKS0+
aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIHZvaWQgZG9TY3JvbGwoY29uc3QgUmVuZGVyT2JqZWN0KiByLCBmbG9hdCBkZWx0YVgsIGZs
b2F0IGRlbHRhWSkKLXsKLSAgICAvLyBGSVhNRTogVGhlIHNjcm9sbGluZyBkb25lIGhlcmUgc2hv
dWxkIGJlIGRvbmUgaW4gdGhlIGRlZmF1bHQgaGFuZGxlcnMKLSAgICAvLyBvZiB0aGUgZWxlbWVu
dHMgcmF0aGVyIHRoYW4gaGVyZSBpbiB0aGUgcGFydC4KLSAgICBpZiAoIXIpCi0gICAgICAgIHJl
dHVybjsKIAotICAgIC8vYnJva2VuIHNpbmNlIGl0IGNhbGxzIHNjcm9sbCBvbiBzY3JvbGxiYXJz
Ci0gICAgLy9hbmQgd2UgaGF2ZSBub25lIG5vdwotICAgIC8vci0+c2Nyb2xsKGRpcmVjdGlvbiwg
U2Nyb2xsQnlXaGVlbCwgbXVsdGlwbGllcik7Ci0gICAgaWYgKCFyLT5sYXllcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbnQgeCA9IHItPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKSArIGRl
bHRhWDsKLSAgICBpbnQgeSA9IHItPmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKSArIGRlbHRhWTsK
LSAgICByLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCh4LCB5LCB0cnVlLCB0cnVlKTsKLX0KLQot
RnJhbWVHZGs6OkZyYW1lR2RrKEdka0RyYXdhYmxlKiBnZGtkcmF3YWJsZSkKLSAgICA6IEZyYW1l
KG5ldyBQYWdlLCAwKSwgbV9kcmF3YWJsZShnZGtkcmF3YWJsZSkKK0ZyYW1lR2RrOjpGcmFtZUdk
ayhQYWdlKiBwYWdlLCBFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPEVkaXRvckNsaWVudD4g
Y2xpZW50LCBXaW5kb3dHZGsqIHdpbmRvdykKKyAgICAgICAgOiBGcmFtZShwYWdlLGVsZW1lbnQs
Y2xpZW50KQorICAgICAgICAsIG1fZXZlbnRUeXBlKCkKKyAgICAgICAgLCBtX3dpbmRvdygwKQog
ewotICAgIGQtPm1fZXh0ZW5zaW9uID0gbmV3IEJyb3dzZXJFeHRlbnNpb25HZGsodGhpcyk7Cisg
ICAgZC0+bV9leHRlbnNpb24gPSBuZXcgQnJvd3NlckV4dGVuc2lvbkdkaygpOwogICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nczsKICAgICBzZXR0aW5ncy0+c2V0QXV0b0xvYWRJ
bWFnZXModHJ1ZSk7CiAgICAgc2V0dGluZ3MtPnNldE1pbkZvbnRTaXplKDUpOwogICAgIHNldHRp
bmdzLT5zZXRNaW5Mb2dpY2FsRm9udFNpemUoNSk7CiAgICAgc2V0dGluZ3MtPnNldFNob3VsZFBy
aW50QmFja2dyb3VuZHModHJ1ZSk7Ci0KICAgICBzZXR0aW5ncy0+c2V0TWVkaXVtRml4ZWRGb250
U2l6ZSgxNCk7CiAgICAgc2V0dGluZ3MtPnNldE1lZGl1bUZvbnRTaXplKDE0KTsKICAgICBzZXR0
aW5ncy0+c2V0U2VyaWZGb250TmFtZSgiVGltZXMgTmV3IFJvbWFuIik7CiAgICAgc2V0dGluZ3Mt
PnNldFNhbnNTZXJpZkZvbnROYW1lKCJBcmlhbCIpOwogICAgIHNldHRpbmdzLT5zZXRGaXhlZEZv
bnROYW1lKCJDb3VyaWVyIik7CiAgICAgc2V0dGluZ3MtPnNldFN0ZEZvbnROYW1lKCJBcmlhbCIp
OworICAgIHNldHRpbmdzLT5zZXRJc0phdmFTY3JpcHRFbmFibGVkKHRydWUpOworICAgIHNldHRp
bmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KHRydWUpOworICAg
IC8vcGljayB1cCB1c2VyIHN0eWxlIHNoZWV0CisgICAgU3RyaW5nIGxvY2F0aW9uID0gaW5zdGFs
bExvY2F0aW9uKCk7CisgICAgaWYgKCFsb2NhdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3Ry
aW5nIHN0eWxlID0gbG9jYXRpb24rIi9icm93c2VyLmNzcyI7CisgICAgICAgIEtVUkwgdXNlclN0
eWxlU2hlZXQgPSBLVVJMKHN0eWxlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgIHNldHRp
bmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHVzZXJTdHlsZVNoZWV0KTsKKyAgICB9CiAg
ICAgc2V0U2V0dGluZ3Moc2V0dGluZ3MpOwotICAgIHBhZ2UoKS0+c2V0TWFpbkZyYW1lKHRoaXMp
OwogICAgIEZyYW1lVmlldyogdmlldyA9IG5ldyBGcmFtZVZpZXcodGhpcyk7CisgICAgdmlldy0+
c2V0RnJhbWVWaWV3KHZpZXcpOwogICAgIHNldFZpZXcodmlldyk7Ci0gICAgSW50UmVjdCBnZW9t
ID0gZnJhbWVHZW9tZXRyeSgpOwotICAgIHZpZXctPnJlc2l6ZShnZW9tLndpZHRoKCksIGdlb20u
aGVpZ2h0KCkpOwotICAgIHZpZXctPlNjcm9sbFZpZXc6OnNldERyYXdhYmxlKGdka2RyYXdhYmxl
KTsKKyAgICBpZiAoIWVsZW1lbnQgJiYgIXBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBwYWdl
LT5zZXRNYWluRnJhbWUodGhpcyk7CisgICAgYXR0YWNoV2luZG93KHdpbmRvdyk7Cit9CiAKLSAg
ICBtX2NsaWVudCA9IG5ldyBGcmFtZUdka0NsaWVudERlZmF1bHQoKTsKLSAgICBtX2NsaWVudC0+
c2V0RnJhbWUodGhpcyk7CitGcmFtZUdkazo6fkZyYW1lR2RrKCkKK3sKKyAgICBpZiAoZm9jdXNG
cmFtZSA9PSB0aGlzKQorICAgICAgICBmb2N1c0ZyYW1lID0gMDsKIH0KIAotRnJhbWVHZGs6OkZy
YW1lR2RrKFBhZ2UqIHBhZ2UsIEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBGcmFtZShwYWdlLGVs
ZW1lbnQpCisKK0ZyYW1lKiBGcmFtZUdkazo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiBy
ZWZlcnJlcikKIHsKLSAgICBkLT5tX2V4dGVuc2lvbiA9IG5ldyBCcm93c2VyRXh0ZW5zaW9uR2Rr
KHRoaXMpOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nczsKLSAgICBzZXR0
aW5ncy0+c2V0QXV0b0xvYWRJbWFnZXModHJ1ZSk7Ci0gICAgc2V0U2V0dGluZ3Moc2V0dGluZ3Mp
OwotICAgIG1fY2xpZW50ID0gbmV3IEZyYW1lR2RrQ2xpZW50RGVmYXVsdCgpOwotICAgIG1fY2xp
ZW50LT5zZXRGcmFtZSh0aGlzKTsKKyAgICBQYWdlKiBwYWdlOworICAgIGlmIChvd25lckVsZW1l
bnQpCisgICAgICAgIHBhZ2UgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnBh
Z2UoKTsKKyAgICBlbHNlCisgICAgICAgIHBhZ2UgPSBuZXcgUGFnZSgpOworICAgIFBhc3NSZWZQ
dHI8RWRpdG9yQ2xpZW50PiBlZGl0b3I7CisgICAgRnJhbWVHZGsqIGZjaGlsZCA9IG5ldyBGcmFt
ZUdkayhwYWdlLG93bmVyRWxlbWVudCxlZGl0b3IsMCk7CisgICAgZmNoaWxkLT50cmVlKCktPnNl
dE5hbWUobmFtZSk7CisgICAgaWYgKG93bmVyRWxlbWVudCkgeworICAgICAgICBGcmFtZUdkayog
cCA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4ob3duZXJFbGVtZW50LT5kb2N1bWVudCgpLT5mcmFt
ZSgpKTsKKyAgICAgICAgZmNoaWxkLT5zZXRQYXJlbnQocCk7CisgICAgfQorICAgIGZjaGlsZC0+
b3BlblVSTCh1cmwpOworICAgIHJldHVybiBmY2hpbGQ7CiB9CiAKLUZyYW1lR2RrOjp+RnJhbWVH
ZGsoKQordm9pZCBGcmFtZUdkazo6b3BlblVSTFJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVz
dCYgZnJhbWVMb2FkUmVxdWVzdCkKIHsKLSAgICBjYW5jZWxBbmRDbGVhcigpOworICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0ID0gZnJhbWVMb2FkUmVxdWVzdC5tX3JlcXVlc3Q7CisgICAgb3Bl
blVSTChyZXF1ZXN0LnVybCgpKTsKIH0KIAorYm9vbCBGcmFtZUdkazo6b3BlblVSTChjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgZGlkT3BlblVSTCh1cmwpOworICAgIHZpZXcoKS0+cHJpdmF0ZURh
dGEoKS0+b3BlblVSTCh1cmwpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEZyYW1lR2Rr
OjpzdWJtaXRGb3JtKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QpCiB7
CiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBmcmFtZUxvYWRSZXF1ZXN0Lm1fcmVxdWVz
dDsKLQogICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgaGFjayBpbmhlcml0ZWQgZnJvbSBGcmFtZU1h
YywgYW5kIHNob3VsZCBiZSBwdXNoZWQgaW50byBGcmFtZQogICAgIGlmIChkLT5tX3N1Ym1pdHRl
ZEZvcm1VUkwgPT0gcmVxdWVzdC51cmwoKSkKICAgICAgICAgcmV0dXJuOwotCiAgICAgZC0+bV9z
dWJtaXR0ZWRGb3JtVVJMID0gcmVxdWVzdC51cmwoKTsKLQotICAgIGlmIChtX2NsaWVudCkKLSAg
ICAgICAgbV9jbGllbnQtPnN1Ym1pdEZvcm0ocmVxdWVzdC5kb1Bvc3QoKSA/ICJQT1NUIiA6ICJH
RVQiLCByZXF1ZXN0LnVybCgpLCAmcmVxdWVzdC5wb3N0RGF0YSk7CisgICAgZGlkT3BlblVSTChy
ZXF1ZXN0LnVybCgpKTsKKyAgICB2aWV3KCktPnByaXZhdGVEYXRhKCktPnN1Ym1pdEZvcm0ocmVx
dWVzdC5odHRwTWV0aG9kKCkgPT0gIlBPU1QiID8gIlBPU1QiIDogIkdFVCIsIHJlcXVlc3QudXJs
KCksICZyZXF1ZXN0Lmh0dHBCb2R5KCkpOwogICAgIGNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7
CiB9CiAKLXZvaWQgRnJhbWVHZGs6OnVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
IGZyYW1lTG9hZFJlcXVlc3QpCitLVVJMIEZyYW1lR2RrOjpvcmlnaW5hbFJlcXVlc3RVUkwoKSBj
b25zdAogewotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gZnJhbWVMb2FkUmVxdWVzdC5t
X3JlcXVlc3Q7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gS1VSTCgpOworfQog
Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuOworYm9vbCBGcmFtZUdkazo6aXNM
b2FkVHlwZVJlbG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CiAKLSAgICBtX2NsaWVudC0+b3BlblVSTChyZXF1ZXN0LnVybCgpKTsKKwordm9pZCBG
cmFtZUdkazo6dXJsU2VsZWN0ZWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVx
dWVzdCxjb25zdCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQoreworICAgIFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0ID0gZnJhbWVMb2FkUmVxdWVzdC5tX3JlcXVlc3Q7CisgICAgb3BlblVSTChyZXF1
ZXN0LnVybCgpKTsKIH0KIAogU3RyaW5nIEZyYW1lR2RrOjp1c2VyQWdlbnQoKSBjb25zdApAQCAt
MjMyLDYgKzI0OSw3IEBACiAKIHZvaWQgRnJhbWVHZGs6OnJ1bkphdmFTY3JpcHRBbGVydChTdHJp
bmcgY29uc3QmIG1lc3NhZ2UpCiB7CisgICAgcHJpbnRmKCJKYXZhU2NyaXB0QWxlcnQ6JXNcbjoi
LG1lc3NhZ2UuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCkpOwogfQogCiBib29sIEZyYW1lR2Rr
OjpydW5KYXZhU2NyaXB0Q29uZmlybShTdHJpbmcgY29uc3QmIG1lc3NhZ2UpCkBAIC0yNDEsMTY0
ICsyNTksMTUwIEBACiAKIHZvaWQgRnJhbWVHZGs6OnNldFRpdGxlKGNvbnN0IFN0cmluZyAmdGl0
bGUpCiB7CisgICAgaWYgKG1fd2luZG93LmdldCgpKQorICAgICAgICBtX3dpbmRvdy0+c2V0VGl0
bGUodGl0bGUpOwogfQogCi12b2lkIEZyYW1lR2RrOjpoYW5kbGVHZGtFdmVudChHZGtFdmVudCog
ZXZlbnQpCisKK2Jvb2wgRnJhbWVHZGs6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVt
ZW50Km5vZGUsIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V2ZW50KQogewotICAgIHN3
aXRjaCAoZXZlbnQtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBHREtfRVhQT1NFOiB7Ci0gICAgICAg
ICAgICBHZGtSZWN0YW5nbGUgY2xpcDsKLSAgICAgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBi
b3goZXZlbnQtPmV4cG9zZS5yZWdpb24sICZjbGlwKTsKLSAgICAgICAgICAgIGdka193aW5kb3df
YmVnaW5fcGFpbnRfcmVnaW9uIChldmVudC0+YW55LndpbmRvdywgZXZlbnQtPmV4cG9zZS5yZWdp
b24pOwotICAgICAgICAgICAgY2Fpcm9fdCogY3IgPSBnZGtfY2Fpcm9fY3JlYXRlIChldmVudC0+
YW55LndpbmRvdyk7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIGN0eCA9IG5ldyBHcmFw
aGljc0NvbnRleHQoY3IpOwotICAgICAgICAgICAgcGFpbnQoY3R4LCBJbnRSZWN0KGNsaXAueCwg
Y2xpcC55LCBjbGlwLndpZHRoLCBjbGlwLmhlaWdodCkpOwotICAgICAgICAgICAgZGVsZXRlIGN0
eDsKLSAgICAgICAgICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwotICAgICAgICAgICAgZ2RrX3dpbmRv
d19lbmRfcGFpbnQgKGV2ZW50LT5hbnkud2luZG93KTsKKyAgICBOb2RlKiBzdGFydCA9IHNlbGVj
dGlvbkNvbnRyb2xsZXIoKS0+c3RhcnQoKS5ub2RlKCk7CisKKyAgICBpZiAoc3RhcnQgJiYgc3Rh
cnQtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgc3dpdGNoIChrZXZlbnQtPldpbmRv
d3NLZXlDb2RlKCkpIHsKKyAgICAgICAgY2FzZSBWS19CQUNLOgorICAgICAgICAgICAgVHlwaW5n
Q29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1bWVudCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0RLX1NDUk9MTDogewotICAgICAgICAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgdmlldygpLT5o
YW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHdoZWVsRXZlbnQu
aXNBY2NlcHRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyBub2RlSW5mbyh0cnVlLCB0cnVlKTsK
LSAgICAgICAgICAgIHJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRlc3Qobm9kZUluZm8sIHdoZWVs
RXZlbnQucG9zKCkpOwotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJbmZvLmlubmVyTm9k
ZSgpOwotICAgICAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIC8vRGVmYXVsdCB0byBzY3JvbGxpbmcgdGhlIHBhZ2UKLSAgICAgICAgICAgIC8v
bm90IHN1cmUgd2h5IGl0cyBudWxsCi0gICAgICAgICAgICAvL2Jyb2tlIGFueXdheSB3aGVuIGl0
cyBub3QgbnVsbAotICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgd2hlZWxFdmVudC5k
ZWx0YVgoKSwgd2hlZWxFdmVudC5kZWx0YVkoKSk7CisgICAgICAgIGNhc2UgVktfREVMRVRFOgor
ICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoZG9jdW1l
bnQoKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdES19E
UkFHX0VOVEVSOgotICAgICAgICBjYXNlIEdES19EUkFHX0xFQVZFOgotICAgICAgICBjYXNlIEdE
S19EUkFHX01PVElPTjoKLSAgICAgICAgY2FzZSBHREtfRFJBR19TVEFUVVM6Ci0gICAgICAgIGNh
c2UgR0RLX0RST1BfU1RBUlQ6Ci0gICAgICAgIGNhc2UgR0RLX0RST1BfRklOSVNIRUQ6IHsKLSAg
ICAgICAgICAgIC8vYm9vbCB1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmLCBDbGlwYm9hcmQqKTsKLSAgICAgICAgICAgIC8vdm9pZCBjYW5jZWxEcmFnQW5kRHJvcChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKLSAgICAgICAgICAgIC8vYm9v
bCBwZXJmb3JtRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJk
Kik7CisgICAgICAgIGNhc2UgVktfTEVGVDoKKyAgICAgICAgICAgIHNlbGVjdGlvbkNvbnRyb2xs
ZXIoKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpMRUZULCBDaGFy
YWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEdES19NT1RJT05fTk9USUZZOgotICAgICAgICAgICAgdmlldygpLT5oYW5kbGVNb3Vz
ZU1vdmVFdmVudChldmVudCk7CisgICAgICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgICAgICBz
ZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJv
bGxlcjo6UklHSFQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzJCVVRUT05f
UFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgICAgICAgICB2aWV3
KCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CisgICAgICAgIGNhc2UgVktfVVA6Cisg
ICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9s
bGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQsIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKLSAgICAgICAg
ICAgIHZpZXcoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOworICAgICAgICBjYXNl
IFZLX0RPV046CisgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxl
Y3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwgUGFyYWdyYXBoR3JhbnVsYXJp
dHkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX0tFWV9QUkVTUzoKLSAg
ICAgICAgY2FzZSBHREtfS0VZX1JFTEVBU0U6IHsKLSAgICAgICAgICAgIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudCBrZXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAoIWtldmVudC5pc0tleVVwKCkpIHsKLSAgICAgICAgICAgICAgICBO
b2RlKiBzdGFydCA9IHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c3RhcnQoKS5ub2RlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0YXJ0ICYmIHN0YXJ0LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN3aXRjaChrZXZlbnQuV2luZG93c0tleUNvZGUoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19CQUNLOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZG9jdW1lbnQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFZLX0RFTEVURToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChkb2N1bWVudCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfTEVGVDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlm
eShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rpb25Db250cm9sbGVyOjpMRUZULCBD
aGFyYWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX1JJR0hUOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0ZXJHcmFudWxh
cml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVj
dGlvbkNvbnRyb2xsZXIoKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFZLX0RPV046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxl
cigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxl
cjo6Rk9SV0FSRCwgUGFyYWdyYXBoR3JhbnVsYXJpdHkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50KCks
IGtldmVudC50ZXh0KCksIGZhbHNlKTsKKyAgICAgICAgY2FzZSBWS19SRVRVUk46CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50KCksIGtldmVudC0+dGV4dCgpLCBmYWxzZSk7Cisg
ICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9s
bGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKIAotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWhhbmRsZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChrZXZlbnQuV2luZG93c0tleUNvZGUoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBWS19MRUZUOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvU2Nyb2xsKHJlbmRlcmVyKCksIHRydWUsIC0xMjApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19SSUdIVDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Njcm9sbChyZW5kZXJlcigpLCB0cnVlLCAxMjAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBWS19VUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Njcm9sbChy
ZW5kZXJlcigpLCBmYWxzZSwgLTEyMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX1BSSU9SOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vcmV0dXJuIFNCX1BBR0VVUDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfTkVYVDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBTQl9QQUdFRE9XTjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VktfRE9XTjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Njcm9sbChyZW5kZXJlcigp
LCBmYWxzZSwgMTIwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVktfSE9NRToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZW5kZXJlcigpLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCgwLCAwLCB0cnVlLCB0cnVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Njcm9sbChyZW5kZXJlcigpLCBmYWxz
ZSwgMTIwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVktfRU5EOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCktPmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+
aGVpZ2h0KCksIHRydWUsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19TUEFDRToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoa2V2ZW50LnNoaWZ0S2V5KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvU2Nyb2xsKHJlbmRlcmVyKCksIGZhbHNlLCAtMTIwKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvU2Nyb2xsKHJlbmRlcmVyKCksIGZhbHNlLCAxMjApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIEZyYW1lR2RrOjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QgJnIpCit2
b2lkIEZyYW1lR2RrOjpwcm9jZXNzUGxhdGZvcm1Gb2N1c0NoYW5nZShib29sIGZvY3VzZWQpCiB7
Ci0gICAgaWYgKCFtX2RyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKG1fZHJhd2FibGUpKQorI2lm
IDAKKyAgICBpZiAoIWRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cq
IHdpbmRvdyA9IEdES19XSU5ET1cobV9kcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19tb3ZlX3Jl
c2l6ZSh3aW5kb3csIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKKyAgICBt
X2V2ZW50VHlwZSA9IGZvY3VzZWQgPyBFdmVudE5hbWVzOjpmb2N1c0V2ZW50IDogRXZlbnROYW1l
czo6Ymx1ckV2ZW50OworICAgIGludmFsaWRhdGVTZWxlY3Rpb24oKTsKKyAgICBzZXRJc0FjdGl2
ZShmb2N1c2VkKTsKKyAgICBzZXRXaW5kb3dIYXNGb2N1cyhmb2N1c2VkKTsKKyNlbmRpZgorICAg
IGZvY3VzRnJhbWUgPSBmb2N1c2VkID8gdGhpczowOwogfQogCi1JbnRSZWN0IEZyYW1lR2RrOjpm
cmFtZUdlb21ldHJ5KCkgY29uc3QKK3ZvaWQgRnJhbWVHZGs6OnByb2Nlc3NQbGF0Zm9ybVdoZWVs
RXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50KQogewotICAgIGdpbnQgeCwgeSwgd2lkdGgs
IGhlaWdodCwgZGVwdGg7Ci0gICAgaWYgKCFtX2RyYXdhYmxlKQotICAgICAgICByZXR1cm4gSW50
UmVjdCgpOworICAgIGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZXZl
bnRUeXBlID0gRXZlbnROYW1lczo6bW91c2V3aGVlbEV2ZW50OwogCi0gICAgaWYgKCFHREtfSVNf
V0lORE9XKG1fZHJhd2FibGUpKSB7Ci0gICAgICAgIGdka19kcmF3YWJsZV9nZXRfc2l6ZShtX2Ry
YXdhYmxlLCAmd2lkdGgsICZoZWlnaHQpOwotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICB2aWV3KCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOworCit9
CisKK3ZvaWQgRnJhbWVHZGs6OnByb2Nlc3NQbGF0Zm9ybUtleWJvYXJkRXZlbnQoUGxhdGZvcm1L
ZXlib2FyZEV2ZW50IGV2ZW50LAorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBl
KQoreworICAgIGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZm9j
dXNGcmFtZSkKKyAgICAgICAgZm9jdXNGcmFtZSA9IHRoaXM7CisKKyAgICBpZiAoZm9jdXNGcmFt
ZSAhPSB0aGlzKSB7CisgICAgICAgIGZvY3VzRnJhbWUtPnByb2Nlc3NQbGF0Zm9ybUtleWJvYXJk
RXZlbnQoZXZlbnQsZXZlbnRUeXBlKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdk
a1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhtX2RyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93
X2dldF9nZW9tZXRyeSh3aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCAmZGVwdGgpOwot
ICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIG1fZXZlbnRUeXBl
ID0gZXZlbnRUeXBlOworCisgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7CisgICAgaWYg
KCFkb2MpCisgICAgICAgIHJldHVybjsKKworICAgIE5vZGUqIG5vZGUgPSBkb2MtPmZvY3VzTm9k
ZSgpOworICAgIGlmICghbm9kZSkgeworICAgICAgICBpZiAoZG9jLT5pc0hUTUxEb2N1bWVudCgp
KQorICAgICAgICAgICAgbm9kZSA9IGRvYy0+Ym9keSgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBub2RlID0gZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKKworICAgICAgICBpZiAoIW5vZGUp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFldmVudC5pc0tleVVwKCkp
CisgICAgICAgIHByZXBhcmVGb3JVc2VyQWN0aW9uKCk7CisKKyAgICBib29sIG5vdGhhbmRsZWQg
PSBFdmVudFRhcmdldE5vZGVDYXN0KG5vZGUpLT5kaXNwYXRjaEtleUV2ZW50KGV2ZW50KTsKKwor
ICAgIC8vaGFjayB0byBjYXVzZSBhIGtleSBwcmVzcyBzZWUgRnJhbWVNYWMubW0KKyAgICBpZiAo
ZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OmtleWRvd25FdmVudCkgeworICAgICAgICBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQgcmVwZWF0RXZlbnQoZXZlbnQsdHJ1ZSk7CisgICAgICAgIGJvb2wgcHJl
c3NOb3RoYW5kbGVkID0gRXZlbnRUYXJnZXROb2RlQ2FzdChub2RlKS0+ZGlzcGF0Y2hLZXlFdmVu
dChyZXBlYXRFdmVudCk7CisgICAgICAgIGlmIChub3RoYW5kbGVkKQorICAgICAgICAgICAgbm90
aGFuZGxlZCA9IHByZXNzTm90aGFuZGxlZDsKKyAgICB9CisgICAgaWYgKG5vdGhhbmRsZWQpIHsK
KyAgICAgICAgdmlldygpLT5oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50KTsKKyAgICB9CiB9CiAK
K3ZvaWQgRnJhbWVHZGs6OnByb2Nlc3NQbGF0Zm9ybU1vdXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2
ZW50IGV2ZW50LAorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlKQoreworICAg
IGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZXZlbnRUeXBlID0gZXZl
bnRUeXBlOworCisgICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjptb3VzZW1vdmVFdmVu
dCkKKyAgICAgICAgdmlldygpLT5oYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCk7CisgICAgaWYg
KGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjptb3VzZWRvd25FdmVudCkgeworICAgICAgICBpZiAo
Zm9jdXNGcmFtZSAmJiBmb2N1c0ZyYW1lICE9IHRoaXMpIHsKKyAgICAgICAgICAgIGZvY3VzRnJh
bWUtPmludmFsaWRhdGVTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGZvY3VzRnJhbWUtPnNldElz
QWN0aXZlKGZhbHNlKTsKKyAgICAgICAgICAgIGZvY3VzRnJhbWUtPnNldFdpbmRvd0hhc0ZvY3Vz
KGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBmb2N1c0ZyYW1lID0gdGhpczsKKyAgICAgICAg
Zm9jdXNGcmFtZS0+aW52YWxpZGF0ZVNlbGVjdGlvbigpOworICAgICAgICBmb2N1c0ZyYW1lLT5z
ZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICAgICAgZm9jdXNGcmFtZS0+c2V0V2luZG93SGFzRm9jdXMo
dHJ1ZSk7CisgICAgICAgIHZpZXcoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKKyAg
ICB9CisgICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjptb3VzZXVwRXZlbnQpCisgICAg
ICAgIHZpZXcoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOworfQorCiBib29sIEZy
YW1lR2RrOjpwYXNzV2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQoTm9kZSogbm9kZSkKIHsKKyAgICAv
L0ZJWE1FOiBkZXRlcm1pbmUgaWYgYSB3aGVlbCBlbmFibGVzIHdpZGdldCBpcyBhY3RpdmUKICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKQEAgLTQxMCwxMSArNDE0LDE5MSBAQAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIEZyYW1lR2RrOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJh
bWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSopCisKKworYm9vbCBG
cmFtZUdkazo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0g
ICAgaWYgKG1ldi50YXJnZXROb2RlKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQorRnJhbWVHZGsqIEZyYW1lR2RrOjpnZXRSb290RnJhbWUoKQorewor
ICAgIEZyYW1lR2RrKiBjdXIgPSB0aGlzOworICAgIHdoaWxlICghY3VyLT5pc1RvcExldmVsKCkp
IHsKKyAgICAgICAgY3VyID0gY3VyLT5wYXJlbnQoKTsKKyAgICB9CisgICAgcmV0dXJuICBjdXI7
CiAKIH0KKworCit2b2lkIEZyYW1lR2RrOjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3Ip
Cit7CisgICAgaWYgKG1fd2luZG93LmdldCgpKSB7CisgICAgICAgIG1fd2luZG93LT5zZXRDdXJz
b3IoY3Vyc29yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGcmFtZUdkayogcCA9IHBh
cmVudCgpOworICAgIGlmIChwKQorICAgICAgICBwLT5zZXRDdXJzb3IoY3Vyc29yKTsKK30KKwor
I2lmIDAKK0ludFJlY3QgIEZyYW1lR2RrOjpmcmFtZUdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICBp
ZiAobV93aW5kb3cuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX3dpbmRvdy0+Z2VvbWV0cnkoKTsK
KyAgICByZXR1cm4gbV9nZW9tZXRyeTsKKworfQorCit2b2lkIEZyYW1lR2RrOjpzZXRHZW9tZXRy
eShjb25zdCBJbnRSZWN0JiByLCBib29sIGZyb21TeXN0ZW0pCit7CisgICAgaWYgKG1fZ2VvbWV0
cnkgPT0gcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fZ2VvbWV0cnkgPSByOworICAgIGlmIChm
cm9tU3lzdGVtKSB7CisgICAgICAgIHZpZXcoKS0+bGF5b3V0KGZhbHNlKTsKKyAgICAgICAgdmll
dygpLT51cGRhdGVTY3JvbGxCYXJzKCk7CisgICAgICAgIHNlbmRSZXNpemVFdmVudCgpOworICAg
IH0KK30KKwordm9pZCAgRnJhbWVHZGs6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBzZXRHZW9tZXRyeShyLGZhbHNlKTsKK30KKyNlbmRpZgorCit2b2lkIEZyYW1l
R2RrOjpyZXBhaW50KGJvb2wgbm93KQoreworCisgICAgSW50UmVjdCByID0gdmlldygpLT5mcmFt
ZUdlb21ldHJ5KCk7CisgICAgci5zZXRYKDApOworICAgIHIuc2V0WSgwKTsKKyAgICByZXBhaW50
KHIsbm93KTsKK30KKwordm9pZCBGcmFtZUdkazo6cmVwYWludChjb25zdCBJbnRSZWN0JiB1cGRh
dGVSZWN0LCBib29sIG5vdykKK3sKKyAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAobV93aW5kb3cuZ2V0KCkpIHsKKyAgICAgICAgSW50UmVjdCBy
ID0gdmlldygpLT5mcmFtZUdlb21ldHJ5KCk7CisgICAgICAgIC8vRklYTUUgSEFDSyBzaW5jZSB3
ZSBkb24ndCBnZXQgY29ycmVjdCByZXBhaW50cworICAgICAgICBtX3dpbmRvdy0+cmVwYWludChy
LG5vdyk7CisgICAgICAgIC8vbV93aW5kb3ctPnJlcGFpbnQodXBkYXRlUmVjdCxub3cpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEZyYW1lR2RrKiBwYXJlbnQgPSBzdGF0aWNfY2FzdDxG
cmFtZUdkayo+KHRyZWUoKS0+cGFyZW50KCkpOworICAgIGlmIChwYXJlbnQpIHsKKyAgICAgICAg
SW50UmVjdCBkaXJ0eVJlY3QgPSB1cGRhdGVSZWN0OworICAgICAgICBJbnRSZWN0IHIgPSB2aWV3
KCktPmZyYW1lR2VvbWV0cnkoKTsKKyAgICAgICAgZGlydHlSZWN0Lm1vdmUoci54KCksci55KCkp
OworICAgICAgICBwYXJlbnQtPnJlcGFpbnQoZGlydHlSZWN0LG5vdyk7CisgICAgfQorfQorCitT
dHJpbmcgRnJhbWVHZGs6Om1pbWVUeXBlRm9yRmlsZU5hbWUoU3RyaW5nIGNvbnN0JiBwYXRoKSBj
b25zdAoreworICAgIFN0cmluZyBucGF0aCA9ICBTdHJpbmcocGF0aCk7CisgICAgcmV0dXJuIFJl
c291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0TWltZVR5cGUobnBhdGgpOworfQorCit2b2lkIEZyYW1l
R2RrOjpzZXRQYXJlbnQoRnJhbWVHZGsqIHApCit7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKHAgPT0gcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBwLT50cmVl
KCktPmFwcGVuZENoaWxkKHRoaXMpOworICAgIHZpZXcoKS0+c2V0UGFyZW50KHAtPnZpZXcoKSk7
Cit9CisKK0ZyYW1lR2RrKiBGcmFtZUdkazo6cGFyZW50KCkKK3sKKyAgICByZXR1cm4gIHN0YXRp
Y19jYXN0PEZyYW1lR2RrKj4odHJlZSgpLT5wYXJlbnQoKSk7Cit9CisKKyNpZiAwCitJbnRQb2lu
dCBGcmFtZUdkazo6Z2V0QWJzb2x1dGVQb3NpdGlvbigpCit7CisgICAgaWYgKGlzVG9wTGV2ZWwo
KSkKKyAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CisKKyAgICBGcmFtZUdkayogcCA9IHBhcmVu
dCgpOworICAgIGFzc2VydChwICE9IDApOworICAgIGlmIChwKQorICAgICAgICByZXR1cm4gdmll
dygpLT5mcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKTsKKyAgICBJbnRQb2ludCBwdCA9IHAtPmdl
dEFic29sdXRlUG9zaXRpb24oKTsKKyAgICBwdC5tb3ZlKG1fZ2VvbWV0cnkueCgpLG1fZ2VvbWV0
cnkueSgpKTsKKyAgICByZXR1cm4gcHQ7Cit9CisjZW5kaWYKKworR3JhcGhpY3NDb250ZXh0Q2Fp
cm8qIEZyYW1lR2RrOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQoreworICAgIGlmIChtX3dpbmRv
dy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2luZG93LT5jcmVhdGVHcmFwaGljc0NvbnRleHQo
KTsKKworICAgIEZyYW1lR2RrKiBwYXJlbnQgPSBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KHRyZWUo
KS0+cGFyZW50KCkpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBwYXJlbnQtPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIEludFBvaW50IHAgPSB2aWV3KCktPmZyYW1lR2Vv
bWV0cnkoKS5sb2NhdGlvbigpOworICAgIGN0eC0+dHJhbnNsYXRlKHAueCgpLHAueSgpKTsKKyAg
ICByZXR1cm4gY3R4OworfQorCitHcmFwaGljc0NvbnRleHRDYWlybyogRnJhbWVHZGs6OmJlZ2lu
UGFpbnRpbmcoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV93aW5kb3cuZ2V0KCkp
CisgICAgICAgIHJldHVybiBtX3dpbmRvdy0+YmVnaW5QYWludGluZyhyZWN0KTsKKyAgICBJbnRS
ZWN0IHJlZ2lvbiA9IHJlY3Q7CisgICAgSW50UmVjdCByID0gdmlldygpLT5mcmFtZUdlb21ldHJ5
KCk7CisgICAgcmVnaW9uLm1vdmUoci54KCksci55KCkpOworICAgIEZyYW1lR2RrKiBwYXJlbnQg
PSBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KHRyZWUoKS0+cGFyZW50KCkpOworICAgIHJldHVybiBw
YXJlbnQtPmJlZ2luUGFpbnRpbmcocmVnaW9uKTsKK30KKwordm9pZCBGcmFtZUdkazo6ZW5kUGFp
bnRpbmcoR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIGN0eCkKK3sKKyAgICBpZiAobV93aW5kb3cuZ2V0
KCkpIHsKKyAgICAgICAgbV93aW5kb3ctPmVuZFBhaW50aW5nKGN0eCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBGcmFtZUdkayogcGFyZW50ID0gc3RhdGljX2Nhc3Q8RnJhbWVHZGsq
Pih0cmVlKCktPnBhcmVudCgpKTsKKyAgICBwYXJlbnQtPmVuZFBhaW50aW5nKGN0eCk7Cit9CisK
K3ZvaWQgRnJhbWVHZGs6OmF0dGFjaFdpbmRvdyhXaW5kb3dHZGsqIHdpbmRvdykKK3sKKyAgICBt
X3dpbmRvdyA9IHdpbmRvdzsKKyAgICBpZiAoIW1fd2luZG93KQorICAgICAgICByZXR1cm47Cisg
ICAgbV93aW5kb3ctPnNldEZyYW1lKHRoaXMpOworICAgIEludFJlY3QgciA9IHdpbmRvdy0+Z2Vv
bWV0cnkoKTsKKyAgICByLnNldFgoMCk7CisgICAgci5zZXRZKDApOworICAgIHZpZXcoKS0+c2V0
RnJhbWVHZW9tZXRyeShyKTsKK30KKwordm9pZCBGcmFtZUdkazo6ZGV0YWNoV2luZG93KCkKK3sK
KyAgICBpZiAoIW1fd2luZG93KQorICAgICAgICByZXR1cm47CisgICAgbV93aW5kb3ctPnNldEZy
YW1lKDApOworICAgIG1fd2luZG93LnJlbGVhc2UoKTsKKyAgICBtX3dpbmRvdyA9IDA7Cit9CisK
K3ZvaWQgRnJhbWVHZGs6OnNldEluc3RhbGxMb2NhdGlvbihjb25zdCBjaGFyICpsb2NhdGlvbikK
K3sKKyAgICBpbnN0YWxsUGF0aCA9IHN0cmR1cChsb2NhdGlvbik7Cit9CisKK1N0cmluZyBGcmFt
ZUdkazo6aW5zdGFsbExvY2F0aW9uKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKGluc3RhbGxQYXRo
KTsKK30KKworfQorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tl
eWJvYXJkQ29kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9LZXlib2Fy
ZENvZGVzLmgJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5Ym9h
cmRDb2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMSw3ICsyMSw3IEBACiAgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgS2V5Ym9hcmRDb2Rlc19ICkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtOCwxMyArOCwxMyBAQAogICogYXJlIG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTQxLDYgKzQxLDggQEAKICNp
bmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAor
I2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5J
TVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5D
VElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgVVNF
X09MRF9DQUlSTyAxCkBAIC01NywxMCArNTksMTAgQEAKICAgICBtX3hIZWlnaHQgPSAxMzsKICAg
ICBtX3NwYWNlV2lkdGggPSAxMDsKICNlbHNlCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9l
eHRlbnRzKG1fZm9udC5tX3NjYWxlZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7Ci0gICAgbV94
SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhlaWdodDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0
X2V4dGVudHMobV9mb250Lm1fc2NhbGVkRm9udCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBt
X3NwYWNlV2lkdGggPSAgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0X2V4dGVudHMueF9hZHZhbmNlKTsK
KyAgICAvL2NhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250
LCAieCIsICZ0ZXh0X2V4dGVudHMpOworICAgIC8vbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhl
aWdodDsKKyAgICAvL2NhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9zY2Fs
ZWRGb250LCAiICIsICZ0ZXh0X2V4dGVudHMpOworICAgIC8vbV9zcGFjZVdpZHRoID0gIHN0YXRp
Y19jYXN0PGludD4odGV4dF9leHRlbnRzLnhfYWR2YW5jZSk7CiAjZW5kaWYKICAgICBhc3NlcnQo
bV9zcGFjZVdpZHRoICE9IDApOwogICAgIG1fbGluZUdhcCA9IG1fbGluZVNwYWNpbmcgLSBtX2Fz
Y2VudCAtIG1fZGVzY2VudDsKQEAgLTY4LDcgKzcwLDggQEAKIAogdm9pZCBGb250RGF0YTo6cGxh
dGZvcm1EZXN0cm95KCkKIHsKLSAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBp
ZiAobV9zbWFsbENhcHNGb250RGF0YSkKKyAgICAgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERh
dGE7CiB9CiAKIEZvbnREYXRhKiBGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dkay9GaWxlQ2hvb3Nlckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvRmlsZUNob29zZXJHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvRmlsZUNob29zZXJHZGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKwor
I2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5J
TVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5D
VElPTl9fKTsgfSB3aGlsZSgwKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8
RmlsZUNob29zZXI+IEZpbGVDaG9vc2VyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbCogdXBsb2FkQ29udHJvbCkKK3sKKyAgICBQYXNzUmVmUHRyPEZp
bGVDaG9vc2VyPiBmaWxlQ2hvb3NlcihuZXcgRmlsZUNob29zZXIoZG9jdW1lbnQsIHVwbG9hZENv
bnRyb2wpKTsKKyAgICByZXR1cm4gZmlsZUNob29zZXI7Cit9CisKK0ZpbGVDaG9vc2VyOjpGaWxl
Q2hvb3NlcihEb2N1bWVudCosIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitGaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNob29zZXIo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBGaWxlQ2hvb3Nlcjo6YmFz
ZW5hbWVGb3JXaWR0aChpbnQgd2lkdGgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRmlsZUNob29zZXI6OmRpc2Nvbm5lY3RV
cGxvYWRDb250cm9sKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZpbGVD
aG9vc2VyOjpjaG9vc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIs
NyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCiAg
KgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lR2RrLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyUG9wdXBNZW51R2RrLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgpAQCAtNTgsOCArNTcsNyBAQAogfQogCiB2b2lkIFJlbmRlclRoZW1l
R2RrOjpjbG9zZSgpCi17Ci19Cit7fQogCiB2b2lkIFJlbmRlclRoZW1lR2RrOjphZGRJbnRyaW5z
aWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKQEAgLTg5LDEyICs4NywxMiBA
QAogYm9vbCBSZW5kZXJUaGVtZUdkazo6c3VwcG9ydHNGb2N1cyhFQXBwZWFyYW5jZSBhcHBlYXJh
bmNlKQogewogICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgICAgICBjYXNlIFB1c2hCdXR0
b25BcHBlYXJhbmNlOgotICAgICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAgICAgIGNh
c2UgVGV4dEZpZWxkQXBwZWFyYW5jZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgUHVzaEJ1dHRv
bkFwcGVhcmFuY2U6CisgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgorICAgIGNhc2UgVGV4dEZp
ZWxkQXBwZWFyYW5jZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMiwyMyAr
MTIwLDIzIEBACiB7CiAgICAgVGhlbWVEYXRhIHJlc3VsdDsKICAgICBzd2l0Y2ggKG8tPnN0eWxl
KCktPmFwcGVhcmFuY2UoKSkgewotICAgICAgICBjYXNlIFB1c2hCdXR0b25BcHBlYXJhbmNlOgot
ICAgICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXN1bHQubV9wYXJ0
ID0gQlBfQlVUVE9OOwotICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0
ZShvKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENoZWNrYm94QXBwZWFyYW5j
ZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9DSEVDS0JPWDsKLSAgICAgICAgICAg
IHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBSYWRpb0FwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXN1bHQubV9wYXJ0
ID0gQlBfUkFESU87Ci0gICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRl
KG8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGV4dEZpZWxkQXBwZWFyYW5j
ZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBURlBfVEVYVEZJRUxEOwotICAgICAgICAg
ICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKLSAgICAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUHVzaEJ1dHRvbkFwcGVhcmFuY2U6CisgICAgY2FzZSBCdXR0b25BcHBlYXJh
bmNlOgorICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfQlVUVE9OOworICAgICAgICByZXN1bHQu
bV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENo
ZWNrYm94QXBwZWFyYW5jZToKKyAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0NIRUNLQk9YOwor
ICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFJhZGlvQXBwZWFyYW5jZToKKyAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQ
X1JBRElPOworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6CisgICAgICAgIHJlc3Vs
dC5tX3BhcnQgPSBURlBfVEVYVEZJRUxEOworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVy
bWluZVN0YXRlKG8pOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMTUwLDggKzE0OCwyMSBAQAogfQogCiB2b2lkIFJlbmRlclRoZW1lR2RrOjpzeXN0ZW1G
b250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0CisgICAge30KKwordm9pZCBS
ZW5kZXJUaGVtZUdkazo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3QKKyAgICB7
IH0KK2Jvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCiB7Ci0KKyAgICByZXR1
cm4gZmFsc2U7CiB9Cit2b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5
bGUqKSBjb25zdAorICAgIHsgfQordm9pZCBSZW5kZXJUaGVtZUdkazo6YWRqdXN0VGV4dEZpZWxk
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCogZSkgY29uc3QK
KyAgICB7fQorYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQ
bGF0Zm9ybURhdGFHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Zv
bnRQbGF0Zm9ybURhdGFHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMs
NyBAQAogICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KICAqCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzQsMTAgKzM0LDEyIEBACiAjaW5jbHVkZSA8Zm9u
dGNvbmZpZy9mY2ZyZWV0eXBlLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKKyNkZWZpbmUgbm90
SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6
ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0g
d2hpbGUoMCkKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pCisgICAgICAgIDogbV9mb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KSxtX3BhdHRlcm4oMCkKIHsKICAgICBpbml0KCk7CiAKQEAgLTUyLDE2ICs1NCwxNiBAQAogCiAg
ICAgaW50IHR5cGUgPSBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOwogICAgIHN3aXRj
aCAodHlwZSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6Ci0g
ICAgICAgICAgICBmYW1pbHkgPSAoRmNDaGFyOCopInNhbnMtc2VyaWYiOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6Ci0g
ICAgICAgICAgICBmYW1pbHkgPSAoRmNDaGFyOCopInNhbnMtc2VyaWYiOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToKLSAgICAgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5OgotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgZmFtaWx5ID0gKEZjQ2hhcjgqKSJzYW5zLXNlcmlmIjsKKyAgICBjYXNlIEZv
bnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlseSA9IChGY0NoYXI4Kiki
c2Fucy1zZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpT
YW5zU2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlseSA9IChGY0NoYXI4Kikic2Fucy1zZXJpZiI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToKKyAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgZmFtaWx5ID0gKEZjQ2hhcjgqKSJzYW5zLXNlcmlmIjsKICAgICB9CiAgICAgRmNQYXR0
ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7CiAgICAgYXNzZXJ0KHBhdHRlcm4gIT0g
MCk7CkBAIC0xNTAsNyArMTUyLDYgQEAKICAgICBjYWlyb19mb250X2ZhY2VfdCoqIHJlc3VsdCA9
IChjYWlyb19mb250X2ZhY2VfdCoqKW1hbGxvYygoZnMtPm5mb250ICsgMSkgKiBzaXplb2YoY2Fp
cm9fZm9udF9mYWNlX3QqKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcy0+bmZvbnQ7IGkr
KykgewogICAgICAgICBGY0NoYXI4KiBmb250ID0gRmNOYW1lVW5wYXJzZShmcy0+Zm9udHNbaV0p
OwotICAgICAgICBwcmludGYoIiVzXG4iLCBmb250KTsKICAgICAgICAgcmVzdWx0W2ldID0gY2Fp
cm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmcy0+Zm9udHNbaV0pOwogICAgIH0K
ICAgICByZXN1bHRbZnMtPm5mb250XSA9IE5VTEw7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9Gb250R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2Rr
LmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIsNDIgKzIyLDUzIEBACiAg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250
LmgiCiAKICNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIK
IAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTog
VU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9G
VU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgRm9u
dDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9u
dERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0CiB7Ci0gICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fdCogY3IgPSBncmFwaGljc0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NDb250ZXh0Q2Fpcm8qPihncmFwaGljc0NvbnRleHQpOwogCiAgICAgLy8g
U2V0IHRoZSB0ZXh0IGNvbG9yIHRvIHVzZSBmb3IgZHJhd2luZy4KKyAgICBkb3VibGUgeCx5Owog
ICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwogICAgIENvbG9yIHBlbkNvbG9yID0g
Z3JhcGhpY3NDb250ZXh0LT5wZW4oKS5jb2xvcigpOwogICAgIHBlbkNvbG9yLmdldFJHQkEocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0
LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNy
LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAKLSAgICAvLyBTZWxlY3QgdGhlIHNjYWxlZCBm
b250LgotICAgIGZvbnQtPnNldEZvbnQoY29udGV4dCk7CisgICAgY2Fpcm9fc2F2ZShjcik7CiAK
LSAgICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMgPSAoR2x5cGhCdWZmZXJHbHlwaCopIGdseXBo
QnVmZmVyLmdseXBocyhmcm9tKTsKKyAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7CisgICAgY2Fp
cm9fZ2V0X21hdHJpeChjciwmbWF0cml4KTsKKyAgICBmb250LT5zZXRGb250KGNyKTsKKyAgICBj
YWlyb19zZXRfbWF0cml4KGNyLCZtYXRyaXgpOworICAgIGNhaXJvX25ld19wYXRoKGNyKTsKKyAg
ICBjYWlyb19tb3ZlX3RvKGNyLHBvaW50LngoKSxwb2ludC55KCkpOworICAgIGNhaXJvX2dldF9j
dXJyZW50X3BvaW50KGNyLCZ4LCZ5KTsKKyAgICBmbG9hdCBvZmZzZXQgPSB4OwogCi0gICAgZmxv
YXQgb2Zmc2V0ID0gcG9pbnQueCgpOwogCisgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0g
Y29uc3RfY2FzdDxHbHlwaEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsK
KwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewogICAgICAg
ICBnbHlwaHNbaV0ueCA9IG9mZnNldDsKLSAgICAgICAgZ2x5cGhzW2ldLnkgPSBwb2ludC55KCk7
CisgICAgICAgIGdseXBoc1tpXS55ID0geTsKICAgICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVy
LmFkdmFuY2VBdChmcm9tICsgaSk7CiAgICAgfQotICAgIGNhaXJvX3Nob3dfZ2x5cGhzKGNvbnRl
eHQsIGdseXBocywgbnVtR2x5cGhzKTsKKyAgICBjYWlyb19zaG93X2dseXBocyhjciwgZ2x5cGhz
LCBudW1HbHlwaHMpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmgJKHJldmlzaW9uIDE3Mzk5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBsYXRm
b3JtU2Nyb2xsQmFyX2gKLSNkZWZpbmUgUGxhdGZvcm1TY3JvbGxCYXJfaAotCi0jaW5jbHVkZSAi
V2lkZ2V0LmgiCi0jaW5jbHVkZSAiU2Nyb2xsQmFyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBwdWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xs
YmFyIHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOwotICAgIHZpcnR1YWwg
flBsYXRmb3JtU2Nyb2xsYmFyKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNXaWRnZXQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIHN0YXRpYyBpbnQgaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCgpIHsgcmV0dXJuIDE1OyB9Ci0gICAgc3RhdGljIGludCB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCkgeyByZXR1cm4gMTU7IH0KLQotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRodW1iUHJvcG9ydGlvbigpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gUGxhdGZvcm1TY3JvbGxC
YXJfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaW5kb3dHZGsuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCisjaW5jbHVkZSAiRnJh
bWVHZGsuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisj
aW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5j
bHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJCcm93c2VyRXh0ZW5zaW9uR2Rr
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MRnJh
bWVFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckludGVybmFsLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAi
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgorI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisjaW5jbHVkZSAiU1NMS2V5R2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIlBhdGguaCIK
KyNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOworCitzdGF0aWMgSGFzaE1hcDxHZGtEcmF3YWJsZSosV2luZG93R2RrKj4gd2luZG93
czsKK3N0YXRpYyBXaW5kb3dHZGsqIGN1cnJlbnRBY3RpdmVGcmFtZTsKKworI2lmIDAKK2dfaWRs
ZV9hZGQoR1NvdXJjZUZ1bmMgZnVuY3Rpb24sZ3BvaW50ZXIgZGF0YSk7CitnYm9vbGVhbiAgICAo
KkdTb3VyY2VGdW5jKShncG9pbnRlciBkYXRhKTsKKworc3RhdGljIGdib29sZWFuIHBhaW50X2Nh
bGxiYWNrKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ2RrX3RocmVhZHNfZW50ZXIoKTsKKyAgICBn
ZGtfdGhyZWFkc19sZWF2ZSgpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRvU2Nyb2xsKGNv
bnN0IFJlbmRlck9iamVjdCogciwgYm9vbCBpc0hvcml6b250YWwsIGludCBtdWx0aXBsaWVyKQor
eworICAgIC8vIEZJWE1FOiBUaGUgc2Nyb2xsaW5nIGRvbmUgaGVyZSBzaG91bGQgYmUgZG9uZSBp
biB0aGUgZGVmYXVsdCBoYW5kbGVycworICAgIC8vIG9mIHRoZSBlbGVtZW50cyByYXRoZXIgdGhh
biBoZXJlIGluIHRoZSBwYXJ0LgorICAgIGlmICghcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly9icm9rZW4gc2luY2UgaXQgY2FsbHMgc2Nyb2xsIG9uIHNjcm9sbGJhcnMKKyAgICAvL2FuZCB3
ZSBoYXZlIG5vbmUgbm93CisgICAgLy9yLT5zY3JvbGwoZGlyZWN0aW9uLCBTY3JvbGxCeVdoZWVs
LCBtdWx0aXBsaWVyKTsKKyAgICBpZiAoIXItPmxheWVyKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpbnQgeCA9IHItPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKKyAgICBpbnQgeSA9IHItPmxh
eWVyKCktPnNjcm9sbFlPZmZzZXQoKTsKKyAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICB4
ICs9IG11bHRpcGxpZXI7CisgICAgZWxzZQorICAgICAgICB5ICs9IG11bHRpcGxpZXI7CisgICAg
ci0+bGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQoeCwgeSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK1dpbmRv
d0dkazo6V2luZG93R2RrKEdka1dpbmRvdyogd2luZG93KQorICAgICAgICA6IG1fd2luZG93KHdp
bmRvdyksbV93aW5kb3dGZWF0dXJlcygpCit7CisgICAgSW50UmVjdCByID0gZ2VvbWV0cnkoKTsK
KyAgICB3aW5kb3dzLmFkZChtX3dpbmRvdyx0aGlzKTsKKyAgICBzZXRHZW9tZXRyeShyKTsKK30K
KworV2luZG93R2RrOjpXaW5kb3dHZGsoY29uc3QgV2luZG93RmVhdHVyZXMmIGFyZ3MpCisgICAg
ICAgIDogbV93aW5kb3dGZWF0dXJlcyhhcmdzKQoreworICAgIEdka1dpbmRvd0F0dHIgYXR0cjsK
KyAgICBpbnQgZXh0cmFBdHRyczsKKworICAgIGlmIChhcmdzLnhTZXQpIHsKKyAgICAgICAgYXR0
ci54ID0gKGludClhcmdzLng7CisgICAgICAgIGV4dHJhQXR0cnMgfD1HREtfV0FfWDsKKyAgICB9
CisgICAgaWYgKGFyZ3MueVNldCkgeworICAgICAgICBhdHRyLnkgPSAoaW50KWFyZ3MueDsKKyAg
ICAgICAgZXh0cmFBdHRycyB8PUdES19XQV9ZOworICAgIH0KKyAgICBpZiAoYXJncy5oaWRlRnJh
bWVEZWNvcmF0aW9ucykgeworICAgICAgICBhdHRyLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsK
KyAgICAgICAgZXh0cmFBdHRycyB8PUdES19XQV9OT1JFRElSOworICAgIH0KKyAgICBhdHRyLndp
ZHRoID0gYXJncy53aWR0aFNldCA/IHN0YXRpY19jYXN0PGdpbnQ+KGFyZ3Mud2lkdGgpOjMwMDsK
KyAgICBhdHRyLmhlaWdodCA9IGFyZ3MuaGVpZ2h0U2V0ID8gc3RhdGljX2Nhc3Q8Z2ludD4oYXJn
cy5oZWlnaHQpOjE1MDsKKyAgICBhdHRyLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19UT1BMRVZF
TDsKKyAgICBhdHRyLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0ci5ldmVudF9t
YXNrID0gKChHREtfQUxMX0VWRU5UU19NQVNLXkdES19QT0lOVEVSX01PVElPTl9ISU5UX01BU0sp
KTsKKworICAgIG1fd2luZG93ID0gZ2RrX3dpbmRvd19uZXcobV93aW5kb3csJmF0dHIsZXh0cmFB
dHRycyk7CisgICAgZ2RrX3dpbmRvd19zZXRfYWNjZXB0X2ZvY3VzKG1fd2luZG93LFRSVUUpOwor
ICAgIGlmIChhcmdzLmZ1bGxzY3JlZW4pIHsKKyAgICAgICAgc2V0RnVsbFNjcmVlbih0cnVlKTsK
KyAgICB9Cit9CisKK1dpbmRvd0dkayogV2luZG93R2RrOjpmaW5kV2luZG93KEdka1dpbmRvdyog
d2luZG93KQoreworICAgIHJldHVybiB3aW5kb3dzLmdldCh3aW5kb3cpOworfQorCitXaW5kb3dH
ZGs6On5XaW5kb3dHZGsoKQoreworICAgIHdpbmRvd3MucmVtb3ZlKG1fd2luZG93KTsKKyAgICBn
ZGtfd2luZG93X2Rlc3Ryb3kobV93aW5kb3cpOworICAgIG1fd2luZG93ID0gMDsKK30KKwordm9p
ZCBXaW5kb3dHZGs6OnNldEZ1bGxTY3JlZW4oYm9vbCBmdWxsKQoreworICAgIGlmIChmdWxsKQor
ICAgICAgICBnZGtfd2luZG93X2Z1bGxzY3JlZW4obV93aW5kb3cpOworICAgIGVsc2UKKyAgICAg
ICAgZ2RrX3dpbmRvd191bmZ1bGxzY3JlZW4obV93aW5kb3cpOworfQorCit2b2lkIFdpbmRvd0dk
azo6c2V0TWF4aW1pemVkKGJvb2wgbWF4aW1pemVkKQoreworICAgIGlmIChtYXhpbWl6ZWQpCisg
ICAgICAgIGdka193aW5kb3dfbWF4aW1pemUobV93aW5kb3cpOworICAgIGVsc2UKKyAgICAgICAg
Z2RrX3dpbmRvd191bm1heGltaXplKG1fd2luZG93KTsKK30KKworV2luZG93R2RrKiBXaW5kb3dH
ZGs6OmdldFBvaW50ZXJJbmZvKEludFBvaW50JiBwb3NpdGlvbiwgLypwb3NpdGlvbiByZWxhdGl2
ZSB0byB0aGlzIHdpbmRvdyovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCYgc2hpZnRLZXksYm9vbCYgY3RybEtleSwgYm9vbCYgYWx0S2V5LCBib29sJiBtZXRhS2V5
KQoreworICAgIEdka01vZGlmaWVyVHlwZSBtYXNrOworICAgIGludCB4LHk7CisgICAgR2RrV2lu
ZG93KiB3aW4gPSBnZGtfd2luZG93X2dldF9wb2ludGVyKG1fd2luZG93LCZ4LCZ5LCZtYXNrKTsK
KyAgICBwb3NpdGlvbi5zZXRYKHgpOworICAgIHBvc2l0aW9uLnNldFkoeSk7CisgICAgaWYgKG1h
c2sgJiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgc2hpZnRLZXk9dHJ1ZTsKKyAgICBpZiAobWFz
ayAmIEdES19DT05UUk9MX01BU0spCisgICAgICAgIGN0cmxLZXk9dHJ1ZTsKKyAgICBpZiAobWFz
ayAmIEdES19NT0QxX01BU0spCisgICAgICAgIGFsdEtleSA9IHRydWU7CisgICAgaWYgKG1hc2sg
JiBHREtfTU9EMl9NQVNLKQorICAgICAgICBtZXRhS2V5ID0gdHJ1ZTsKKyAgICByZXR1cm4gZmlu
ZFdpbmRvdyh3aW4pOworfQorCit2b2lkIFdpbmRvd0dkazo6c2V0VGl0bGUoY29uc3QgU3RyaW5n
ICZ0aXRsZSkKK3sKKyAgICBnZGtfd2luZG93X3NldF90aXRsZShtX3dpbmRvdyx0aXRsZS5kZXBy
ZWNhdGVkU3RyaW5nKCkuYXNjaWkoKSk7Cit9CisKK3ZvaWQgV2luZG93R2RrOjpzZXRJc0FjdGl2
ZShib29sIGZsYWcpCit7CisgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgZ2RrX3dpbmRvd19zaG93
KG1fd2luZG93KTsKKyAgICAgICAgZ2RrX3dpbmRvd19mb2N1cyhtX3dpbmRvdyxHREtfQ1VSUkVO
VF9USU1FKTsKKyAgICB9Cit9CisKKy8qCisgKiBQb3NpdGlvbiBpbiB0aGUgdG9wIGxldmVsIG9y
IHBhaW50aW5nIFBhcmVudAorICogemVybyBmb3IgdG9wIGxldmVsIGZyYW1lcworICovCitJbnRQ
b2ludCBXaW5kb3dHZGs6OmdldEFic29sdXRlUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVy
biBJbnRQb2ludCgpOworfQorCitHcmFwaGljc0NvbnRleHRDYWlybyogV2luZG93R2RrOjpjcmVh
dGVHcmFwaGljc0NvbnRleHQoKQoreworICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0
ZSAobV93aW5kb3cpOworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oY3IpOwor
fQorCitHcmFwaGljc0NvbnRleHRDYWlybyogV2luZG93R2RrOjpiZWdpblBhaW50aW5nKGNvbnN0
IEludFJlY3QmIHBhaW50UmVjdCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgcGFpbnRS
ZWN0LngoKSwgcGFpbnRSZWN0LnkoKSwgcGFpbnRSZWN0LndpZHRoKCksIHBhaW50UmVjdC5oZWln
aHQoKSB9OworICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVjdCAobV93aW5kb3csICZyZWN0
KTsKKyAgICByZXR1cm4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2luZG93
R2RrOjplbmRQYWludGluZyhHcmFwaGljc0NvbnRleHRDYWlybyogY3R4KQoreworICAgIGlmIChj
dHgpCisgICAgICAgIGRlbGV0ZSBjdHg7CisgICAgZ2RrX3dpbmRvd19lbmRfcGFpbnQgKG1fd2lu
ZG93KTsKKyAgICBnZGtfZmx1c2goKTsKK30KKworCit2b2lkIFdpbmRvd0dkazo6aGFuZGxlR2Rr
RXZlbnQoR2RrRXZlbnQqIGV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKyAg
ICBjYXNlIEdES19ERUxFVEU6CisgICAgICAgIC8vRklYTUU6IHNhdmUgY2FsbGJhY2sgaGVyZQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19FWFBPU0U6IHsKKyAgICAgICAgR2RrUmVjdGFu
Z2xlIGNsaXA7CisgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5y
ZWdpb24sICZjbGlwKTsKKyAgICAgICAgSW50UmVjdCBkaXJ0eSA9IEludFJlY3QoY2xpcC54LCBj
bGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
Q2Fpcm8qIGN0eCA9IGJlZ2luUGFpbnRpbmcoZGlydHkpOworICAgICAgICBtX2ZyYW1lLT52aWV3
KCktPnBhaW50KGN0eCxkaXJ0eSk7CisgICAgICAgIGVuZFBhaW50aW5nKGN0eCk7CisgICAgfQor
ICAgIGJyZWFrOworICAgIGNhc2UgR0RLX0RSQUdfRU5URVI6CisgICAgY2FzZSBHREtfRFJBR19M
RUFWRToKKyAgICBjYXNlIEdES19EUkFHX01PVElPTjoKKyAgICBjYXNlIEdES19EUkFHX1NUQVRV
UzoKKyAgICBjYXNlIEdES19EUk9QX1NUQVJUOgorICAgIGNhc2UgR0RLX0RST1BfRklOSVNIRUQ6
IHsKKyAgICAgICAgLy9ib29sIHVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYsIENsaXBib2FyZCopOworICAgICAgICAvL3ZvaWQgY2FuY2VsRHJhZ0FuZERyb3AoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7CisgICAgICAgIC8vYm9vbCBwZXJm
b3JtRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7Cisg
ICAgICAgIC8vdmlldygpLT5pbnZhbGlkYXRlQ2xpY2soKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgR0RLX0ZPQ1VTX0NIQU5HRTogeworICAgICAgICBtX2ZyYW1lLT5wcm9jZXNz
UGxhdGZvcm1Gb2N1c0NoYW5nZShldmVudC0+Zm9jdXNfY2hhbmdlLmluKTsKKyAgICB9CisgICAg
YnJlYWs7CisgICAgY2FzZSBHREtfU0NST0xMOiB7CisgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVu
dCB3aGVlbEV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9mcmFtZS0+cHJvY2Vzc1BsYXRmb3JtV2hl
ZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBHREtfTU9U
SU9OX05PVElGWTogeworICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudChldmVu
dCk7CisgICAgICAgIG1fZnJhbWUtPnByb2Nlc3NQbGF0Zm9ybU1vdXNlRXZlbnQobW91c2VFdmVu
dCxFdmVudE5hbWVzOjptb3VzZW1vdmVFdmVudCk7CisgICAgfQorICAgIGJyZWFrOworICAgIGNh
c2UgR0RLX0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNh
c2UgR0RLXzNCVVRUT05fUFJFU1M6IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNl
RXZlbnQoZXZlbnQpOworICAgICAgICBtX2ZyYW1lLT5wcm9jZXNzUGxhdGZvcm1Nb3VzZUV2ZW50
KG1vdXNlRXZlbnQsRXZlbnROYW1lczo6bW91c2Vkb3duRXZlbnQpOworICAgIH0KKyAgICBicmVh
azsKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRTogeworICAgICAgICBQbGF0Zm9ybU1vdXNl
RXZlbnQgbW91c2VFdmVudChldmVudCk7CisgICAgICAgIG1fZnJhbWUtPnByb2Nlc3NQbGF0Zm9y
bU1vdXNlRXZlbnQobW91c2VFdmVudCxFdmVudE5hbWVzOjptb3VzZXVwRXZlbnQpOworICAgIH0K
KyAgICBicmVhazsKKyAgICBjYXNlIEdES19LRVlfUFJFU1M6IHsKKyAgICAgICAgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50IGtleUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9mcmFtZS0+cHJvY2Vzc1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudChrZXlFdmVudCxFdmVudE5hbWVzOjprZXlkb3duRXZlbnQpOwor
ICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIEdES19LRVlfUkVMRUFTRTogeworICAgICAgICBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5RXZlbnQoZXZlbnQpOworICAgICAgICBtX2ZyYW1lLT5w
cm9jZXNzUGxhdGZvcm1LZXlib2FyZEV2ZW50KGtleUV2ZW50LEV2ZW50TmFtZXM6OmtleXVwRXZl
bnQpOworICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIEdES19DT05GSUdVUkU6IHsKKyAgICAg
ICAgSW50UmVjdCBuZXdHZW9tKDAsMCxldmVudC0+Y29uZmlndXJlLndpZHRoLGV2ZW50LT5jb25m
aWd1cmUuaGVpZ2h0KTsKKyAgICAgICAgbV9mcmFtZS0+dmlldygpLT5zZXRGcmFtZUdlb21ldHJ5
KG5ld0dlb20pOworICAgIH0KKyAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKKwordm9pZCBXaW5kb3dHZGs6OnNob3coKQoreworICAgIGdka193aW5k
b3dfc2hvdyhtX3dpbmRvdyk7Cit9CisKK3ZvaWQgV2luZG93R2RrOjpoaWRlKCkKK3sKKyAgICBn
ZGtfd2luZG93X2hpZGUobV93aW5kb3cpOworfQorCit2b2lkIFdpbmRvd0dkazo6c2V0R2VvbWV0
cnkoY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBnZGtfd2luZG93X21vdmVfcmVzaXplKG1fd2lu
ZG93LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7Cit9CisKK0ludFJlY3Qg
V2luZG93R2RrOjpnZW9tZXRyeSgpIGNvbnN0Cit7CisgICAgZ2ludCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aDsKKyAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShtX3dpbmRvdywgJngsICZ5
LCAmd2lkdGgsICZoZWlnaHQsICZkZXB0aCk7CisgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCk7Cit9CisKKwordm9pZCBXaW5kb3dHZGs6OnNldEN1cnNvcihjb25zdCBDdXJz
b3ImIGN1cnNvcikKK3sKKyAgICBHZGtDdXJzb3IqIHBjdXIgPSBjdXJzb3IuaW1wbCgpOworICAg
IGlmICghcGN1cikKKyAgICAgICAgcmV0dXJuOworICAgIGdka193aW5kb3dfc2V0X2N1cnNvciht
X3dpbmRvdywgcGN1cik7Cit9CisKKworSW50UG9pbnQgV2luZG93R2RrOjpwb3NpdGlvbigpIGNv
bnN0Cit7CisgICAgZ2ludCB4LCB5OworICAgIGdka193aW5kb3dfZ2V0X29yaWdpbihtX3dpbmRv
dywgJngsICZ5KTsKKyAgICByZXR1cm4gSW50UG9pbnQoeCx5KTsKK30KKworSW50U2l6ZSBXaW5k
b3dHZGs6OnNpemUoKSBjb25zdAoreworICAgIGdpbnQgdyxoOworICAgIGdka193aW5kb3dfZ2V0
X3NpemUobV93aW5kb3csICZ3LCAmaCk7CisgICAgcmV0dXJuIEludFNpemUodyxoKTsKK30KKwor
dm9pZCBXaW5kb3dHZGs6OnJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBu
b3cpCit7CisgICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7dXBkYXRlUmVjdC54KCksIHVwZGF0ZVJl
Y3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgfTsKKyAgICBn
ZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdChtX3dpbmRvdywgJnJlY3QsIHRydWUpOworCisgICAg
aWYgKG5vdykgeworICAgICAgICBnZGtfd2luZG93X3Byb2Nlc3NfdXBkYXRlcyhtX3dpbmRvdywg
dHJ1ZSk7CisgICAgfQorICAgIGdka19mbHVzaCgpOworfQorCisKK30KKy8vIHZpbTogdHM9NCBz
dz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9JbWFnZS5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw5IEBACiBwdWJsaWM6CiAg
ICAgSW1hZ2UoKTsKICAgICBJbWFnZShJbWFnZUFuaW1hdGlvbk9ic2VydmVyKiBvYnNlcnZlciwg
Ym9vbCBpc1BERiA9IGZhbHNlKTsKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICBJbWFnZShJbnRT
aXplIHNpemUpOworI2VuZGlmCiAgICAgfkltYWdlKCk7CiAgICAgCiAgICAgc3RhdGljIEltYWdl
KiBsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQu
aAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCwxMCArNDAsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShHREspCi10eXBlZGVmIHN0cnVjdCBfR2RrRHJhd2FibGUg
R2RrRHJhd2FibGU7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFFUKQogY2xhc3MgUVdpZGdldDsK
ICNlbmRpZgpAQCAtNjAsOCArNTYsMjAgQEAKICAgICBjbGFzcyBTY3JvbGxWaWV3OwogICAgIGNs
YXNzIFdpZGdldENsaWVudDsKICAgICBjbGFzcyBXaWRnZXRQcml2YXRlOworI2lmIFBMQVRGT1JN
KEdESykKKyAgICBjbGFzcyBJbnRlcm5hbEZyYW1lR2RrOworICAgIGNsYXNzIEtVUkw7CisgICAg
Y2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBTdHJpbmc7CisgICAg
Y2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OworICAgIGNsYXNzIEZyYW1lVmlldzsKKyNlbmRp
ZgogCiAgICAgY2xhc3MgV2lkZ2V0IHsKKyNpZiBQTEFURk9STShHREspCisgICAgICAgIGZyaWVu
ZCBjbGFzcyBGcmFtZUdkazsKKyNlbmRpZgogICAgIHB1YmxpYzoKIAogICAgICAgICBlbnVtIEZv
Y3VzUG9saWN5IHsKQEAgLTE3NCwxNSArMTgyLDIyIEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KEdESykKLSAgICAgICAgV2lkZ2V0KEdka0RyYXdhYmxlKiBkcmF3YWJsZSk7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBzZXREcmF3YWJsZShHZGtEcmF3YWJsZSogZHJhd2FibGUpOwotICAgICAgICBH
ZGtEcmF3YWJsZSogZHJhd2FibGUoKSBjb25zdDsKKyAgICAgIFdpZGdldFByaXZhdGUqIHByaXZh
dGVEYXRhKCkgY29uc3R7cmV0dXJuIGRhdGE7fQorICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXco
KSBjb25zdDsKKyAgICAgIHZvaWQgc2V0RnJhbWVWaWV3KEZyYW1lVmlldyopOworICAgICAgdm9p
ZCBzZXRQYXJlbnQoV2lkZ2V0Kik7CisgICAgICBXaWRnZXQqIHBhcmVudCgpIGNvbnN0OworICAg
ICAgdm9pZCBzZXRPd25lcihXaWRnZXQqKTsKKyAgICAgIFdpZGdldCogb3duZXIoKSBjb25zdDsK
KyAgICAgIEludFBvaW50IGxvY2F0aW9uSW5XaW5kb3coKSBjb25zdDsKKyAgICAgIHZvaWQgcmVw
YWludChib29sIG5vdyk7CisgICAgICB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBkYXRl
UmVjdCwgYm9vbCBub3cpOworICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQo
Y29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBldnQpe307CiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKFFUKQogICAgICAgICBRV2lkZ2V0KiBwYXJlbnRXaWRnZXQoKSBjb25zdDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHNldFBhcmVudFdpZGdldChRV2lkZ2V0Kik7Ci0KICAgICAgICAgUVdpZGdl
dCogcXdpZGdldCgpOwogICAgICAgICB2b2lkIHNldFFXaWRnZXQoUVdpZGdldCopOwogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsMTYgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udERhdGE6OkZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGYpCi0gICAgOiBtX2ZvbnQoZikKKyAgICA6IG1fYXNjZW50KDApCisgICAgLCBtX2Rl
c2NlbnQoMCkKKyAgICAsIG1fbGluZVNwYWNpbmcoMCkKKyAgICAsIG1fbGluZUdhcCgwKQorICAg
ICwgbV94SGVpZ2h0KDApCisgICAgLCBtX2ZvbnQoZikKICAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0
Y2goZmFsc2UpCisgICAgLCBtX3NwYWNlR2x5cGgoMCkKKyAgICAsIG1fc3BhY2VXaWR0aCgwKQor
ICAgICwgbV9hZGp1c3RlZFNwYWNlV2lkdGgoMCkKICAgICAsIG1fc21hbGxDYXBzRm9udERhdGEo
MCkKIHsgICAgCiAgICAgcGxhdGZvcm1Jbml0KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0lt
YWdlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZVNvdXJjZS5o
CShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vSW1hZ2VTb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksMTkgKzI5LDIwIEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisKICNpZiBQTEFURk9STShDRykKICNpbmNs
dWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNlbGlmIFBM
QVRGT1JNKFFUKQogY2xhc3MgUUltYWdlOwogI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogc3RydWN0IF9jYWlyb19zdXJmYWNlOwogdHlwZWRlZiBzdHJ1Y3QgX2Nh
aXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICBjbGFzcyBJbnRTaXplOwogCi1jbGFzcyBJbnRTaXplOwotCiAjaWYgUExBVEZPUk0o
Q0cpCiB0eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiB0eXBl
ZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7CkBAIC01MSwxMSArNTIsMTYgQEAKIHR5cGVk
ZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKIHR5cGVkZWYgY29uc3QgVmVj
dG9yPGNoYXI+KiBOYXRpdmVCeXRlUHRyOwogdHlwZWRlZiBRSW1hZ2UqIE5hdGl2ZUltYWdlUHRy
OworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCitjbGFzcyBJbWFnZURlY29kZXI7Cit0eXBlZGVmIElt
YWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7Cit0eXBlZGVmIGNvbnN0IFZlY3Rvcjxj
aGFyPiogTmF0aXZlQnl0ZVB0cjsKK3R5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBOYXRpdmVJbWFn
ZVB0cjsKICNlbHNlCiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVmIEltYWdlRGVjb2Rlciog
TmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiB0eXBlZGVmIGNvbnN0IFZlY3RvcjxjaGFyPiogTmF0aXZl
Qnl0ZVB0cjsKLXR5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBOYXRpdmVJbWFnZVB0cjsKK3R5cGVk
ZWYgdm9pZCogTmF0aXZlSW1hZ2VQdHI7CiAjZW5kaWYKIAogY29uc3QgaW50IGNBbmltYXRpb25M
b29wT25jZSA9IC0xOwpAQCAtNzIsNiArNzgsOSBAQAogCiAgICAgYm9vbCBpc1NpemVBdmFpbGFi
bGUoKTsKICAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyNpZiBQTEFURk9STShDQUlSTykKKyAg
ICB2b2lkIHNldFNpemUoSW50U2l6ZSBzaXplKXsgbV9zaXplID0gc2l6ZTsgfQorI2VuZGlmCiAg
ICAgCiAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpOwogICAgIApAQCAtODIsNiArOTEsOSBAQAog
CiBwcml2YXRlOgogICAgIE5hdGl2ZUltYWdlU291cmNlUHRyIG1fZGVjb2RlcjsKKyNpZiBQTEFU
Rk9STShDQUlSTykKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyNlbmRpZgogfTsKIAogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0FmZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vQWZmaW5lVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDgg
QEAKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4K
ICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFNYXRyaXg+CisjZWxpZiBQTEFURk9STShH
REspCisjaW5jbHVkZSA8Y2Fpcm8uaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC00Nyw2ICs0OSw4IEBACiAgICAgQWZmaW5lVHJhbnNmb3JtKENHQWZmaW5lVHJhbnNmb3JtIHRy
YW5zZm9ybSk7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBBZmZpbmVUcmFuc2Zvcm0oY29uc3Qg
UU1hdHJpeCAmbWF0cml4KTsKKyNlbGlmIFBMQVRGT1JNKEdESykKKyAgICBBZmZpbmVUcmFuc2Zv
cm0oY29uc3QgY2Fpcm9fbWF0cml4X3QgJm1hdHJpeCk7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0
TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgdHgs
IGRvdWJsZSB0eSk7CkBAIC03OCw2ICs4Miw4IEBACiAgICAgb3BlcmF0b3IgQ0dBZmZpbmVUcmFu
c2Zvcm0oKSBjb25zdDsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIG9wZXJhdG9yIFFNYXRyaXgo
KSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEdESykKKyAgICBvcGVyYXRvciBjYWlyb19tYXRyaXhf
dCgpIGNvbnN0OwogI2VuZGlmCiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgY29uc3Q7CkBAIC04OSw2ICs5NSw4IEBACiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
bV90cmFuc2Zvcm07CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBRTWF0cml4IG1fdHJhbnNmb3Jt
OworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgY2Fpcm9fbWF0cml4X3QgbV90cmFuc2Zvcm07
CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lvbiAxNzM5OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCwxNSBAQAogdHlwZWRlZiBzdHJ1Y3QgSFJHTl9fKiBIUkdOOwogI2VuZGlmCiAKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgICAgICAKKyNpZiBQTEFURk9STShHREspCisgICAgY2xhc3Mg
U2Nyb2xsQmFyOworICAgIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFzcyBE
b2N1bWVudDsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisjZW5kaWYKICAgICBjbGFzcyBG
bG9hdFJlY3Q7CiAgICAgY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogICAgIGNsYXNzIFBsYXRm
b3JtU2Nyb2xsYmFyOwpAQCAtMTMwLDE1ICsxMzgsMTMgQEAKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oR0RLKQotICAgICAgICB2b2lkIHVwZGF0ZVZpZXcoY29uc3QgSW50UmVjdCYsIGJvb2wgbm93
ID0gZmFsc2UpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd2FibGUoR2RrRHJhd2FibGUq
IGRyYXdhYmxlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29uc3Qg
SW50UmVjdCYpOwogICAgICAgICBTY3JvbGxWaWV3KCk7CiAgICAgICAgIH5TY3JvbGxWaWV3KCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCYgZXZ0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lR2VvbWV0
cnkoY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgdXBk
YXRlU2Nyb2xsYmFycygpOwotICAgICAgICBJbnRTaXplIG1heGltdW1TY3JvbGwoKSBjb25zdDsK
LSAgICAgICAgaW50IHVwZGF0ZVNjcm9sbEluZm8oc2hvcnQgdHlwZSwgaW50IGN1cnJlbnQsIGlu
dCBtYXgsIGludCBwYWdlU2l6ZSk7CiAgICAgICAgIGNsYXNzIFNjcm9sbFZpZXdQcml2YXRlOwog
ICAgICAgICBTY3JvbGxWaWV3UHJpdmF0ZSogbV9kYXRhOwogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BhdGguaAko
cmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BhdGguaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsMTUgKzI3LDIxIEBACiAjaWZuZGVmIFBhdGhfaAogI2RlZmluZSBQYXRoX2gKIAor
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKwogI2lmIFBMQVRGT1JNKENHKQogdHlwZWRlZiBz
dHJ1Y3QgQ0dQYXRoIFBsYXRmb3JtUGF0aDsKICNlbGlmIFBMQVRGT1JNKFFUKQogY2xhc3MgUVBh
aW50ZXJQYXRoOwogdHlwZWRlZiBRUGFpbnRlclBhdGggUGxhdGZvcm1QYXRoOworI2VsaWYgUExB
VEZPUk0oQ0FJUk8pCit0eXBlZGVmIHN0cnVjdCBjYWlyb19wYXRoIGNhaXJvX3BhdGhfdDsKK3R5
cGVkZWYgY2Fpcm9fcGF0aF90IFBsYXRmb3JtUGF0aDsKICNlbHNlCiB0eXBlZGVmIHZvaWQgUGxh
dGZvcm1QYXRoOwogI2VuZGlmCiAKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3Mg
QWZmaW5lVHJhbnNmb3JtOwpAQCAtNTYsNiArNjIsOSBAQAogICAgICAgICBQYXRoRWxlbWVudEFk
ZEN1cnZlVG9Qb2ludCwKICAgICAgICAgUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGgKICAgICB9Owor
I2lmIFBMQVRGT1JNKENBSVJPKQorICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOworI2Vu
ZGlmCiAKICAgICBzdHJ1Y3QgUGF0aEVsZW1lbnQgewogICAgICAgICBQYXRoRWxlbWVudFR5cGUg
dHlwZTsKQEAgLTc0LDcgKzgzLDE0IEBACiAKICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiwgV2luZFJ1bGUgcnVsZSA9IFJVTEVfTk9OWkVSTykgY29uc3Q7CiAgICAgICAg
IEZsb2F0UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKKyNpZiBQTEFURk9STShDQUlSTykKKyAg
ICAgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
bGluZV93aWR0aCwKKyAgICAgICAgICAgICAgICBMaW5lQ2FwIGNhcCxMaW5lSm9pbiBqb2luLCBm
bG9hdCBtaXRlckxpbWl0ID0gMTAuMCkgY29uc3Q7CiAKKyAgICAgICAgRmxvYXRSZWN0IHN0cm9r
ZUJvdW5kaW5nUmVjdChmbG9hdCBsaW5lV2lkdGgsCisgICAgICAgICAgICAgICAgTGluZUNhcCxM
aW5lSm9pbiwgZmxvYXQgbWl0ZXJMaW1pdCA9IDEwLjApIGNvbnN0OworI2VuZGlmCisKICAgICAg
ICAgdm9pZCBjbGVhcigpOwogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKIApAQCAtOTYs
NyArMTEyLDExIEBACiAKICAgICAgICAgU3RyaW5nIGRlYnVnU3RyaW5nKCkgY29uc3Q7CiAKKyNp
ZiBQTEFURk9STShDQUlSTykKKyAgICAgICAgUGxhdGZvcm1QYXRoKiBwbGF0Zm9ybVBhdGgoKSBj
b25zdDsKKyNlbHNlCiAgICAgICAgIFBsYXRmb3JtUGF0aCogcGxhdGZvcm1QYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRoOyB9CisjZW5kaWYKIAogICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVS
b3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRp
bmdSYWRpaSk7CiAgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9h
dFJlY3QmKTsKQEAgLTEwOCwxMCArMTI4LDE1IEBACiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCiAgICAgcHJpdmF0ZToKKyNpZiBQTEFURk9STShDQUlS
TykKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIG1fZ2M7CisjZWxzZQogICAgICAgICBQ
bGF0Zm9ybVBhdGgqIG1fcGF0aDsKKyNlbmRpZgogICAgICAgICBXaW5kUnVsZSBtX3J1bGU7CiAg
ICAgfTsKIAogfQorI2VuZGlmCisvLyB2aW06IHRzPTQgc3c9NCBldAogCi0jZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAkocmV2aXNpb24gMTczOTkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDUsNiArMTA1LDcgQEAKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdESykgCiAgICAgICAgIFBsYXRm
b3JtTW91c2VFdmVudChHZGtFdmVudCopOworICAgICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0
IEludFBvaW50IHBvcykgeyBtX3Bvc2l0aW9uID0gcG9zOyB9CiAjZW5kaWYKICNpZiBQTEFURk9S
TShRVCkKICAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KFFNb3VzZUV2ZW50KiwgaW50IGNsaWNr
Q291bnQpOwpJbmRleDogV2ViQ29yZS9Qcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvUHJvamVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJrbAkocmV2aXNpb24g
MTczOTkpCisrKyBXZWJDb3JlL1Byb2plY3RzL2dkay93ZWJjb3JlLWdkay5ia2wJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDkgKzEsNTQgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTwhLS0gZ2Vu
ZXJhdGUgR251TWFrZWZpbGUgd2l0aAotCWJha2VmaWxlIC1mIGdudSBndGt3ZWJjb3JlLmJrbAot
CWNvbnNpZGVyIGZvcmNpbmcgaW5jbHVkZXMgYWdpYW4KLQlDWFggPSBnKysgIC1JLiBpbmNsdWRl
IGNvbmZpZy5oCi0tLT4KKzxtYWtlZmlsZT4KIAorICAgICA8c2V0IHZhcj0iU1JDRElSIiBhcHBl
bmQ9IjAiPi4uLy4uPC9zZXQ+CiAKLTxtYWtlZmlsZT4KKwk8b3B0aW9uIG5hbWU9IkVOQ09ESU5H
U19GSUxFIj4KKwkgICAgIDxkZWZhdWx0LXZhbHVlPnBsYXRmb3JtL2dkay9nZGstZW5jb2Rpbmdz
LnR4dDwvZGVmYXVsdC12YWx1ZT4KKwkgICAgIDx2YWx1ZXM+cGxhdGZvcm0vZ2RrL2dkay1lbmNv
ZGluZ3MudHh0PC92YWx1ZXM+CisJPC9vcHRpb24+CiAKLQkJPG9wdGlvbiBuYW1lPSJFTkNPRElO
R1NfRklMRSI+Ci0JCTxkZWZhdWx0LXZhbHVlPnBsYXRmb3JtL2dkay9nZGstZW5jb2RpbmdzLnR4
dDwvZGVmYXVsdC12YWx1ZT4KLQkJPHZhbHVlcz5wbGF0Zm9ybS9nZGsvZ2RrLWVuY29kaW5ncy50
eHQ8L3ZhbHVlcz4KLQkJPC9vcHRpb24+CisJPG9wdGlvbiBuYW1lPSJGRUFUVVJFX0RFRklORVMi
IG5ldmVyX2VtcHR5PSIxIiA+CisJPCEtLSBTVkdfU1VQUE9SVCBYUEFUSF9TVVBQT1JULS0+CisJ
PGRlZmF1bHQtdmFsdWU+WFBBVEhfU1VQUE9SVDwvZGVmYXVsdC12YWx1ZT4KKwk8dmFsdWVzPlhQ
QVRIX1NVUFBPUlQsU1ZHX1NVUFBPUlQ8L3ZhbHVlcz4KKwk8L29wdGlvbj4KKwk8c2V0IHZhcj0i
RkVBVFVSRV9ERUZJTkVTIj5YUEFUSF9TVVBQT1JULFNWR19TVVBQT1JUPC9zZXQ+CisJPHNldCB2
YXI9IkVOQ09ESU5HU19GSUxFIj4kKFNSQ0RJUikvcGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3Mu
dHh0PC9zZXQ+CiAKLQkJPG9wdGlvbiBuYW1lPSJGRUFUVVJFX0RFRklORVMiIG5ldmVyX2VtcHR5
PSIxIiA+Ci0JCTwhLS0gU1ZHX1NVUFBPUlQgWFBBVEhfU1VQUE9SVC0tPgotCQk8ZGVmYXVsdC12
YWx1ZT5YUEFUSF9TVVBQT1JUPC9kZWZhdWx0LXZhbHVlPgotCQk8dmFsdWVzPlhQQVRIX1NVUFBP
UlQsU1ZHX1NVUFBPUlQ8L3ZhbHVlcz4KLQkJPC9vcHRpb24+Ci0JCTxzZXQgdmFyPSJGRUFUVVJF
X0RFRklORVMiPlhQQVRIX1NVUFBPUlQ8L3NldD4KLQkJPHNldCB2YXI9IkVOQ09ESU5HU19GSUxF
Ij4kKFNSQ0RJUikvcGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3MudHh0PC9zZXQ+Ci0KIAk8aW5j
bHVkZSBmaWxlPSIuLi8uLi93ZWJjb3JlLWJhc2UuYmtsIi8+CiAKICAgIDxhY3Rpb24gaWQ9Ii5E
ZXJpdmVkU291cmNlcyI+Ci0gICA8IS0tIFRoaXMgY2F1c2VzIGEgZnVsbCByZWJ1aWxkIGV2ZXJ5
dGltZQorICAgICA8IS0tIAogICAgICA8aXMtcGhvbnkvPgotCSAtLT4KLSAgICAgICAgPGNvbW1h
bmQ+YmFzaCAtYyAiY2QgLi4vLi47IC4vbW92ZS1qcy1oZWFkZXJzLnNoIjwvY29tbWFuZD4KKyAg
ICAgICAgICBwcm90ZWN0IHdpdGggYSBpbnRlcm5hbCB0b3VjaGVkIGZpbGUgb3RoZXJ3aXNlIAor
ICAgICAgICAgIG1vdmUtanMtaGVhZGVycyBjYXVzZXMgcmVidWlsZAorICAgICAgICAgIGlzLXBo
b255IGlzIG5vdCB3b3JraW5nCisgICAgICAgICAgaWYgeW91IGNoYW5nZSBhIGlkbCBmaWxlIHlv
dSB3aWxsIGhhdmUgdG8gbWFudWFsbHkKKyAgICAgICAgICBydW4gdGhpcyBydWxlIGFmdGVyIGRl
bGV0aW5nIC5EZXJpdmVkU291cmNlcworICAgICAgLS0+CiAgICAgICAgIDxjb21tYW5kPgotCQli
YXNoIC1jICJjZCAuLi8uLjtcCisJCWJhc2ggLWMgIlwKKyAgICAgICAgICBjZCAuLi8uLjtcCisg
ICAgICAgICAgaWYgWyAhIC1lIFByb2plY3RzL2dkay8uRGVyaXZlZFNvdXJjZXMgXSA7XAorICAg
ICAgICAgIHRoZW4gXAorICAgICAgICAgIC4vbW92ZS1qcy1oZWFkZXJzLnNoOyBcCisgICAgICAg
ICAgdG91Y2ggUHJvamVjdHMvZ2RrLy5EZXJpdmVkU291cmNlcztcCisgICAgICAgICAgZmk7IFwK
KyAgICAgICAgICBleHBvcnQgUExBVEZPUk09R0RLXAogCQlleHBvcnQgRkVBVFVSRV9ERUZJTkVT
PSQoRkVBVFVSRV9ERUZJTkVTKTtcCi0JCS4vbWFrZS1nZW5lcmF0ZWQtc291cmNlcy5zaCAkKEVO
Q09ESU5HU19GSUxFKSIKKwkJLi9tYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoICQoRU5DT0RJTkdT
X0ZJTEUpOyIKIAkJPC9jb21tYW5kPgotICAgICAgICA8Y29tbWFuZD5iYXNoIC1jICJ0b3VjaCAu
RGVyaXZlZFNvdXJjZXMiPC9jb21tYW5kPgogICAgPC9hY3Rpb24+CiAKLSAgICA8ZGxsIGlkPSJ3
ZWJjb3JlLWdkayIgdGVtcGxhdGU9IndlYmNvcmVfYmFzZSxmcmVldHlwZSxndGssY3VybCxjYWly
byxzcWxpdGUzIj4gICAgICAgIAorICAgIDxkbGwgaWQ9IndlYmNvcmUtZ2RrIiB0ZW1wbGF0ZT0i
d2ViY29yZV9iYXNlLGpzY29yZSxmcmVldHlwZSxnZGssY3VybCxjYWlybyxzcWxpdGUzIj4gICAg
ICAgIAogCTwhLS0gRklYTUU6IGNyZWF0ZSBhIGRlYnVnIG9wdGlvbiBhbmQgc2V0IHRoZXNlIGFj
Y29yZGluZ2x5IC0tPgogCTwhLS0gY2hlY2sgZm9yIHVuZGVmaW5lZCBzeW1ib2xzIGZvciBkZWJ1
Z2dpbmcgcmVhc29ucyAtLT4KIAk8IS0tCiAJPGxkZmxhZ3M+Vyx1bmRlZmluZWQ8L2xkZmxhZ3M+
CiAJLS0+CiAKLQkJPHByZS1idWlsZC10YXJnZXQ+LkRlcml2ZWRTb3VyY2VzPC9wcmUtYnVpbGQt
dGFyZ2V0PgorCSAgIDxwcmUtYnVpbGQtdGFyZ2V0Pi5EZXJpdmVkU291cmNlczwvcHJlLWJ1aWxk
LXRhcmdldD4KICAgICAgICAgPGRpcm5hbWU+LjwvZGlybmFtZT4KICAgICAgICAgPHBpYz5vbjwv
cGljPgogICAgICAgICA8dGhyZWFkaW5nPm11bHRpPC90aHJlYWRpbmc+CkBAIC01MSw0NCArNTYs
NDggQEAKICAgICAgICAgPGN4eC1ydHRpPm9mZjwvY3h4LXJ0dGk+CiAgICAgICAgIDxjeHgtZXhj
ZXB0aW9ucz5vZmY8L2N4eC1leGNlcHRpb25zPgogICAgICAgICA8ZGVidWctaW5mbz5vbjwvZGVi
dWctaW5mbz4KKyAgICAJPGRlZmluZT5YUEFUSF9TVVBQT1JUPC9kZWZpbmU+CisgICAgCTxkZWZp
bmU+U1ZHX1NVUFBPUlQ8L2RlZmluZT4KKyAgICAJPGRlZmluZT5CVUlMRElOR19HREtfXzwvZGVm
aW5lPgorICAgIAk8ZGVmaW5lPkJVSUxESU5HX0NBSVJPX188L2RlZmluZT4KICAgICAgICAgPGlu
Y2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2dkazwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+
JChTUkNESVIpL3BsYXRmb3JtL25ldHdvcmsvZ2RrPC9pbmNsdWRlPgotICAgIAk8ZGVmaW5lPkJV
SUxESU5HX0dES19fPC9kZWZpbmU+Ci0gICAgCTxkZWZpbmU+QlVJTERJTkdfQ0FJUk9fXzwvZGVm
aW5lPgotCQk8aW5jbHVkZT5wbGF0Zm9ybS9nZGs8L2luY2x1ZGU+Ci0JCTxpbmNsdWRlPnBsYXRm
b3JtL2NhaXJvPC9pbmNsdWRlPgorCQk8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vZ2RrPC9p
bmNsdWRlPgorCQk8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vY2Fpcm88L2luY2x1ZGU+CiAJ
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2RldmljZS9jYWlybzwvaW5jbHVkZT4KLSAg
ICAJPGRlZmluZT5YUEFUSF9TVVBQT1JUPC9kZWZpbmU+Ci0gICAgICAgIDwhLS0gZ2RrIGJ1aWxk
IGJyb2tlbiB3aXRoIHdpdGhvdXQgTkRFQlVHIGRlZmluZWQgLS0+Ci0gICAgCTxkZWZpbmU+TkRF
QlVHPC9kZWZpbmU+Ci0gCisKICAgICAgICAgPHNvdXJjZXM+CQkKLSAgICAgICAgICBwbGF0Zm9y
bS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9jYWly
by9JbWFnZUNhaXJvLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2NhaXJvL0ltYWdlU291cmNlQ2Fp
cm8uY3BwCisgICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VMb2FkZXJNYW5h
Z2VyLmNwcAorICAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyQ3Vy
bC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2dkay9Mb2FkZXJGdW5jdGlvbnNDdXJs
LmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9Ccm93c2VyRXh0ZW5zaW9uR2RrLmNwcAogICAg
ICAgICAgIHBsYXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0v
Z2RrL0N1cnNvckdkay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNw
cAogICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAKICAgICAgICAgICBwbGF0
Zm9ybS9nZGsvRm9udEdkay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3Jt
RGF0YUdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvRmlsZUNob29zZXJHZGsuY3BwCiAg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dk
ay9HbHlwaE1hcEdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvSWNvbkdkay5jcHAKICAg
ICAgICAgICBwbGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2Rr
L0tleUV2ZW50R2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNw
cAogICAgICAgICAgIHBsYXRmb3JtL2dkay9QYWdlR2RrLmNwcAotICAgICAgICAgIHBsYXRmb3Jt
L25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAKICAgICAgICAgICBwbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ2RrL1JlbmRlclBv
cHVwTWVudUdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcAog
ICAgICAgICAgIHBsYXRmb3JtL2dkay9TY3JlZW5HZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0v
Z2RrL1BsYXRmb3JtU2Nyb2xsYmFyR2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9TY3Jv
bGxWaWV3R2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNw
cAotICAgICAgICAgIHBsYXRmb3JtL2dkay9TeXN0ZW1UaW1lTGludXguY3BwCiAgICAgICAgICAg
cGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2dkay9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2Rr
L1doZWVsRXZlbnRHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAK
KyAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAKKyAgICAgICAgICBw
bGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAorICAgICAgICAgICQoV0VCQ09SRV9CQVNFX1NPVVJD
RVMpCisgICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfQ0FJUk9fQklORElOR1MpCiAJCTwvc291
cmNlcz4KIAogCQk8Y2xlYW4tZmlsZXM+CkBAIC05OSw1ICsxMDgsMzggQEAKIAkJPC9jbGVhbi1m
aWxlcz4KIAkJPCEtLUhBQ0sgYmxvY2sgZGVwZW5kZW5jaWVzIG9uIHRoZSBwaG9ueSB0YXJnZXQg
LS0+CiAgICAgPC9kbGw+CisKKyAgICA8ZGxsIGlkPSJ3ZWJjb3JlLXN2ZyIgdGVtcGxhdGU9Indl
YmNvcmVfYmFzZSxmcmVldHlwZSxnZGssY3VybCxjYWlybyxzcWxpdGUzIj4gICAgICAgIAorCTwh
LS0KKwk8bGRmbGFncz5XLHVuZGVmaW5lZDwvbGRmbGFncz4KKwktLT4KKyAgICAgPGRpcm5hbWU+
LjwvZGlybmFtZT4KKyAgICAgPHBpYz5vbjwvcGljPgorICAgICA8dGhyZWFkaW5nPm11bHRpPC90
aHJlYWRpbmc+CisgICAgIDx3YXJuaW5ncz5ubzwvd2FybmluZ3M+CisJIDxjeHhmbGFncz4tdzwv
Y3h4ZmxhZ3M+CisgICAgIDxjeHgtcnR0aT5vZmY8L2N4eC1ydHRpPgorICAgICA8Y3h4LWV4Y2Vw
dGlvbnM+b2ZmPC9jeHgtZXhjZXB0aW9ucz4KKworICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvLi4v
SmF2YVNjcmlwdENvcmU8L2luY2x1ZGU+CisgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9y
bS9nZGs8L2luY2x1ZGU+CisgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9jYWlybzwv
aW5jbHVkZT4KKwk8Y2ZsYWdzPi13PC9jZmxhZ3M+CisgICAgCTxkZWZpbmU+QlVJTERJTkdfR0RL
X188L2RlZmluZT4KKyAgICAJPGRlZmluZT5CVUlMRElOR19DQUlST19fPC9kZWZpbmU+CisJPGlu
Y2x1ZGU+cGxhdGZvcm0vZ2RrPC9pbmNsdWRlPgorCTxpbmNsdWRlPnBsYXRmb3JtL2NhaXJvPC9p
bmNsdWRlPgorCTxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2RldmljZS9jYWlybzwvaW5jbHVk
ZT4KKyAgICAJPGRlZmluZT5YUEFUSF9TVVBQT1JUPC9kZWZpbmU+CisgICAgCTxkZWZpbmU+U1ZH
X1NVUFBPUlQ8L2RlZmluZT4KKyAgICAgPHNvdXJjZXM+CQkKKyAgICAgICAga2NhbnZhcy9kZXZp
Y2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmNwcAorICAgICAgICAkKFdFQkNPUkVfU09V
UkNFU19DVVJMKQorCQkkKFdFQkNPUkVfU09VUkNFU19LQ0FOVkFTKQorCQkkKFdFQkNPUkVfU09V
UkNFU19LU1ZHMikKKwkgCSQoV0VCQ09SRV9TT1VSQ0VTX1NWR19ERVJJVkVEU09VUkNFUykKKyAg
IAk8L3NvdXJjZXM+CisgICA8L2RsbD4KKwogPC9tYWtlZmlsZT4KIApJbmRleDogV2ViQ29yZS9Q
cm9qZWN0cy93eC93ZWJjb3JlLXd4LmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1Byb2plY3Rz
L3d4L3dlYmNvcmUtd3guYmtsCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvUHJvamVjdHMv
d3gvd2ViY29yZS13eC5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCwxMyBAQAogICAg
ICAgICA8Y29tbWFuZD5jZCAkKFNSQ0RJUik7YmFzaCBtb3ZlLWpzLWhlYWRlcnMuc2g7IGJhc2gg
bWFrZS1nZW5lcmF0ZWQtc291cmNlcy5zaCBwbGF0Zm9ybS93eC93eC1lbmNvZGluZ3MudHh0O2Nk
IFByb2plY3RzL3d4PC9jb21tYW5kPgogICAgIDwvYWN0aW9uPgogICAgICAgCi0gICAgPGxpYiBp
ZD0id2ViY29yZS13eCIgdGVtcGxhdGU9IndlYmNvcmVfYmFzZSI+CisgICAgPGxpYiBpZD0id2Vi
Y29yZS13eCIgdGVtcGxhdGU9IndlYmNvcmVfYmFzZSxqc2NvcmUiPgogICAgICAgICA8cHJlLWJ1
aWxkLXRhcmdldD5EZXJpdmVkU291cmNlczwvcHJlLWJ1aWxkLXRhcmdldD4KICAgICAgICAgPGRp
cm5hbWU+LjwvZGlybmFtZT4KICAgICAgICAgPCEtLSBwbGF0Zm9ybS93eCBzb3VyY2VzIGdvIGhl
cmUgd2hlbiB0aGV5IGV4aXN0ISAtLT4KKyAgICAgICAgPHNvdXJjZXM+CisgICAgICAgICAgJChX
RUJDT1JFX0JBU0VfU09VUkNFUykKKyAgICAgICAgPC9zb3VyY2VzPgogICAgIDwvbGliPgogCiA8
L21ha2VmaWxlPgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3Bw
CShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5l
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQAogICAgICAgICBtX3ZpZXdw
b3J0ID0gRmxvYXRSZWN0KHgsIHksIHcsIGgpOwogICAgIH0gZWxzZSBpZiAoc3ZnZWxlbS0+aGFz
VGFnTmFtZShTVkdOYW1lczo6bWFya2VyVGFnKSkgewogICAgICAgICBTVkdNYXJrZXJFbGVtZW50
KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4oZWxlbWVudCgpKTsKLSAgICAg
ICAgICAgIGRvdWJsZSB3ID0gc3ZnLT5tYXJrZXJXaWR0aCgpLT52YWx1ZSgpOworICAgICAgICBk
b3VibGUgdyA9IHN2Zy0+bWFya2VyV2lkdGgoKS0+dmFsdWUoKTsKICAgICAgICAgZG91YmxlIGgg
PSBzdmctPm1hcmtlckhlaWdodCgpLT52YWx1ZSgpOwogICAgICAgICBtX3ZpZXdwb3J0ID0gRmxv
YXRSZWN0KDAsIDAsIHcsIGgpOwogICAgIH0KQEAgLTI4Myw2ICsyODMsOCBAQAogdm9pZCBSZW5k
ZXJTVkdDb250YWluZXI6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJv
b2wgZikKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zvcm0o
KTsKKwl0cmFuc2Zvcm0udHJhbnNsYXRlKG1fdmlld3BvcnQueCgpLG1fdmlld3BvcnQueSgpKTsK
KwkKICAgICByID0gdHJhbnNmb3JtLm1hcFJlY3Qocik7CiAgICAgCiAgICAgLy8gRklYTUU6IGNv
bnNpZGVyIGZpbHRlcgpAQCAtMzgzLDggKzM4NSw0MSBAQAogICAgIHJldHVybiB0ZW1wOwogfQog
CitpbnQgIFJlbmRlclNWR0NvbnRhaW5lcjo6eFBvcygpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJh
bnNmb3JtIHR4ID12aWV3cG9ydFRyYW5zZm9ybSgpICogbG9jYWxUcmFuc2Zvcm0oKTsKKyAgICBy
ZXR1cm4gKGludCl0eC5keCgpOwogfQogCitpbnQgIFJlbmRlclNWR0NvbnRhaW5lcjo6eVBvcygp
IGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHR4ID12aWV3cG9ydFRyYW5zZm9ybSgpICog
bG9jYWxUcmFuc2Zvcm0oKTsKKyAgICByZXR1cm4gKGludCl0eC5keSgpOworfQorCit2b2lkIFJl
bmRlclNWR0NvbnRhaW5lcjo6c2V0UG9zKGludCB4UG9zLCBpbnQgeVBvcykKK3sKKyAgICAvL1Ro
ZSBTVkcgY29udGFpbmVyIGlzIG5vdCBtb3ZlZCBieSBibG9jayBsYXlvdXRzCisgICAgLy9GSVhN
RTogPz8KKyAgICAvL3NlZSBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbiBjaGlsZC0+
c2V0UG9zKGNoaWxkLT54UG9zKCksIHlQb3NFc3RpbWF0ZSk7Cit9CisKK2Jvb2wgIFJlbmRlclNW
R0NvbnRhaW5lcjo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQb3MsIGludCAmeVBvcywgYm9vbCBm
KQoreworICAgIGYgPSB0cnVlOworICAgIFJlbmRlck9iamVjdCAqbyA9IGNvbnRhaW5lcigpOwor
ICAgIGlmIChvKQorICAgICAgICBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGYpOwor
CisgICAgQWZmaW5lVHJhbnNmb3JtIHR4ID12aWV3cG9ydFRyYW5zZm9ybSgpICogbG9jYWxUcmFu
c2Zvcm0oKTsKKyAgICB4UG9zICs9IChpbnQpdHguZHgoKTsKKyAgICB5UG9zICs9IChpbnQpdHgu
ZHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNl
bmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShy
ZXZpc2lvbiAxNzQwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIiAKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9s
bGJhci5oIiAKIAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiAx
NzM5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjEsMTIgKzEyMSw1NiBAQAogYm9vbCBSZW5kZXJGb3JlaWduT2JqZWN0
Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiBpbmZvLCBpbnQgeCwgaW50IHksIGludCB0eCwg
aW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIHRvdGFsVHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICB0b3RhbFRyYW5z
Zm9ybSAqPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKICAgICBkb3VibGUgbG9jYWxYLCBs
b2NhbFk7CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCkubWFwKHgsIHksICZsb2NhbFgsICZs
b2NhbFkpOwogICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoaW5mbywgKGludCls
b2NhbFgsIChpbnQpbG9jYWxZLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogfQogCitBZmZpbmVU
cmFuc2Zvcm0gUmVuZGVyRm9yZWlnbk9iamVjdDo6YWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdAor
eworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFucz0gUmVuZGVyQ29udGFpbmVyOjphYnNvbHV0ZVRy
YW5zZm9ybSgpOworICAgIFJlbmRlckZvcmVpZ25PYmplY3Qqb2JqID0gY29uc3RfY2FzdDxSZW5k
ZXJGb3JlaWduT2JqZWN0Kj4odGhpcyk7CisgICAgcmV0dXJuIHRyYW5zKm9iai0+dHJhbnNsYXRp
b25Gb3JBdHRyaWJ1dGVzKCk7CiB9CiAKK2ludCAgUmVuZGVyRm9yZWlnbk9iamVjdDo6eFBvcygp
IGNvbnN0Cit7CisgICAgUmVuZGVyRm9yZWlnbk9iamVjdCpvYmogPSBjb25zdF9jYXN0PFJlbmRl
ckZvcmVpZ25PYmplY3QqPih0aGlzKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHggPW9iai0+dHJh
bnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkgKiBvYmotPmxvY2FsVHJhbnNmb3JtKCk7CisgICAgcmV0
dXJuIChpbnQpdHguZHgoKTsKK30KKworaW50ICBSZW5kZXJGb3JlaWduT2JqZWN0Ojp5UG9zKCkg
Y29uc3QKK3sKKyAgICBSZW5kZXJGb3JlaWduT2JqZWN0Km9iaiA9IGNvbnN0X2Nhc3Q8UmVuZGVy
Rm9yZWlnbk9iamVjdCo+KHRoaXMpOworICAgIEFmZmluZVRyYW5zZm9ybSB0eCA9b2JqLT50cmFu
c2xhdGlvbkZvckF0dHJpYnV0ZXMoKSAqIG9iai0+bG9jYWxUcmFuc2Zvcm0oKTsKKyAgICByZXR1
cm4gKGludCl0eC5keSgpOworfQorCit2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OnNldFBvcyhp
bnQgeFBvcywgaW50IHlQb3MpCit7CisgICAgLy90aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQK
KyAgICBBU1NFUlQoMCk7Cit9CisKK2Jvb2wgIFJlbmRlckZvcmVpZ25PYmplY3Q6OmFic29sdXRl
UG9zaXRpb24oaW50ICZ4UG9zLCBpbnQgJnlQb3MsIGJvb2wgZikKK3sKKyAgICAvL0ZJWE1FOiBh
bHdheXMgZml4ZWQgPworICAgIGYgPSB0cnVlOworICAgIFJlbmRlck9iamVjdCAqbyA9IGNvbnRh
aW5lcigpOworICAgIGlmIChvICYmIG8tPmFic29sdXRlUG9zaXRpb24oeFBvcywgeVBvcywgZikp
IHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHR4ID10cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KSAqIGxvY2FsVHJhbnNmb3JtKCk7CisgICAgICAgIHhQb3MgKz0gKGludCl0eC5keCgpOworICAg
ICAgICB5UG9zICs9IChpbnQpdHguZHkoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgeFBvcz0wOworICAgICAgICB5UG9zPTA7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKKworfQorCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw3ICs5MywxMiBAQAogICAgIGJvb2wgc2xpY2UoKSBjb25zdDsKICAgICAKICAgICBBZmZpbmVU
cmFuc2Zvcm0gdmlld3BvcnRUcmFuc2Zvcm0oKSBjb25zdDsKLSAgICAKKworICAgIHZpcnR1YWwg
dm9pZCBzZXRQb3MoaW50IHhQb3MsIGludCB5UG9zKTsKKyAgICB2aXJ0dWFsIGludCB4UG9zKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBh
YnNvbHV0ZVBvc2l0aW9uKGludCAmeFBvcywgaW50ICZ5UG9zLCBib29sIGYgPSBmYWxzZSk7CisK
IHByaXZhdGU6CiAgICAgdm9pZCBjYWxjVmlld3BvcnQoKTsgCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IGdldEFzcGVjdFJhdGlvKGNvbnN0IEZsb2F0UmVjdCYgbG9naWNhbCwgY29uc3QgRmxvYXRSZWN0
JiBwaHlzaWNhbCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZp
c2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUzMyw4ICsyNTMzLDkgQEAKIHsKICAgICBib29sIGlubGluZUZsb3cgPSBp
c0lubGluZUZsb3coKTsKIAotICAgIGludCB0eCA9IF90eCArIG1feDsKLSAgICBpbnQgdHkgPSBf
dHkgKyBtX3kgKyBib3JkZXJUb3BFeHRyYSgpOworICAgIC8vdXNlIHZpcnR1YWwgbWV0aG9kcyB0
byBzdXBwb3J0IHN2ZyBmb3JlaWduT2JqZWN0CisgICAgaW50IHR4ID0gX3R4ICsgeFBvcygpOwor
ICAgIGludCB0eSA9IF90eSArIHlQb3MoKSArIGJvcmRlclRvcEV4dHJhKCk7CiAgICAgCiAgICAg
aWYgKCFpbmxpbmVGbG93ICYmICFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBp
ZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAi
SFRNTE9wdEdyb3VwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgi
IAorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsYmFyLmgiIAogI2luY2x1ZGUgIlJlbmRlckJSLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oCShyZXZpc2lvbiAxNzM5OSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsMTMgQEAKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRl
ck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRm9yZWlnbk9iamVjdCI7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFy
ZW50WSk7Ci0gICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zKGludCB4UG9zLCBpbnQgeVBv
cyk7CisgICAgdmlydHVhbCBpbnQgeFBvcygpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHlQb3Mo
KSBjb25zdDsKKyAgICBib29sIGFic29sdXRlUG9zaXRpb24oaW50ICZ4UG9zLCBpbnQgJnlQb3Ms
IGJvb2wgZj1mYWxzZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkg
Y29uc3Q7CisKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExvY2FsVHJh
bnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0g
dHJhbnNmb3JtOyB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDYgKzI1NywxMiBA
QAogICAgIHBNb2RlID0gU3RyaWN0OwogICAgIGhNb2RlID0gWEh0bWw7CiAgICAgbV90ZXh0Q29s
b3IgPSBDb2xvcjo6YmxhY2s7CisgICAgbV9kb2NUeXBlID0gMDsKKyAgICBtX2ZvY3VzTm9kZSA9
IDA7CisgICAgbV9ob3Zlck5vZGUgPSAwOworICAgIG1fYWN0aXZlTm9kZSA9IDA7CisgICAgbV90
aXRsZUVsZW1lbnQgPSAwOworICAgIG1fZG9jdW1lbnRFbGVtZW50ID0gMDsKICAgICBtX2xpc3Rl
bmVyVHlwZXMgPSAwOwogICAgIG1faW5Eb2N1bWVudCA9IHRydWU7CiAgICAgbV9zdHlsZVNlbGVj
dG9yRGlydHkgPSBmYWxzZTsKQEAgLTEzNTIsNyArMTM1OCwxMSBAQAogICAgIGlmICghb3duZXJF
bGVtZW50KCkpCiAgICAgICAgIHByaW50ZigiUmVjZWl2ZWQgYWxsIGRhdGEgYXQgJWRcbiIsIGVs
YXBzZWRUaW1lKCkpOwogI2VuZGlmCi0gICAgCisgICAgLy9tb3ZlZCBmcm9tIGZyYW1lIGRlbGV0
ZSB0aGUgY29kZSBpbiBGcmFtZS5jcHAgaWYgeW91IGFwcGx5CisgICAgaWYgKG1fZGVjb2RlciAm
JiBtX3Rva2VuaXplciAmJiAhbV90b2tlbml6ZXItPndhbnRzUmF3RGF0YSgpKSB7CisgICAgICAg
IFN0cmluZyBkZWNvZGVkID0gbV9kZWNvZGVyLT5mbHVzaCgpOworICAgICAgICBtX3Rva2VuaXpl
ci0+d3JpdGUoZGVjb2RlZCx0cnVlKTsKKyAgICB9CiAgICAgLy8gTGV0IHRoZSB0b2tlbml6ZXIg
Z28gdGhyb3VnaCBhcyBtdWNoIGRhdGEgYXMgaXQgY2FuLiAgVGhlcmUgd2lsbCBiZSB0aHJlZSBw
b3NzaWJsZSBvdXRjb21lcyBhZnRlcgogICAgIC8vIGZpbmlzaCgpIGlzIGNhbGxlZDoKICAgICAv
LyAoMSkgQWxsIHJlbWFpbmluZyBkYXRhIGlzIHBhcnNlZCwgZG9jdW1lbnQgaXNuJ3QgbG9hZGVk
IHlldApJbmRleDogV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDbGlwcGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDbGlwcGVyLmgJKHJldmlzaW9uIDE3Mzk5KQorKysg
V2ViQ29yZS9rY2FudmFzL0tDYW52YXNDbGlwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDgg
KzY1LDEyIEBACiAKICAgICB2b2lkIHJlc2V0Q2xpcERhdGEoKTsKICAgICB2b2lkIGFkZENsaXBE
YXRhKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSwgYm9vbCBiYm94VW5pdHMpOwotICAgIAorICAgCisj
aWYgUExBVEZPUk0oQ0FJUk8pCisgICAgdmlydHVhbCB2b2lkIGFwcGx5Q2xpcChjb25zdCBGbG9h
dFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKKyNlbHNlCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5
Q2xpcChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdCA9IDA7CisjZW5kaWYKIAog
ICAgIEtDQ2xpcERhdGFMaXN0IGNsaXBEYXRhKCkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24gMTczOTkp
CisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAvLyBBY3R1YWwgcmVuZGVyaW5nIGZ1
bmN0aW9uCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBj
b25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0ID0gMDsKIAotICAgIHZp
cnR1YWwgYm9vbCBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9i
amVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRl
YXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQ
YWludFRhcmdldFR5cGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlw
ZSkgY29uc3Qge307CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0IHt9
OwogICAgIAogICAgIGJvb2wgaXNQYWludGluZ1RleHQoKSBjb25zdCB7IHJldHVybiBtX3BhaW50
aW5nVGV4dDsgfQogICAgIHZvaWQgc2V0UGFpbnRpbmdUZXh0KGJvb2wgcGFpbnRpbmdUZXh0KSB7
IG1fcGFpbnRpbmdUZXh0ID0gcGFpbnRpbmdUZXh0OyB9CiAKICAgICB2aXJ0dWFsIFRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKIAotICAg
IHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3Qg
UmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRo
KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0IHt9OwogcHJpdmF0ZToKICAgICBjb25zdCBSZW5k
ZXJQYXRoKiBtX2FjdGl2ZUNsaWVudDsKICAgICBTdHJpbmcgbV9yZWdpc3RyeUlkOwpJbmRleDog
V2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWlyby9LUmVuZGVyaW5nRGV2aWNlQ2Fpcm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0Rldmlj
ZUNhaXJvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8v
S1JlbmRlcmluZ0RldmljZUNhaXJvLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDEgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFu
biA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCQkJCSAgMjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtlLmVt
bWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlQ2Fpcm8uaCIKKyNp
bmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXRoLmgi
CisjaW5jbHVkZSAiS0NhbnZhc1Jlc291cmNlLmgiCisjaW5jbHVkZSAiS0NhbnZhc01hcmtlci5o
IgorI2luY2x1ZGUgIktDYW52YXNDbGlwcGVyLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGNhaXJv
Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKEdy
YXBoaWNzQ29udGV4dENhaXJvKiBnYykKK3sKKyAgICBtX2djID0gZ2M7Cit9CisKK0tSZW5kZXJp
bmdEZXZpY2VDb250ZXh0Q2Fpcm86On5LUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKCkKK3sK
K30KKworCitBZmZpbmVUcmFuc2Zvcm0gS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6Y29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgd29ybGRNYXRyaXgpCit7CisgICAgbV9nYy0+
Y29uY2F0Q1RNKHdvcmxkTWF0cml4KTsKKyAgICByZXR1cm4gbV9nYy0+Z2V0Q1RNKCk7Cit9CisK
K0FmZmluZVRyYW5zZm9ybSBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjpjdG0oKSBjb25z
dAoreworICAgIHJldHVybiBtX2djLT5nZXRDVE0oKTsKK30KKworSW50UmVjdCBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dENhaXJvOjptYXBGcm9tVmlzdWFsKGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UmVjdCBLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dENhaXJvOjptYXBUb1Zpc3VhbChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVy
biBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6Y2xl
YXJQYXRoKCkKK3sKKyAgICBtX2djLT5jbGVhclBhdGgoKTsKK30KKwordm9pZCBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dENhaXJvOjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgbV9n
Yy0+YXBwZW5kKHBhdGgpOworfQorCisKK0dyYXBoaWNzQ29udGV4dCogS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRDYWlybzo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbmV3
IEdyYXBoaWNzQ29udGV4dENhaXJvKG1fZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsgCit9CisKK3Zv
aWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6ZHJhd1BhdGgoY29uc3QgUmVuZGVyUGF0
aCogcGF0aCwgUGF0dGVybkNhaXJvJiBwYXR0ZXJuLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKQor
eworICAgIAorICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHBhdGgtPnN0eWxlKCk7CisK
KyAgICBtX2djLT5zYXZlKCk7CisKKyAgICBtX2djLT5hcHBlbmQocGF0aC0+cGF0aCgpKTsKKyAg
ICBtX2djLT5zZXRTb3VyY2VQYXR0ZXJuKHBhdHRlcm4pOworCisgICAgaWYgKCh0eXBlICYgQVBQ
TFlfVE9fRklMTCkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkgeworICAg
ICAgICBtX2djLT5zZXRGaWxsUnVsZShyZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUo
KSk7CisgICAgCW1fZ2MtPmZpbGwoKTsKKyAgICB9CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9U
T19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkgeworCisg
ICAgCW1fZ2MtPnNldExpbmVXaWR0aChLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRv
TGVuZ3RoKHBhdGgsCisJCQkJCQkJCXJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0
aCgpLCAxLjApKTsKKyAgICAJbV9nYy0+c2V0TGluZUNhcChyZW5kZXJTdHlsZS0+c3ZnU3R5bGUo
KS0+Y2FwU3R5bGUoKSk7CisgICAgCW1fZ2MtPnNldExpbmVKb2luKHJlbmRlclN0eWxlLT5zdmdT
dHlsZSgpLT5qb2luU3R5bGUoKSk7CisgICAgCW1fZ2MtPnNldE1pdGVyTGltaXQocmVuZGVyU3R5
bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7CisKKyAgICAJY29uc3QgS0NEYXNo
QXJyYXkmIGRhc2hlcyA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZGFzaEFycmF5RnJvbVJlbmRlcmlu
Z1N0eWxlKHJlbmRlclN0eWxlKTsKKyAgICAJdW5zaWduZWQgaW50IGRhc2hMZW5ndGggPSBkYXNo
ZXMuc2l6ZSgpOworICAgIAlpZihkYXNoTGVuZ3RoKSB7CisgICAgCQlkb3VibGUgZGFzaE9mZnNl
dCA9IEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgocGF0aCwKKwkJCQkJ
CQlyZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOworICAg
ICAgICAJZG91YmxlKiBjZGFzaGVzID0gbmV3IGRvdWJsZVtkYXNoTGVuZ3RoXTsKKyAgICAgICAg
CWZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBkYXNoTGVuZ3RoOyBpKyspCisgICAgICAgICAg
ICAJY2Rhc2hlc1tpXSA9IChkb3VibGUpZGFzaGVzW2Rhc2hMZW5ndGhdOworICAgICAgIAkJbV9n
Yy0+c2V0RGFzaGVzKGNkYXNoZXMsIGRhc2hMZW5ndGgsZGFzaE9mZnNldCk7CisgICAgICAgCQlk
ZWxldGVbXSBjZGFzaGVzOworICAgIAl9CisgICAgCW1fZ2MtPnN0cm9rZSgpOworICAgIH0KKyAg
ICBtX2djLT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgS0NhbnZhc0NsaXBwZXI6OmFwcGx5Q2xpcChj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0ICpjb250ZXh0ID0gcmVuZGVyaW5nRGV2aWNlKCktPmN1cnJlbnRDb250ZXh0KCk7
CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyAqY2Fpcm9Db250ZXh0ID0gc3RhdGlj
X2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyAqPihjb250ZXh0KTsKKyAgICBpZiAo
bV9jbGlwRGF0YS5jb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9Db250
ZXh0LT5jYWlyb0NvbnRleHQoKS0+Y2xlYXJDbGlwKCk7CisJCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgeCA9IDA7IHggPCBtX2NsaXBEYXRhLmNvdW50KCk7IHgrKykgeworICAgICAgICBLQ0NsaXBE
YXRhIGNsaXBEYXRhID0gbV9jbGlwRGF0YVt4XTsKKyAgICAJV2luZFJ1bGUgY2xpcFJ1bGUgPSBt
X2NsaXBEYXRhW3hdLndpbmRSdWxlKCk7CisgICAgICAgCisgICAgICAgIFBhdGggcGF0aCA9IGNs
aXBEYXRhLnBhdGg7IAorCQlpZiggcGF0aC5pc0VtcHR5KCkgKQorCQkJCWNvbnRpbnVlOworCQlj
YWlyb0NvbnRleHQtPmNhaXJvQ29udGV4dCgpLT5zZXRGaWxsUnVsZShjbGlwUnVsZSk7CisgICAg
CWlmIChjbGlwRGF0YS5iYm94VW5pdHMpIHsKKyAgIAkJCS8vIFJlc3BlY3QgY2xpcHBpbmcgdW5p
dHMuLi4KKyAgICAgICAgCUFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgICAgIAl0cmFu
c2Zvcm0udHJhbnNsYXRlKGJvdW5kaW5nQm94LngoKSwgYm91bmRpbmdCb3gueSgpKTsKKyAgICAg
ICAgCXRyYW5zZm9ybS5zY2FsZShib3VuZGluZ0JveC53aWR0aCgpLCBib3VuZGluZ0JveC5oZWln
aHQoKSk7CisJCQljYWlyb0NvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOworICAgCQl9Cisg
ICAgCWNhaXJvQ29udGV4dC0+Y2Fpcm9Db250ZXh0KCktPmNsZWFyUGF0aCgpOworICAgIAljYWly
b0NvbnRleHQtPmNhaXJvQ29udGV4dCgpLT5jbGVhckNsaXAoKTsKKyAgICAJY2Fpcm9Db250ZXh0
LT5jYWlyb0NvbnRleHQoKS0+Y2xpcChwYXRoKTsKKyAgICB9CisKK30KKworLy8gS1JlbmRlcmlu
Z0RldmljZUNhaXJvCitLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86OktSZW5kZXJpbmdEZXZpY2VDYWly
bygpIDogS1JlbmRlcmluZ0RldmljZSgpCit7CisgICAgCit9CisKK0tSZW5kZXJpbmdEZXZpY2VD
YWlybzo6fktSZW5kZXJpbmdEZXZpY2VDYWlybygpCit7Cit9CisKKworS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2VDYWlybzo6cG9wQ29udGV4dCgpCit7CisgICAgLy8g
QW55IHNwZWNpYWwgdGhpbmdzIG5lZWRlZD8KKyAgICByZXR1cm4gS1JlbmRlcmluZ0RldmljZTo6
cG9wQ29udGV4dCgpOworfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDYWlybzo6cHVzaENvbnRl
eHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQpCit7CisgICAgLy8gQW55IHNwZWNp
YWwgdGhpbmdzIG5lZWRlZD8KKyAgICBLUmVuZGVyaW5nRGV2aWNlOjpwdXNoQ29udGV4dChjb250
ZXh0KTsKKworfQorCisvLyBjb250ZXh0IG1hbmFnZW1lbnQuCitLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dENhaXJvKiBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86OmNhaXJvQ29udGV4dCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihj
dXJyZW50Q29udGV4dCgpKTsKK30KKworS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIEtSZW5kZXJp
bmdEZXZpY2VDYWlybzo6Y29udGV4dEZvckltYWdlKEtDYW52YXNJbWFnZSogaW1hZ2UpIGNvbnN0
Cit7CisgICAgSW1hZ2UqIGltZyA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZUNhaXJvKj4oaW1h
Z2UpLT5pbWFnZSgpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjb250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmNyZWF0ZUNvbnRleHRGb3JJbWFnZShpbWcpOworICAgIHJldHVybiAg
Y29udGV4dC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOworfQorCisKKy8vIFJlc291
cmNlIGNyZWF0aW9uCitLQ2FudmFzUmVzb3VyY2UqIEtSZW5kZXJpbmdEZXZpY2VDYWlybzo6Y3Jl
YXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5cGUmIHR5cGUpIGNvbnN0Cit7CisgICAgc3dp
dGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBSU19DTElQUEVSOgorICAgICAgICAgICAg
cmV0dXJuIG5ldyBLQ2FudmFzQ2xpcHBlcigpOworICAgICAgICBjYXNlIFJTX01BUktFUjoKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgS0NhbnZhc01hcmtlcigpOyAvLyBVc2UgZGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbi4uLgorICAgICAgICBjYXNlIFJTX0lNQUdFOgorICAgICAgICAgICAgLy8gcmV0
dXJuIG5ldyBLQ2FudmFzSW1hZ2VDYWlybygpOworICAgICAgICBjYXNlIFJTX0ZJTFRFUjoKKyAg
ICAgICAgICAgIC8vIHJldHVybiBuZXcgS0NhbnZhc0ZpbHRlckNhaXJvKCk7CisgICAgICAgIGNh
c2UgUlNfTUFTS0VSOgorICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBLQ2FudmFzTWFza2VyQ2Fp
cm8oKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
KworS1JlbmRlcmluZ1BhaW50U2VydmVyKiBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86OmNyZWF0ZVBh
aW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJiB0eXBlKSBjb25zdAoreworICAgIHN3
aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgUFNfU09MSUQ6CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8oKTsKKyAgICAgICAgY2Fz
ZSBQU19QQVRURVJOOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJQYXR0ZXJuQ2Fpcm8oKTsKKyAgICAgICAgY2FzZSBQU19MSU5FQVJfR1JBRElFTlQ6CisgICAg
ICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Q2Fp
cm8oKTsKKyAgICAgICAgY2FzZSBQU19SQURJQUxfR1JBRElFTlQ6CisgICAgICAgICAgICByZXR1
cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm8oKTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworS0NhbnZhc0Zp
bHRlckVmZmVjdCogS1JlbmRlcmluZ0RldmljZUNhaXJvOjpjcmVhdGVGaWx0ZXJFZmZlY3QoY29u
c3QgS0NGaWx0ZXJFZmZlY3RUeXBlJiB0eXBlKSBjb25zdAoreworICAgIHByaW50ZigiS1JlbmRl
cmluZ0RldmljZUNhaXJvOjpjcmVhdGVGaWx0ZXJFZmZlY3QoKSBUT0RPIVxuIik7CisgICAgcmV0
dXJuIDA7Cit9CisKKworLy8gaXRlbSBjcmVhdGlvbgorUmVuZGVyUGF0aCogS1JlbmRlcmluZ0Rl
dmljZUNhaXJvOjpjcmVhdGVJdGVtKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBTVkdTdHlsZWRFbGVtZW50KiBub2RlLCBjb25zdCBQYXRoJiBwYXRoKSBjb25zdAorewor
ICAgIFJlbmRlclBhdGgqIG9iamVjdCA9IG5ldyAoYXJlbmEpIFJlbmRlclBhdGgoc3R5bGUsIG5v
ZGUpOworICAgIG9iamVjdC0+c2V0UGF0aChwYXRoKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQor
CitLUmVuZGVyaW5nRGV2aWNlKiByZW5kZXJpbmdEZXZpY2UoKQoreworICAgIHN0YXRpYyBLUmVu
ZGVyaW5nRGV2aWNlICpzaGFyZWRSZW5kZXJpbmdEZXZpY2UgPSBuZXcgS1JlbmRlcmluZ0Rldmlj
ZUNhaXJvKCk7CisgICAgcmV0dXJuIHNoYXJlZFJlbmRlcmluZ0RldmljZTsKK30KKworCit2b2lk
IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Q2Fpcm86OmRyYXcoS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRU
YXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWly
byogY2Fpcm9Db250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWly
byo+KGNvbnRleHQpOworICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHBhdGgtPnN0eWxl
KCk7CisKKyAgICBpZiAobGlzdGVuZXIoKSkKKyAgICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VO
b3RpZmljYXRpb24oKTsKKworCisJRmxvYXRSZWN0IGJib3ggPSBib3VuZGluZ0JveE1vZGUoKSA/
IGNhaXJvQ29udGV4dC0+Y2Fpcm9Db250ZXh0KCktPnN0cm9rZUJvdW5kaW5nUmVjdCgpIDogRmxv
YXRSZWN0KCk7CisKKwlGbG9hdFBvaW50IHN0YXJ0ID0gZ3JhZGllbnRTdGFydCgpOworCUZsb2F0
UG9pbnQgZW5kID0gICBncmFkaWVudEVuZCgpOworCUFmZmluZVRyYW5zZm9ybSB0cmFucyA9ICBn
cmFkaWVudFRyYW5zZm9ybSgpOworCisJUGF0dGVybkNhaXJvIGxpbmVhclBhdHRlcm4gPSBQYXR0
ZXJuQ2Fpcm8oc3RhcnQKKyAgICAgICAgLCBlbmQgCisgICAgICAgICwgZ3JhZGllbnRTdG9wcygp
IAorICAgICAgICAsIHJlbmRlclN0eWxlLT5vcGFjaXR5KCkgCisgICAgICAgICwgdHJhbnMgCisg
ICAgICAgICwgc3ByZWFkTWV0aG9kKCkKKyAgICAgICAgLCBiYm94KTsKKyAKKwljYWlyb0NvbnRl
eHQtPmRyYXdQYXRoKHBhdGgsbGluZWFyUGF0dGVybix0eXBlKTsKK30KKwordm9pZCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudENhaXJvOjpkcmF3KEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlw
ZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qIGNhaXJv
Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihjb250
ZXh0KTsKKyAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworICAg
IGlmIChsaXN0ZW5lcigpKQorICAgICAgICBsaXN0ZW5lcigpLT5yZXNvdXJjZU5vdGlmaWNhdGlv
bigpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RUcmFuc2Zvcm0gPSBjYWlyb0NvbnRleHQt
PmN0bSgpOworCisJRmxvYXRSZWN0IGJib3ggPSBib3VuZGluZ0JveE1vZGUoKSA/IGNhaXJvQ29u
dGV4dC0+Y2Fpcm9Db250ZXh0KCktPnN0cm9rZUJvdW5kaW5nUmVjdCgpIDogRmxvYXRSZWN0KCk7
CisJCisJRmxvYXRQb2ludCBjdHIgPSBncmFkaWVudENlbnRlcigpOworCUZsb2F0UG9pbnQgZm9j
YWwgPSBncmFkaWVudEZvY2FsKCk7CisJQWZmaW5lVHJhbnNmb3JtIHRyYW5zID0gIGdyYWRpZW50
VHJhbnNmb3JtKCk7CisKKwlQYXR0ZXJuQ2Fpcm8gcmFkaWFsUGF0dGVybiA9IFBhdHRlcm5DYWly
byhjdHIKKyAgICAgICAgLCBmb2NhbCAKKyAgICAgICAgLCBncmFkaWVudFJhZGl1cygpIAorICAg
ICAgICAsIGdyYWRpZW50U3RvcHMoKSAKKyAgICAgICAgLCByZW5kZXJTdHlsZS0+b3BhY2l0eSgp
IAorICAgICAgICAsIHRyYW5zIAorICAgICAgICAsIHNwcmVhZE1ldGhvZCgpCisgICAgICAgICwg
ZGVzdFRyYW5zZm9ybQorICAgICAgICAsIGJib3gpOworIAorCWNhaXJvQ29udGV4dC0+ZHJhd1Bh
dGgocGF0aCxyYWRpYWxQYXR0ZXJuLHR5cGUpOworfQorCit2b2lkIEtSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm5DYWlybzo6ZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwg
Y29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sK
KyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQgPSAKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihjb250ZXh0
KTsKKyAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworCisgICAg
aWYgKGxpc3RlbmVyKCkpIHsKKyAgICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRp
b24oKTsKKyAgICB9CisKKwlLQ2FudmFzSW1hZ2VDYWlybyogaW1hZ2UgPSBzdGF0aWNfY2FzdDxL
Q2FudmFzSW1hZ2VDYWlybyo+KHRpbGUoKSk7CQkKKworCVBhdHRlcm5DYWlybyBpbWFnZVBhdHRl
cm4gPSBQYXR0ZXJuQ2Fpcm8oaW1hZ2UtPmltYWdlKCkKKyAgICAgICAgLCByZW5kZXJTdHlsZS0+
b3BhY2l0eSgpIAorICAgICAgICAsIHBhdHRlcm5UcmFuc2Zvcm0oKSAKKyAgICAgICAgLCBTUFJF
QURNRVRIT0RfUkVQRUFUKTsKKworCWNhaXJvQ29udGV4dC0+ZHJhd1BhdGgocGF0aCxpbWFnZVBh
dHRlcm4sdHlwZSk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlybzo6
ZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCog
cGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQgPSAKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihjb250ZXh0KTsKKyAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworICAgIFBhdHRlcm5DYWlybyBjb2xvclBh
dHRlcm4gPSBQYXR0ZXJuQ2Fpcm8oJmNvbG9yKCkscmVuZGVyU3R5bGUtPm9wYWNpdHkoKSk7CisJ
Y2Fpcm9Db250ZXh0LT5kcmF3UGF0aChwYXRoLGNvbG9yUGF0dGVybix0eXBlKTsKK30KKworfQor
Ly8gdmltOnRzPTQ6bm9ldAorCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tS
ZW5kZXJpbmdEZXZpY2VDYWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdEZXZpY2VDYWlyby5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAg
ICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisJCQkJICAyMDA2IE1p
Y2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm9fSAorI2RlZmlu
ZSBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm9fSAorCisKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNl
LmgiCisjaW1wb3J0ICJLQ2FudmFzSW1hZ2UuaCIKKyNpbXBvcnQgIlBhdHRlcm5DYWlyby5oIgor
I2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyU29s
aWQuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmVuZGVyUGF0aDsKK2NsYXNzIEtSZW5kZXJpbmdTdHJva2VQYWludGVyOworY2xhc3MgS1Jl
bmRlcmluZ0ZpbGxQYWludGVyOworY2xhc3MgUGF0aDsKK2NsYXNzIENvbG9yOworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm87CitjbGFzcyBLQ2FudmFzUmVzb3VyY2U7CisKKworY2xhc3MgS0Nh
bnZhc0ltYWdlQ2Fpcm8gOiBwdWJsaWMgS0NhbnZhc0ltYWdlIAoreworcHVibGljOgorICAgIEtD
YW52YXNJbWFnZUNhaXJvKCk6bV9pbWFnZSgwKSxtX2NyZWF0ZWRJbWFnZShmYWxzZSkge30KKyAg
ICB+S0NhbnZhc0ltYWdlQ2Fpcm8oKQorICAgIHsKKwkgICAgaWYobV9jcmVhdGVkSW1hZ2UgJiYg
bV9pbWFnZSkKKyAgICAJICAgIGRlbGV0ZSBtX2ltYWdlOworICAgIH0KKworICAgIHZvaWQgaW5p
dChjb25zdCBJbWFnZSAmaW1hZ2UpIHsgbV9pbWFnZSA9IChJbWFnZSopJmltYWdlOyB9CisKKyAg
ICB2b2lkIGluaXQoSW50U2l6ZSBzaXplKSAKKyAgICB7CisgICAgICAgIG1faW1hZ2U9IG5ldyBJ
bWFnZShzaXplKTsKKyAgICAgICAgbV9jcmVhdGVkSW1hZ2UgPSB0cnVlOworICAgIH0KKworICAg
IEludFNpemUgc2l6ZSgpIHsgcmV0dXJuIG1faW1hZ2UtPnNpemUoKTsgfSAKKyAgICBJbWFnZSog
aW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgCitwcml2YXRlOgorICAgIEltYWdlKiBt
X2ltYWdlOworICAgIGJvb2wgbV9jcmVhdGVkSW1hZ2U7Cit9OworCitjbGFzcyBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dENhaXJvIDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Cit7Citw
dWJsaWM6CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyhHcmFwaGljc0NvbnRleHRD
YWlybyopOworICAgIHZpcnR1YWwgfktSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8oKTsKKwor
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBjdG0oKSBjb25zdDsKKworICAgIHZp
cnR1YWwgSW50UmVjdCBtYXBGcm9tVmlzdWFsKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IEludFJlY3QgbWFwVG9WaXN1YWwoY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lk
IGNsZWFyUGF0aCgpOworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXRoKGNvbnN0IFBhdGgmKTsKKwor
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBjcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAg
ICAKKyAgICAvLyBDYWlybyBzcGVjaWZpYyBzdHVmZgorICAgIHZvaWQgZHJhd1BhdGgoY29uc3Qg
UmVuZGVyUGF0aCosIFBhdHRlcm5DYWlybyYsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpOworICAg
IEdyYXBoaWNzQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQoKXsgcmV0dXJuIG1fZ2M7fQorCitw
cml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBtX2djOworfTsKKworY2xhc3MgS1Jl
bmRlcmluZ0RldmljZUNhaXJvIDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2UKK3sKK3B1YmxpYzoK
KyAgICBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm8oKTsKKyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nRGV2
aWNlQ2Fpcm8oKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcmVkKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogcG9wQ29u
dGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBwdXNoQ29udGV4dChLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCopOworCisgICAgLy8gY29udGV4dCBtYW5hZ2VtZW50LgorICAgIHZpcnR1YWwgS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqIGNvbnRleHRGb3JJbWFnZShLQ2FudmFzSW1hZ2UqKSBjb25zdDsK
KworCisgICAgLy8gUmVzb3VyY2UgY3JlYXRpb24KKyAgICB2aXJ0dWFsIEtDYW52YXNSZXNvdXJj
ZSogY3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5cGUmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEtSZW5kZXJpbmdQYWludFNlcnZlciogY3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWlu
dFNlcnZlclR5cGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QqIGNy
ZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmKSBjb25zdDsKKworICAg
IC8vIGl0ZW0gY3JlYXRpb24KKyAgICB2aXJ0dWFsIFJlbmRlclBhdGgqIGNyZWF0ZUl0ZW0oUmVu
ZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSosIFNWR1N0eWxlZEVsZW1lbnQqLCBjb25zdCBQYXRoJikg
Y29uc3Q7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyogY2Fpcm9Db250ZXh0KCkg
Y29uc3Q7CisgIHByaXZhdGU6CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyogbV9j
b250ZXh0OworCit9OworCitjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVu
dENhaXJvIDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Cit7Citw
dWJsaWM6CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRDYWlybygpe30K
KyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudENhaXJvKCl7
fQorICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3Qg
UmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKK307CisKK2NsYXNzIEtSZW5k
ZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm8gOiBwdWJsaWMgS1JlbmRlcmluZ1Bh
aW50U2VydmVyUmFkaWFsR3JhZGllbnQKK3sKK3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudENhaXJvKCl7fQorICAgIHZpcnR1YWwgfktSZW5kZXJpbmdQYWlu
dFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm8oKXt9CisgICAgdmlydHVhbCB2b2lkIGRyYXcoS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5
cGUpIGNvbnN0OworfTsKKworCitjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fp
cm8gOiBwdWJsaWMgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybgoreworcHVibGljOgorICAg
IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlybygpe30KKyAgICB2aXJ0dWFsIH5LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8oKXt9CisgICAgdmlydHVhbCB2b2lkIGRyYXco
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdl
dFR5cGUpIGNvbnN0OworfTsKKworY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWly
byA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZAoreworcHVibGljOgorICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8oKXt9CisgICAgdmlydHVhbCB+S1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWRDYWlybygpe30KKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkg
Y29uc3Q7Cit9OworCit9CisjZW5kaWYKKy8vIHZpbTp0cz00OmV0CkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdBbmltYXRlZFRlbXBsYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHQW5pbWF0ZWRUZW1wbGF0ZS5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVkVGVtcGxhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogICAgIGNsYXNzIFNWR1RyYW5zZm9ybUxpc3Q7CiAgICAgY2xhc3MgU3RyaW5nOwog
ICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBTVkdQb2ludExpc3Q7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCYXJlVHlwZT4KICAgICBjbGFzcyBTVkdBbmltYXRlZFRlbXBsYXRlIDog
cHVibGljIFNoYXJlZDxTVkdBbmltYXRlZFRlbXBsYXRlPEJhcmVUeXBlPiA+CkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR01hdHJpeC5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHTWF0cml4OjpTVkdNYXRyaXgoKSA6IFNoYXJlZDxTVkdN
YXRyaXg+KCkKK1NWR01hdHJpeDo6U1ZHTWF0cml4KCkgOiBTaGFyZWQ8U1ZHTWF0cml4PigpLG1f
bWF0KCkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQb2ludHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBvaW50cy5oCShy
ZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVkUG9pbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDEwICsyNCwxMiBAQAogI2RlZmluZSBLU1ZHX1NWR0FuaW1h
dGVkUG9pbnRzSW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAorI2luY2x1ZGUgIlNoYXJlZC5o
IgorCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR1BvaW50TGlzdDsKLSAgICBj
bGFzcyBTVkdBbmltYXRlZFBvaW50cworICAgIGNsYXNzIFNWR0FuaW1hdGVkUG9pbnRzIDpwdWJs
aWMgU2hhcmVkPFNWR0FuaW1hdGVkUG9pbnRzPgogICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFNWR0FuaW1hdGVkUG9pbnRzKCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9XaW5kb3dGZWF0dXJl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL1dpbmRvd0ZlYXR1cmVzLmgJKHJldmlz
aW9uIDE3Mzk5KQorKysgV2ViQ29yZS9icmlkZ2UvV2luZG93RmVhdHVyZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNiArNDcsOSBAQAogCiAgICAgYm9vbCBmdWxsc2NyZWVuOwogICAgIGJvb2wg
ZGlhbG9nOworI2lmIFBMQVRGT1JNKEdESykKKyAgICBib29sIGhpZGVGcmFtZURlY29yYXRpb25z
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyLDE0ICsxMDIsMTM1IEBACiAJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
WFBhdGhHcmFtbWFyLmNwcAogCiAJPC9zZXQ+Ci0JPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09S
RV9TT1VSQ0VTX0tIVE1MIj4KLQkJCiAKKwk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NP
VVJDRVNfU1ZHX0RFUklWRURTT1VSQ0VTIj4KKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9TVkdF
bGVtZW50RmFjdG9yeS5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9TVkdOYW1lcy5jcHAK
KworICAgICAgICAgIDwhLS0gaW5jbHVkZWQgc291cmNlcworCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHUG9pbnRUYWJsZS5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1Jl
Y3RUYWJsZS5jcHAKKyAgICAgICAgICAtLT4KKworCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHQUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmdsZS5jcHAK
KwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZEFuZ2xlLmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAKKwkJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR0FuaW1hdGVkTGVuZ3RoLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
QW5pbWF0ZWRMZW5ndGhMaXN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5p
bWF0ZWROdW1iZXIuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZE51
bWJlckxpc3QuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZFBvaW50
cy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpby5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkUmVjdC5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkU3RyaW5nLmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCisJCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNTVkdDaXJjbGVFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHQ29sb3IuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0N1
cnNvckVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdEZWZzRWxlbWVu
dC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0Rlc2NFbGVtZW50LmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRG9jdW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTVkdFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
RWxsaXBzZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUJsZW5k
RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRURpc3Rh
bnRMaWdodEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUZsb29k
RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFRnVuY0FFbGVtZW50
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVGdW5jQkVsZW1lbnQuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUZ1bmNHRWxlbWVudC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFRnVuY1JFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNTVkdGRU1lcmdlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NW
R0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZF
T2Zmc2V0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFUG9pbnRM
aWdodEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVTcG90
TGlnaHRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVUaWxlRWxl
bWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGaWx0ZXJFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdHRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR0dyYWRpZW50RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0ltYWdlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NW
R0xlbmd0aC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0xlbmd0aExpc3QuY3Bw
CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3Bw
CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdMaW5lRWxlbWVudC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR01hcmtlckVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTVkdNYXNrRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR01hdHJpeC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR01ldGFkYXRhRWxl
bWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR051bWJlckxpc3QuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYWludC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1NWR1BhdGhFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHUGF0aFNlZ0FyY0Ficy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhT
ZWdBcmNSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQ2xvc2VQ
YXRoLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZy5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY0Ficy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljUmVsLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5ldG9BYnMuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0xpbmV0b1JlbC5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicy5jcHAKKwkJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaXN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHUGF0aFNlZ01vdmV0b0Ficy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR1BhdGhTZWdNb3ZldG9SZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
VkdQYXR0ZXJuRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BvaW50
TGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BvbHlnb25FbGVtZW50LmNw
cAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUG9seWxpbmVFbGVtZW50LmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1JlY3RFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHUmVuZGVyaW5nSW50ZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHU2NyaXB0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NW
R1NldEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTdG9wRWxlbWVu
dC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1N0cmluZ0xpc3QuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTdHlsZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNTVkdTVkdFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTU1ZHU3dpdGNoRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1N5
bWJvbEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUZXh0Q29udGVu
dEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUZXh0RWxlbWVudC5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUaXRsZUVsZW1lbnQuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUcmFuc2Zvcm0uY3BwCisJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTVkdUcmFuc2Zvcm1MaXN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTU1ZHVFJlZkVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUU3Bh
bkVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdVbml0VHlwZXMuY3Bw
CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdVc2VFbGVtZW50LmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHVmlld0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNTVkdab29tRXZlbnQuY3BwCisKIAk8L3NldD4KLQk8c2V0IGFwcGVuZD0iMSIgdmFy
PSJXRUJDT1JFX1NPVVJDRVNfTUlTQyI+Ci0JCQogCi0JPC9zZXQ+CiAJPHNldCBhcHBlbmQ9IjEi
IHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BBR0UiPgogCQkKIAkJcGFnZS9ET01XaW5kb3cuY3BwCkBA
IC0xNjcsOSArMjg4LDExIEBACiAJCXBsYXRmb3JtL0ludFJlY3QuY3BwCiAJCXBsYXRmb3JtL0tV
UkwuY3BwCiAJCXBsYXRmb3JtL0xvZ2dpbmcuY3BwCisJCXBsYXRmb3JtL1BhdGguY3BwCiAJCXBs
YXRmb3JtL1Blbi5jcHAKIAkJcGxhdGZvcm0vUmVndWxhckV4cHJlc3Npb24uY3BwCiAJCXBsYXRm
b3JtL1NlZ21lbnRlZFN0cmluZy5jcHAKKwkJcGxhdGZvcm0vU2Nyb2xsQmFyLmNwcAogCQlwbGF0
Zm9ybS9TdHJlYW1pbmdUZXh0RGVjb2Rlci5jcHAKIAkJcGxhdGZvcm0vU3RyZWFtaW5nVGV4dERl
Y29kZXJJQ1UuY3BwCiAJCXBsYXRmb3JtL1N0cmluZy5jcHAKQEAgLTMwNSwxMSArNDI4LDE1IEBA
CiAJCXBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuY3BwCiAKIAk8
L3NldD4KLQk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfQ0FJUk8iPgorCTxz
ZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19DQUlST19CSU5ESU5HUyI+CiAJCQor
CQlwbGF0Zm9ybS9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5jcHAKIAkJcGxhdGZvcm0vY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiAJCXBsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8u
Y3BwCiAJCXBsYXRmb3JtL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwCisJCXBsYXRmb3JtL2Nh
aXJvL1BhdGhDYWlyby5jcHAKKwkJcGxhdGZvcm0vY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAorCQlw
bGF0Zm9ybS9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwCiAKIAk8L3NldD4KIAk8c2V0IGFwcGVu
ZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfUElYTUFOIj4KQEAgLTQyNSwxMSArNTUyLDExIEBA
CiAJCXJlbmRlcmluZy9Db3VudGVyUmVzZXROb2RlLmNwcAogCQlyZW5kZXJpbmcvRWxsaXBzaXNC
b3guY3BwCiAJCXJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAorCQlyZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHAKIAkJcmVuZGVyaW5nL0lubGluZUJveC5jcHAKIAkJcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwCiAJCXJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAogCQlyZW5kZXJp
bmcvTGlzdE1hcmtlckJveC5jcHAKLQkJcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNwcAogCQlyZW5k
ZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwCiAJCXJl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTQ0Miw2ICs1NjksNyBAQAogCQlyZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJv
eC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCisJCXJlbmRlcmluZy9SZW5kZXJGb3Jl
aWduT2JqZWN0LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyRm9ybUVsZW1lbnQuY3BwCiAJCXJlbmRl
cmluZy9SZW5kZXJGcmFtZS5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcApAQCAt
NDU5LDEwICs1ODcsMTcgQEAKIAkJcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKIAkJcmVuZGVy
aW5nL1JlbmRlclBhcnQuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAotCQly
ZW5kZXJpbmcvUmVuZGVyUG9wdXBNZW51LmNwcAorCQlyZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAK
IAkJcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAorCQlyZW5kZXJpbmcvUmVuZGVyU3R5bGUu
Y3BwCiAJCXJlbmRlcmluZy9EZXByZWNhdGVkUmVuZGVyU2VsZWN0LmNwcAogCQlyZW5kZXJpbmcv
RGVwcmVjYXRlZFNsaWRlci5jcHAKKwkJcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAK
KwkJcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAorCQlyZW5kZXJpbmcvUmVuZGVyU1ZHSW5s
aW5lLmNwcAorCSAJcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisJCXJlbmRlcmlu
Zy9SZW5kZXJTVkdUZXh0LmNwcAorCQlyZW5kZXJpbmcvUmVuZGVyU1ZHVFNwYW4uY3BwCiAJCXJl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAK
IAkJcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcApAQCAtNDcyLDExICs2MDcsMTIgQEAKIAkJ
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyVGV4dEZy
YWdtZW50LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCi0JCQogCQlyZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCiAJCXJlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwCiAJCXJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAorCQly
ZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKKwkJcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVC
b3guY3BwCiAKIAk8L3NldD4KIApAQCAtNTU3LDExICs2OTMsMTIgQEAKIAk8L3NldD4KIAogCTxz
ZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19JQ09OIj4KLQkJaWNvbi9JY29uRGF0
YWJhc2UuY3BwCi0JCWljb24vSWNvbkxvYWRlci5jcHAKLQkJaWNvbi9TUUxEYXRhYmFzZS5jcHAK
LQkJaWNvbi9TUUxTdGF0ZW1lbnQuY3BwCi0JCWljb24vU2l0ZUljb24uY3BwCisJCWxvYWRlci9p
Y29uL0ljb25EYXRhYmFzZS5jcHAKKwkJbG9hZGVyL2ljb24vSWNvbkRhdGFDYWNoZS5jcHAKKwkJ
bG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKKwkJbG9hZGVyL2ljb24vU1FMRGF0YWJhc2UuY3Bw
CisJCWxvYWRlci9pY29uL1NRTFN0YXRlbWVudC5jcHAKKwkJbG9hZGVyL2ljb24vU1FMVHJhbnNh
Y3Rpb24uY3BwCiAJPC9zZXQ+CiAKIAk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJD
RVNfQlJJREdFIj4KQEAgLTU4Miw5ICs3MTksMTIgQEAKIAkJZWRpdGluZy9Db21tYW5kQnlOYW1l
LmNwcAogCQllZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAogCQllZGl0aW5nL0NyZWF0
ZUxpbmtDb21tYW5kLmNwcAorCQllZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCisJ
CWVkaXRpbmcvRGVsZXRlQnV0dG9uLmNwcAogCQllZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNv
bW1hbmQuY3BwCiAJCWVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKIAkJZWRpdGlu
Zy9FZGl0Q29tbWFuZC5jcHAKKwkJZWRpdGluZy9FZGl0b3IuY3BwCiAJCWVkaXRpbmcvRm9ybWF0
QmxvY2tDb21tYW5kLmNwcAogCQllZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAogCQllZGl0aW5nL0hU
TUxJbnRlcmNoYW5nZS5jcHAKQEAgLTYwNyw4ICs3NDcsOCBAQAogCQllZGl0aW5nL1JlbW92ZU5v
ZGVDb21tYW5kLmNwcAogCQllZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21t
YW5kLmNwcAogCQllZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorCQllZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCiAJCWVkaXRpbmcvU2VsZWN0aW9uLmNwcAotCQllZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCiAJCWVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQuY3BwCiAJCWVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKIAkJZWRpdGluZy9T
cGxpdFRleHROb2RlQ29tbWFuZC5jcHAKQEAgLTYxNiwxMCArNzU2LDkgQEAKIAkJZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCiAJCWVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKIAkJZWRpdGluZy9V
bmxpbmtDb21tYW5kLmNwcAorCQllZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKIAkJZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAotCQllZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKIAkJZWRp
dGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCi0KIAk8L3NldD4KIAk8c2V0
IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSFRNTCI+CiAKQEAgLTY1MSw2ICs3OTAs
NyBAQAogCQlodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKIAkJaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCiAJCWh0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAKKwkJaHRtbC9IVE1MRnJhbWVFbGVt
ZW50QmFzZS5jcHAKIAkJaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAogCQlodG1sL0hUTUxH
ZW5lcmljRm9ybUVsZW1lbnQuY3BwCiAJCWh0bWwvSFRNTEhlYWRFbGVtZW50LmNwcApAQCAtNzAy
LDEyICs4NDIsMTggQEAKIAkgICAgaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkKIAog
CTwvc2V0PgotCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19CSU5ESU5HUyI+
Ci0JCQogCisJPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NVUkwiPgorCisJ
CXBsYXRmb3JtL25ldHdvcmsvZ2RrL0xvYWRlckZ1bmN0aW9uc0N1cmwuY3BwCisJCXBsYXRmb3Jt
L25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyQ3VybC5jcHAKKwkJcGxhdGZvcm0vbmV0d29yay9n
ZGsvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmNwcAorCiAJPC9zZXQ+CisKIAk8c2V0IGFwcGVuZD0i
MSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSlMiPgogCQkKKwogCQliaW5kaW5ncy9qcy9KU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKIAkJYmluZGluZ3MvanMvSlNIVE1MRWxlbWVu
dFdyYXBwZXJGYWN0b3J5LmNwcAogCQliaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3Rv
bS5jcHAKQEAgLTcxNSw2ICs4NjEsMTAgQEAKIAkJYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxl
bWVudENvbnN0cnVjdG9yLmNwcAogCQliaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29sbGVjdGlv
bkN1c3RvbS5jcHAKIAkJYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCisJCWJp
bmRpbmdzL2pzL0pTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAorCQliaW5kaW5ncy9qcy9K
U1NWR051bWJlci5jcHAKKwkJYmluZGluZ3MvanMvSlNTVkdQb2ludC5jcHAKKwkJYmluZGluZ3Mv
anMvSlNTVkdSZWN0LmNwcAogCQliaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCiAJ
CWJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCiAJCWJpbmRpbmdzL2pzL0pTWFNMVFBy
b2Nlc3Nvci5jcHAKQEAgLTczMCw0ICs4ODAsMTU0IEBACiAKIAk8L3NldD4KIAorCTxzZXQgYXBw
ZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19LQ0FOVkFTIj4KKworCQlrY2FudmFzL0tDYW52
YXNDbGlwcGVyLmNwcAorCQlrY2FudmFzL0tDYW52YXNDcmVhdG9yLmNwcAorCQlrY2FudmFzL0tD
YW52YXNGaWx0ZXJzLmNwcAorCQlrY2FudmFzL0tDYW52YXNNYXJrZXIuY3BwCisJCWtjYW52YXMv
S0NhbnZhc01hc2tlci5jcHAKKwkJa2NhbnZhcy9LQ2FudmFzUmVzb3VyY2UuY3BwCisJCWtjYW52
YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAKKwkJa2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0Rldmlj
ZS5jcHAKKwkJa2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3Bw
CisJCWtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uY3BwCisJCWtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmNwcAorCisJPC9zZXQ+CisK
Kwk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfS1NWRzIiPgorCisKKwkJa3N2
ZzIvY3NzL1NWR0NTU1BhcnNlci5jcHAKKwkJa3N2ZzIvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCisJCWtzdmcyL2Nzcy9TVkdSZW5kZXJTdHlsZS5jcHAKKwkJa3N2ZzIvY3NzL1NWR1JlbmRl
clN0eWxlRGVmcy5jcHAKKyAgICAgICAgICA8IS0tCisJCWtzdmcyL2VjbWEvR2xvYmFsT2JqZWN0
LmNwcAorICAgICAgICAgIC0tPgorCQlrc3ZnMi9ldmVudHMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5l
ci5jcHAKKwkJa3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5jcHAKKwkJa3N2ZzIvbWlzYy9LQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuY3BwCisJCWtzdmcyL21pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3Bw
CisJCWtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAorCQlrc3ZnMi9taXNjL1NW
R0ltYWdlTG9hZGVyLmNwcAorCQlrc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2
Zy9TVkdBbmdsZS5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCisJ
CWtzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmNwcAorCQlrc3ZnMi9zdmcvU1ZHQW5pbWF0
ZWRQb2ludHMuY3BwCisJCWtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCisJCWtzdmcy
L3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdDb2xvci5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmNw
cAorCQlrc3ZnMi9zdmcvU1ZHRGVzY0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdEb2N1bWVu
dC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0RPTUltcGxlbWVudGF0aW9uLmNwcAorCQlrc3ZnMi9zdmcv
U1ZHRWxlbWVudC5jcHAKKyAgICAgICAgICA8IS0tCisJCWtzdmcyL3N2Zy9TVkdFbGVtZW50SW5z
dGFuY2UuY3BwCisJCWtzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmNwcAorICAgICAg
ICAgIC0tPgorCQlrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9T
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAor
CQlrc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZH
RkVGbG9vZEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUZ1bmNBRWxlbWVudC5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR0ZFRnVuY0JFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVGdW5jR0Vs
ZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUZ1bmNSRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVt
ZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9T
VkdGRU1lcmdlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZF
UG9pbnRMaWdodEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcv
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAorCQlrc3ZnMi9zdmcvU1ZH
Rml0VG9WaWV3Qm94LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuY3Bw
CisJCWtzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0hlbHBlci5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ltYWdl
RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0xhbmdTcGFjZS5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R0xlbmd0aC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0xlbmd0aExpc3QuY3BwCisJCWtzdmcyL3N2Zy9T
VkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKKwkJa3N2ZzIvc3ZnL1NWR01hcmtlckVs
ZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R01hdHJpeC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR01ldGFkYXRhRWxlbWVudC5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR051bWJlckxpc3QuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYWludC5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvc3ZncGF0aHBhcnNlci5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR1BhdGhTZWdBcmMuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnQ2xvc2VQ
YXRoLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZy5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWMuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3BwCisJCWtz
dmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5jcHAKKwkJa3N2ZzIvc3Zn
L1NWR1BhdGhTZWdMaW5ldG8uY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvSG9yaXpv
bnRhbC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZ01vdmV0by5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUG9p
bnRMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9T
VkdQb2x5Z29uRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCisJCWtzdmcyL3N2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdTZXRFbGVt
ZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdT
dHJpbmdMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3R5bGFibGUuY3BwCisJCWtzdmcyL3N2Zy9T
VkdTdHlsZWRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVu
dC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAorCQlr
c3ZnMi9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdTeW1i
b2xFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVGVzdHMuY3BwCisJCWtzdmcyL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdU
aXRsZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHVHJhbnNmb3JtLmNwcAorCQlrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVFNwYW5FbGVt
ZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAorCQlrc3ZnMi9zdmcvU1ZH
VXNlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAorCQlrc3ZnMi9z
dmcvU1ZHWm9vbUFuZFBhbi5jcHAKKworCTwvc2V0PgorCiA8L21ha2VmaWxlPgpJbmRleDogV2Vi
Q29yZS93ZWJjb3JlLWJhc2UuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2ViY29yZS1iYXNl
LmJrbAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3dlYmNvcmUtYmFzZS5ia2wJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDExICszOSw5IEBACiAgICAgPGluY2x1ZGUgZmlsZT0iV2ViQ29yZVNv
dXJjZXMuYmtsIi8+CiAgICAgCiAJPHNldCB2YXI9IldFQkNPUkVfQkFTRV9TT1VSQ0VTIj4JCi0J
CSQoV0VCQ09SRV9TT1VSQ0VTX0RFUklWRURTT1VSQ0VTKQotCQkkKFdFQkNPUkVfU09VUkNFU19L
SFRNTCkKLQkJJChXRUJDT1JFX1NPVVJDRVNfTUlTQykKIAkJJChXRUJDT1JFX1NPVVJDRVNfUEFH
RSkKIAkJJChXRUJDT1JFX1NPVVJDRVNfTE9BREVSKQorCQkkKFdFQkNPUkVfU09VUkNFU19JQ09O
KQogCQkkKFdFQkNPUkVfU09VUkNFU19QTEFURk9STSkKIAkJJChXRUJDT1JFX1NPVVJDRVNfSU1B
R0UtREVDT0RFUlMpCiAJCSQoV0VCQ09SRV9TT1VSQ0VTX0JNUCkKQEAgLTYwLDggKzU4LDggQEAK
IAkJJChXRUJDT1JFX1NPVVJDRVNfQlJJREdFKQogCQkkKFdFQkNPUkVfU09VUkNFU19FRElUSU5H
KQogCQkkKFdFQkNPUkVfU09VUkNFU19IVE1MKQotCQkkKFdFQkNPUkVfU09VUkNFU19CSU5ESU5H
UykKIAkJJChXRUJDT1JFX1NPVVJDRVNfSlMpCisJCSQoV0VCQ09SRV9TT1VSQ0VTX0RFUklWRURT
T1VSQ0VTKQogCTwvc2V0PgogCiAgICAgPHNldCB2YXI9IkJVSUxERElSIj5vYmotJChGT1JNQVQp
PC9zZXQ+CkBAIC03MCwxMiArNjgsMTIgQEAKICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3Bs
YXRmb3JtL2NhaXJvL2NhaXJvL3NyYzwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNE
SVIpL3BsYXRmb3JtL2NhaXJvL3BpeG1hbi9zcmM8L2luY2x1ZGU+CiAgICAgICAgIDxzb3VyY2Vz
PgotICAgICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfQ0FJUk8pIAotCQkgICAgJChXRUJDT1JF
X1NPVVJDRVNfUElYTUFOKSAKKwkJCSQoV0VCQ09SRV9TT1VSQ0VTX0NBSVJPKSAKKwkJCSQoV0VC
Q09SRV9TT1VSQ0VTX1BJWE1BTikgCiAgICAgICAgIDwvc291cmNlcz4KICAgICA8L3RlbXBsYXRl
PgogICAgIAotICAgIDx0ZW1wbGF0ZSBpZD0id2ViY29yZV9iYXNlIiB0ZW1wbGF0ZT0ieG1sMixp
Y29udix4c2x0LGljdSxqc2NvcmUiPgorICAgIDx0ZW1wbGF0ZSBpZD0id2ViY29yZV9iYXNlIiB0
ZW1wbGF0ZT0ieG1sMixpY29udix4c2x0LGljdSI+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElS
KS8uPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvaW5jbHVkZTwvaW5jbHVk
ZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmU8L2lu
Y2x1ZGU+CkBAIC05NywxNSArOTUsMjAgQEAKICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibTwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChT
UkNESVIpL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZzwvaW5jbHVkZT4KICAgICAgICAgPGlu
Y2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWI8L2luY2x1ZGU+Ci0g
ICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9uZXRvd3JrPC9pbmNsdWRlPgorICAg
ICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vbmV0d29yazwvaW5jbHVkZT4KICAgICAg
ICAgPGluY2x1ZGU+JChTUkNESVIpL3JlbmRlcmluZzwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1
ZGU+JChTUkNESVIpL3htbDwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tj
YW52YXM8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2Rldmlj
ZTwvaW5jbHVkZT4KLSAgICAgICAgCi0gICAgICAgIDxzb3VyY2VzPiQoV0VCQ09SRV9CQVNFX1NP
VVJDRVMpPC9zb3VyY2VzPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikva3N2ZzI8L2luY2x1
ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rc3ZnMi9iaW5kaW5ncy9qczwvaW5jbHVk
ZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyL2NzczwvaW5jbHVkZT4KKyAgICAg
ICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyL2VjbWE8L2luY2x1ZGU+CisgICAgICAgIDxpbmNs
dWRlPiQoU1JDRElSKS9rc3ZnMi9ldmVudHM8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQo
U1JDRElSKS9rc3ZnMi9taXNjPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikv
a3N2ZzIvc3ZnPC9pbmNsdWRlPgorICAgCiAKLQogPCEtLSBIQUNLIEFMRVJUISBGSVggVEhFU0Ug
TEFURVIhISAtLT4KICAgICAgIDxpZiBjb25kPSJQTEFURk9STV9NQUNPU1g9PScxJyI+CiAgICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9tYWM8L2luY2x1ZGU+IDwhLS0gd2hlbiBi
dWlsZGluZyBvbiBNYWMsIEV4dHJhQ0ZFbmNvZGluZ3MuaCBpcyBuZWVkZWQgLS0+ICAgICAgCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysr
IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsOSBAQAogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAj
aW5jbHVkZSA8d2luYmFzZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2
aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw2ICs4NywxMCBAQAogICAgICAgICBzdGF0aWMgSElOU1RBTkNFIGluc3RhbmNlSGFuZGxlKCkg
eyByZXR1cm4gc19pbnN0YW5jZUhhbmRsZTsgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHREsp
CisgICAgICAgIFBhZ2UoKTsKKyNlbmRpZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBp
bml0KCk7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5j
bHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJh
ci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1X
aGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJQ
YXJ0LmgiCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsYmFyLmgi
CiAjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5j
bHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKSW5kZXg6IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL21h
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL21haW4uY3BwCShy
ZXZpc2lvbiAxNzM5OSkKKysrIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL21haW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDE3ICsyLDI0IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl
IDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPGdkay9nZGsu
aD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFtZUdkay5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1
ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorLy8jaW5jbHVk
ZSAiSFRNTERvY3VtZW50LmgiCiAKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKKy8vI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWYgU1ZHX1NVUFBPUlQKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtMjAsMTggKzI3LDI3IEBACiAjaW5jbHVkZSAiU1ZHRG9j
dW1lbnRFeHRlbnNpb25zLmgiCiAjZW5kaWYKIAorLy9wYWludGluZwogI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIldpbmRv
d0dkay5oIgorI2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50Lmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgR01haW5Mb29wICpsb29wOwor
CiBjbGFzcyBMYXVuY2hlckZyYW1lR2RrIDogcHVibGljIEZyYW1lR2RrCiB7CiBwdWJsaWM6Ci0g
ICAgTGF1bmNoZXJGcmFtZUdkayhQYWdlKiBwYWdlLCBFbGVtZW50KiBlbGVtZW50KSA6IEZyYW1l
R2RrKHBhZ2UsIGVsZW1lbnQpLCBtX2V4aXRBZnRlckxvYWRpbmcoZmFsc2UpIHt9Ci0gICAgTGF1
bmNoZXJGcmFtZUdkayhHZGtEcmF3YWJsZSogZHJhd2FibGUpIDogRnJhbWVHZGsoZHJhd2FibGUp
LCBtX2V4aXRBZnRlckxvYWRpbmcoZmFsc2UpIHt9CisgICAgTGF1bmNoZXJGcmFtZUdkayhQYWdl
KiBwYWdlLCBFbGVtZW50KiBlbGVtZW50LFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3Is
V2luZG93R2RrKiB3aW5kb3cpIDogRnJhbWVHZGsocGFnZSxlbGVtZW50LGVkaXRvcix3aW5kb3cp
LCBtX2V4aXRBZnRlckxvYWRpbmcoZmFsc2UpCisgICAge30KICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlZE9ubG9hZEV2ZW50cygpOwotICAgIHZvaWQgc2V0RXhpdEFmdGVyTG9hZGluZyhib29sIGV4
aXRBZnRlckxvYWRpbmcpIHsgbV9leGl0QWZ0ZXJMb2FkaW5nID0gZXhpdEFmdGVyTG9hZGluZzsg
fQorICAgIHZvaWQgc2V0RXhpdEFmdGVyTG9hZGluZyhib29sIGV4aXRBZnRlckxvYWRpbmcpCisg
ICAgeworICAgICAgICBtX2V4aXRBZnRlckxvYWRpbmcgPSBleGl0QWZ0ZXJMb2FkaW5nOworICAg
IH0KIHByaXZhdGU6CiAgICAgYm9vbCBtX2V4aXRBZnRlckxvYWRpbmc7CiB9OwpAQCAtMzksNjAg
KzU1LDk2IEBACiB2b2lkIExhdW5jaGVyRnJhbWVHZGs6OmhhbmRsZWRPbmxvYWRFdmVudHMoKQog
ewogICAgIGlmIChtX2V4aXRBZnRlckxvYWRpbmcpCi0gICAgICAgIGd0a19tYWluX3F1aXQoKTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKIH0KIAotc3RhdGljICBMYXVuY2hlckZy
YW1lR2RrICpmcmFtZTsKLXN0YXRpYyAgR2RrV2luZG93ICp3aW47CitzdGF0aWMgTGF1bmNoZXJG
cmFtZUdkayAqZnJhbWU7CitzdGF0aWMgR2RrV2luZG93ICp3aW47CitzdGF0aWMgV2luZG93R2Rr
ICp3aW5kb3c7CitzdGF0aWMgYm9vbCBkZWJ1ZzsKIAogc3RhdGljIHZvaWQgaGFuZGxlX2V2ZW50
KEdka0V2ZW50ICpldmVudCkKIHsKKyAgICBnZGtfdGhyZWFkc19sZWF2ZSgpOworICAgIFdpbmRv
d0dkayogZWZyYW1lID0gV2luZG93R2RrOjpmaW5kV2luZG93KGV2ZW50LT5hbnkud2luZG93KTsK
KyAgICBpZiAoZWZyYW1lKSB7CisgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAgc3dp
dGNoIChldmVudC0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBHREtfRVhQT1NFOgorICAgICAg
ICAgICAgICAgIEdka1JlY3RhbmdsZSBjbGlwOworICAgICAgICAgICAgICAgIGdka19yZWdpb25f
Z2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdpb24sICZjbGlwKTsKKyAgICAgICAgICAgICAg
ICAvL3ByaW50ZigiIFBBSU5UIEZSQU1FICVwIHg9JWQgeT0lZCB3PSVkIGg9JWQgXG4iLGVmcmFt
ZSwKKyAgICAgICAgICAgICAgICAvLyAgICBjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xp
cC5oZWlnaHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHREtf
S0VZX1BSRVNTOgorICAgICAgICAgICAgICAgIGlmIChldmVudC0+a2V5LmtleXZhbCA9PSBHREtf
RjkpIHsKKyAgICAgICAgICAgICAgICAgICAgRnJhbWVHZGsqIGVmcmFtZSA9IHdpbmRvdy0+ZnJh
bWUoKTsKKyAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdCA9IGV4dGVybmFs
UmVwcmVzZW50YXRpb24oZWZyYW1lLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICAgICAg
RGVwcmVjYXRlZFN0cmluZyBzOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZSQU1FR0RL
IERPQ1VNRU5UOiAlcyBcbiIsc3QuYXNjaWkoKSk7CisgICAgICAgICAgICAgICAgICAgIFRleHRT
dHJlYW0gc3RyZWFtKCZzKTsKKyAgICAgICAgICAgICAgICAgICAgZWZyYW1lLT5kb2N1bWVudCgp
LT5kdW1wKCZzdHJlYW0sRGVwcmVjYXRlZFN0cmluZygiICIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHJpbnRmKCJGUkFNRUdESyBOT0RFUzogJXMgXG4iLHMuYXNjaWkoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVmcmFtZS0+aGFuZGxlR2RrRXZlbnQoZXZlbnQpOworICAgIH0KICAgICBpZiAo
R0RLX0RFTEVURSA9PSBldmVudC0+dHlwZSkgewotICAgICAgICBndGtfbWFpbl9xdWl0KCk7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgZnJhbWUtPmhhbmRsZUdka0V2ZW50KGV2ZW50KTsKKyAgICBnZGtfdGhyZWFkc19lbnRlcigp
OwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSAKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyICphcmd2W10pCiB7CisgICAgZGVidWcgPSB0cnVlOwogICAgIEdka1dpbmRvd0F0
dHIgYXR0cjsKLSAgICBjaGFyICp1cmw7CisgICAgZ190aHJlYWRfaW5pdCgwKTsKKyAgICBnZGtf
dGhyZWFkc19pbml0KCk7CiAgICAgZ2RrX2luaXQoJmFyZ2MsJmFyZ3YpOwogICAgIGdka19ldmVu
dF9oYW5kbGVyX3NldCAoKEdka0V2ZW50RnVuYyloYW5kbGVfZXZlbnQsIE5VTEwsIE5VTEwpOwot
Ci0gICAgYXR0ci53aWR0aCA9IDgwMDsKLSAgICBhdHRyLmhlaWdodCA9IDYwMDsKKyAgICBsb29w
ID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLFRSVUUpOworICAgIFN0cmluZyBzID0gZ2V0ZW52KCJQ
V0QiKTsKKyAgICBzID0gImZpbGU6Ly8iK3MrIi9jb21wb25lbnRzIjsKKyAgICBGcmFtZUdkazo6
c2V0SW5zdGFsbExvY2F0aW9uKHMuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCkpOworICAgIGF0
dHIud2lkdGggPSA0MDA7CisgICAgYXR0ci5oZWlnaHQgPSAzMDA7CiAgICAgYXR0ci53aW5kb3df
dHlwZSA9IEdES19XSU5ET1dfVE9QTEVWRUw7CiAgICAgYXR0ci53Y2xhc3MgPSBHREtfSU5QVVRf
T1VUUFVUOwogICAgIC8vc2VlIGhvdyB3aGVyZSB3ZSBoYW5kbGUgbW90aW9uIGhlcmUgbmVlZCB0
byBkbyB0aGUgaGludCBzdHVmZgotICAgIGF0dHIuZXZlbnRfbWFzayA9ICgoR0RLX0FMTF9FVkVO
VFNfTUFTS15HREtfUE9JTlRFUl9NT1RJT05fSElOVF9NQVNLKSk7IAorICAgIGF0dHIuZXZlbnRf
bWFzayA9ICgoR0RLX0FMTF9FVkVOVFNfTUFTS15HREtfUE9JTlRFUl9NT1RJT05fSElOVF9NQVNL
KSk7CiAgICAgd2luID0gZ2RrX3dpbmRvd19uZXcoTlVMTCwmYXR0ciwwKTsKLSAgICBmcmFtZSA9
IG5ldyBMYXVuY2hlckZyYW1lR2RrKHdpbik7CisgICAgd2luZG93ID0gbmV3IFdpbmRvd0dkayh3
aW4pOworICAgIFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3I7CisgICAgZnJhbWUgPSBu
ZXcgTGF1bmNoZXJGcmFtZUdkayhuZXcgUGFnZSwwLGVkaXRvcix3aW5kb3cpOwogICAgIGdka193
aW5kb3dfc2hvdyh3aW4pOwotICAgIHVybCA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20iOworCisg
ICAgY2hhciAqdXJsID0iY29tcG9uZW50cy9icm93c2VyLnN2ZyI7CiAgICAgYm9vbCBleGl0QWZ0
ZXJMb2FkaW5nID0gZmFsc2U7CisKICAgICBmb3IgKGludCBhcmdQb3MgPSAxOyBhcmdQb3MgPCBh
cmdjOyArK2FyZ1BvcykgewogICAgICAgICBpZiAoMCA9PSBzdHJjbXAoYXJndlthcmdQb3NdLCAi
LWV4aXQtYWZ0ZXItbG9hZGluZyIpKQogICAgICAgICAgICAgZXhpdEFmdGVyTG9hZGluZyA9IHRy
dWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHVybCA9IGFyZ3ZbYXJnUG9zXTsKICAgICB9
Ci0gICAgZnJhbWUtPnNldEV4aXRBZnRlckxvYWRpbmcoZXhpdEFmdGVyTG9hZGluZyk7Ci0gICAg
aWYgKHVybCkgewotICAgICAgICBwcmludGYoIk9QRU5JTkcgVVJMID09ICVzIFxuIiwgdXJsKTsK
LSAgICAgICAgZnJhbWUtPm9wZW5VUkwodXJsKTsKLSAgICB9IGVsc2UgewotI2lmIDAKLSAgICAg
ICAgY2hhciAqcGcgPSAiIDxodG1sPjxoZWFkPjx0aXRsZT5Hb29nbGU8L3RpdGxlPiA8Ym9keSBi
Z2NvbG9yPSNmZmZmZmYgdGV4dD0jMDAwMDAwPiA8cD48Zm9udCBzaXplPS0yLz4yMDA2IEdvb2ds
ZSBIZWxsbyBiaWd3b3JsZCBmcm9tIG1pa2U8L3A+PC9ib2R5PjwvaHRtbD4gIjsKLSAgICAgICAg
ZnJhbWUtPmNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
Pm9wZW4oKTsKLSAgICAgICAgZnJhbWUtPndyaXRlKHBnLHN0cmxlbihwZykpOwotICAgICAgICBm
cmFtZS0+ZG9jdW1lbnQoKS0+Y2xvc2UoKTsKLSNlbmRpZgorCisgICAgU3RyaW5nIHN1cmw9dXJs
OworCisgICAgaWYgKHN0cm5jbXAoImZpbGU6Ly8iLHVybCw3KSAmJiBzdHJuY21wKCJodHRwOi8v
Iix1cmwsNykpIHsKKyAgICAgICAgaWYgKCp1cmwgIT0gJy8nKSB7CisgICAgICAgICAgICBTdHJp
bmcgcHdkID0gZ2V0ZW52KCJQV0QiKTsKKyAgICAgICAgICAgIHN1cmwgPSAiZmlsZTovLyIrcHdk
KyIvIitzdXJsOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN1cmwgPSAiZmlsZTovLyIr
c3VybDsKICAgICB9Ci0gICAgCi0gICAgZ3RrX21haW4oKTsKKworICAgIHByaW50ZigiT1BFTklO
RyBVUkwgPT0gJXMgXG4iLCBzdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgpKTsKKyAgICBm
cmFtZS0+b3BlblVSTChzdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgZ19tYWluX2xvb3Bf
cnVuIChsb29wKTsKICAgICBkZWxldGUgZnJhbWU7CiAgICAgZ2RrX3dpbmRvd19kZXN0cm95KHdp
bik7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9jb21wb25l
bnRzL2Jyb3dzZXIuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2Nv
bXBvbmVudHMvYnJvd3Nlci5zdmcJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9HZGtMYXVu
Y2hlci9jb21wb25lbnRzL2Jyb3dzZXIuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MyBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJ5ZXMiPz4KKzxzdmcgeG1sOnNwYWNl
PSJwcmVzZXJ2ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgCisgeG1sbnMgPSAiaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciCisgeG1sbnM6eGxpbmsgPSAiaHR0cDovL3d3dy53My5vcmcv
MTk5OS94bGluayIKKyB4bWxuczpodG1sID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
CisgaWQ9Im1haW4iCisgb25sb2FkPSJpbml0KGV2dCkiID4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0
L2VjbWFzY3JpcHQiPgorPCFbQ0RBVEFbCisgICAgdmFyIGV2dFRleHQxOworICAgIHZhciBiZ1Jl
Y3Q7CisgICAgdmFyIHR5cGVJbml0aWFsaXplZCA9IGZhbHNlOworICAgIHZhciB0ZXh0ID0gIiI7
CisgICAgdmFyIGJyb3dzZXI7CisgICAgdmFyIHN2Z3Jvb3Q7CisgICAgdmFyIGJhY2tncm91bmQ7
CisgICAgdmFyIGJvcmRlcjsKKyAgICBmdW5jdGlvbiBpbml0KGV2dCkgeworICAgICAgICAvL2dl
dHRpbmcgcmVmZXJlbmNlcyB0byBkeW5hbWljIHRleHQgZWxlbWVudHMKKyAgICAgICAgc3Zncm9v
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIik7CisgICAgICAgIGV2dFRleHQxID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV2dFRleHQxIik7CisgICAgICAgIGJnUmVjdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJiZ1JlY3QiKTsKKyAgICAgICAgYnJvd3NlciA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJicm93c2VyIik7CisgICAgICAgIGJhY2tncm91bmQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYmFja2dyb3VuZCIpOworICAgICAgICBib3JkZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYm9yZGVyIik7CisgICAgICAgIHZhciB1cmwgPSBicm93c2Vy
LmdldEF0dHJpYnV0ZSgic3JjIik7CisgICAgICAgIGlmKCAhdXJsICkgdXJsPSJhYm91dDpibGFu
ayI7CisgICAgICAgIGlmKCAhZXZ0VGV4dDEuZmlyc3RDaGlsZCkKKyAgICAgICAgICAgIGV2dFRl
eHQxLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHVybCkpOyAgICAKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZXZ0VGV4dDEuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPXVybDsg
CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHR5cGVUZXh0LGZh
bHNlKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHR5cGVU
ZXh0LGZhbHNlKTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIscmVz
aXplLGZhbHNlKTsKKyAgICAgICAgcmVzaXplKCk7CisgICAgfQorCitmdW5jdGlvbiByZXNpemUo
ZXZ0KSB7CisgICAgaWYgKCF3aW5kb3cuaW5uZXJXaWR0aCkgeworICAgICAgICB3aWR0aCA9IHBh
cnNlRmxvYXQoc3Zncm9vdC52aWV3cG9ydC53aWR0aCkgLTIwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHdpZHRoID0gd2luZG93LmlubmVyV2lkdGggLTIwOworICAgIH0gICAgICAgICAgICAgICAg
CisgICAgaWYgKCF3aW5kb3cuaW5uZXJIZWlnaHQpIHsKKyAgICAgICAgaGVpZ2h0ID0gcGFyc2VG
bG9hdChzdmdyb290LnZpZXdwb3J0LmhlaWdodCkgLSA3MDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLTcwOworICAgIH0gICAgICAgICAgICAgICAg
IAorCWJhY2tncm91bmQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsd2lkdGgpOworCWJhY2tncm91bmQu
c2V0QXR0cmlidXRlKCJoZWlnaHQiLGhlaWdodCk7CisJYm9yZGVyLnNldEF0dHJpYnV0ZSgid2lk
dGgiLHdpZHRoKzIpOworCWJvcmRlci5zZXRBdHRyaWJ1dGUoImhlaWdodCIsaGVpZ2h0KzIpOwor
CWJyb3dzZXIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsd2lkdGgpOworCWJyb3dzZXIuc2V0QXR0cmli
dXRlKCJoZWlnaHQiLGhlaWdodCk7CisgICAgLy9kZWJ1ZworICAgIC8vZXZ0VGV4dDEuZmlyc3RD
aGlsZC5ub2RlVmFsdWUgPSAidz0iK3dpZHRoKyJoPSIraGVpZ2h0KyIgZm9yPSIrYmFja2dyb3Vu
ZC5nZXRBdHRyaWJ1dGUoImhlaWdodCIpOyAKK30KKy8vdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRo
ZSBrZXlib2FyZCBldmVudHMKK2Z1bmN0aW9uIHR5cGVUZXh0KGV2dCkgeworICAgICAgICAvL2hh
bmRsZSAia2V5cHJlc3MiIGZvciBhbGwgInJlYWwgY2hhcmFjdGVycyIKKworICAgICAgICB2YXIg
Y2hhckNvZGU7CisgICAgICAgIGlmIChldnQuY2hhckNvZGUpIHsKKyAgICAgICAgICAgIGNoYXJD
b2RlID0gZXZ0LmNoYXJDb2RlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBldnQua2V5
Q29kZSApeworICAgICAgICAgICAgY2hhckNvZGUgPSBldnQua2V5Q29kZTsKKyAgICAgICAgfWVs
c2UgeworICAgICAgICAgICAgIGNoYXJDb2RlID0gZXZ0LmtleUlkZW50aWZpZXI7CisgICAgICAg
IH0KKyAgICAgICAgLy9pZighZXZ0VGV4dC5maXJzdENoaWxkKTsgICAgCisgICAgICAgIC8vICAg
IGV2dFRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKTsgICAgCisg
ICAgICAgIC8vfQorICAgICAgICB0ZXh0ID0gZXZ0VGV4dDEuZmlyc3RDaGlsZC5ub2RlVmFsdWU7
CisKKyAgICAgICAgaWYgKGV2dC50eXBlID09ICJrZXlwcmVzcyIgKSB7CisgICAgICAgICAgICAv
L3NvbWUgYnJvd3NlcnMgc3VwcG9ydCBldnQuY2hhckNvZGUsIHNvbWUgb25seSBldnQua2V5Q29k
ZQorCisgICAgICAgICAgICAvL2FsbCByZWFsIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGlmIChj
aGFyQ29kZSA+IDMxICYmIGNoYXJDb2RlICE9IDEyNyAmJiBjaGFyQ29kZSA8IDY1NTM1KSB7Cisg
ICAgICAgICAgICAgICAgdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTsKKyAg
ICAgICAgICAgICAgICBiZ1JlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgInN0cm9rZSIsICJyZ2Io
MCwwLDI1NSkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfWVsc2UgaWYgKGV2dC50eXBlID09
ICJrZXlkb3duIikgeworICAgICAgICAgICAgLy9iYWNrc3BhY2Uga2V5CisgICAgICAgICAgICBp
ZiAoY2hhckNvZGUgPT0gOCkgeworICAgICAgICAgICAgICAgIC8vc2hvcnRlbiB0ZXh0CisgICAg
ICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsdGV4dC5sZW5ndGgtMSk7CisgICAg
ICAgICAgICAgICAgYmdSZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICJzdHJva2UiLCAicmdiKDAs
MCwyNTUpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL2VudGVyIGtleQorICAgICAg
ICAgICAgZWxzZSBpZiAoY2hhckNvZGUgPT0gMTAgfHwgY2hhckNvZGUgPT0gMTMpIHsKKyAgICAg
ICAgICAgICAgICBzdG9wVHlwaW5nKGV2dCk7CisgICAgICAgICAgICAgICAgYmdSZWN0LnNldEF0
dHJpYnV0ZU5TKG51bGwsICJzdHJva2UiLCAicmdiKDAsMCwwKSIpOworICAgICAgICAgICAgICAg
IHRleHQgPSBldnRUZXh0MS5maXJzdENoaWxkLm5vZGVWYWx1ZTsKKyAgICAgICAgICAgICAgICBi
cm93c2VyLnNldEF0dHJpYnV0ZU5TKG51bGwsICJzcmMiLHRleHQpOworICAgICAgICAgICAgICAg
IHdpbmRvdy5mcmFtZXNbImNvbnRlbnQiXS5sb2NhdGlvbiA9IHRleHQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgLy91cGRhdGUgZHluYW1pYyB0ZXh0CisgICAgICAgIGV2dFRl
eHQxLmZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDsgCisgICAgICAgIC8vc3VwcHJlc3MgdW53
YW50ZWQgYnJvd3NlciBzaG9ydGN1dHMuIGUuZy4gaW4gT3BlcmEgb3IgTW96aWxsYQorICAgICAg
ICBldnQucHJldmVudERlZmF1bHQoKTsKK30KKworLy90aGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGV2
ZW50IGxpc3RlbmVycworZnVuY3Rpb24gaW5pdFR5cGluZyhldnQpIHsKKyAgICBpZiAoIXR5cGVJ
bml0aWFsaXplZCkgeworICAgICAgICAvL2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr
IixzdG9wVHlwaW5nLGZhbHNlKTsKKyAgICAgICAgYmdSZWN0LnNldEF0dHJpYnV0ZU5TKG51bGws
ICJzdHJva2UiLCAicmdiKDAsMCwyNTUpIik7CisgICAgICAgIHR5cGVJbml0aWFsaXplZCA9IHRy
dWU7CisgICAgfQorICAgIC8vd2UgZG9uJ3Qgd2FudCB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIGRv
Y3VtZW50IGxldmVsIHRvCisgICAgLy9pbW1lZGlhdGVseSBzdG9wIHRoZSB0eXBpbmcgbW9kZQor
ICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTsKK30KK2Z1bmN0aW9uIHN0b3BUeXBpbmcoZXZ0KSB7
CisgICAgICAgIC8vZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHR5cGVU
ZXh0LGZhbHNlKTsKKyAgICAgICAgLy9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGlj
ayIsc3RvcFR5cGluZyxmYWxzZSk7CisgICAgICAgIC8vYmdSZWN0LnNldEF0dHJpYnV0ZU5TKG51
bGwsICJzdHJva2UiLCAicmdiKDAsMCwwKSIpOworICAgICAgICAvL3R5cGVJbml0aWFsaXplZCA9
IGZhbHNlOworfQorXV0+Cis8L3NjcmlwdD4KKworPHN2ZyB4PSI3NXB4IiB5PSIxMHB4IiB3aWR0
aD0iMzAxcHgiIGhlaWdodD0iMjJweCI+IAorICAgIDxnIGZvbnQtc2l6ZT0iMTJweCIgb25tb3Vz
ZWRvd249ImluaXRUeXBpbmcoZXZ0KSI+CisgICAgICAgIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRo
PSIzMDAiIGhlaWdodD0iMjIiIGZpbGw9IndoaXRlIiAgb25tb3VzZWRvd249ImluaXRUeXBpbmco
ZXZ0KSIgLz4KKyAgICAgICAgPHJlY3QgaWQ9ImJnUmVjdCIgeD0iMiIgeT0iMiIgd2lkdGg9IjI5
NyIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgCisgICAgICAgICAgICAgc3Ryb2tlPSJibGFjayIg
c3Ryb2tlLXdpZHRoPSIyIiAgb25tb3VzZWRvd249ImluaXRUeXBpbmcoZXZ0KSIvPgorICAgICAg
ICA8dGV4dCB4PSI0IiB5PSIxNiIgaWQ9ImV2dFRleHQxIiBzdHJva2U9ImJsYWNrIi8+CisgICAg
PC9nPgorPC9zdmc+CisgIDxyZWN0IGlkPSJib3JkZXIiIHg9IjhweCIgeT0iNThweCIgd2lkdGg9
IjI1NCIgaGVpZ2h0PSIyNTQiIGZpbGw9Im5vbmUiIAorICAgICAgICBzdHJva2U9ImJsYWNrIiBz
dHJva2Utd2lkdGg9IjIiLz4gCisgIDxzd2l0Y2g+CisgICAgPGZvcmVpZ25PYmplY3QgaWQ9ImJh
Y2tncm91bmQiIHg9IjEwcHgiIHk9IjYwcHgiIHdpZHRoPSIyNTAiIGhlaWdodD0iMjUwIj4KKyAg
ICA8IS0taHRtbCAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKyAgICA8
Ym9keSAgYmdjb2xvcj0iIzAwMDBmZiItLT4KKyAgICAgICAgPGlmcmFtZSAgCisgICAgICAgICAg
ICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgCisgICAgICAgICAgICBpZD0i
YnJvd3NlciIgIAorICAgICAgICAgICAgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20iICAKKyAg
ICAgICAgICAgIHdpZHRoPSIyNTAiCisgICAgICAgICAgICBoZWlnaHQ9IjI1MCIKKyAgICAgICAg
ICAgIHNjcm9sbGluZz0ieWVzIiBuYW1lPSJjb250ZW50Ij4KKyAgICAgICAgPC9pZnJhbWU+Cisg
ICAgPCEtLS9ib2R5PgorICAgIDwvaHRtbC0tPgorICAgIDwvZm9yZWlnbk9iamVjdD4KKyAgPC9z
d2l0Y2g+Cis8L3N2Zz4KSW5kZXg6IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2NvbXBvbmVudHMv
U2Nyb2xsYmFyL1Njcm9sbGJhci5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvR2RrTGF1
bmNoZXIvY29tcG9uZW50cy9TY3JvbGxiYXIvU2Nyb2xsYmFyLnN2ZwkocmV2aXNpb24gMCkKKysr
IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2NvbXBvbmVudHMvU2Nyb2xsYmFyL1Njcm9sbGJhci5z
dmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9Imlzby04ODU5LTEiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IURPQ1RZUEUgc3ZnIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgU1ZHIDEuMC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDEvUkVDLVNWRy0yMDAxMDkwNC9EVEQvc3ZnMTAuZHRkIj4KKzxzdmcgaWQ9Im1haW4iIAorICAg
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgCisgICAgeG1sbnM6eGxpbms9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAorICAgIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEw
MCUiIHhtbDpzcGFjZT0icHJlc2VydmUiCisgICAgb25sb2FkPSJpbml0KGV2dCkiPgorPHNjcmlw
dD4gICAgIAorPCFbQ0RBVEFbCit2YXIgYmFja2dyb3VuZDsKK3ZhciBzdmdyb290OwordmFyIGhv
cml6b250YWw7Cit2YXIgd2lkdGggPSAwOwordmFyIGhlaWdodCA9IDA7Cit2YXIgZXZlbnRDb3Vu
dGVyID0gMDsKK3ZhciBrbm9iOworZnVuY3Rpb24gaW5pdChldnQpCit7CisJdmFyIHN2Z2RvYyA9
IGV2dC50YXJnZXQub3duZXJEb2N1bWVudDsKKyAgICBzdmdyb290ID0gc3ZnZG9jLmdldEVsZW1l
bnRCeUlkKCJtYWluIik7CisgICAgYmFja2dyb3VuZCA9IHN2Z2RvYy5nZXRFbGVtZW50QnlJZCgi
YmFja2dyb3VuZCIpOworICAgIGtub2IgPSBzdmdkb2MuZ2V0RWxlbWVudEJ5SWQoImtub2IiKTsK
KyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixyZXNpemUsZmFsc2UpOworICAg
IGlmKCB3aW5kb3cubG9jYXRpb24uc2VhcmNoID09ICI/aG9yaXpvbnRhbCIgKSAKKyAgICAgICAg
aG9yaXpvbnRhbCA9IHRydWU7CisgICAgcmVzaXplKCk7Cit9CisKK2Z1bmN0aW9uIHJlc2l6ZShl
dnQpCit7CisgICAgaWYgKCF3aW5kb3cuaW5uZXJXaWR0aCkgeworICAgICAgICB3aWR0aCA9IHBh
cnNlRmxvYXQoc3Zncm9vdC52aWV3cG9ydC53aWR0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
d2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKKyAgICB9ICAgICAgICAgICAgICAgIAorICAgIGlm
ICghd2luZG93LmlubmVySGVpZ2h0KSB7CisgICAgICAgIGhlaWdodCA9IHBhcnNlRmxvYXQoc3Zn
cm9vdC52aWV3cG9ydC5oZWlnaHQpOworICAgIH1lbHNlIHsKKyAgICAgICAgaGVpZ2h0ID0gd2lu
ZG93LmlubmVySGVpZ2h0OworICAgIH0gICAgICAgICAgICAgICAgIAorCWJhY2tncm91bmQuc2V0
QXR0cmlidXRlKCJ3aWR0aCIsd2lkdGgtMSk7CisJYmFja2dyb3VuZC5zZXRBdHRyaWJ1dGUoImhl
aWdodCIsaGVpZ2h0LTEpOworICAgIGlmKGhvcml6b250YWwpIHsKKwkgICAga25vYi5zZXRBdHRy
aWJ1dGUoIndpZHRoIiw1MCk7CisJICAgIGtub2Iuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGhlaWdo
dC01KTsKKwkgICAga25vYi5zZXRBdHRyaWJ1dGUoInkiLDIpOworICAgIH1lbHNlIHsKKwkgICBr
bm9iLnNldEF0dHJpYnV0ZSgid2lkdGgiLHdpZHRoLTUpOworICAgIH0KKyAgICBiYWNrZ3JvdW5k
LnNldEF0dHJpYnV0ZSgiZmlsbCIsInllbGxvdyIpOworfQorZnVuY3Rpb24ga25vYkV2ZW50KGV2
dCkKK3sKKwkgICAga25vYi5zZXRBdHRyaWJ1dGUoImZpbGwiLCJncmVlbiIpOworfQorXV0+Cis8
L3NjcmlwdD4KKzxnPiAKKyAgICA8cmVjdCBpZD0iYmFja2dyb3VuZCIgc3Ryb2tlPSJibGFjayIg
c3Ryb2tlLXdpZHRoPSIyLjAiCisgICAgICAgIGZpbGw9IndoaXRlIiB4PSIwIiB5PSIxIiB3aWR0
aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPgorICAgIDxnIG9ubW91c2Vkb3duPSJrbm9iRXZlbnQoZXZ0
KSIgCisgICAgICAgb25tb3VzZXVwPSJrbm9iRXZlbnQoZXZ0KSIKKyAgICAgICBvbm1vdXNlb3V0
PSJrbm9iRXZlbnQoZXZ0KSI+CisgICAgICAgIDxyZWN0IGlkPSJrbm9iIiBzdHJva2U9ImJsdWUi
IHN0cm9rZS13aWR0aD0iMS4wIgorICAgICAgICAgICAgZmlsbD0id2hpdGUiIHg9IjIiIHk9IjEw
IiB3aWR0aD0iMTQiIGhlaWdodD0iNTAiLz4KKyAgICA8L2c+ICAgICAgICAgCis8L2c+ICAgIAor
PC9zdmc+CkluZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9jb21wb25lbnRzL2Jyb3dzZXIu
Y3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2NvbXBvbmVudHMvYnJv
d3Nlci5jc3MJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9jb21wb25l
bnRzL2Jyb3dzZXIuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACisKK0BuYW1lc3Bh
Y2UgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOworCisvKmh0bWwgeyBtaW4taGVpZ2h0
OiAxMDAlOyBtYXJnaW4tYm90dG9tOiAxcHg7IH0qLworCitodG1sIHsKKyAgICAgb3ZlcmZsb3c6
YXV0bzsKK30KKworaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGJ1dHRvbiwgaXNpbmRleCB7Cisg
ICAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworaW5wdXQsdGV4dGFyZWEgeworICAgIHBhZGRp
bmc6IDFweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXItc3R5bGU6
IG91dHNldDsKKyAgICBib3JkZXItd2lkdGg6IDFweDsKKyAgICBib3JkZXItY29sb3I6IGdyYXk7
Cit9CisKK2lucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InBhc3N3b3JkIl0saW5wdXRb
dHlwZT0ic3VibWl0Il0sYnV0dG9uOmFjdGl2ZTpkaXNhYmxlZCB7CisgICAgYm9yZGVyLXN0eWxl
OiBvdXRzZXQKKyAgICBwYWRkaW5nOiAycHggNnB4IDNweCA2cHg7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogQnV0dG9uRmFjZTsKKyAgICBib3JkZXItY29sb3I6IGdyYXk7CisgICAgYm9yZGVyLXdp
ZHRoOiAycHg7Cit9CisKKwpJbmRleDogV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvc2ltcGxlLnN2
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9zaW1wbGUuc3ZnCShyZXZp
c2lvbiAxNzM5OSkKKysrIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL3NpbXBsZS5zdmcJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25l
PSJubyI/PgotPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAyMDAxMDkwNC8v
RU4iCi0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtU1ZHLTIwMDEwOTA0L0RURC9zdmcx
MC5kdGQiPgotPHN2ZyB3aWR0aD0iNWNtIiBoZWlnaHQ9IjRjbSIKLXhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyI+Ci08ZGVzYz5Gb3VyIHNlcGFyYXRlIHJlY3RhbmdsZXMKLTwvZGVz
Yz4KLTxyZWN0IHg9IjAuNWNtIiB5PSIwLjVjbSIgd2lkdGg9IjJjbSIgaGVpZ2h0PSIxY20iLz4K
LTxyZWN0IHg9IjAuNWNtIiB5PSIyY20iIHdpZHRoPSIxY20iIGhlaWdodD0iMS41Y20iLz4KLTxy
ZWN0IHg9IjNjbSIgeT0iMC41Y20iIHdpZHRoPSIxLjVjbSIgaGVpZ2h0PSIyY20iLz4KLTxyZWN0
IHg9IjMuNWNtIiB5PSIzY20iIHdpZHRoPSIxY20iIGhlaWdodD0iMC41Y20iLz4KLTwhLS0gU2hv
dyBvdXRsaW5lIG9mIGNhbnZhcyB1c2luZyAncmVjdCcgZWxlbWVudCAtLT4KLTxyZWN0IHg9Ii4w
MWNtIiB5PSIuMDFjbSIgd2lkdGg9IjQuOThjbSIgaGVpZ2h0PSIzLjk4Y20iCi1maWxsPSJub25l
IiBzdHJva2U9ImJsdWUiIHN0cm9rZS13aWR0aD0iLjAyY20iIC8+Ci08L3N2Zz4KSW5kZXg6IFdl
YktpdFRvb2xzL0dka0xhdW5jaGVyL0VOVgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9HZGtM
YXVuY2hlci9FTlYJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIv
RU5WCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogZXhwb3J0IERGQkFSR1M9c3lzdGVt
PXNkbCxtb2RlPTgwMHg2MDAKIGV4cG9ydCBERkJBUkdTPXN5c3RlbT14MTEsbW9kZT04MDB4NjAw
Ci1leHBvcnQgTERfTElCUkFSWV9QQVRIPSRMRF9MSUJSQVJZX1BBVEg6Li4vLi4vV2ViQ29yZS9Q
cm9qZWN0cy9nZGs6L3Vzci9sb2NhbC9saWIKK2V4cG9ydCBMRF9MSUJSQVJZX1BBVEg9JExEX0xJ
QlJBUllfUEFUSDpgcmVhbHBhdGggLXMgLi4vLi4vV2ViQ29yZS9Qcm9qZWN0cy9nZGtgOmByZWFs
cGF0aCAtcyAuLi8uLi9KYXZhU2NyaXB0Q29yZWA6L3Vzci9sb2NhbC9saWIKIApJbmRleDogV2Vi
S2l0VG9vbHMvR2RrTGF1bmNoZXIvZ2RrbGF1bmNoZXIuYmtsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0dka0xhdW5jaGVyL2dka2xhdW5jaGVyLmJrbAkocmV2aXNpb24gMTczOTkpCisrKyBX
ZWJLaXRUb29scy9HZGtMYXVuY2hlci9nZGtsYXVuY2hlci5ia2wJKHdvcmtpbmcgY29weSkKQEAg
LTgsNyArOCw3IEBACiA8bWFrZWZpbGU+CiAJPGluY2x1ZGUgZmlsZT0iLi4vLi4vQmFrZWZpbGVz
L3ByZXNldHMuYmtsIi8+CiAKLSAgIDx0ZW1wbGF0ZSBpZD0id2ViY29yZV9nZGtfbGluayIgdGVt
cGxhdGU9Imd0ayxmcmVldHlwZSI+CisgICA8dGVtcGxhdGUgaWQ9IndlYmNvcmVfZ2RrX2xpbmsi
IHRlbXBsYXRlPSJnZGssZnJlZXR5cGUiPgogICAgCQkKICAgICAgICAgPGRlZmluZT5BUFBMRV9D
SEFOR0VTPTE8L2RlZmluZT4KICAgICAgICAgPCEtLSB0aGlzIEdDIHZlcnNpb24gcmVxdWlyZXMg
TWFjaCdzIHRocmVhZCBzdXNwZW5kL3Jlc3VtZTogLS0+CkBAIC00OSw2ICs0OSw4IEBACiAgICAg
ICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL2xvYWRlcjwvaW5jbHVkZT4KICAgICAgICAg
PGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGFnZTwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1
ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxhdGZvcm08L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRl
PiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcms8L2luY2x1ZGU+CisgICAgICAgIDxp
bmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrPC9pbmNsdWRlPgog
ICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
czwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnPC9pbmNsdWRlPgpAQCAtNzEsNyAr
NzMsMTEgQEAKIAogCTxzZXQgdmFyPSJUT1BESVIiPi4uLy4uPC9zZXQ+CiAgICAgPGV4ZSBpZD0i
Z2RrbGF1bmNoZXIiIHRlbXBsYXRlPSJ3ZWJjb3JlX2dka19saW5rIj4gICAgICAgIAotCQk8bGRm
bGFncz4tTCQoVE9QRElSKS9XZWJDb3JlL1Byb2plY3RzL2dkayAtbHdlYmNvcmUtZ2RrPC9sZGZs
YWdzPgorCQk8bGRmbGFncz4tTCQoVE9QRElSKS9XZWJDb3JlL1Byb2plY3RzL2dkayAgLWx3ZWJj
b3JlLWdkazwvbGRmbGFncz4KKwkJPGxkZmxhZ3M+LUwkKFRPUERJUikvV2ViQ29yZS9Qcm9qZWN0
cy9nZGsgLWx3ZWJjb3JlLXN2ZzwvbGRmbGFncz4KKyAgICAgICAgPGxkZmxhZ3M+YHBrZy1jb25m
aWcgLS1saWJzIGd0aHJlYWQtMi4wYDwvbGRmbGFncz4KKyAgICAgICAgPGN4eGZsYWdzPmBwa2ct
Y29uZmlnIC0tY2ZsYWdzIGd0aHJlYWQtMi4wYDwvY3h4ZmxhZ3M+CisKICAgICAgICAgPHdhcm5p
bmdzPmRlZmF1bHQ8L3dhcm5pbmdzPgogICAgICAgICA8Y3h4LXJ0dGk+b2ZmPC9jeHgtcnR0aT4K
ICAgICAgICAgPGN4eC1leGNlcHRpb25zPm9mZjwvY3h4LWV4Y2VwdGlvbnM+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11269</attachid>
            <date>2006-10-28 13:35:44 -0700</date>
            <delta_ts>2006-11-07 00:40:45 -0800</delta_ts>
            <desc>Roll up patch with missing cairo files added</desc>
            <filename>svg.patch</filename>
            <type>text/plain</type>
            <size>385717</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2
ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiZGF0ZV9vYmplY3QuaCIK
ICNpbmNsdWRlICJkYXRlX29iamVjdC5sdXQuaCIKKyNpbmNsdWRlICJEYXRlTWF0aC5oIgogCiAj
aWYgSEFWRShFUlJOT19IKQogI2luY2x1ZGUgPGVycm5vLmg+CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDE3Mzk5KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTMg
KzQzLDEzIEBACiAJCWtqcy90ZXN0a2pzLmNwcAogCQlranMvdXN0cmluZy5jcHAKIAkJa2pzL3Zh
bHVlLmNwcAotCiAJPC9zZXQ+CiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0iSlNDT1JFX1NPVVJDRVNf
V1RGIj4KIAkJCiAJCXd0Zi9Bc3NlcnRpb25zLmNwcAogCQl3dGYvRmFzdE1hbGxvYy5jcHAKIAkJ
d3RmL0hhc2hUYWJsZS5jcHAKKwkJd3RmL1RDU3lzdGVtQWxsb2MuY3BwCiAKIAk8L3NldD4KIAk8
c2V0IGFwcGVuZD0iMSIgdmFyPSJKU0NPUkVfU09VUkNFU19QQ1JFIj4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2pzY29yZS5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvanNjb3JlLmJr
bAkocmV2aXNpb24gMTczOTkpCisrKyBKYXZhU2NyaXB0Q29yZS9qc2NvcmUuYmtsCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw5ICs1NCwxMiBAQAogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvYmlu
ZGluZ3M8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9iaW5kaW5ncy9jPC9p
bmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvYmluZGluZ3Mvam5pPC9pbmNsdWRl
PgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvd3RmPC9pbmNsdWRlPgogICAgICAgICA8aW5j
bHVkZT4kKFNSQ0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmU8L2luY2x1ZGU+CiAK
ICAgICAgICAgPGRlZmluZT5BUFBMRV9DSEFOR0VTPTE8L2RlZmluZT4KKyAgICAgICAgPCEtLWRl
ZmluZT5OREVCVUc9MTwvZGVmaW5lLS0+CisgICAgICAgIDxkZWZpbmU+V1RGX0NIQU5HRVM9MTwv
ZGVmaW5lPgogCiAgICAgICAgIDwhLS0gdGhpcyBHQyB2ZXJzaW9uIHJlcXVpcmVzIE1hY2gncyB0
aHJlYWQgc3VzcGVuZC9yZXN1bWU6IC0tPgogICAgICAgICA8aWYgY29uZD0iUExBVEZPUk1fTUFD
T1NYPT0nMSciPgpJbmRleDogQmFrZWZpbGVzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBCYWtl
ZmlsZXMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM5OSkKKysrIEJha2VmaWxlcy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMSBAQAorMjAwNi0xMC0xNyAgTWljaGFlbCBFbW1l
bCAgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PTkUuCisK
KyAgICAgICAgQWRkZWQgZ2RrIG9ubHkgYnVpbGQgIHByZXNldCAKKworICAgICAgICAqIHByZXNl
dHMuYmtsOgorCiAyMDA2LTEwLTA5ICBLcnp5c3p0b2YgS293YWxjenlrICA8a2tvd2FsY3p5a0Bn
bWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYuCkluZGV4OiBCYWtlZmlsZXMv
UmVhZG1lLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBCYWtlZmlsZXMvUmVhZG1lLnR4dAkocmV2aXNpb24g
MTczOTkpCisrKyBCYWtlZmlsZXMvUmVhZG1lLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsOSBAQAogCiBSZWdlbmVyYXRpbmcgdGhlIHNvdXJjZSBmaWxlIGxpc3RzIAogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGVydCEKK1RoaXMgaXMgbm8gbG9uZ2VyIHRy
dWUgdGhleSBhcmUgbm93IG1hbnVhbGx5IHN5bmNoZWQuCisKIEN1cnJlbnRseSwgV2ViQ29yZVNv
dXJjZXMuYmtsIGFuZCBKYXZhU2NyaXB0Q29yZS5ia2wgZmlsZXMgYXJlCiBhdXRvZ2VuZXJhdGVk
IGJ5IHJlYWRpbmcgdGhlIC52Y3Byb2ogZmlsZXMgYW5kIGV4dHJhY3RpbmcgdGhlIGZpbGUgbGlz
dHMKIGZyb20gdGhlbSwgdXNpbmcgdXBkYXRlLWZpbGUtbGlzdHMucHkuIFdoZW5ldmVyIGZpbGVz
IGFyZSBhZGRlZC9yZW1vdmVkLApAQCAtOTcsMyArMTAwLDE4IEBACiAKIGh0dHA6Ly9iYWtlZmls
ZS5zb3VyY2Vmb3JnZS5uZXQvZG9jL2h0bWwvcm4wMXJlMDEuaHRtbAogCitHZGsgYnVpbGQgaW5z
dHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uY2UgdGhlIGJha2VmaWxlcyBh
cmUgZ2VuZXJhdGVkIHBlciB0aGUgYWJvdmUgaW5zdHJ1Y3Rpb25zLgorY2QgV2ViQ29yZS9Qcm9q
ZWN0cy9nZGsKK21ha2UKKworY2QgV2Via2l0VG9vbHMvR2RrbGF1bmNoZXIKK2Jha2VmaWxlX2dl
bgorbWFrZQorLiAuL0VOVgorLi9nZGtsYXVuY2hlcgorCitnZGtsYXVuY2hlciBjYW4gdGFrZSBh
IHVybCBhcyBhbiBhcmd1bWVudAorCkluZGV4OiBCYWtlZmlsZXMvcHJlc2V0cy5ia2wKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQmFrZWZpbGVzL3ByZXNldHMuYmtsCShyZXZpc2lvbiAxNzM5OSkKKysrIEJha2Vm
aWxlcy9wcmVzZXRzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogICAgICAg
ICA8L2lmPgogICAgIDwvdGVtcGxhdGU+CiAKLQogICAgIDxvcHRpb24gbmFtZT0iU1FMSVRFM19M
SUJTIj4KICAgICAgICAgPGRlZmF1bHQtdmFsdWU+JChvcy5wb3BlbigicGtnLWNvbmZpZyAtLWxp
YnMgc3FsaXRlMyIpLnJlYWQoKSk8L2RlZmF1bHQtdmFsdWU+CiAgICAgPC9vcHRpb24+CkBAIC0x
MjcsNiArMTI2LDE0IEBACiAgICAgICAgIDwhLS0gICAgVE9ETzogbm9uLUN5Z3dpbiBXaW5kb3dz
IHN1cHBvcnQgZm9yIHRoaXM/IDopIC0tPiAKICAgICA8L3RlbXBsYXRlPgogCisgICAgPHRlbXBs
YXRlIGlkPSJnZGsiPgorICAgICAgICA8aWYgY29uZD0iRk9STUFUPT0nZ251JyI+CisgICAgCSAg
IDxsZGZsYWdzPmBwa2ctY29uZmlnIC0tbGlicyBnZGstMi4wYDwvbGRmbGFncz4KKyAgICAJICAg
PGN4eGZsYWdzPmBwa2ctY29uZmlnIC0tY2ZsYWdzIGdkay0yLjBgPC9jeHhmbGFncz4KKyAgICAg
ICAgPC9pZj4KKyAgICAgICAgCisgICAgICAgIDwhLS0gICAgVE9ETzogbm9uLUN5Z3dpbiBXaW5k
b3dzIHN1cHBvcnQgZm9yIHRoaXM/IDopIC0tPiAKKyAgICA8L3RlbXBsYXRlPgogCiAgICAgPG9w
dGlvbiBuYW1lPSJYTUwyX0xJQlMiPgogICAgICAgICA8ZGVmYXVsdC12YWx1ZT4kKG9zLnBvcGVu
KCJ4bWwyLWNvbmZpZyAtLWxpYnMiKS5yZWFkKCkpPC9kZWZhdWx0LXZhbHVlPgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJQZW4uaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAi
VUNoYXIuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIApAQCAtNTYsNyArNTcsNiBA
QAogICAgIGNvbnN0IGludCBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybldpZHRoID0gNDsKICAgICBj
b25zdCBpbnQgY01pc3NwZWxsaW5nTGluZVBhdHRlcm5HYXBXaWR0aCA9IDE7CiAKLSAgICBjbGFz
cyBBZmZpbmVUcmFuc2Zvcm07CiAgICAgY2xhc3MgRm9udDsKICAgICBjbGFzcyBHcmFwaGljc0Nv
bnRleHRQcml2YXRlOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsK
QEAgLTcwLDYgKzcwLDExIEBACiAjZW5kaWYKIAogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dCA6
IE5vbmNvcHlhYmxlIHsKKyNpZiBQTEFURk9STShDQUlSTykKKworICAgICAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CisKKyNlbmRpZgogICAgIHB1YmxpYzoKICAgICAgICAg
R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgICAgIH5HcmFw
aGljc0NvbnRleHQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxv
YWRlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlTG9hZGVySW50ZXJuYWwuaAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw5IEBACiAjZW5kaWYKIAogI2lmIFVTRShDVVJMKQotdHlwZWRlZiB2b2lkIENVUkw7
CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPENTdHJpbmcuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC04OCw2ICs5MCwx
MSBAQAogI2VuZGlmCiAjaWYgVVNFKENVUkwpCiAgICAgICAgICAgICAsIG1faGFuZGxlKDApCisg
ICAgICAgICAgICAsIG1fdXJsKDApCisgICAgICAgICAgICAsIG1fdXNlU2ltcGxlKGZhbHNlKQor
ICAgICAgICAgICAgLCBtX2N1c3RvbUhlYWRlcigwKQorICAgICAgICAgICAgLCBtX2N1c3RvbVBv
c3RIZWFkZXIoMCkKKyAgICAgICAgICAgICwgbV9maWxlUG9zdCgwKQogI2VuZGlmCiAgICAgICAg
IHsKICAgICAgICAgfQpAQCAtMTMxLDYgKzEzOCwyMiBAQAogI2VuZGlmCiAjaWYgVVNFKENVUkwp
CiAgICAgICAgIENVUkwgKm1faGFuZGxlOworICAgICAgICBjaGFyICptX3VybDsKKyAgICAgICAg
LyoKKyAgICAgICAgICogZXhlY3V0ZSB0aGUgZnVsbCByZXF1ZXN0IG9uIGNhbGxiYWNrCisgICAg
ICAgICAqIGRvbid0IG11bHRpcGxleAorICAgICAgICAqLworICAgICAgICBib29sIG1fdXNlU2lt
cGxlOworICAgICAgICAvKioKKyAgICAgICAgICogU3RvcmVzIGVudGlyZSByZXNwb25zZSBpZiBq
b2IgaXMgbV91c2VTaW1wbGUKKyAgICAgICAgICovCisgICAgICAgIFZlY3RvcjxjaGFyPiByZXN1
bHREYXRhOworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogbV9jdXN0b21IZWFkZXI7CisgICAg
ICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBtX2N1c3RvbVBvc3RIZWFkZXI7CisgICAgICAgIHN0cnVj
dCBjdXJsX2h0dHBwb3N0ICptX2ZpbGVQb3N0OworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9wb3N0
Qnl0ZXM7CisgICAgICAgIFZlY3RvcjxDU3RyaW5nPiBtX2NzdHJpbmdzOworICAgICAgICBQbGF0
Zm9ybVJlc3BvbnNlICBtX3Jlc3BvbnNlOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAg
ICAgIFFTdHJpbmcgbV9jaGFyc2V0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDYgKzQ3LDExIEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2VuZGlmCiAKKyNpZiBV
U0UoQ1VSTCkKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAiU2hhcmVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTY2LDYgKzcxLDE2IEBACiAKICAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtRGF0YTsK
ICAgICB0eXBlZGVmIFJlZlB0cjxQbGF0Zm9ybVJlc3BvbnNlUXQ+IFBsYXRmb3JtUmVzcG9uc2U7
CisjZWxpZiBVU0UoQ1VSTCkKKyAgICAgY2xhc3MgUGxhdGZvcm1SZXNwb25zZUN1cmwgOiBwdWJs
aWMgU2hhcmVkPFBsYXRmb3JtUmVzcG9uc2VDdXJsPiAgeworICAgICBwdWJsaWM6CisgICAgICAg
IFN0cmluZyB1cmw7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZTsKKyAgICAgICAgU3RyaW5nIGNo
YXJzZXQ7CisgICAgICAgIFN0cmluZyBkYXRhOworICAgICB9OworICAgICB0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtRGF0YTsKKyAgICAgdHlwZWRlZiBSZWZQdHI8UGxhdGZvcm1SZXNwb25zZUN1cmw+
IFBsYXRmb3JtUmVzcG9uc2U7CiAjZWxzZQogICAgIC8vIE5vdCBzdXJlIHdoYXQgdGhlIHN0cmF0
ZWd5IGZvciB0aGlzIHdpbGwgYmUgb24gb3RoZXIgcGxhdGZvcm1zLgogICAgIHR5cGVkZWYgc3Ry
dWN0IFBsYXRmb3JtRGF0YVN0cnVjdCogUGxhdGZvcm1EYXRhOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUxvYWRlck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5oCShyZXZp
c2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VMb2Fk
ZXJNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20g
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIy
LDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBSZXNvdXJjZUxvYWRlck1hbmFn
ZXJfSF8KQEAgLTMxLDI2ICszMSwzMCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBSZXNvdXJjZUxvYWRlck1hbmFnZXIgeworCitjbGFzcyBSZXNvdXJjZUxvYWRl
ck1hbmFnZXIKK3sKIHB1YmxpYzoKKyAgICBzdGF0aWMgY2hhciogZ2V0TWltZVR5cGUoU3RyaW5n
Jik7CiAgICAgc3RhdGljIFJlc291cmNlTG9hZGVyTWFuYWdlciogZ2V0KCk7CisgICAgdm9pZCBp
bml0Sm9iKFJlc291cmNlTG9hZGVyKik7CisgICAgVmVjdG9yPGNoYXI+IHJ1bkltbWVkaWF0ZWx5
KFJlc291cmNlTG9hZGVyKik7CiAgICAgdm9pZCBhZGQoUmVzb3VyY2VMb2FkZXIqKTsKICAgICB2
b2lkIGNhbmNlbChSZXNvdXJjZUxvYWRlciopOwogCi0gICAgLy8gSWYgdHJ1ZSwgZG9uJ3QgbXVs
dGlwbGV4IGRvd25sb2FkczogZG93bmxvYWQgY29tcGxldGVseSBvbmUgYXQgYSB0aW1lLgotICAg
IHZvaWQgdXNlU2ltcGxlVHJhbnNmZXIoYm9vbCB1c2VTaW1wbGUpOwotCiBwcml2YXRlOgogICAg
IFJlc291cmNlTG9hZGVyTWFuYWdlcigpOwogICAgIHZvaWQgZG93bmxvYWRUaW1lckNhbGxiYWNr
KFRpbWVyPFJlc291cmNlTG9hZGVyTWFuYWdlcj4qKTsKICAgICB2b2lkIHJlbW92ZShSZXNvdXJj
ZUxvYWRlciopOwotCi0gICAgYm9vbCBtX3VzZVNpbXBsZTsKLSAgICBIYXNoU2V0PFJlc291cmNl
TG9hZGVyKj4qIGpvYnM7CisgICAgdm9pZCBzZXR1cFBvc3QoUmVzb3VyY2VMb2FkZXIqKTsKKyAg
ICB2b2lkIHNldHVwUHV0KFJlc291cmNlTG9hZGVyKik7CisgICAgSGFzaFNldDxSZXNvdXJjZUxv
YWRlcio+IGpvYnM7CisgICAgSGFzaFNldDxSZXNvdXJjZUxvYWRlcio+IHNpbXBsZUpvYnM7CiAg
ICAgVGltZXI8UmVzb3VyY2VMb2FkZXJNYW5hZ2VyPiBtX2Rvd25sb2FkVGltZXI7CiAgICAgQ1VS
TE0qIGN1cmxNdWx0aUhhbmRsZTsgLy8gbm90IGZyZWVkCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9nZGsvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyQ3VybC5jcHAJKHJldmlzaW9u
IDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUxvYWRlckN1
cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
Miw3ICsyMiw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
QEAgLTMxLDIxICszMSw0OCBAQAogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIlJl
c291cmNlTG9hZGVySW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck1hbmFnZXIu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAKKworI2RlZmlu
ZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1F
TlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9f
KTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlc291cmNlTG9hZGVySW50
ZXJuYWw6On5SZXNvdXJjZUxvYWRlckludGVybmFsKCkKIHsKKyAgICBpZiAobV9oYW5kbGUpCisg
ICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKG1faGFuZGxlKTsKKyAgICBpZiAobV91cmwpCisgICAg
ICAgIGZyZWUobV91cmwpOworCisgICAgaWYgKG1fY3VzdG9tSGVhZGVyKQorICAgICAgICBjdXJs
X3NsaXN0X2ZyZWVfYWxsKG1fY3VzdG9tSGVhZGVyKTsKKworICAgIGlmIChtX2N1c3RvbVBvc3RI
ZWFkZXIpCisgICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9jdXN0b21Qb3N0SGVhZGVyKTsK
KworICAgIGlmIChtX2ZpbGVQb3N0KQorICAgICAgICBjdXJsX2Zvcm1mcmVlKG1fZmlsZVBvc3Qp
OworICAgIC8vZG9uJ3QgZGVsZXRlIHdlIHBhc3MgdGhpcyBvZmYgaW4gdGhlIGVuZAorICAgIGlm
IChtX3Jlc3BvbnNlKQorICAgICAgICBtX3Jlc3BvbnNlID0gMDsKIH0KIAogUmVzb3VyY2VMb2Fk
ZXI6On5SZXNvdXJjZUxvYWRlcigpCiB7Ci0gICAgY2FuY2VsKCk7CisgICAgZGVsZXRlIGQ7CiB9
CiAKIGJvb2wgUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KERvY0xvYWRlciogZG9jTG9hZGVyKQogewog
ICAgIHJlZigpOworICAgIGdldEludGVybmFsKCktPm1fbG9hZGluZyA9IHRydWU7CisgICAgZC0+
YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzID1mYWxzZTsKKyAgICBkLT5tX3Jlc3BvbnNlID0gbmV3
IFBsYXRmb3JtUmVzcG9uc2VDdXJsKCk7CisgICAgZC0+bV9yZXNwb25zZS0+dXJsPVN0cmluZyh1
cmwoKS51cmwoKSk7CiAgICAgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpnZXQoKS0+YWRkKHRoaXMp
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTUsNCArODIsMzYgQEAKICAgICBSZXNvdXJjZUxv
YWRlck1hbmFnZXI6OmdldCgpLT5jYW5jZWwodGhpcyk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OnJlY2VpdmVkUmVzcG9uc2UoUGxhdGZvcm1SZXNwb25zZSByZXNwb25zZSkKK3sKKyAgICBp
bnQgaW5kZXggPSByZXNwb25zZS0+ZGF0YS5maW5kKCc6Jyk7CisgICAgU3RyaW5nIG5hbWUgPSBy
ZXNwb25zZS0+ZGF0YS5zdWJzdHJpbmcoMCxpbmRleCsxKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICBTdHJpbmcgdmFsdWUgPSByZXNwb25zZS0+ZGF0YS5zdWJzdHJpbmcoaW5kZXgrMSkuc3RyaXBX
aGl0ZVNwYWNlKCk7CisKKyAgICBpZiAobmFtZSA9PSAiQ29udGVudC1UeXBlOiIpIHsKKyAgICAg
ICAgcmVzcG9uc2UtPm1pbWVUeXBlID0gdmFsdWU7CisgICAgICAgIFN0cmluZyBjaGFyc2V0Owor
ICAgICAgICAvL3RoZSBtaW1lIHN0cmluZyBjYW4gaGF2ZSB0eXBlOyBjaGFyc2V0CisgICAgICAg
IGluZGV4ID0gdmFsdWUuZmluZCgiOyIpOworICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKKyAg
ICAgICAgICAgIHJlc3BvbnNlLT5taW1lVHlwZSA9IHZhbHVlLmxlZnQoaW5kZXgpOworICAgICAg
ICAgICAgcmVzcG9uc2UtPmNoYXJzZXQgPSB2YWx1ZS5yaWdodChpbmRleCsxKTsKKyAgICAgICAg
ICAgIGQtPm1fcmVzcG9uc2VFbmNvZGluZyA9IGNoYXJzZXQ7CisgICAgICAgICAgICBkLT5tX3Jl
dHJpZXZlZFJlc3BvbnNlRW5jb2RpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGQt
PnJlc3BvbnNlSGVhZGVycyArPSByZXNwb25zZS0+ZGF0YS5kZXByZWNhdGVkU3RyaW5nKCk7Cisg
ICAgcmVzcG9uc2UtPmRhdGEgPSBTdHJpbmcoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6
YXNzZW1ibGVSZXNwb25zZUhlYWRlcnMoKSBjb25zdAoreworfQorCit2b2lkIFJlc291cmNlTG9h
ZGVyOjpyZXRyaWV2ZVJlc3BvbnNlRW5jb2RpbmcoKSBjb25zdAoreworICAgIGQtPm1fcmV0cmll
dmVkUmVzcG9uc2VFbmNvZGluZyA9IHRydWU7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9Mb2FkZXJGdW5jdGlvbnNDdXJs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL0xvYWRlckZ1
bmN0aW9uc0N1cmwuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2dkay9Mb2FkZXJGdW5jdGlvbnNDdXJsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIkNhY2hl
LmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPGNoYXI+IFNlcnZlU3luY2hyb25v
dXNSZXF1ZXN0KExvYWRlciosIERvY0xvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgS1VSTCYgZmluYWxVUkwsIERlcHJlY2F0ZWRTdHJpbmcmIGhlYWRlcnMpCit7CisjaWYg
MAorICAgIFJlc291cmNlTG9hZGVyTWFuYWdlciogbWdyID0gUmVzb3VyY2VMb2FkZXJNYW5hZ2Vy
OjpnZXQoKTsKKyAgICBSZXNvdXJlY2VMb2FkZXIgam9iID0gUmVzb3VyY2VMb2FkZXI6OmNyZWF0
ZShyZXF1ZXN0LDAsZG9jTG9hZGVyKTsKKyAgICBtZ3ItPmluaXRKb2IocmVxdWVzdC5qb2IpOwor
ICAgIFZlY3RvcjxjaGFyPiByZXN1bHRCdWZmZXIgPSBtZ3ItPnJ1bkltbWVkaWF0ZWx5KHJlcXVl
c3Quam9iKCkpOworICAgIHJldHVybiByZXN1bHRCdWZmZXI7CisjZW5kaWYKK30KKworaW50IE51
bWJlck9mUGVuZGluZ09yTG9hZGluZ1JlcXVlc3RzKERvY0xvYWRlciogZG9jTG9hZGVyKQorewor
ICAgIHJldHVybiBjYWNoZSgpLT5sb2FkZXIoKS0+bnVtUmVxdWVzdHMoZG9jTG9hZGVyKTsKK30K
KworYm9vbCBDaGVja0lmUmVsb2FkaW5nKFdlYkNvcmU6OkRvY0xvYWRlciogZG9jTG9hZGVyKQor
eworICAgIC8vIEZJWE1FOiBOZWVkcyBhIHJlYWwgaW1wbGVtZW50YXRpb24hCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiBkb2NM
b2FkZXIsIENhY2hlZFJlc291cmNlKiBjYWNoZWRPYmplY3QpCit7CisgICAgLy8gUmV0dXJuIGZy
b20gdGhlIGZ1bmN0aW9uIGZvciBvYmplY3RzIHRoYXQgd2UgZGlkbid0IGxvYWQgZnJvbSB0aGUg
Y2FjaGUuCisgICAgaWYgKCFjYWNoZWRPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIHN3
aXRjaCAoY2FjaGVkT2JqZWN0LT5zdGF0dXMoKSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkNhY2hlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Tm90Q2Fj
aGVkOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlVua25vd246CisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TmV3OgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlBlbmRpbmc6CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoY2FjaGVkT2JqZWN0LT5yZXNwb25zZSgpKTsK
KworICAgIC8vIEZJWE1FOiBOb3RpZnkgdGhlIGNhbGxlciB0aGF0IHdlICJsb2FkZWQiLgorfQor
Citib29sIElzUmVzcG9uc2VVUkxFcXVhbFRvVVJMKFBsYXRmb3JtUmVzcG9uc2UgcmVzcG9uc2Us
IGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmICghcmVzcG9uc2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiByZXNwb25zZS0+dXJsID09IHVybDsKK30KKworRGVwcmVj
YXRlZFN0cmluZyBSZXNwb25zZVVSTChQbGF0Zm9ybVJlc3BvbnNlIHJlc3BvbnNlKQoreworICAg
IGlmICghcmVzcG9uc2UpCisgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisKKyAg
ICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyhyZXNwb25zZS0+dXJsLmRlcHJlY2F0ZWRTdHJpbmco
KSk7Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgUmVzcG9uc2VNSU1FVHlwZShQbGF0Zm9ybVJlc3Bv
bnNlIHJlc3BvbnNlKQoreworICAgIGlmICghcmVzcG9uc2UpCisgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyhy
ZXNwb25zZS0+bWltZVR5cGUuZGVwcmVjYXRlZFN0cmluZygpKTsKK30KKworYm9vbCBSZXNwb25z
ZUlzTXVsdGlwYXJ0KFBsYXRmb3JtUmVzcG9uc2UgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJl
c3BvbnNlTUlNRVR5cGUocmVzcG9uc2UpID09ICJtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIjsK
K30KKwordGltZV90IENhY2hlT2JqZWN0RXhwaXJlc1RpbWUoRG9jTG9hZGVyKiwgUGxhdGZvcm1S
ZXNwb25zZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIQorICAgIHJldHVybiAwOwor
fQorCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShQbGF0Zm9ybVJlc3BvbnNlIHJl
c3BvbnNlKQoreworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKK30KKwordm9pZCBDYWNoZWRS
ZXNvdXJjZTo6c2V0QWxsRGF0YShQbGF0Zm9ybURhdGEgYWxsRGF0YSkKK3sKKyAgICBtX2FsbERh
dGEgPSBhbGxEYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUxvYWRlck1hbmFnZXIu
Y3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9nZGsvUmVz
b3VyY2VMb2FkZXJNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjIsMTQgKzIyLDIwIEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck1hbmFnZXIuaCIKIAogI2luY2x1
ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUxvYWRlckludGVybmFsLmgiCisjaW5jbHVkZSAiRm9ybURhdGEuaCIKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMTAgKzQz
LDE0IEBACiBjb25zdCBkb3VibGUgcG9sbFRpbWVTZWNvbmRzID0gMC4wNTsKIAogUmVzb3VyY2VM
b2FkZXJNYW5hZ2VyOjpSZXNvdXJjZUxvYWRlck1hbmFnZXIoKQotICAgIDogbV91c2VTaW1wbGUo
ZmFsc2UpCi0gICAgLCBqb2JzKG5ldyBIYXNoU2V0PFJlc291cmNlTG9hZGVyKj4pCi0gICAgLCBt
X2Rvd25sb2FkVGltZXIodGhpcywgJlJlc291cmNlTG9hZGVyTWFuYWdlcjo6ZG93bmxvYWRUaW1l
ckNhbGxiYWNrKQorICAgICAgICA6IGpvYnMoKQorICAgICAgICAsIHNpbXBsZUpvYnMoKQorICAg
ICAgICAsIG1fZG93bmxvYWRUaW1lcih0aGlzLCAmUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpkb3du
bG9hZFRpbWVyQ2FsbGJhY2spCiB7CisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJP
KCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKyAgICBtYXhmZCA9IDA7CiAgICAg
Y3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwogICAgIGN1cmxNdWx0aUhhbmRsZSA9
IGN1cmxfbXVsdGlfaW5pdCgpOwogfQpAQCAtNTMsNDcgKzYzLDUzIEBACiAgICAgcmV0dXJuIHNp
bmdsZXRvbjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnVzZVNpbXBsZVRyYW5z
ZmVyKGJvb2wgdXNlU2ltcGxlKQotewotICAgIG1fdXNlU2ltcGxlID0gdXNlU2ltcGxlOwotfQot
CiBzdGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJhY2sodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6
ZV90IG5tZW1iLCB2b2lkKiBvYmopCiB7CiAgICAgUmVzb3VyY2VMb2FkZXIqIGpvYiA9IHN0YXRp
Y19jYXN0PFJlc291cmNlTG9hZGVyKj4ob2JqKTsKKyAgICBpZiAoam9iLT5pc0Vycm9yUGFnZSgp
KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpv
Yi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBpZiAoIWQtPmFzc2VtYmxlZFJlc3BvbnNlSGVhZGVycykK
KyAgICAgICAgZC0+bV9jbGllbnQtPnJlY2VpdmVkUmVzcG9uc2Uoam9iLGQtPm1fcmVzcG9uc2Up
OwogICAgIGludCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7Ci0gICAgZC0+Y2xpZW50LT5kaWRS
ZWNlaXZlRGF0YShqb2IsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpLCB0b3RhbFNpemUpOworICAg
IGQtPm1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShqb2IsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIp
LCB0b3RhbFNpemUpOworICAgIGlmIChkLT5tX3VzZVNpbXBsZSkgeworICAgICAgICBkLT5yZXN1
bHREYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKKyAgICB9
CiAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKIH0KIAotc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFj
ayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCitzdGF0
aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBu
bWVtYiwgdm9pZCogb2JqKQogeworICAgIFJlc291cmNlTG9hZGVyKiBqb2IgPSBzdGF0aWNfY2Fz
dDxSZXNvdXJjZUxvYWRlcio+KG9iaik7CisgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9
IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKworICAgIGlmIChqb2ItPmlzRXJyb3JQYWdlKCkpCisgICAg
ICAgIHJldHVybiAtMTsKICAgICBpbnQgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOworICAgIGQt
Pm1fcmVzcG9uc2UtPmRhdGEgPSBTdHJpbmcocHRyLHRvdGFsU2l6ZSk7CisgICAgam9iLT5yZWNl
aXZlZFJlc3BvbnNlKGQtPm1fcmVzcG9uc2UpOwogICAgIHJldHVybiB0b3RhbFNpemU7CiB9CiAK
IHZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soVGltZXI8
UmVzb3VyY2VMb2FkZXJNYW5hZ2VyPiogdGltZXIpCiB7Ci0gICAgaWYgKGpvYnMtPmlzRW1wdHko
KSkgewotICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RvcCgpOworICAgIGlmIChqb2JzLmlzRW1w
dHkoKSYmIHNpbXBsZUpvYnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChtX3VzZVNpbXBsZSkgewotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVzb3VyY2VMb2FkZXIq
Pjo6aXRlcmF0b3IgaXQgPSBqb2JzLT5iZWdpbigpOyBpdCAhPSBqb2JzLT5lbmQoKTsgKytpdCkg
eworCisgICAgaWYgKCFzaW1wbGVKb2JzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKEhhc2hT
ZXQ8UmVzb3VyY2VMb2FkZXIqPjo6aXRlcmF0b3IgaXQgPSBzaW1wbGVKb2JzLmJlZ2luKCk7Cisg
ICAgICAgICAgICAgICAgaXQgIT0gc2ltcGxlSm9icy5lbmQoKTsgKytpdCkgewogICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkZXIqIGpvYiA9ICppdDsKICAgICAgICAgICAgIFJlc291cmNlTG9hZGVy
SW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CiAgICAgICAgICAgICBDVVJMY29kZSBy
ZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShkLT5tX2hhbmRsZSk7CiAgICAgICAgICAgICBpZiAocmVz
ICE9IENVUkxFX09LKQogICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgV0lUSCBKT0IgJWRc
biIsIHJlcyk7Ci0gICAgICAgICAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IsIDAp
OwotICAgICAgICAgICAgZC0+Y2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGpvYik7Ci0gICAgICAg
ICAgICBjdXJsX2Vhc3lfY2xlYW51cChkLT5tX2hhbmRsZSk7Ci0gICAgICAgICAgICBkLT5tX2hh
bmRsZSA9IDA7CisgICAgICAgICAgICByZW1vdmUoam9iKTsKICAgICAgICAgfQotICAgICAgICBq
b2JzLT5jbGVhcigpOwotICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RvcCgpOwotICAgIH0gZWxz
ZSB7CisgICAgfQorCisgICAgaWYgKCFqb2JzLmlzRW1wdHkoKSkgewogICAgICAgICBGRF9aRVJP
KCZmZHJlYWQpOwogICAgICAgICBGRF9aRVJPKCZmZHdyaXRlKTsKICAgICAgICAgRkRfWkVSTygm
ZmRleGNlcCk7CkBAIC0xMDUsMjMgKzEyMSwxNyBAQAogICAgICAgICB0aW1lb3V0LnR2X3VzZWMg
PSBzZWxlY3RUaW1lb3V0TVMgKiAxMDAwOyAgICAgICAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNv
bmRzCiAgICAgICAgIHJldHZhbCA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3Jp
dGUsICZmZGV4Y2VwLCAmdGltZW91dCk7CiAgICAgICAgIHN3aXRjaCAocmV0dmFsKSB7Ci0gICAg
ICAgICAgICBjYXNlIC0xOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBlcnJvcgot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzLCBzZWxlY3QgZXJyb3Io
JWQpXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLHJldHZhbCk7Ci0jZW5kaWYKLSAgICAgICAgICAg
ICAgICAvKiBmYWxsdGhyb3VnaCovCi0gICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAg
ICAvLyBzZWxlY3QgdGltZW91dAotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICAgICBwcmlu
dGYoIiVzLCBzZWxlY3QgdGltZW91dCAlZFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyxyZXR2YWwp
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2guIHRoaXMgY2FuIGJlIHRo
ZSBmaXJzdCBwZXJmb3JtIHRvIGJlIG1hZGUgKi8KLSAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gMSsgZGVzY3JpcHRvcnMgaGF2ZSBkYXRhCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9PSBjdXJsX211bHRpX3BlcmZv
cm0oY3VybE11bHRpSGFuZGxlLCAmbnJ1bm5pbmcpKQotICAgICAgICAgICAgICAgICAgICB7IH0K
KyAgICAgICAgY2FzZSAtMTovLyBzZWxlY3QgZXJyb3IKKyAgICAgICAgICAgIC8qIGZhbGx0aHJv
dWdoKi8KKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgLy8gc2VsZWN0IHRpbWVvdXQK
KyAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoLiB0aGlzIGNhbiBiZSB0aGUgZmlyc3QgcGVyZm9y
bSB0byBiZSBtYWRlICovCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gMSsgZGVzY3JpcHRvcnMgaGF2ZSBkYXRhCisgICAgICAgIHdoaWxlIChDVVJMTV9DQUxMX01V
TFRJX1BFUkZPUk0gPT0gY3VybF9tdWx0aV9wZXJmb3JtKGN1cmxNdWx0aUhhbmRsZSwgJm5ydW5u
aW5nKSkgeyB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBjaGVjayB0aGUgY3VybCBtZXNzYWdl
cyBpbmRpY2F0aW5nIGNvbXBsZXRlZCB0cmFuc2ZlcnMKICAgICAgICAgLy8gYW5kIGZyZWUgdGhl
aXIgcmVzb3VyY2VzCisgICAgICAgIFJlc291cmNlTG9hZGVyKiBqb2I7CiAgICAgICAgIGludCBu
bXNnczsKICAgICAgICAgd2hpbGUgKENVUkxNc2cqIG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFk
KGN1cmxNdWx0aUhhbmRsZSwgJm5tc2dzKSkgewogICAgICAgICAgICAgaWYgKG1zZy0+bXNnID09
IENVUkxNU0dfRE9ORSkgewpAQCAtMTMwLDYwICsxNDAsMTU4IEBACiAgICAgICAgICAgICAgICAg
YXNzZXJ0KGNoYW5kbGUpOwogICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZGVyICpqb2I7CiAg
ICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY2hhbmRsZSwgQ1VSTElORk9fUFJJVkFU
RSwgJmpvYik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGpvYik7IC8vZml4bWU6IGFzc2VydC0+
aWYgPwotICAgICAgICAgICAgICAgIC8vIGlmIGZvdW5kLCBkZWxldGUgaXQKLSAgICAgICAgICAg
ICAgICBpZiAoam9iKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZGVySW50ZXJu
YWwgKmQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
bXNnLT5kYXRhLnJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDVVJMRV9P
SzogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGlzIHRvIGF1dGhlbnRp
Y2F0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNwQ29kZSA9IC0xOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGQtPm1faGFuZGxlLCBD
VVJMSU5GT19SRVNQT05TRV9DT0RFLCAmcmVzcENvZGUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbW92ZShqb2IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkN1cmwgRVJST1IgJXNcbiIs
IGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgam9iLT5zZXRFcnJvcihtc2ctPmRhdGEucmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZW1vdmUoam9iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ3VybFJlcXVlc3Qgbm90IGZvdW5kLCBldmVu
dGhvdWdoIGN1cmwgZC0+bV9oYW5kbGUgZmluaXNoZWRcbiIpOwotICAgICAgICAgICAgICAgICAg
ICBhc3NlcnQoMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGpvYik7CisgICAgICAgICAgICAg
ICAgaWYgKG1zZy0+ZGF0YS5yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2hhciAqaGFuZGxlX3VybD0wOworICAgICAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0
aW5mbyhjaGFuZGxlLENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZoYW5kbGVfdXJsKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnRmKCJDdXJsIEVSUk9SIHVybD0lcyBlcnJvcjolc1xuIixoYW5k
bGVfdXJsLCBjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOworICAgICAgICAg
ICAgICAgICAgICBmcmVlKGhhbmRsZV91cmwpOworICAgICAgICAgICAgICAgICAgICBqb2ItPnNl
dEVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZW1vdmUoam9iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9CiAgICAgfQotICAg
IGlmICgham9icy0+aXNFbXB0eSgpKQorICAgIGlmICghbV9kb3dubG9hZFRpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNvbmRz
KTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRl
ciogam9iKQogeworICAgIC8vdGFrZSBvdXQgb2YgY3VybCBtdWx0aSBmaXJzdCAhCiAgICAgUmVz
b3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoIWQt
Pm1faGFuZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGpvYnMtPmNvbnRhaW5zKGpvYikp
Ci0gICAgICAgIGpvYnMtPnJlbW92ZShqb2IpOwotICAgIGlmIChqb2JzLT5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fZG93bmxvYWRUaW1lci5zdG9wKCk7Ci0gICAgZC0+Y2xpZW50LT5yZWNlaXZlZEFs
bERhdGEoam9iLCAwKTsKLSAgICBkLT5jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoam9iKTsKLSAg
ICBpZiAoZC0+bV9oYW5kbGUpIHsKKyAgICBpZiAoZC0+bV9oYW5kbGUpCiAgICAgICAgIGN1cmxf
bXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUsIGQtPm1faGFuZGxlKTsKLSAgICAg
ICAgY3VybF9lYXN5X2NsZWFudXAoZC0+bV9oYW5kbGUpOwotICAgICAgICBkLT5tX2hhbmRsZSA9
IE5VTEw7CisKKyAgICBpZiAoam9icy5jb250YWlucyhqb2IpKQorICAgICAgICBqb2JzLnJlbW92
ZShqb2IpOworCisgICAgaWYgKHNpbXBsZUpvYnMuY29udGFpbnMoam9iKSkKKyAgICAgICAgc2lt
cGxlSm9icy5yZW1vdmUoam9iKTsKKworICAgIGlmIChkLT5tX2NsaWVudCkgeworICAgICAgICAv
L2VtcHR5IHBhZ2UgaWYgdHJ1ZQorICAgICAgICBpZiAoIWQtPmFzc2VtYmxlZFJlc3BvbnNlSGVh
ZGVycykKKyAgICAgICAgICAgIGQtPm1fY2xpZW50LT5yZWNlaXZlZFJlc3BvbnNlKGpvYixkLT5t
X3Jlc3BvbnNlKTsKKyAgICAgICAgZC0+bV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoam9iKTsK
KyAgICAgICAgZC0+bV9jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IsMCk7CiAgICAgfQorICAg
IGRlbGV0ZSBqb2I7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjphZGQoUmVzb3Vy
Y2VMb2FkZXIqIGpvYikKK3ZvaWQgIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6c2V0dXBQdXQoUmVz
b3VyY2VMb2FkZXIqIGpvYikKIHsKLSAgICBib29sIHN0YXJ0VGltZXIgPSBqb2JzLT5pc0VtcHR5
KCk7CiAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsK
LSAgICBEZXByZWNhdGVkU3RyaW5nIHVybCA9IGQtPlVSTC51cmwoKTsKKyAgICBpZiAoam9iLT5t
ZXRob2QoKSAhPSAiUFVUIikKKyAgICAgICAgcmV0dXJuOworICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZC0+bV9oYW5kbGUsIENVUkxPUFRfVVBMT0FELCBUUlVFKSA7CisKKyAgICB7CisgICAgICAgIHN0
cnVjdCBjdXJsX3NsaXN0ICpzbGlzdD1OVUxMOworICAgICAgICAvL0ZJWE1FOiBobW1tIGRpc2Fi
bGUgRXhwZWN0OiAxMDAtY29udGludWUKKyAgICAgICAgLy9zbGlzdCA9IGN1cmxfc2xpc3RfYXBw
ZW5kKHNsaXN0LCJFeHBlY3Q6Iik7CisgICAgICAgIC8vanVzdCBzdXBwcm90IEh0dHAgMS4xIGNo
dW5ja2VkIGVuY29kaW5nIG5vdworICAgICAgICBzbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKHNs
aXN0LCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIpOworICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAgICAgICBkLT5t
X2N1c3RvbVBvc3RIZWFkZXIgPSBzbGlzdDsKKyAgICB9Cit9CisKK3ZvaWQgIFJlc291cmNlTG9h
ZGVyTWFuYWdlcjo6c2V0dXBQb3N0KFJlc291cmNlTG9hZGVyKiBqb2IpCit7CisgICAgUmVzb3Vy
Y2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBpZiAoam9iLT5t
ZXRob2QoKSAhPSAiUE9TVCIpCisgICAgICAgIHJldHVybjsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1QsdHJ1ZSk7CisgICAgLy9kaXNhYmxlIEV4cGVjdDog
MTAwLWNvbnRpbnVlCisgICAgeworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3Q9TlVM
TDsKKyAgICAgICAgc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwiRXhwZWN0OiIpOwor
ICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLENVUkxPUFRfSFRUUEhFQURFUiwg
c2xpc3QpOworICAgICAgICBkLT5tX2N1c3RvbVBvc3RIZWFkZXIgPSBzbGlzdDsKKyAgICB9CisK
KyAgICAvL2ZpcnN0IGFkZCBhbnkgZGF0YQorICAgIGpvYi0+cG9zdERhdGEoKS5mbGF0dGVuKGQt
Pm1fcG9zdEJ5dGVzKTsKKyAgICBpZiAoZC0+bV9wb3N0Qnl0ZXMuc2l6ZSgpICE9IDApIHsKKyAg
ICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERTLGQt
Pm1fcG9zdEJ5dGVzLmRhdGEoKSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfUE9TVEZJRUxEU0laRSxkLT5tX3Bvc3RCeXRlcy5zaXplKCkpOworICAgIH0K
KworICAgIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+IGVsZW1lbnRzID0gam9iLT5wb3N0RGF0YSgp
LmVsZW1lbnRzKCk7CisgICAgaW50IHNpemUgPSBlbGVtZW50cy5zaXplKCk7CisgICAgc3RydWN0
IGN1cmxfaHR0cHBvc3QgKmxhc3RwdHI9TlVMTDsKKworICAgIGZvciAoaW50IGkgPTA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICAgICAgaWYgKGVsZW1lbnRzW2ldLm1fdHlwZSA9PSBGb3JtRGF0YUVs
ZW1lbnQ6OmVuY29kZWRGaWxlKSB7CisgICAgICAgICAgICBDU3RyaW5nIGNzdHJpbmcgPSAgZWxl
bWVudHNbaV0ubV9maWxlbmFtZS51dGY4KCk7CisgICAgICAgICAgICAvL2tlZXAgcmVmIGhlcmUg
c28gaXRzIG5vdCBmcmVlZAorICAgICAgICAgICAgZC0+bV9jc3RyaW5ncy5hcHBlbmQoY3N0cmlu
Zyk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IGNzdHJpbmcuZGF0YSgpOwor
CisgICAgICAgICAgICAvKiBGaWxsIGluIHRoZSBmaWxlIHVwbG9hZCBmaWVsZCAqLworICAgICAg
ICAgICAgY3VybF9mb3JtYWRkKCZkLT5tX2ZpbGVQb3N0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICZsYXN0cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1F
LCAic2VuZGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsIGZp
bGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisKKyAgICAg
ICAgICAgIC8qIEZpbGwgaW4gdGhlIGZpbGVuYW1lIGZpZWxkICovCisgICAgICAgICAgICBjdXJs
X2Zvcm1hZGQoJmQtPm1fZmlsZVBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmxhc3Rw
dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJmaWxlbmFt
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCBmaWxl
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworCisgICAgICAg
ICAgICAvKiBGaWxsIGluIHRoZSBzdWJtaXQgZmllbGQgdG9vLCBldmVuIGlmIHRoaXMgaXMgcmFy
ZWx5IG5lZWRlZCAqLworICAgICAgICAgICAgY3VybF9mb3JtYWRkKCZkLT5tX2ZpbGVQb3N0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICZsYXN0cHRyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIENVUkxGT1JNX0NPUFlOQU1FLCAic3VibWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsICJzZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBDVVJMRk9STV9FTkQpOworICAgICAgICB9CisgICAgfQorfQorVmVjdG9yPGNoYXI+IFJlc291
cmNlTG9hZGVyTWFuYWdlcjo6cnVuSW1tZWRpYXRlbHkoUmVzb3VyY2VMb2FkZXIqIGpvYikKK3sK
KyAgICBpZiAoam9icy5jb250YWlucyhqb2IpKQorICAgICAgICBqb2JzLnJlbW92ZShqb2IpOwor
CisgICAgaWYgKHNpbXBsZUpvYnMuY29udGFpbnMoam9iKSkKKyAgICAgICAgc2ltcGxlSm9icy5y
ZW1vdmUoam9iKTsKKworICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldElu
dGVybmFsKCk7CisgICAgLy9jYXVzZSBkYXRhIHRvIGJlIGNhY2hlZCBpbiByZXN1bHREYXRhCisg
ICAgZC0+bV91c2VTaW1wbGUgPSB0cnVlOworICAgIENVUkxjb2RlIHJlcyA9IGN1cmxfZWFzeV9w
ZXJmb3JtKGQtPm1faGFuZGxlKTsKKyAgICBpZiAocmVzICE9IENVUkxFX09LKQorICAgICAgICBw
cmludGYoIkVycm9yIFdJVEggSk9CICVkXG4iLCByZXMpOworICAgIFZlY3RvcjxjaGFyPiByZXN1
bHRzID0gVmVjdG9yPGNoYXI+KGQtPnJlc3VsdERhdGEpOworICAgIGQtPnJlc3VsdERhdGEuY2xl
YXIoKTsKKyAgICByZW1vdmUoam9iKTsKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRlck1hbmFnZXI6OmluaXRKb2IoUmVzb3VyY2VMb2FkZXIqam9iKQoreworICAg
IFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CisgICAgRGVw
cmVjYXRlZFN0cmluZyB1cmwgPSBqb2ItPnVybCgpLnVybCgpOworCisvL3ByaW50ZigiUmVzb3Vy
Y2VMb2FkZXJNYW5hZ2VyOjphZGQgU3RhcnRpbmcgam9iICVzXG4iLGpvYi0+dXJsKCkuYXNjaWko
KSk7CisgICAgLy9yZW1vdmUgYW55IHF1ZXJ5IHBhcnQgc2VudCB0byBhIGxvY2FsIGZpbGUKKyAg
ICAvL2FsbG93cyBodHRwIHN0eWxlIGdldCBvcHRpb25zIHRvIGJlIGhhbmRsZWQgYnkgYSBsb2Nh
bCBmaWxlCisgICAgaWYgKGpvYi0+dXJsKCkuaXNMb2NhbEZpbGUoKSkgeworICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIHF1ZXJ5ID0gam9iLT51cmwoKS5xdWVyeSgpOworICAgICAgICBpZiAoIXF1
ZXJ5LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkeCA9IHVybC5maW5k
KHF1ZXJ5KTsKKyAgICAgICAgICAgIHVybCA9IHVybC5sZWZ0KGlkeCk7CisgICAgICAgIH0KKyAg
ICB9CiAgICAgZC0+bV9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworICAgIC8vIHVybCBwdHIg
bXVzdCByZW1haW4gdmFsaWQgdGhyb3VnaCB0aGUgcmVxdWVzdAorICAgIGQtPm1fdXJsID0gIHN0
cmR1cCh1cmwuYXNjaWkoKSk7CisKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX1BSSVZBVEUsIGpvYik7CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwg
Q1VSTE9QVF9FUlJPUkJVRkZFUiwgZXJyb3JfYnVmZmVyKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlQ2FsbGJhY2spOwpAQCAt
MTkzLDMwICszMDEsNzQgQEAKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX01BWFJFRElSUywgMTApOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0FOWSk7Ci0gICAgLy8gdXJsIHB0ciBtdXN0
IHJlbWFpbiB2YWxpZCB0aHJvdWdoIHRoZSByZXF1ZXN0Ci0gICAgY3VybF9lYXN5X3NldG9wdChk
LT5tX2hhbmRsZSwgQ1VSTE9QVF9VUkwsIHVybC5hc2NpaSgpKTsKKyAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VSTCxkLT5tX3VybCk7CiAKLSAgICBpZiAobV91c2VT
aW1wbGUpCi0gICAgICAgIGpvYnMtPmFkZChqb2IpOwotICAgIGVsc2UgeworICAgIC8veG1sSHR0
cFJlcXVlc3Qgc2VlIHhtbC94bWxodHRwcmVxdWVzdC5jcHAKKyAgICBIVFRQSGVhZGVyTWFwICBj
dXN0b21IZWFkZXJzID0gIGQtPm1fcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CisgICAgaWYg
KCFjdXN0b21IZWFkZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAq
c2xpc3Q9TlVMTDsKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Y3VzdG9tSGVhZGVycy5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisK
KyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcg
dmFsdWUgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgU3RyaW5nIHBhaXIgPSBrZXkrIjogIit2
YWx1ZTsKKyAgICAgICAgICAgIENTdHJpbmcgY3N0cmluZyA9IHBhaXIudXRmOCgpOworICAgICAg
ICAgICAgLy9zYXZlIGZvciBsYXRlciBjbGVhbnVwCisgICAgICAgICAgICBkLT5tX2NzdHJpbmdz
LmFwcGVuZChjc3RyaW5nKTsKKyAgICAgICAgICAgIHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQo
c2xpc3QsY3N0cmluZy5kYXRhKCkpOworICAgICAgICB9CisgICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAgICAgICBkLT5t
X2N1c3RvbUhlYWRlciA9IHNsaXN0OworICAgIH0KKyAgICAvL2RlZmF1bHQgdG8gZ2V0CisgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IVFRQR0VULCBUUlVFKTsKKwor
ICAgIGlmIChqb2ItPm1ldGhvZCgpID09ICJQT1NUIikKKyAgICAgICAgc2V0dXBQb3N0KGpvYik7
CisgICAgZWxzZSBpZiAoam9iLT5tZXRob2QoKSA9PSAiUFVUIikKKyAgICAgICAgc2V0dXBQdXQo
am9iKTsKKyAgICBlbHNlIGlmIChqb2ItPm1ldGhvZCgpID09ICJIRUFEIikKKyAgICAgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9OT0JPRFksIFRSVUUpOworfQorCit2
b2lkIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6YWRkKFJlc291cmNlTG9hZGVyKiBqb2IpCit7Cisg
ICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBp
bml0Sm9iKGpvYik7CisKKyAgICBqb2JzLmFkZChqb2IpOworCisgICAgaWYgKGQtPm1fdXNlU2lt
cGxlKSB7CisgICAgICAgIHNpbXBsZUpvYnMuYWRkKGpvYik7CisgICAgfSBlbHNlIHsKICAgICAg
ICAgQ1VSTE1jb2RlIHJldCA9IGN1cmxfbXVsdGlfYWRkX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUs
IGQtPm1faGFuZGxlKTsKLSAgICAgICAgLy8gZG9uJ3QgY2FsbCBwZXJmb3JtLCBiZWNhdXNlIGV2
ZW50cyBtdXN0IGJlIGFzeW5jCi0gICAgICAgIC8vIHRpbWVvdXQgd2lsbCBvY2N1ciBhbmQgZG8g
Y3VybF9tdWx0aV9wZXJmb3JtCiAgICAgICAgIGlmIChyZXQgJiYgcmV0ICE9IENVUkxNX0NBTExf
TVVMVElfUEVSRk9STSkgewotICAgICAgICAgICAgcHJpbnRmKCJFcnJvciAlZCBzdGFydGluZyBq
b2IgJXNcbiIsIHJldCwgZC0+VVJMLnVybCgpLmFzY2lpKCkpOwotICAgICAgICAgICAgam9iLT5z
ZXRFcnJvcigxKTsKLSAgICAgICAgICAgIHN0YXJ0VGltZXIgPWZhbHNlOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGpvYnMtPmFkZChqb2IpOworICAgICAgICAgICAgcHJpbnRmKCJFcnJv
ciAlZCBzdGFydGluZyBqb2IgJXNcbiIsIHJldCwgam9iLT51cmwoKS51cmwoKS5hc2NpaSgpKTsK
KyAgICAgICAgICAgIGNhbmNlbChqb2IpOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChzdGFy
dFRpbWVyKQorICAgIGlmICghbV9kb3dubG9hZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1f
ZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNvbmRzKTsKIH0KIAogdm9pZCBS
ZXNvdXJjZUxvYWRlck1hbmFnZXI6OmNhbmNlbChSZXNvdXJjZUxvYWRlciogam9iKQogeworICAg
IGpvYi0+c2V0RXJyb3IoMSk7CiAgICAgcmVtb3ZlKGpvYik7Ci0gICAgam9iLT5zZXRFcnJvcigx
KTsKIH0KK2NoYXIqIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0TWltZVR5cGUoU3RyaW5nJiBp
blBhdGgpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyBwYXRoID0gaW5QYXRoLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKKyAgICBpZiAocGF0aC5lbmRzV2l0aCgiLnN2ZyIpKQorICAgICAgICByZXR1cm4g
ImltYWdlL3N2Zyt4bWwiOworICAgIGlmIChwYXRoLmVuZHNXaXRoKCIueG1sIikpCisgICAgICAg
IHJldHVybiAidGV4dC94bWwiOworICAgIGlmIChwYXRoLmVuZHNXaXRoKCIueHNsIikpCisgICAg
ICAgIHJldHVybiAidGV4dC94c2wiOworICAgIGlmIChwYXRoLmVuZHNXaXRoKCIuanMiKSkKKyAg
ICAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiOworICAgIHJldHVybiAidGV4
dC9odG1sIjsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYg
Kzc1LDcgQEAKIAogI2lmIFBMQVRGT1JNKEdESykKICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2
ZW50KEdka0V2ZW50Kik7CisgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudChjb25zdCBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQmIGV2ZW50LGJvb2wgcmVwZWF0KTsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oUVQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlz
aW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCkBAIC00OCw3ICs0OCwxNSBAQAogLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBJbWFnZSBDbGFzcwogLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLwogCitJbWFnZTo6
SW1hZ2UoSW50U2l6ZSBzaXplKQoreworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9zb3VyY2Uu
c2V0U2l6ZShzaXplKTsKKyAgICBjYWNoZUZyYW1lKDApOworfQorCiAvLyBEcmF3aW5nIFJvdXRp
bmVzCiAKIHN0YXRpYyB2b2lkIHNldENvbXBvc2l0aW5nT3BlcmF0aW9uKGNhaXJvX3QqIGNvbnRl
eHQsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIGhhc0FscGhhKQpAQCAtNzcsMTIgKzg1LDEy
IEBACiAKICAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICAKKwogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJy
ZW50RnJhbWUpOwogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0
IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNlbGZT
aXplID0gc2l6ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgSW50U2l6ZSBzZWxmU2l6
ZSA9IHNpemUoKTsKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOwogICAgIEZsb2F0UmVjdCBk
c3RSZWN0KGRzdCk7CiAKQEAgLTkwLDcgKzk4LDcgQEAKIAogICAgIC8vIFNldCB0aGUgY29tcG9z
aXRpbmcgb3BlcmF0aW9uLgogICAgIHNldENvbXBvc2l0aW5nT3BlcmF0aW9uKGNvbnRleHQsIG9w
LCBmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOwotICAgIAorCiAgICAgLy8g
SWYgd2UncmUgZHJhd2luZyBhIHN1YiBwb3J0aW9uIG9mIHRoZSBpbWFnZSBvciBzY2FsaW5nIHRo
ZW4gY3JlYXRlCiAgICAgLy8gYSBwYXR0ZXJuIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBpbWFnZSBh
bmQgZHJhdyB0aGUgdHJhbnNmb3JtZWQgcGF0dGVybi4KICAgICAvLyBUZXN0IHVzaW5nIGV4YW1w
bGUgc2l0ZSBhdCBodHRwOi8vd3d3Lm1leWVyd2ViLmNvbS9lcmljL2Nzcy9lZGdlL2NvbXBsZXhz
cGlyYWwvZGVtby5odG1sCkBAIC0xMTMsOCArMTIxLDkgQEAKIAogfQogCisKIHZvaWQgSW1hZ2U6
OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsCi0gICAgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFt
X3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjMsMTcgKzEzMiwx
NyBAQAogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUg
YW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIGludHJpbnNpY0lt
YWdlU2l6ZSA9IHNpemUoKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgIEludFNpemUgaW50
cmluc2ljSW1hZ2VTaXplID0gc2l6ZSgpOwogICAgIEZsb2F0UmVjdCBzcmNSZWN0KHNyY1BvaW50
LCBpbnRyaW5zaWNJbWFnZVNpemUpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBzcmNQb2ludDsK
IAogICAgIC8vIENoZWNrIGFuZCBzZWUgaWYgYSBzaW5nbGUgZHJhdyBvZiB0aGUgaW1hZ2UgY2Fu
IGNvdmVyIHRoZSBlbnRpcmUgYXJlYSB3ZSBhcmUgc3VwcG9zZWQgdG8gdGlsZS4KICAgICBmbG9h
dCB0aWxlV2lkdGggPSBzaXplKCkud2lkdGgoKTsKICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gc2l6
ZSgpLmhlaWdodCgpOwotICAgIAorCiAgICAgLy8gSWYgdGhlIHNjYWxlIGlzIG5vdCBlcXVhbCB0
byB0aGUgaW50cmluc2ljIHNpemUgb2YgdGhlIGltYWdlLCBzZXQgdHJhbnNmb3JtIG1hdHJpeAog
ICAgIC8vIHRvIHRoZSBhcHByb3ByaWF0ZSBzY2FsYXIgbWF0cml4LCBzY2FsZSB0aGUgc291cmNl
IHBvaW50LCBhbmQgc2V0IHRoZSBzaXplIG9mIHRoZQotICAgIC8vIHNjYWxlZCB0aWxlLiAKKyAg
ICAvLyBzY2FsZWQgdGlsZS4KICAgICBmbG9hdCBzY2FsZVggPSAxLjA7CiAgICAgZmxvYXQgc2Nh
bGVZID0gMS4wOwogICAgIGNhaXJvX21hdHJpeF90IG1hdDsKQEAgLTE0Miw0NiArMTUxLDQ2IEBA
CiAgICAgICAgIHNjYWxlWCA9IGludHJpbnNpY0ltYWdlU2l6ZS53aWR0aCgpIC8gdGlsZVNpemUu
d2lkdGgoKTsKICAgICAgICAgc2NhbGVZID0gaW50cmluc2ljSW1hZ2VTaXplLmhlaWdodCgpIC8g
dGlsZVNpemUuaGVpZ2h0KCk7CiAgICAgICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKCZtYXQs
IHNjYWxlWCwgc2NhbGVZKTsKLSAgICAgICAgCisKICAgICAgICAgdGlsZVdpZHRoID0gdGlsZVNp
emUud2lkdGgoKTsKICAgICAgICAgdGlsZUhlaWdodCA9IHRpbGVTaXplLmhlaWdodCgpOwogICAg
IH0KLSAgIAorCiAgICAgLy8gV2UgY291bGQgZ2V0IGludGVyZXN0aW5nIHNvdXJjZSBvZmZzZXRz
IChuZWdhdGl2ZSBvbmVzIG9yIHBvc2l0aXZlIG9uZXMuICBEZWFsIHdpdGggYm90aAogICAgIC8v
IG91dCBvZiBib3VuZHMgY2FzZXMuCiAgICAgZmxvYXQgZHN0VGlsZVggPSBkc3RSZWN0LngoKSAr
IGZtb2RmKGZtb2RmKC1wb2ludC54KCksIHRpbGVXaWR0aCkgLSB0aWxlV2lkdGgsIHRpbGVXaWR0
aCk7CiAgICAgZmxvYXQgZHN0VGlsZVkgPSBkc3RSZWN0LnkoKSArIGZtb2RmKGZtb2RmKC1wb2lu
dC55KCksIHRpbGVIZWlnaHQpIC0gdGlsZUhlaWdodCwgdGlsZUhlaWdodCk7CiAgICAgRmxvYXRS
ZWN0IGRzdFRpbGVSZWN0KGRzdFRpbGVYLCBkc3RUaWxlWSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0
KTsKLSAgICAKKwogICAgIGZsb2F0IHNyY1ggPSBkc3RSZWN0LngoKSAtIGRzdFRpbGVSZWN0Lngo
KTsKICAgICBmbG9hdCBzcmNZID0gZHN0UmVjdC55KCkgLSBkc3RUaWxlUmVjdC55KCk7CisgICAg
eworICAgICAgICAvLyBJZiB0aGUgc2luZ2xlIGltYWdlIGRyYXcgY292ZXJzIHRoZSB3aG9sZSBh
cmVhLCB0aGVuIGp1c3QgZHJhdyBvbmNlLgorICAgICAgICBpZiAoZHN0VGlsZVJlY3QuY29udGFp
bnMoZHN0UmVjdCkpIHsKKyAgICAgICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwKKyAgICAgICAg
ICAgICAgICAgRmxvYXRSZWN0KHNyY1ggKiBzY2FsZVgsIHNyY1kgKiBzY2FsZVksIGRzdFJlY3Qu
d2lkdGgoKSAqIHNjYWxlWCwgZHN0UmVjdC5oZWlnaHQoKSAqIHNjYWxlWSksIG9wKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgLy8gSWYgdGhlIHNpbmdsZSBpbWFnZSBk
cmF3IGNvdmVycyB0aGUgd2hvbGUgYXJlYSwgdGhlbiBqdXN0IGRyYXcgb25jZS4KLSAgICBpZiAo
ZHN0VGlsZVJlY3QuY29udGFpbnMoZHN0UmVjdCkpIHsKLSAgICAgICAgZHJhdyhjdHh0LCBkc3RS
ZWN0LAotICAgICAgICAgICAgIEZsb2F0UmVjdChzcmNYICogc2NhbGVYLCBzcmNZICogc2NhbGVZ
LCBkc3RSZWN0LndpZHRoKCkgKiBzY2FsZVgsIGRzdFJlY3QuaGVpZ2h0KCkgKiBzY2FsZVkpLCBv
cCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIC8vIFdlIGhhdmUgdG8gdGlsZS4K
KyAgICAgICAgY2Fpcm9fdCogY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogCi0g
ICAgLy8gV2UgaGF2ZSB0byB0aWxlLgotICAgIGNhaXJvX3QqIGNvbnRleHQgPSBjdHh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY2Fpcm9fc2F2ZShjb250ZXh0KTsKIAotICAgIGNhaXJv
X3NhdmUoY29udGV4dCk7CisgICAgICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9u
LgorICAgICAgICBzZXRDb21wb3NpdGluZ09wZXJhdGlvbihjb250ZXh0LCBvcCwgZnJhbWVIYXNB
bHBoYUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKTsKIAotICAgIC8vIFNldCB0aGUgY29tcG9zaXRp
bmcgb3BlcmF0aW9uLgotICAgIHNldENvbXBvc2l0aW5nT3BlcmF0aW9uKGNvbnRleHQsIG9wLCBm
cmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgICAgICBjYWlyb190cmFu
c2xhdGUoY29udGV4dCwgZHN0VGlsZVJlY3QueCgpLCBkc3RUaWxlUmVjdC55KCkpOworICAgICAg
ICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3Vy
ZmFjZShpbWFnZSk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAm
bWF0KTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VY
VEVORF9SRVBFQVQpOwogCi0gICAgY2Fpcm9fdHJhbnNsYXRlKGNvbnRleHQsIGRzdFRpbGVSZWN0
LngoKSwgZHN0VGlsZVJlY3QueSgpKTsKLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBj
YWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShpbWFnZSk7Ci0gICAgY2Fpcm9fcGF0dGVy
bl9zZXRfbWF0cml4KHBhdHRlcm4sICZtYXQpOwotICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVu
ZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKLQotICAgIC8vIERyYXcgdGhlIGltYWdl
LgotICAgIGNhaXJvX3NldF9zb3VyY2UoY29udGV4dCwgcGF0dGVybik7Ci0gICAgY2Fpcm9fcmVj
dGFuZ2xlKGNvbnRleHQsIHNyY1gsIHNyY1ksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWln
aHQoKSk7Ci0gICAgY2Fpcm9fZmlsbChjb250ZXh0KTsKLSAgICBjYWlyb19yZXN0b3JlKGNvbnRl
eHQpOwotCisgICAgICAgIC8vIERyYXcgdGhlIGltYWdlLgorICAgICAgICBjYWlyb19zZXRfc291
cmNlKGNvbnRleHQsIHBhdHRlcm4pOworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwg
c3JjWCwgc3JjWSwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAg
Y2Fpcm9fZmlsbChjb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsKKyAg
ICB9CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9j
YWlyby9QYXR0ZXJuQ2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJv
L1BhdHRlcm5DYWlyby5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9Q
YXR0ZXJuQ2Fpcm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisJ
CQkJICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgorI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNp
bmNsdWRlIDxtYXRoLmg+CisKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBJ
bWFnZTsKKworY2xhc3MgUGF0dGVybkNhaXJvCit7CisKK3B1YmxpYzoKKworICAgIFBhdHRlcm5D
YWlybyhjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4pOm1fcGF0dGVybihwYXR0ZXJuKSB7fQorCisg
ICAgUGF0dGVybkNhaXJvKEZsb2F0UG9pbnQmIGdyYWRpZW50U3RhcnQKKwkgICAgLCBGbG9hdFBv
aW50JiBncmFkaWVudEVuZAorCSAgICAsIGNvbnN0IFZlY3RvcjxLQ0dyYWRpZW50U3RvcD4mIHN0
b3BzSW4KKwkgICAgLCBmbG9hdCBvcGFjaXR5CisJICAgICwgQWZmaW5lVHJhbnNmb3JtJiBncmFk
aWVudFRyYW5zZm9ybQorCSAgICAsIEtDR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9k
CisJICAgICwgRmxvYXRSZWN0JiBiYm94KTsKKworICAgIFBhdHRlcm5DYWlybyggRmxvYXRQb2lu
dCYgZ3JhZGllbnRDZW50ZXIKKwkgICAgLCBGbG9hdFBvaW50JiBncmFkaWVudEZvY2FsCisJICAg
ICwgZmxvYXQgZ3JhZGllbnRSYWRpdXMKKwkgICAgLCBjb25zdCBWZWN0b3I8S0NHcmFkaWVudFN0
b3A+JiBzdG9wc0luCisJICAgICwgZmxvYXQgb3BhY2l0eQorCSAgICAsIEFmZmluZVRyYW5zZm9y
bSYgZ3JhZGllbnRUcmFuc2Zvcm0KKwkgICAgLCBLQ0dyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVh
ZE1ldGhvZAorCSAgICAsIEFmZmluZVRyYW5zZm9ybSYgZGVzdFRyYW5zZm9ybQorCSAgICAsIEZs
b2F0UmVjdCYgYmJveCk7CisKKyAgICBQYXR0ZXJuQ2Fpcm8oSW1hZ2UqIGltZworCSAgICAsIGZs
b2F0IG9wYWNpdHkKKwkgICAgLCBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybQorCSAg
ICAsIEtDR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKTsKKworICAgIFBhdHRlcm5D
YWlybyhDb2xvciogY29sb3IsZmxvYXQgb3BhY2l0eSk7CisKKyAgICBQYXR0ZXJuQ2Fpcm8oSW50
U2l6ZSBzaXplCisJICAgICwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0KKwkgICAg
LCBLQ0dyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCk7CisKKyAgICB+UGF0dGVybkNh
aXJvKCk7CisKKyAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4oKSB7IHJldHVybiBtX3BhdHRl
cm47IH0KKworcHJpdmF0ZToKKyAgICBjYWlyb19wYXR0ZXJuX3QqIG1fcGF0dGVybjsKKworfTsK
KworfQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5j
cHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9JbWFnZVNvdXJj
ZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQAogCiBJbWFnZVNvdXJj
ZTo6fkltYWdlU291cmNlKCkKIHsKLSAgICBkZWxldGUgbV9kZWNvZGVyOworICAgIGlmKG1fZGVj
b2RlcikKKyAgICAgICAgZGVsZXRlIG1fZGVjb2RlcjsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6
aW5pdGlhbGl6ZWQoKSBjb25zdApAQCAtMTEzLDcgKzExNCw3IEBACiBib29sIEltYWdlU291cmNl
Ojppc1NpemVBdmFpbGFibGUoKQogewogICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIG1fZGVjb2Rlci0+
aXNTaXplQXZhaWxhYmxlKCk7CiB9CkBAIC0xMjEsNyArMTIyLDcgQEAKIEludFNpemUgSW1hZ2VT
b3VyY2U6OnNpemUoKSBjb25zdAogewogICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOworICAgICAgICByZXR1cm4gbV9zaXplOwogCiAgICAgcmV0dXJuIG1fZGVj
b2Rlci0+c2l6ZSgpOwogfQpAQCAtMTQxLDE4ICsxNDIsMTggQEAKIAogTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYg
KCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChtX2RlY29kZXIpIHsKKyAg
ICAgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7CisgICAgICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdC
QTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSR0JB
MzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsK
LSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVFbXB0eSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGVfZm9yX2RhdGEoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlci0+Ynl0ZXMoKS5kYXRh
KCksCisgICAgICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgo
dW5zaWduZWQgY2hhciopYnVmZmVyLT5ieXRlcygpLmRhdGEoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSgpLndpZHRoKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+
aGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemUoKS53aWR0aCgpKjQpOworICAgIH0KKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMixzaXplKCkud2lkdGgoKSxzaXplKCkuaGVpZ2h0
KCkpOwogfQogCiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWly
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9BZmZpbmVUcmFuc2Zv
cm1DYWlyby5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0FmZmlu
ZVRyYW5zZm9ybUNhaXJvLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0FmZmluZVRyYW5zZm9ybTo6QWZmaW5lVHJhbnNmb3JtKCkKK3sKKyAgICBjYWlyb19tYXRy
aXhfaW5pdF9pZGVudGl0eSgmbV90cmFuc2Zvcm0pOworfQorCitBZmZpbmVUcmFuc2Zvcm06OkFm
ZmluZVRyYW5zZm9ybShkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91
YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgc2V0TWF0cml4KGEsYixjLGQsdHgsdHkpOworfQor
CitBZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybShjb25zdCBjYWlyb19tYXRyaXhfdCYg
bWF0cml4KQorICAgICAgICA6IG1fdHJhbnNmb3JtKG1hdHJpeCkKK3t9CisKK3ZvaWQgQWZmaW5l
VHJhbnNmb3JtOjpzZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91Ymxl
IGQsIGRvdWJsZSB0eCwgZG91YmxlIHR5KQoreworICAgIGNhaXJvX21hdHJpeF9pbml0KCZtX3Ry
YW5zZm9ybSxhLGMsYixkLHR4LHR5KTsKK30KKwordm9pZCBBZmZpbmVUcmFuc2Zvcm06Om1hcChk
b3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSogeDIsIGRvdWJsZSogeTIpIGNvbnN0Cit7CisgICAg
KngyID0geDsKKyAgICAqeTIgPSB5OworICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQo
Jm1fdHJhbnNmb3JtLHgyLHkyKTsKK30KKworSW50UmVjdCBBZmZpbmVUcmFuc2Zvcm06Om1hcFJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChtYXBSZWN0KEZsb2F0UmVjdChyZWN0KSkpOworfQorCisvKioKKyAgICBiYXNlZCBvbiBp
bnRlcm5hbCBfY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9ib3VuZGluZ19ib3gKKyoqLworRmxvYXRS
ZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0
Cit7CisgICAgaW50IGk7CisgICAgZG91YmxlIHF1YWRfeFs0XSwgcXVhZF95WzRdOworICAgIGRv
dWJsZSBkeDEsIGR5MTsKKyAgICBkb3VibGUgZHgyLCBkeTI7CisgICAgZG91YmxlIG1pbl94LCBt
YXhfeDsKKyAgICBkb3VibGUgbWluX3ksIG1heF95OworCisgICAgZG91YmxlIHggPShkb3VibGUp
cmVjdC54KCk7CisgICAgZG91YmxlIHkgPSAoZG91YmxlKXJlY3QueSgpOworICAgIGRvdWJsZSB3
aWR0aCA9KGRvdWJsZSlyZWN0LndpZHRoKCk7CisgICAgZG91YmxlIGhlaWdodCA9IChkb3VibGUp
cmVjdC5oZWlnaHQoKTsKKyAgICBkb3VibGUgeHggPSBtX3RyYW5zZm9ybS54eDsKKyAgICBkb3Vi
bGUgeXkgPSBtX3RyYW5zZm9ybS55eTsKKyAgICBkb3VibGUgeHkgPSBtX3RyYW5zZm9ybS54eTsK
KyAgICBkb3VibGUgeXggPSBtX3RyYW5zZm9ybS55eDsKKyAgICBkb3VibGUgdHggPSBtX3RyYW5z
Zm9ybS54MDsKKyAgICBkb3VibGUgdHkgPSBtX3RyYW5zZm9ybS55MDsKKworICAgIHF1YWRfeFsw
XSA9IHh4ICogeCArIHh5ICp5ICt0eDsKKyAgICBxdWFkX3lbMF0gPSB5eCAqeCArIHl5ICogeSAr
dHk7CisKKyAgICBkeDEgPSB4eCp3aWR0aDsKKyAgICBkeTEgPSB5eCp3aWR0aDsKKworICAgIHF1
YWRfeFsxXSA9IHF1YWRfeFswXSArIGR4MTsKKyAgICBxdWFkX3lbMV0gPSBxdWFkX3lbMF0gKyBk
eTE7CisKKyAgICBkeDIgPSB4eSAqaGVpZ2h0OworICAgIGR5MiA9IHl5ICogaGVpZ2h0OworCisg
ICAgcXVhZF94WzJdID0gcXVhZF94WzBdICsgZHgyOworICAgIHF1YWRfeVsyXSA9IHF1YWRfeVsw
XSArIGR5MjsKKworICAgIHF1YWRfeFszXSA9IHF1YWRfeFswXSArIGR4MSArIGR4MjsKKyAgICBx
dWFkX3lbM10gPSBxdWFkX3lbMF0gKyBkeTEgKyBkeTI7CisKKyAgICBtaW5feCA9IG1heF94ID0g
cXVhZF94WzBdOworICAgIG1pbl95ID0gbWF4X3kgPSBxdWFkX3lbMF07CisKKyAgICBmb3IgKGk9
MTsgaSA8IDQ7IGkrKykgeworICAgICAgICBpZiAocXVhZF94W2ldIDwgbWluX3gpCisgICAgICAg
ICAgICBtaW5feCA9IHF1YWRfeFtpXTsKKyAgICAgICAgaWYgKHF1YWRfeFtpXSA+IG1heF94KQor
ICAgICAgICAgICAgbWF4X3ggPSBxdWFkX3hbaV07CisKKyAgICAgICAgaWYgKHF1YWRfeVtpXSA8
IG1pbl95KQorICAgICAgICAgICAgbWluX3kgPSBxdWFkX3lbaV07CisgICAgICAgIGlmIChxdWFk
X3lbaV0gPiBtYXhfeSkKKyAgICAgICAgICAgIG1heF95ID0gcXVhZF95W2ldOworICAgIH0KKyAg
ICB4ID0gbWluX3g7CisgICAgeSA9IG1pbl95OworICAgIHdpZHRoID0gbWF4X3ggLSBtaW5feDsK
KyAgICBoZWlnaHQgPSBtYXhfeSAtIG1pbl95OworICAgIHJldHVybiBGbG9hdFJlY3QoeCx5LHdp
ZHRoLGhlaWdodCk7Cit9CisKKy8qCisgKiBmcm9tIF9jYWlyb19tYXRyaXhfaXNfaWRlbnRpdHk7
CisgKi8KK2Jvb2wgQWZmaW5lVHJhbnNmb3JtOjppc0lkZW50aXR5KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKG1fdHJhbnNmb3JtLnh4ID09IDEuMCAmJiBtX3RyYW5zZm9ybS55eCA9PSAwLjAgJiYK
KyAgICAgICAgICAgIG1fdHJhbnNmb3JtLnh5ID09IDAuMCAmJiBtX3RyYW5zZm9ybS55eSA9PSAx
LjAgJiYKKyAgICAgICAgICAgIG1fdHJhbnNmb3JtLngwID09IDAuMCAmJiBtX3RyYW5zZm9ybS55
MCA9PSAwLjApOworfQorCitkb3VibGUgQWZmaW5lVHJhbnNmb3JtOjptMTEoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3RyYW5zZm9ybS54eDsKK30KKworZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6
bTEyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0ueHk7Cit9CisKK2RvdWJsZSBB
ZmZpbmVUcmFuc2Zvcm06Om0yMSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLnl4
OworfQorCitkb3VibGUgQWZmaW5lVHJhbnNmb3JtOjptMjIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3RyYW5zZm9ybS55eTsKK30KKworZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6ZHgoKSBjb25z
dAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS54MDsKK30KKworZG91YmxlIEFmZmluZVRyYW5z
Zm9ybTo6ZHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS55MDsKK30KKwordm9p
ZCBBZmZpbmVUcmFuc2Zvcm06OnJlc2V0KCkKK3sKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVu
dGl0eSgmbV90cmFuc2Zvcm0pOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9y
bTo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgY2Fpcm9fbWF0cml4X3NjYWxl
KCZtX3RyYW5zZm9ybSxzeCxzeSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFu
c2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6cm90YXRlKGRvdWJsZSBkZWdyZWVzKQoreworICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgZGVnMnJhZCA9IE1fUEkvMTgwLjA7CisgICAgZG91YmxlIHJhZGlh
bnMgPSBkZWdyZWVzKmRlZzJyYWQ7CisgICAgY2Fpcm9fbWF0cml4X3JvdGF0ZSgmbV90cmFuc2Zv
cm0scmFkaWFucyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFm
ZmluZVRyYW5zZm9ybTo6dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KQoreworICAgIGNh
aXJvX21hdHJpeF90cmFuc2xhdGUoJm1fdHJhbnNmb3JtLHR4LHR5KTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzaGVhcihkb3VibGUg
c3gsIGRvdWJsZSBzeSkKK3sKKyAgICBjYWlyb19tYXRyaXhfdCBvdGhlcjsKKyAgICBjYWlyb19t
YXRyaXhfaW5pdCgmb3RoZXIsMSxzeCxzeSwxLDAsMCk7CisgICAgY2Fpcm9fbWF0cml4X211bHRp
cGx5KCZtX3RyYW5zZm9ybSwmb3RoZXIsJm1fdHJhbnNmb3JtKTsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKKy8qKgorICogX2NhaXJvX21hdHJpeF9jb21wdXRlX2RldGVybWluYW50CisgKi8KK2Rv
dWJsZSBBZmZpbmVUcmFuc2Zvcm06OmRldCgpIGNvbnN0Cit7CisgICAgZG91YmxlICBhLCBiLCBj
LCBkOworCisgICAgYSA9IG1fdHJhbnNmb3JtLnh4OworICAgIGIgPSBtX3RyYW5zZm9ybS55eDsK
KyAgICBjID0gbV90cmFuc2Zvcm0ueHk7CisgICAgZCA9IG1fdHJhbnNmb3JtLnl5OworCisgICAg
cmV0dXJuKGEqZCAtIGIqYyk7Cit9CisKK2Jvb2wgQWZmaW5lVHJhbnNmb3JtOjppc0ludmVydGli
bGUoKSBjb25zdAoreworICAgIHJldHVybihkZXQoKSA9PSAwKTsKK30KKworQWZmaW5lVHJhbnNm
b3JtIEFmZmluZVRyYW5zZm9ybTo6aW52ZXJ0KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzSW52ZXJ0
aWJsZSgpKQorICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJh
bnNmb3JtIGludmVyc2UgPSBBZmZpbmVUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOworICAgIGNhaXJv
X21hdHJpeF9pbnZlcnQoJmludmVyc2UubV90cmFuc2Zvcm0pOworICAgIHJldHVybiBpbnZlcnNl
OworfQorCitBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIGNhaXJvX21hdHJpeF90KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm07Cit9CisKK2Jvb2wgQWZmaW5lVHJhbnNmb3JtOjpv
cGVyYXRvcj09KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuKG1fdHJhbnNmb3JtLnh4ID09IG90aGVyLm1fdHJhbnNmb3JtLnh4ICYmCisgICAgICAgICAg
ICBtX3RyYW5zZm9ybS55eCA9PSBvdGhlci5tX3RyYW5zZm9ybS55eCAmJgorICAgICAgICAgICAg
bV90cmFuc2Zvcm0ueHkgPT0gb3RoZXIubV90cmFuc2Zvcm0ueHkgJiYKKyAgICAgICAgICAgIG1f
dHJhbnNmb3JtLnl5ID09IG90aGVyLm1fdHJhbnNmb3JtLnl5ICYmCisgICAgICAgICAgICBtX3Ry
YW5zZm9ybS54MCA9PSBvdGhlci5tX3RyYW5zZm9ybS54MCAmJgorICAgICAgICAgICAgbV90cmFu
c2Zvcm0ueTAgPT0gb3RoZXIubV90cmFuc2Zvcm0ueTApOworCit9CisKK0FmZmluZVRyYW5zZm9y
bSYgQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvcio9KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgb3Ro
ZXIpCit7CisgICAgY2Fpcm9fbWF0cml4X211bHRpcGx5KCZtX3RyYW5zZm9ybSwmbV90cmFuc2Zv
cm0sJm90aGVyLm1fdHJhbnNmb3JtKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0FmZmluZVRy
YW5zZm9ybSBBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKihjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG90aGVyKQoreworICAgIEFmZmluZVRyYW5zZm9ybSB0bXA7CisgICAgY2Fpcm9fbWF0cml4X211
bHRpcGx5KCZ0bXAubV90cmFuc2Zvcm0sJm1fdHJhbnNmb3JtLCZvdGhlci5tX3RyYW5zZm9ybSk7
CisgICAgcmV0dXJuIHRtcDsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJl
dmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
ICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjgsMjggKzI4LDQyIEBACiAKICNpZiBQ
TEFURk9STShDQUlSTykKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJQYXR0ZXJuQ2Fpcm8uaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1
ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lmIFdJTjMyCiAjaW5j
bHVkZSA8Y2Fpcm8td2luMzIuaD4KICNlbmRpZgorI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZUNhaXJvLmgiCisjZW5kaWYKIAogI2lmbmRlZiBNX1BJCiAjZGVm
aW5lIE1fUEkgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShH
REspCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1F
OiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZ
X0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgp
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlCit7
CiBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CiAgICAgfkdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwogCiAgICAgY2Fpcm9fdCogY29udGV4dDsK
KyAgICBkb3VibGUgYWxwaGE7CisgICAgVmVjdG9yPGZsb2F0PiBsYXllcnM7CiB9OwogCiBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0Q29sb3IoY2Fpcm9fdCogY3IsIGNvbnN0IENvbG9yJiBjb2wpCkBA
IC02OSw5ICs4Myw4IEBACiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKLSAgICA6ICBjb250ZXh0KDApCi17Ci19Cisg
ICAgICAgIDogIGNvbnRleHQoMCkKK3t9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCiB7CkBAIC04MCw4ICs5Myw4IEBA
CiAKICNpZiBXSU4zMgogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGRjKQot
ICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQotICAgICwgbV9k
YXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCisgICAgICAgIDogbV9jb21t
b24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQorICAgICAgICAsIG1fZGF0YShuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQogewogICAgIGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1cmZhY2VfY3JlYXRlKGRjKTsKICAgICBtX2RhdGEtPmNv
bnRleHQgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CkBAIC05MCwxMCArMTAzLDE0IEBACiAKICNp
ZiBQTEFURk9STShHREspIHx8IFdJTjMyCiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fY29tbW9uKGNyZWF0
ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKQorICAgICAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29u
dGV4dFByaXZhdGUoKSkKKyAgICAgICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSkKIHsKICAgICBtX2RhdGEtPmNvbnRleHQgPSBjYWlyb19yZWZlcmVuY2UoY29u
dGV4dCk7CisvL0ZJWE1FOiBhIGhhY2sgdGlsbCB0aGUgZml4IGZvciByZWxhdGl2ZSBwYXRocyBp
cyBjaGVja2VkIGluCisjaWYgUExBVEZPUk0oR0RLKQorICAgIGNhaXJvX21vdmVfdG8oY29udGV4
dCwwLDApOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTIzLDggKzE0MCw5IEBACiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgY2Fp
cm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19zYXZlKGNvbnRleHQp
OwogICAgIGlmIChmaWxsQ29sb3IoKS5hbHBoYSgpKQogICAgICAgICBmaWxsUmVjdFNvdXJjZU92
ZXIoY29udGV4dCwgcmVjdCwgZmlsbENvbG9yKCkpOwogCkBAIC0xMzYsNiArMTU0LDcgQEAKICAg
ICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY29udGV4dCwgMS4wKTsKICAgICAgICAgY2Fpcm9f
c3Ryb2tlKGNvbnRleHQpOwogICAgIH0KKyAgICBjYWlyb19yZXN0b3JlKGNvbnRleHQpOwogfQog
CiAvLyBGSVhNRTogTm93IHRoYXQgdGhpcyBpcyByZWZhY3RvcmVkLCBpdCBzaG91bGQgYmUgc2hh
cmVkIGJ5IGFsbCBjb250ZXh0cy4KQEAgLTE0OSwyMCArMTY4LDE4IEBACiAgICAgICAgIGlmIChw
MS54KCkgPT0gcDIueCgpKSB7CiAgICAgICAgICAgICBwMS5zZXRZKHAxLnkoKSArIHN0cm9rZVdp
ZHRoKTsKICAgICAgICAgICAgIHAyLnNldFkocDIueSgpIC0gc3Ryb2tlV2lkdGgpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcDEuc2V0
WChwMS54KCkgKyBzdHJva2VXaWR0aCk7CiAgICAgICAgICAgICBwMi5zZXRYKHAyLngoKSAtIHN0
cm9rZVdpZHRoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmICgoKGludClzdHJv
a2VXaWR0aCklMikgewogICAgICAgICBpZiAocDEueCgpID09IHAyLngoKSkgewogICAgICAgICAg
ICAgLy8gV2UncmUgYSB2ZXJ0aWNhbCBsaW5lLiAgQWRqdXN0IG91ciB4LgogICAgICAgICAgICAg
cDEuc2V0WChwMS54KCkgKyAwLjUpOwogICAgICAgICAgICAgcDIuc2V0WChwMi54KCkgKyAwLjUp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gV2UncmUgYSBob3Jpem9udGFsIGxpbmUuIEFkanVzdCBvdXIgeS4KICAgICAgICAgICAg
IHAxLnNldFkocDEueSgpICsgMC41KTsKICAgICAgICAgICAgIHAyLnNldFkocDIueSgpICsgMC41
KTsKQEAgLTE4OSw3ICsyMDYsNyBAQAogICAgIEZsb2F0UG9pbnQgcDEgPSBwb2ludDE7CiAgICAg
RmxvYXRQb2ludCBwMiA9IHBvaW50MjsKICAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHAxLngo
KSA9PSBwMi54KCkpOwotICAgIAorCiAgICAgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGVyaWVzKHAx
LCBwMiwgd2lkdGgsIHBlblN0eWxlKTsKICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjb250ZXh0
LCB3aWR0aCk7CiAKQEAgLTIwNyw5ICsyMjQsOSBAQAogICAgIH0KIAogICAgIHNldENvbG9yKGNv
bnRleHQsIHBlbigpLmNvbG9yKCkpOwotICAgIAorCiAgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhj
b250ZXh0LCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Ci0gICAgCisKICAgICBpZiAocGF0V2lkdGgp
IHsKICAgICAgICAgLy8gRG8gYSByZWN0IGZpbGwgb2Ygb3VyIGVuZHBvaW50cy4gIFRoaXMgZW5z
dXJlcyB3ZSBhbHdheXMgaGF2ZSB0aGUKICAgICAgICAgLy8gYXBwZWFyYW5jZSBvZiBiZWluZyBh
IGJvcmRlci4gIFdlIHRoZW4gZHJhdyB0aGUgYWN0dWFsIGRvdHRlZC9kYXNoZWQgbGluZS4KQEAg
LTIyMCw3ICsyMzcsNyBAQAogICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKGNvbnRleHQs
IEZsb2F0UmVjdChwMS54KCktd2lkdGgsIHAxLnkoKS13aWR0aC8yLCB3aWR0aCwgd2lkdGgpLCBw
ZW4oKS5jb2xvcigpKTsKICAgICAgICAgICAgIGZpbGxSZWN0U291cmNlT3Zlcihjb250ZXh0LCBG
bG9hdFJlY3QocDIueCgpLCBwMi55KCktd2lkdGgvMiwgd2lkdGgsIHdpZHRoKSwgcGVuKCkuY29s
b3IoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gRXhhbXBsZTogODAgcGl4
ZWxzIHdpdGggYSB3aWR0aCBvZiAzMCBwaXhlbHMuCiAgICAgICAgIC8vIFJlbWFpbmRlciBpcyAy
MC4gIFRoZSBtYXhpbXVtIHBpeGVscyBvZiBsaW5lIHdlIGNvdWxkIHBhaW50CiAgICAgICAgIC8v
IHdpbGwgYmUgNTAgcGl4ZWxzLgpAQCAtMjQxLDE2ICsyNTgsMTQgQEAKICAgICAgICAgICAgICAg
ICBpZiAocmVtYWluZGVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0g
cGF0V2lkdGggLSByZW1haW5kZXI7CiAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQg
Kz0gcmVtYWluZGVyLzI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9mZnNl
dCA9IHBhdFdpZHRoLzI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghZXZl
bk51bWJlck9mU2VnbWVudHMpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV2ZW5OdW1iZXJP
ZlNlZ21lbnRzKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmRlcikKICAgICAgICAgICAg
ICAgICAgICAgcGF0dGVybk9mZnNldCA9IChwYXRXaWR0aCAtIHJlbWFpbmRlcikvMjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkb3VibGUgZGFzaCA9IHBh
dFdpZHRoOwogICAgICAgICBjYWlyb19zZXRfZGFzaChjb250ZXh0LCAmZGFzaCwgMSwgcGF0dGVy
bk9mZnNldCk7CiAgICAgfQpAQCAtMjY3LDcgKzI4Miw3IEBACiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgY2Fpcm9fdCogY29udGV4
dCA9IG1fZGF0YS0+Y29udGV4dDsKICAgICBjYWlyb19zYXZlKGNvbnRleHQpOwogICAgIGZsb2F0
IHlSYWRpdXMgPSAuNSAqIHJlY3QuaGVpZ2h0KCk7CkBAIC0yODQsNyArMjk5LDcgQEAKICAgICBp
ZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgIHNldENvbG9yKGNvbnRl
eHQsIHBlbigpLmNvbG9yKCkpOwogICAgICAgICB1bnNpZ25lZCBwZW5XaWR0aCA9IHBlbigpLndp
ZHRoKCk7Ci0gICAgICAgIGlmIChwZW5XaWR0aCA9PSAwKSAKKyAgICAgICAgaWYgKHBlbldpZHRo
ID09IDApCiAgICAgICAgICAgICBwZW5XaWR0aCsrOwogICAgICAgICBjYWlyb19zZXRfbGluZV93
aWR0aChjb250ZXh0LCBwZW5XaWR0aCk7CiAgICAgICAgIGNhaXJvX3N0cm9rZShjb250ZXh0KTsK
QEAgLTI5NiwyMSArMzExLDIxIEBACiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaW50IHggPSByZWN0LngoKTsKICAgICBpbnQgeSA9
IHJlY3QueSgpOwogICAgIGZsb2F0IHcgPSAoZmxvYXQpcmVjdC53aWR0aCgpOwogICAgIGZsb2F0
IGggPSAoZmxvYXQpcmVjdC5oZWlnaHQoKTsKICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGggLyB3
OwogICAgIGZsb2F0IHJldmVyc2VTY2FsZUZhY3RvciA9IHcgLyBoOwotICAgIAorCiAgICAgY2Fp
cm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKLSAgICBpZiAocGVuKCkuc3R5bGUoKSAh
PSBQZW46Ok5vUGVuKSB7ICAgICAgICAKKyAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5v
UGVuKSB7CiAgICAgICAgIGZsb2F0IHIgPSB3IC8gMjsKICAgICAgICAgZmxvYXQgZmEgPSBzdGFy
dEFuZ2xlOwogICAgICAgICBmbG9hdCBmYWxlbiA9ICBmYSArIGFuZ2xlU3BhbjsKICAgICAgICAg
Y2Fpcm9fYXJjKGNvbnRleHQsIHggKyByLCB5ICsgciwgciwgLWZhICogTV9QSS8xODAsIC1mYWxl
biAqIE1fUEkvMTgwKTsKLSAgICAgICAgCisKICAgICAgICAgc2V0Q29sb3IoY29udGV4dCwgcGVu
KCkuY29sb3IoKSk7CiAgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNvbnRleHQsIHBlbigp
LndpZHRoKCkpOwogICAgICAgICBjYWlyb19zdHJva2UoY29udGV4dCk7CkBAIC0zODIsNyArMzk3
LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIGludCByYWRpdXMgPSAoZm9jdXNSaW5nV2lkdGgo
KSAtIDEpIC8gMjsKICAgICBpbnQgb2Zmc2V0ID0gcmFkaXVzICsgZm9jdXNSaW5nT2Zmc2V0KCk7
Ci0gICAgCisKICAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gZm9jdXNSaW5nUmVj
dHMoKTsKICAgICB1bnNpZ25lZCByZWN0Q291bnQgPSByZWN0cy5zaXplKCk7CiAgICAgSW50UmVj
dCBmaW5hbEZvY3VzUmVjdDsKQEAgLTM5Myw3ICs0MDgsNyBAQAogICAgIH0KICAgICAvLyBGSVhN
RTogVGhlc2UgcmVjdHMgc2hvdWxkIGJlIHJvdW5kZWQKICAgICBjYWlyb19yZWN0YW5nbGUobV9k
YXRhLT5jb250ZXh0LCBmaW5hbEZvY3VzUmVjdC54KCksIGZpbmFsRm9jdXNSZWN0LnkoKSwgZmlu
YWxGb2N1c1JlY3Qud2lkdGgoKSwgZmluYWxGb2N1c1JlY3QuaGVpZ2h0KCkpOwotICAgIAorCiAg
ICAgLy8gRm9yY2UgdGhlIGFscGhhIHRvIDUwJS4gIFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSBNYWMg
ZG9lcyB3aXRoIG91dGxpbmUgcmluZ3MuCiAgICAgQ29sb3IgcmluZ0NvbG9yKGNvbG9yLnJlZCgp
LCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIDEyNyk7CiAgICAgc2V0Q29sb3IobV9kYXRh
LT5jb250ZXh0LCByaW5nQ29sb3IpOwpAQCAtNDAxLDEyICs0MTYsMTAgQEAKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldEZvY3VzUmluZ0NsaXAoY29uc3QgSW50UmVjdCYpCi17Ci19Cit7
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJGb2N1c1JpbmdDbGlwKCkKLXsKLX0KK3t9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgSW50UG9pbnQm
IHBvaW50LCBpbnQgeU9mZnNldCwgaW50IHdpZHRoLCBib29sIHByaW50aW5nKQogewpAQCAtNDE4
LDcgKzQzMSw3IEBACiAgICAgZHJhd0xpbmUob3JpZ2luLCBlbmRQb2ludCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nKGNvbnN0IEludFBvaW50JiBw
b2ludCwgaW50IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgd2lkdGgsIGJvb2wg
Z3JhbW1hcikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgogfQpAQCAtNDQzLDcgKzQ1Niw3
IEBACiAgICAgY2Fpcm9fZGV2aWNlX3RvX3VzZXJfZGlzdGFuY2UoY29udGV4dCwmeCwmeSk7CiAg
ICAgcmVzdWx0LnNldFdpZHRoKChmbG9hdCl4KTsKICAgICByZXN1bHQuc2V0SGVpZ2h0KChmbG9h
dCl5KTsKLSAgICByZXR1cm4gcmVzdWx0OyAKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCkBAIC00NTcsMTMg
KzQ3MCw1ODYgQEAKICAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7CiAgICAgY2Fpcm9fdCogY29u
dGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKICAgICBjYWlyb19nZXRfbWF0cml4KGNvbnRleHQsICZt
YXRyaXgpOwotICAgIHJldHVybiBJbnRQb2ludChtYXRyaXgueDAsIG1hdHJpeC55MCk7CisgICAg
cmV0dXJuIEludFBvaW50KChpbnQpbWF0cml4LngwLCAoaW50KW1hdHJpeC55MCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmIGxpbmssIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0KQore30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVX
aWR0aChmbG9hdCB3aWR0aCkKIHsKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGggKG1fZGF0YS0+Y29udGV4dCx3aWR0
aCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGMpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fp
cm9fbGluZV9jYXBfdCBjYXAgPSBDQUlST19MSU5FX0NBUF9CVVRUOworCisgICAgc3dpdGNoIChs
YykgeworICAgIGNhc2UgUm91bmRDYXA6CisgICAgICAgIGNhcCA9IENBSVJPX0xJTkVfQ0FQX1JP
VU5EOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAgICAgY2FwID0g
Q0FJUk9fTElORV9DQVBfU1FVQVJFOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fpcm9f
c2V0X2xpbmVfY2FwKG1fZGF0YS0+Y29udGV4dCxjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGopCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX2xpbmVfam9pbl90IGpvaW4gPSBDQUlS
T19MSU5FX0pPSU5fTUlURVI7CisKKyAgICBzd2l0Y2ggKGxqKSB7CisgICAgY2FzZSBSb3VuZEpv
aW46CisgICAgICAgIGpvaW4gPSBDQUlST19MSU5FX0pPSU5fUk9VTkQ7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQmV2ZWxKb2luOgorICAgICAgICBqb2luID0gQ0FJUk9fTElORV9KT0lOX1JP
VU5EOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fpcm9fc2V0X2xpbmVfam9pbihtX2Rh
dGEtPmNvbnRleHQsam9pbik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxp
bWl0KGZsb2F0IG1pdGVyKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQobV9kYXRhLT5jb250ZXh0LG1pdGVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IGFscGhhKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAvL0ZJWE1F
IG1lIHVzZSB0aGlzIGFscGhhIGhvdyA/CisgICAgbV9kYXRhLT5hbHBoYSA9IGFscGhhOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19vcGVyYXRv
cl90IGNvcCA9IENBSVJPX09QRVJBVE9SX0NMRUFSOworCisgICAgLy9ub3Qgc3VwcG9ydGVkID8K
KyAgICAvL2NvcCA9IENBSVJPX09QRVJBVE9SX0RFU1Q7CisgICAgLy9jb3AgPSBDQUlST19PUEVS
QVRPUl9BREQ7CisgICAgLy8gY29wID0gQ0FJUk9fT1BFUkFUT1JfU0FUVVJBVEU7CisKKyAgICBz
d2l0Y2ggKG9wKSB7CisgICAgICAgIC8vY2FzZSBDb21wb3NpdGVDbGVhcjoKKyAgICBjYXNlIENv
bXBvc2l0ZUNvcHk6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX1NPVVJDRTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgorICAgICAgICBjb3AgPSBD
QUlST19PUEVSQVRPUl9PVkVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNv
dXJjZUluOgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9JTjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJB
VE9SX09VVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VBdG9wOgor
ICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9BVE9QOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFU
T1JfREVTVF9PVkVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0
aW9uSW46CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX0RFU1RfSU47CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQ6CisgICAgICAgIGNvcCA9IENB
SVJPX09QRVJBVE9SX0RFU1RfT1VUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0
ZURlc3RpbmF0aW9uQXRvcDoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfREVTVF9BVE9Q
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVhPUjoKKyAgICAgICAgY29wID0g
Q0FJUk9fT1BFUkFUT1JfWE9SOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVBs
dXNEYXJrZXI6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX09WRVI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29tcG9zaXRlSGlnaGxpZ2h0OgorICAgICAgICBjb3AgPSBDQUlST19P
UEVSQVRPUl9PVkVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVBsdXNMaWdo
dGVyOgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9PVkVSOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLGNvcCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250
ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CisgICAgY2Fp
cm9fYXBwZW5kX3BhdGgoY3IscCk7CisgICAgY2Fpcm9fY2xpcChjcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3NjYWxlKG1fZGF0
YS0+Y29udGV4dCxzaXplLndpZHRoKCksc2l6ZS5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3JvdGF0ZShtX2RhdGEt
PmNvbnRleHQsYW5nbGVJblJhZGlhbnMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7
CisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19P
UEVSQVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcmVjdGFuZ2xlIChjciwgcmVjdC54KCkscmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbCAoY3IpOwor
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGZsb2F0IHdpZHRoKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y29udGV4dDsKKworICAgIGlmIChwZW4oKS5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsKKyAgICAg
ICAgY2Fpcm9fc2F2ZShjcik7CisgICAgICAgIHNldENvbG9yKGNyLCBwZW4oKS5jb2xvcigpKTsK
KyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5o
ZWlnaHQoKSk7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLHdpZHRoKTsKKyAgICAg
ICAgY2Fpcm9fc3Ryb2tlKGNyKTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjcik7CisgICAgfQor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBh
bHBoYSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fcHVzaF9ncm91cCAo
Y3IpOworICAgIG1fZGF0YS0+bGF5ZXJzLmFwcGVuZChhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250
ZXh0OworICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UgKGNyKTsKKyAgICBmbG9hdCBhbHBo
YSA9IG1fZGF0YS0+bGF5ZXJzLmxhc3QoKTsKKyAgICBtX2RhdGEtPmxheWVycy5yZW1vdmVMYXN0
KCk7CisgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYSAoY3IsYWxwaGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgd29ybGRNYXRy
aXgpCit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fbWF0
cml4X3QgY19tYXRyaXggPSBjYWlyb19tYXRyaXhfdCh3b3JsZE1hdHJpeCk7CisgICAgY2Fpcm9f
dHJhbnNmb3JtKGNyLCZjX21hdHJpeCk7Cit9CisKKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0U2hhZG93KEludFNpemUgY29uc3QmLCBpbnQsIENvbG9yIGNvbnN0JikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRS
b3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVm
dCwKKyAgICAgICAgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsY29uc3QgSW50U2l6ZSYgYm90dG9t
TGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpCit7CisgICAgLy9GSVhNRTogY2FsbGVk
IG9mdGVuCisgICAgLy9ub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNr
bmVzcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWZkZWYgU1ZHX1NVUFBPUlQK
K0tSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmlu
Z0RldmljZUNvbnRleHQoKQoreworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBzdGF0
aWNfY2FzdDxHcmFwaGljc0NvbnRleHRDYWlybyo+KHRoaXMpOworICAgIHJldHVybiBuZXcgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHRDYWlybyhjdHgpOworfQorI2VuZGlmCisKK0dyYXBoaWNzQ29u
dGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkKKyAgICAgICAgOkdyYXBoaWNzQ29udGV4dChjb250ZXh0KQoreworICAgIC8vbWFu
eSBjYWlybyBjYWxscyBkbyBkbyBub3QgZnVuY3Rpb24gY29ycmVjdGx5CisgICAgLy93aXRob3V0
IGEgcGF0aCBmb3IgZXhhbXBsZSB0cmFuc2Zvcm0gbm90IHVzZWQgaW4gZHJhd2luZyBwb2ludAor
ICAgIG1vdmVUbyhGbG9hdFBvaW50KDAuMCwwLjApKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6YXBwZW5kKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgLy9GSVhNRTogY2Fpcm8g
c2hvdWxkIGhhdmUgYSB3YXkgdG8gZG8gdGhpcworICAgIC8vd2l0aG91dCBjb3B5aW5nCisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcCA9IHBhdGgucGxhdGZvcm1Q
YXRoKCk7CisgICAgY2Fpcm9fYXBwZW5kX3BhdGgoY3IscCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsZWFyQ2xpcCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAg
IGNhaXJvX3Jlc2V0X2NsaXAoY3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRGaWxsUnVsZShXaW5kUnVsZSBydWxlKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAg
ICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLHJ1bGUgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklM
TF9SVUxFX0VWRU5fT0REIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZJTExfUlVM
RV9XSU5ESU5HKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0RGFzaGVzKGRv
dWJsZSogZGFzaGVzLGludCBudW1fZGFzaGVzLGRvdWJsZSBvZmZzZXQpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9k
YXRhLT5jb250ZXh0OworICAgIGNhaXJvX3NldF9kYXNoKGNyLGRhc2hlcyxudW1fZGFzaGVzLG9m
ZnNldCk7CisKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y29udGV4dDsKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQ
ZW46Ok5vUGVuKQorICAgICAgICBzZXRDb2xvcihjciwgcGVuKCkuY29sb3IoKSk7CisgICAgcmV0
dXJuIGNhaXJvX2luX3N0cm9rZShjciwoZG91YmxlKXAueCgpLChkb3VibGUpcC55KCkpOworICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnN0cm9rZUJvdW5kaW5nUmVjdCgpIGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEt
PmNvbnRleHQ7CisgICAgZG91YmxlIHgsIHksIHcsIGg7CisgICAgY2Fpcm9fc3Ryb2tlX2V4dGVu
dHMoY3IsJngsJnksJncsJmgpOworICAgIHJldHVybiBGbG9hdFJlY3QoeCx5LHcsaCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fbWF0cml4X3QgbSA9
IChjYWlyb19tYXRyaXhfdCl0cmFuc2Zvcm07CisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwmbSk7
Cit9CisKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRDYWlybzo6Z2V0Q1RNKCkKK3sK
KyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19tYXRyaXhfdCBt
YXRyaXg7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwmbWF0cml4KTsKKyAgICByZXR1cm4gQWZm
aW5lVHJhbnNmb3JtKG1hdHJpeCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0
cm9rZSgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3N0cm9rZShjcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGwoKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0
YS0+Y29udGV4dDsKKyAgICBjYWlyb19maWxsKGNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6c2V0U291cmNlUGF0dGVybihjYWlyb19wYXR0ZXJuX3QqIHBhdCkgCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3NldF9zb3VyY2UoY3IscGF0KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0U291cmNlUGF0dGVybihQYXR0ZXJuQ2Fpcm8m
IHBhdCkgCit7CisgICAgc2V0U291cmNlUGF0dGVybihwYXQucGF0dGVybigpKTsKK30KKworY2Fp
cm9fcGF0dGVybl90KiBHcmFwaGljc0NvbnRleHRDYWlybzo6c291cmNlUGF0dGVybigpIGNvbnN0
Cit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgcmV0dXJuIGNhaXJv
X2dldF9zb3VyY2UoY3IpOworfQorCitHcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQoreworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRh
LT5jb250ZXh0OworICAgIGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZSA9IGNhaXJvX2dldF90YXJn
ZXQgKGNyKTsKKyAgICBjYWlyb190KiBuZXdDciA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKKyAg
ICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dENhaXJvKG5ld0NyKTsKK30KKworR3JhcGhpY3ND
b250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjcmVhdGVQYXRoR3JhcGhpY3NDb250
ZXh0KCkKK3sKKyAgICBzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBwYXRoU3VyZmFjZTsKKyAgICBp
ZiAoIXBhdGhTdXJmYWNlKQorICAgICAgICBwYXRoU3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BOCwxLDEpOworICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9f
Y3JlYXRlKHBhdGhTdXJmYWNlKTsKKyAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dENhaXJv
KGNyKTsKK30KKworR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpj
cmVhdGVDb250ZXh0Rm9ySW1hZ2UoSW1hZ2UqIGltYWdlLCBzaXplX3QgZnJhbWVJbmRleCkKK3sK
KyAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gaW1hZ2UtPmZyYW1lQXRJbmRleChmcmFt
ZUluZGV4KTsKKyAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CisgICAg
IHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oY3IpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpjbGVhclBhdGgoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAg
ICBjYWlyb19uZXdfcGF0aChjcik7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q2Fpcm86Omlz
UGF0aEVtcHR5KCkgY29uc3QKK3sKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsK
KyAgICAvL2lmL3doZW4gdGhlIHBhdGNoIHRvIGdldCBjdXJyZW50IHB0IHJldHVybiBzdGF0dXMg
aXMgYXBwbGllZAorICAgIC8vcmV0dXJuIGNhaXJvX2dldF9jdXJyZW50X3BvaW50KGNyLCZkeCwm
ZHkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0Owor
ICAgIGNhaXJvX21vdmVfdG8oY3IsIHAueCgpLCBwLnkoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1f
ZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19saW5lX3RvKGNyLCBwLngoKSwgcC55KCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
Y2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRh
LT5jb250ZXh0OworICAgIGRvdWJsZSB4LCB5OworICAgIGRvdWJsZSB4MSA9IGNvbnRyb2xQb2lu
dC54KCk7CisgICAgZG91YmxlIHkxID0gY29udHJvbFBvaW50LnkoKTsKKyAgICBkb3VibGUgeDIg
PSBwb2ludC54KCk7CisgICAgZG91YmxlIHkyID0gcG9pbnQueSgpOworICAgIGNhaXJvX2dldF9j
dXJyZW50X3BvaW50IChjciwgJngsICZ5KTsKKyAgICBjYWlyb19jdXJ2ZV90byAoY3IsCisgICAg
ICAgICAgICAgICAgICAgIHggICsgMi4wLzMuMCAqICh4MSAtIHgpLCAgeSAgKyAyLjAvMy4wICog
KHkxIC0geSksCisgICAgICAgICAgICAgICAgICAgIHgyICsgMi4wLzMuMCAqICh4MSAtIHgyKSwg
eTIgKyAyLjAvMy4wICogKHkxIC0geTIpLAorICAgICAgICAgICAgICAgICAgICB4MiwgeTIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDIs
IGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDMpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250
ZXh0OworICAgIGNhaXJvX2N1cnZlX3RvKGNyLGNvbnRyb2xQb2ludDEueCgpLCBjb250cm9sUG9p
bnQxLnkoKSwKKyAgICAgICAgICAgICAgICAgICBjb250cm9sUG9pbnQyLngoKSwgY29udHJvbFBv
aW50Mi55KCksY29udHJvbFBvaW50My54KCksIGNvbnRyb2xQb2ludDMueSgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0
IHIsIGZsb2F0IHNhLCBmbG9hdCBlYSwgYm9vbCBjbG9ja3dpc2UpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRh
LT5jb250ZXh0OworICAgIGlmIChjbG9ja3dpc2UpCisgICAgICAgIGNhaXJvX2FyYyhjcixwLngo
KSxwLnkoKSxyLHNhLGVhKTsKKyAgICBlbHNlCisgICAgICAgIGNhaXJvX2FyY19uZWdhdGl2ZShj
cixwLngoKSxwLnkoKSxyLHNhLGVhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9h
dCByYWRpdXMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIC8vRklYTUU6IGNhaXJv
X2FyY190byBub3QgeWV0IGluIGNhaXJvIHNlZSBjYWlyby5oCisgICAgLy9jYWlyb19hcmNfdG8o
Y3IscDEueCgpLHAxLnkoKSxwMi54KCkscDIueSgpKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fc2F2ZShjcik7
CisgICAgZmxvYXQgeVJhZGl1cyA9IC41ICogcmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCB4UmFk
aXVzID0gLjUgKiByZWN0LndpZHRoKCk7CisgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCByZWN0Lngo
KSArIHhSYWRpdXMsIHJlY3QueSgpICsgeVJhZGl1cyk7CisgICAgY2Fpcm9fc2NhbGUoY3IsIHhS
YWRpdXMsIHlSYWRpdXMpOworICAgIGNhaXJvX2FyYyhjciwgMC4sIDAuLCAxLiwgMC4sIDIgKiBN
X1BJKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fp
cm9fY2xvc2VfcGF0aChjcik7Cit9CisKKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJv
Ojpib3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIGRvdWJsZSB4LCB5LCB3LCBoOworICAgIGNh
aXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX2ZpbGxfZXh0ZW50cyhjciwm
eCwmeSwmdywmaCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCh4LHksdyxoKTsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHRDYWlybzo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdp
bmRSdWxlIHJ1bGUpIGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7
CisgICAgY2Fpcm9fZmlsbF9ydWxlX3QgY3VyID0gY2Fpcm9fZ2V0X2ZpbGxfcnVsZShjcik7Cisg
ICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjcixydWxlID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJ
TExfUlVMRV9FVkVOX09ERCA6CisgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GSUxMX1JV
TEVfV0lORElORyk7CisgICAgYm9vbCBjb250YWlucyA9ICBjYWlyb19pbl9maWxsKGNyLChkb3Vi
bGUpcG9pbnQueCgpLChkb3VibGUpcG9pbnQueSgpKTsKKyAgICBjYWlyb19zZXRfZmlsbF9ydWxl
KGNyLGN1cik7CisgICAgcmV0dXJuIGNvbnRhaW5zOworfQorCitQbGF0Zm9ybVBhdGgqIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybVBhdGgoKSBjb25zdAoreworICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jb250ZXh0OworICAgIHJldHVybiBjYWlyb19jb3B5X3BhdGgoY3IpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGll
ckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdAoreworICAgIGludCBpOworICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcGF0aCA9ICBjYWlyb19jb3B5
X3BhdGggKGNyKTsKKyAgICBjYWlyb19wYXRoX2RhdGFfdCogZGF0YTsKKyAgICBQYXRoRWxlbWVu
dCBwZWxlbWVudDsKKyAgICBGbG9hdFBvaW50IHBvaW50c1szXTsKKyAgICBwZWxlbWVudC5wb2lu
dHMgPSBwb2ludHM7CisKKyAgICBmb3IgKGk9MDsgaSA8IHBhdGgtPm51bV9kYXRhOyBpICs9IHBh
dGgtPmRhdGFbaV0uaGVhZGVyLmxlbmd0aCkgeworICAgICAgICBkYXRhID0gJnBhdGgtPmRhdGFb
aV07CisgICAgICAgIHN3aXRjaCAoZGF0YS0+aGVhZGVyLnR5cGUpIHsKKyAgICAgICAgY2FzZSBD
QUlST19QQVRIX01PVkVfVE86CisgICAgICAgICAgICBwZWxlbWVudC50eXBlID0gUGF0aEVsZW1l
bnRNb3ZlVG9Qb2ludDsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1swXSA9IEZsb2F0UG9p
bnQoZGF0YVsxXS5wb2ludC54LGRhdGFbMV0ucG9pbnQueSk7CisgICAgICAgICAgICBmdW5jdGlv
bihpbmZvLCAmcGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0FJ
Uk9fUEFUSF9MSU5FX1RPOgorICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50
QWRkTGluZVRvUG9pbnQ7CisgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBGbG9hdFBv
aW50KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOworICAgICAgICAgICAgZnVuY3Rp
b24oaW5mbywgJnBlbGVtZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENB
SVJPX1BBVEhfQ1VSVkVfVE86CisgICAgICAgICAgICBwZWxlbWVudC50eXBlID0gUGF0aEVsZW1l
bnRBZGRDdXJ2ZVRvUG9pbnQ7CisgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBGbG9h
dFBvaW50KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOworICAgICAgICAgICAgcGVs
ZW1lbnQucG9pbnRzWzFdID0gRmxvYXRQb2ludChkYXRhWzJdLnBvaW50LngsZGF0YVsyXS5wb2lu
dC55KTsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1syXSA9IEZsb2F0UG9pbnQoZGF0YVsz
XS5wb2ludC54LGRhdGFbM10ucG9pbnQueSk7CisgICAgICAgICAgICBmdW5jdGlvbihpbmZvLCAm
cGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0FJUk9fUEFUSF9D
TE9TRV9QQVRIOgorICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50Q2xvc2VT
dWJwYXRoOworICAgICAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3BhdGhfZGVzdHJveSAocGF0
aCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRDYWlybzo6cGF0aERlYnVnU3RyaW5nKCkg
Y29uc3QKK3sKKyAgICBTdHJpbmcgc3RyaW5nPSIiOworICAgIGludCBpOworICAgIGNhaXJvX3Qq
IGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3BhdGhfdCAqcGF0aCA9ICBjYWlyb19j
b3B5X3BhdGggKGNyKTsKKyAgICBjYWlyb19wYXRoX2RhdGFfdCogZGF0YTsKKyAgICBpZiAocGF0
aC0+bnVtX2RhdGEgPT0gMCkKKyAgICAgICAgc3RyaW5nID0gIkVNUFRZIjsKKyAgICBmb3IgKGk9
MDsgaSA8IHBhdGgtPm51bV9kYXRhOyBpICs9IHBhdGgtPmRhdGFbaV0uaGVhZGVyLmxlbmd0aCkg
eworICAgICAgICBkYXRhID0gJnBhdGgtPmRhdGFbaV07CisgICAgICAgIHN3aXRjaCAoZGF0YS0+
aGVhZGVyLnR5cGUpIHsKKyAgICAgICAgY2FzZSBDQUlST19QQVRIX01PVkVfVE86CisgICAgICAg
ICAgICBzdHJpbmcgKz0gU3RyaW5nOjpzcHJpbnRmKCJNICUuMmYsJS4yZiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0ucG9pbnQueCwgZGF0YVsxXS5wb2lu
dC55KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENBSVJPX1BBVEhfTElORV9U
TzoKKyAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmc6OnNwcmludGYoIkwgJS4yZiwlLjJmIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXS5wb2ludC54LCBk
YXRhWzFdLnBvaW50LnkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0FJUk9f
UEFUSF9DVVJWRV9UTzoKKyAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmc6OnNwcmludGYoIkMg
JS4yZiwlLjJmLCUuMmYsJS4yZiwlLjJmLCUuMmYiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhWzFdLnBvaW50LngsIGRhdGFbMV0ucG9pbnQueSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXS5wb2ludC54LCBkYXRhWzJdLnBv
aW50LnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10ucG9p
bnQueCwgZGF0YVszXS5wb2ludC55KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENBSVJPX1BBVEhfQ0xPU0VfUEFUSDoKKyAgICAgICAgICAgIHN0cmluZyArPSAiWCI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYWlyb19wYXRoX2Rlc3Ryb3kg
KHBhdGgpOworICAgIHJldHVybiBzdHJpbmc7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIFBMQVRGT1JNKENBSVJPKQorLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBHcmFwaGljc0NvbnRleHRDYWlyb19oCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dENh
aXJvX2gKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkltYWdl
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBlbi5oIgorI2luY2x1ZGUgIlRl
eHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDx1bmljb2RlL3VtYWNoaW5lLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8
Y2Fpcm8uaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgUGF0dGVybkNhaXJv
OworCitjbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybyA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQK
K3sKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCopOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFBhdGgmKTsKKyAgICBib29sIGNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmLCBXaW5kUnVsZSBydWxlID0gUlVMRV9OT05aRVJPKSBjb25zdDsK
KyAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CisgICAgYm9vbCBpc1BhdGhFbXB0
eSgpIGNvbnN0OworICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lk
IGFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhj
b25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KTsK
KyAgICB2b2lkIGFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYpOwor
ICAgIHZvaWQgYWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBm
bG9hdCByYWRpdXMpOworCisgICAgdm9pZCBhZGRBcmMoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgY2xvY2t3aXNl
KTsKKyAgICB2b2lkIGFkZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBhZGRFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xvc2VTdWJwYXRoKCk7CisgICAgdm9p
ZCBjbGVhckNsaXAoKTsKKyAgICB2b2lkIGNsZWFyUGF0aCgpOworICAgIHZvaWQgYXBwbHkodm9p
ZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbikgY29uc3Q7CisgICAgYm9vbCBzdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5k
aW5nUmVjdCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q1RNKEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCk7CisgICAgdm9pZCBzZXRGaWxsUnVs
ZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXREYXNoZXMoZG91YmxlKiBkYXNoZXMsaW50IG51bV9k
YXNoZXMsZG91YmxlIG9mZnNldCk7CisgICAgdm9pZCBzdHJva2UoKTsKKyAgICB2b2lkIGZpbGwo
KTsKKyAgICBTdHJpbmcgcGF0aERlYnVnU3RyaW5nKCkgY29uc3Q7CisgICAgUGxhdGZvcm1QYXRo
KiBwbGF0Zm9ybVBhdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldFNvdXJjZVBhdHRlcm4oY2Fpcm9f
cGF0dGVybl90Kik7CisgICAgdm9pZCBzZXRTb3VyY2VQYXR0ZXJuKFBhdHRlcm5DYWlybyYpOwor
ICAgIGNhaXJvX3BhdHRlcm5fdCogc291cmNlUGF0dGVybigpIGNvbnN0OworICAgIEdyYXBoaWNz
Q29udGV4dCogY3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgc3RhdGljIEdyYXBoaWNzQ29u
dGV4dENhaXJvKiBjcmVhdGVQYXRoR3JhcGhpY3NDb250ZXh0KCk7CisgICAgc3RhdGljIEdyYXBo
aWNzQ29udGV4dENhaXJvKiBjcmVhdGVDb250ZXh0Rm9ySW1hZ2UoSW1hZ2UqIGltYWdlLCBzaXpl
X3QgZnJhbWVJbmRleD0wKTsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gR3JhcGhpY3NDb250ZXh0Q2Fpcm9faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jYWly
by9QYXRoQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vUGF0
aENhaXJvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vUGF0aENh
aXJvLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3Jn
PgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAg
ICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKKyNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y2Fp
cm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
dGg6OlBhdGgoKQoreworICAgIG1fZ2MgPSBHcmFwaGljc0NvbnRleHRDYWlybzo6Y3JlYXRlUGF0
aEdyYXBoaWNzQ29udGV4dCgpOworfQorUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKK3sK
KyAgICBtX2djID0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNyZWF0ZVBhdGhHcmFwaGljc0NvbnRl
eHQoKTsKKyAgICBtX2djLT5hcHBlbmQob3RoZXIpOworfQorCisKKworUGF0aCYgUGF0aDo6b3Bl
cmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQoreworICAgIGlmICgmb3RoZXIgPT0gdGhpcykgewor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIGRlbGV0ZSBtX2djOworICAgIG1fZ2Mg
PSBHcmFwaGljc0NvbnRleHRDYWlybzo6Y3JlYXRlUGF0aEdyYXBoaWNzQ29udGV4dCgpOworICAg
IG1fZ2MtPmFwcGVuZChvdGhlcik7CisgICAgcmV0dXJuICp0aGlzOworfQorCisKK1BhdGg6On5Q
YXRoKCkKK3sKKyAgICBkZWxldGUgbV9nYzsKK30KKwordm9pZCBQYXRoOjpjbGVhcigpCit7Cisg
ICAgbV9nYy0+Y2xlYXJQYXRoKCk7Cit9CisKK2Jvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZ2MtPmlzUGF0aEVtcHR5KCk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNs
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgcCkKK3sKKyAgICBtX2djLT50cmFuc2xhdGUocC53aWR0aCgp
LHAuaGVpZ2h0KCkpOworfQorCit2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBw
KQoreworICAgIG1fZ2MtPm1vdmVUbyhwKTsKK30KKwordm9pZCBQYXRoOjphZGRMaW5lVG8oY29u
c3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBtX2djLT5hZGRMaW5lVG8ocCk7Cit9CisKK3ZvaWQg
UGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9nYy0+YWRkUmVj
dChyZWN0KTsKK30KKworLyoKKyAqIGNvcGllZCBmcm9tIGxpYnN2Zy1jYWlybworICovCit2b2lk
IFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgbV9nYy0+YWRkUXVhZEN1cnZlVG8oY29udHJv
bFBvaW50LHBvaW50KTsKK30KKwordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDIs
IGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDMpCit7CisgICAgbV9nYy0+YWRkQmV6aWVy
Q3VydmVUbyhjb250cm9sUG9pbnQxLGNvbnRyb2xQb2ludDIsY29udHJvbFBvaW50Myk7Cit9CisK
K3ZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNh
LCBmbG9hdCBlYSwgYm9vbCBjbG9ja3dpc2UpCit7CisgICAgbV9nYy0+YWRkQXJjKHAscixzYSxl
YSxjbG9ja3dpc2UpOworfQorCisvKgorICogY29waWVkIGZyb20gbGlic3ZnLWNhaXJvCisgKi8K
K3ZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCByYWRpdXMpCit7CisgICAgbV9nYy0+YWRkQXJjVG8ocDEscDIscmFkaXVz
KTsKK30KKwordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBtX2djLT5hZGRFbGxpcHNlKHJlY3QpOworfQorCit2b2lkIFBhdGg6OmNsb3NlU3VicGF0
aCgpCit7CisgICAgbV9nYy0+Y2xvc2VTdWJwYXRoKCk7Cit9CisKKworRmxvYXRSZWN0IFBhdGg6
OmJvdW5kaW5nUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2MtPmJvdW5kaW5nUmVjdCgp
OworfQorCitib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5k
UnVsZSBydWxlKSBjb25zdAoreworICAgIHJldHVybiBtX2djLT5jb250YWlucyhwb2ludCxydWxl
KTsKK30KKworI2lmIFBMQVRGT1JNKENBSVJPKQorCitib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCBsaW5lV2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIExpbmVDYXAgY2FwLExpbmVKb2luIGpvaW4sIGZsb2F0IG1pdGVyTGltaXQp
IGNvbnN0Cit7CisgICAgbV9nYy0+c2F2ZSgpOworICAgIG1fZ2MtPnNldExpbmVXaWR0aChsaW5l
V2lkdGgpOworICAgIG1fZ2MtPnNldExpbmVDYXAoY2FwKTsKKyAgICBtX2djLT5zZXRMaW5lSm9p
bihqb2luKTsKKyAgICBpZiAoam9pbiA9PSBNaXRlckpvaW4gJiYgbWl0ZXJMaW1pdCkKKyAgICAg
ICAgbV9nYy0+c2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBib29sIGIgPSAgbV9nYy0+
c3Ryb2tlQ29udGFpbnMocG9pbnQpOworICAgIG1fZ2MtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4g
YjsKK30KKworRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChmbG9hdCBsaW5lV2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVDYXAgY2FwLExpbmVK
b2luIGpvaW4sIGZsb2F0IG1pdGVyTGltaXQpIGNvbnN0Cit7CisgICAgbV9nYy0+c2F2ZSgpOwor
ICAgIG1fZ2MtPnNldExpbmVXaWR0aChsaW5lV2lkdGgpOworICAgIG1fZ2MtPnNldExpbmVDYXAo
Y2FwKTsKKyAgICBtX2djLT5zZXRMaW5lSm9pbihqb2luKTsKKyAgICBpZiAoam9pbiA9PSBNaXRl
ckpvaW4gJiYgbWl0ZXJMaW1pdCkKKyAgICAgICAgbV9nYy0+c2V0TWl0ZXJMaW1pdChtaXRlckxp
bWl0KTsKKyAgICBGbG9hdFJlY3QgZiAgPSAgbV9nYy0+c3Ryb2tlQm91bmRpbmdSZWN0KCk7Cisg
ICAgbV9nYy0+cmVzdG9yZSgpOworICAgIHJldHVybiBmOworfQorI2VuZGlmCisKK3ZvaWQgUGF0
aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbikgY29uc3QKK3sKK30KKwor
dm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFucykKK3sKKyAg
ICBtX2djLT5jb25jYXRDVE0odHJhbnMpOworfQorCitQbGF0Zm9ybVBhdGgqIFBhdGg6OnBsYXRm
b3JtUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2MtPnBsYXRmb3JtUGF0aCgpOworfQor
CitTdHJpbmcgUGF0aDo6ZGVidWdTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2djLT5w
YXRoRGVidWdTdHJpbmcoKTsKK30KKworfQorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vY2Fpcm8vUmVuZGVyUGF0aENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpYy5zZWlkZWxAa2RlbWFpbC5uZXQ+CisJCQkJICAyMDA2IE1pY2hh
ZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5
bGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5
cGVzLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCiti
b29sIFJlbmRlclBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGJvb2wg
cmVxdWlyZXNTdHJva2UpIGNvbnN0Cit7CisgICAgZmxvYXQgbGluZVdpZHRoID0gS1NWR1BhaW50
ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aCh0aGlzLCBzdHlsZSgpLT5zdmdTdHlsZSgp
LT5zdHJva2VXaWR0aCgpLCAxLjApOworICAgIExpbmVDYXAgY2FwID0gc3R5bGUoKS0+c3ZnU3R5
bGUoKS0+Y2FwU3R5bGUoKTsKKyAgICBMaW5lSm9pbiBqb2luID0gIHN0eWxlKCktPnN2Z1N0eWxl
KCktPmpvaW5TdHlsZSgpOworICAgIGZsb2F0IG1pdGVyTGltaXQgPSBzdHlsZSgpLT5zdmdTdHls
ZSgpLT5zdHJva2VNaXRlckxpbWl0KCk7CisKKyAgICByZXR1cm4gcGF0aCgpLnN0cm9rZUNvbnRh
aW5zKHAsIGxpbmVXaWR0aCxjYXAsam9pbixtaXRlckxpbWl0KTsKK30KKworRmxvYXRSZWN0IFJl
bmRlclBhdGg6OnN0cm9rZUJCb3goKSBjb25zdAoreworICAgIGZsb2F0IGxpbmVXaWR0aCA9IEtT
VkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgodGhpcywgc3R5bGUoKS0+c3Zn
U3R5bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMS4wKTsKKyAgICBMaW5lQ2FwIGNhcCA9IHN0eWxlKCkt
PnN2Z1N0eWxlKCktPmNhcFN0eWxlKCk7CisgICAgTGluZUpvaW4gam9pbiA9ICBzdHlsZSgpLT5z
dmdTdHlsZSgpLT5qb2luU3R5bGUoKTsKKyAgICBmbG9hdCBtaXRlckxpbWl0ID0gc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpOworCisgICAgcmV0dXJuIHBhdGgoKS5zdHJv
a2VCb3VuZGluZ1JlY3QobGluZVdpZHRoLGNhcCxqb2luLG1pdGVyTGltaXQpOworfQorCisKK30K
KworLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vUGF0dGVybkNh
aXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1BhdHRlcm5DYWly
by5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1BhdHRlcm5DYWly
by5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
KyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAgICAgICAgICAgICAgICAgIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKwkJCQkgIDIw
MDYgTWljaGFlbCBFbW1lbCA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBhdHRlcm5DYWlyby5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxDb2xvckFycmF5KGNhaXJvX3Bh
dHRlcm5fdCAqcGF0dGVybiwgY29uc3QgVmVjdG9yPEtDR3JhZGllbnRTdG9wPiYgc3RvcHMsIGZs
b2F0IG9wYWNpdHkpCit7CisJZG91YmxlIHIsIGcsIGIsIGE7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0b3BzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBvZmZzZXQgPSAo
ZG91YmxlKXN0b3BzW2ldLmZpcnN0OworICAgICAgICBDb2xvciBjb2xvciA9IHN0b3BzW2ldLnNl
Y29uZDsKKwkJY29sb3IuZ2V0UkdCQShyLGcsYixhKTsKKyAgICAgICAJYSA9IGEqb3BhY2l0eTsg
CisJCWNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXR0ZXJuLG9mZnNldCxyLGcs
YixhKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcE9mZnNldChj
b25zdCBLQ0dyYWRpZW50U3RvcCYgZmlyc3QsIGNvbnN0IEtDR3JhZGllbnRTdG9wJiBzZWNvbmQp
Cit7CisgICAgcmV0dXJuIGZpcnN0LmZpcnN0IDwgc2Vjb25kLmZpcnN0OworfQorCisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzZXRUcmFuc0FuZFJlcGVhdChjYWlyb19wYXR0ZXJuX3QgKnBhdHRlcm4s
CisJQWZmaW5lVHJhbnNmb3JtJiB0cmFucyxLQ0dyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1l
dGhvZCApCit7CisgICAgaWYgKHNwcmVhZE1ldGhvZCA9PSBTUFJFQURNRVRIT0RfUkVQRUFUKSB7
CisJCWNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLENBSVJPX0VYVEVORF9SRVBFQVQp
OworICAgIH0gZWxzZSBpZiAoc3ByZWFkTWV0aG9kID09IFNQUkVBRE1FVEhPRF9SRUZMRUNUKSB7
CisJCWNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLENBSVJPX0VYVEVORF9SRUZMRUNU
KTsKKyAgICB9IGVsc2UgeworCQljYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybixDQUlS
T19FWFRFTkRfUEFEKTsKKyAgICB9CisJY2Fpcm9fbWF0cml4X3QgbT0gKGNhaXJvX21hdHJpeF90
KXRyYW5zOworCWNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCZtKTsKK30KKworCitQ
YXR0ZXJuQ2Fpcm86OlBhdHRlcm5DYWlybyhGbG9hdFBvaW50JiBncmFkaWVudFN0YXJ0CisJLCBG
bG9hdFBvaW50JiBncmFkaWVudEVuZAorCSwgY29uc3QgVmVjdG9yPEtDR3JhZGllbnRTdG9wPiYg
c3RvcHNJbgorCSwgZmxvYXQgb3BhY2l0eQorCSwgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFRy
YW5zZm9ybQorCSwgS0NHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QKKwksIEZsb2F0
UmVjdCYgYmJveCkKK3sKKyAgICBkb3VibGUgeDEsIHgyLCB5MSwgeTI7CisKKwlWZWN0b3I8S0NH
cmFkaWVudFN0b3A+IHN0b3BzID0gc3RvcHNJbjsKKyAJc3RkOjpzb3J0KHN0b3BzLmJlZ2luKCks
c3RvcHMuZW5kKCksIGNvbXBhcmVTdG9wT2Zmc2V0KTsKKworCS8vRklYTUU6IGNvcGllZCBmcm9t
IHF0CisgICAgaWYgKCFiYm94LmlzRW1wdHkoKSkgeworICAgICAgICB4MSA9IGRvdWJsZShiYm94
LngoKSkgKyAoZG91YmxlKGdyYWRpZW50U3RhcnQueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gu
d2lkdGgoKSkpOworICAgICAgICB5MSA9IGRvdWJsZShiYm94LnkoKSkgKyAoZG91YmxlKGdyYWRp
ZW50U3RhcnQueSgpIC8gMTAwLjApICogZG91YmxlKGJib3guaGVpZ2h0KCkpKTsKKyAgICAgICAg
eDIgPSBkb3VibGUoYmJveC53aWR0aCgpKSArIChkb3VibGUoZ3JhZGllbnRFbmQueCgpIC8gMTAw
LjApICAqIGRvdWJsZShiYm94LndpZHRoKCkpKTsKKyAgICAgICAgeTIgPSBkb3VibGUoYmJveC5o
ZWlnaHQoKSkgKyAoZG91YmxlKGdyYWRpZW50RW5kLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94
LmhlaWdodCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeDEgPSBncmFkaWVudFN0YXJ0Lngo
KTsKKyAgICAgICAgeTEgPSBncmFkaWVudFN0YXJ0LnkoKTsKKyAgICAgICAgeDIgPSBncmFkaWVu
dEVuZC54KCk7CisgICAgICAgIHkyID0gZ3JhZGllbnRFbmQueSgpOworICAgIH0KKworCW1fcGF0
dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhciAoeDEseTEseDIseTIpOworICAgIGZp
bGxDb2xvckFycmF5KG1fcGF0dGVybixzdG9wcyxvcGFjaXR5KTsKKwlzZXRUcmFuc0FuZFJlcGVh
dChtX3BhdHRlcm4sZ3JhZGllbnRUcmFuc2Zvcm0sc3ByZWFkTWV0aG9kKTsKK30KKworUGF0dGVy
bkNhaXJvOjpQYXR0ZXJuQ2Fpcm8oIEZsb2F0UG9pbnQmIGdyYWRpZW50Q2VudGVyCisJLCBGbG9h
dFBvaW50JiBncmFkaWVudEZvY2FsCisJLCBmbG9hdCBncmFkaWVudFJhZGl1cworCSwgY29uc3Qg
VmVjdG9yPEtDR3JhZGllbnRTdG9wPiYgc3RvcHNJbgorCSwgZmxvYXQgb3BhY2l0eQorCSwgQWZm
aW5lVHJhbnNmb3JtJiBncmFkaWVudFRyYW5zZm9ybQorCSwgS0NHcmFkaWVudFNwcmVhZE1ldGhv
ZCBzcHJlYWRNZXRob2QKKwksIEFmZmluZVRyYW5zZm9ybSYgZGVzdFRyYW5zZm9ybQorCSwgRmxv
YXRSZWN0JiBiYm94KQoreworCisgICAgZG91YmxlIGN4LCBmeCwgY3ksIGZ5LCByOworCisJVmVj
dG9yPEtDR3JhZGllbnRTdG9wPiBzdG9wcyA9IHN0b3BzSW47CisgCXN0ZDo6c29ydChzdG9wcy5i
ZWdpbigpLHN0b3BzLmVuZCgpLCBjb21wYXJlU3RvcE9mZnNldCk7CisKKwkvL1hYWCBGSVhNRTog
dGhpcyBpcyBwcm9iYWJseSBhbGwgd3JvbmcgY29waWVkIGZyb20gcXQKKyAgICBpZiAoIWJib3gu
aXNFbXB0eSgpKSB7CisgICAgICAgIGN4ID0gZG91YmxlKGJib3gueCgpKSArIChkb3VibGUoZ3Jh
ZGllbnRDZW50ZXIueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lkdGgoKSkpOworICAgICAg
ICBjeSA9IGRvdWJsZShiYm94LnkoKSkgKyAoZG91YmxlKGdyYWRpZW50Q2VudGVyLnkoKSAvIDEw
MC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7CisgICAgICAgIGZ4ID0gZG91YmxlKGJib3gu
d2lkdGgoKSkgKyAoZG91YmxlKGdyYWRpZW50Rm9jYWwueCgpIC8gMTAwLjApICogZG91YmxlKGJi
b3gud2lkdGgoKSkpIC0gY3g7CisgICAgICAgIGZ5ID0gZG91YmxlKGJib3guaGVpZ2h0KCkpICsg
KGRvdWJsZShncmFkaWVudEZvY2FsLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgp
KSkgLSBjeTsKKyAgICAgICAgciA9IGRvdWJsZShncmFkaWVudFJhZGl1cy8gMTAwLjApICogKHNx
cnQocG93KGJib3gud2lkdGgoKSwgMikgKyBwb3coYmJveC5oZWlnaHQoKSwgMikpKTsKKworICAg
ICAgICBmbG9hdCB3aWR0aCA9IGJib3gud2lkdGgoKTsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0g
YmJveC5oZWlnaHQoKTsKKworICAgICAgICBpbnQgZGlmZiA9IGludCh3aWR0aCAtIGhlaWdodCk7
IC8vIGFsbG93IHNsaWdodCB0b2xlcmFuY2UKKyAgICAgICAgaWYgKCEoZGlmZiA+IC0yICYmIGRp
ZmYgPCAyKSkgeworICAgICAgICAgICAgLy8gbWFrZSBlbGxpcHRpY2FsIG9yIGNpcmN1bGFyIGRl
cGVuZGluZyBvbiBiYm94IGFzcGVjdCByYXRpbworICAgICAgICAgICAgZmxvYXQgcmF0aW9YID0g
KHdpZHRoIC8gaGVpZ2h0KTsKKyAgICAgICAgICAgIGZsb2F0IHJhdGlvWSA9IChoZWlnaHQgLyB3
aWR0aCk7CisgICAgICAgICAgICBkZXN0VHJhbnNmb3JtLnNjYWxlKCh3aWR0aCA+IGhlaWdodCkg
PyAxIDogcmF0aW9YLCAod2lkdGggPiBoZWlnaHQpID8gcmF0aW9ZIDogMSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBjeCA9IGdyYWRpZW50Q2VudGVyLngoKTsKKyAgICAgICAg
Y3kgPSBncmFkaWVudENlbnRlci55KCk7CisKKyAgICAgICAgZnggPSBncmFkaWVudEZvY2FsLngo
KTsKKyAgICAgICAgZnkgPSBncmFkaWVudEZvY2FsLnkoKTsKKworICAgICAgICBmeCAtPSBjeDsK
KyAgICAgICAgZnkgLT0gY3k7CisKKyAgICAgICAgciA9IGdyYWRpZW50UmFkaXVzOworICAgIH0K
KworICAgIGlmIChzcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KSA+IHIpIHsKKyAgICAgICAgLy8gU3Bl
YzogSWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBjaXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5
KSBhbmQgciwgc2V0IChmeCwgZnkpCisgICAgICAgIC8vIHRvIHRoZSBwb2ludCBvZiBpbnRlcnNl
Y3Rpb24gb2YgdGhlIGxpbmUgdGhyb3VnaCAoZngsIGZ5KSBhbmQgdGhlIGNpcmNsZS4KKyAgICAg
ICAgZG91YmxlIGFuZ2xlID0gYXRhbjIoZnksIGZ4KTsKKyAgICAgICAgZnggPSBpbnQoY29zKGFu
Z2xlKSAqIHIpIC0gMTsKKyAgICAgICAgZnkgPSBpbnQoc2luKGFuZ2xlKSAqIHIpIC0gMTsKKyAg
ICB9CisKKwltX3BhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yYWRpYWwgKGN4LGN5LHIs
ZngsZnkscik7CisKKyAgICBmaWxsQ29sb3JBcnJheShtX3BhdHRlcm4sc3RvcHMsb3BhY2l0eSk7
CisJc2V0VHJhbnNBbmRSZXBlYXQobV9wYXR0ZXJuLGdyYWRpZW50VHJhbnNmb3JtLHNwcmVhZE1l
dGhvZCk7Cit9CisKK1BhdHRlcm5DYWlybzo6UGF0dGVybkNhaXJvKEltYWdlKiBpbWcKKwksIGZs
b2F0IG9wYWNpdHkKKwksIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtCisJLCBLQ0dy
YWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKK3sKKyAgIAljYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UgPSBpbWctPmZyYW1lQXRJbmRleCgwKTsKKyAgIAlpZighc3VyZmFjZSkgeworICAg
ICAgICByZXR1cm47CisgICAJfQorCQorICAgCW1fcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3Jl
YXRlX2Zvcl9zdXJmYWNlKHN1cmZhY2UpOworCisJaWYoIG9wYWNpdHkgIT0gMS4wMCApIHsKKwkJ
aW50IHdpZHRoID0gaW1nLT5zaXplKCkud2lkdGgoKTsKKwkJaW50IGhlaWdodCA9IGltZy0+c2l6
ZSgpLmhlaWdodCgpOworICAgIAljYWlyb19zdXJmYWNlX3QqIGlzdXJmYWNlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMix3aWR0aCxoZWlnaHQpOworCQlj
YWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShpc3VyZmFjZSk7CisgICAJCWNhaXJvX3NldF9zb3Vy
Y2VfcmdiYShjciwxLjAsMS4wLDEuMCwxLjApOworICAgIAljYWlyb19yZWN0YW5nbGUoY3IsIDAs
IDAsd2lkdGgsaGVpZ2h0KTsKKyAgICAJY2Fpcm9fZmlsbChjcik7CisgICAJCWNhaXJvX3NldF9z
b3VyY2UoY3IsbV9wYXR0ZXJuKTsKKyAgICAJY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLHdpZHRo
LGhlaWdodCk7CisgICAgCWNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3Isb3BhY2l0eSk7CisgICAg
ICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShtX3BhdHRlcm4pOworCQljYWlyb19kZXN0cm95KGNy
KTsKKwkJbV9wYXR0ZXJuID0gIGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9zdXJmYWNlKGlzdXJm
YWNlKTsKKwkJCisJfQorCXNldFRyYW5zQW5kUmVwZWF0KG1fcGF0dGVybixwYXR0ZXJuVHJhbnNm
b3JtLHNwcmVhZE1ldGhvZCk7Cit9CisKKworUGF0dGVybkNhaXJvOjpQYXR0ZXJuQ2Fpcm8oQ29s
b3IqIGNvbG9yLGZsb2F0IG9wYWNpdHkpCit7CisJZG91YmxlICByLCBnLCBiLCBhOworCWFzc2Vy
dChjb2xvcik7CisJY29sb3ItPmdldFJHQkEocixnLGIsYSk7CisJLy9GSVhNRTogaXMgdGhpcyB0
cnVlID8KKwlhID0gYSpvcGFjaXR5OworCW1fcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRl
X3JnYmEocixnLGIsYSk7Cit9CisKK1BhdHRlcm5DYWlybzo6UGF0dGVybkNhaXJvKEludFNpemUg
c2l6ZQorCSwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0KKwksIEtDR3JhZGllbnRT
cHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKQoreworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsc2l6ZS53
aWR0aCgpLHNpemUuaGVpZ2h0KCkpOworICAgIG1fcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3Jl
YXRlX2Zvcl9zdXJmYWNlKHN1cmZhY2UpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJm
YWNlKTsKKwlzZXRUcmFuc0FuZFJlcGVhdChtX3BhdHRlcm4scGF0dGVyblRyYW5zZm9ybSxzcHJl
YWRNZXRob2QpOworfQorCitQYXR0ZXJuQ2Fpcm86On5QYXR0ZXJuQ2Fpcm8oKQoreworICAgIGlm
KG1fcGF0dGVybikKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KG1fcGF0dGVybik7CisJ
bV9wYXR0ZXJuID0wOwkKK30KKworfQorLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvUGFnZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvUGFnZUdkay5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
UGFnZUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20g
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIy
LDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzEs
NTEgKzMxLDU3IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAi
RnJhbWVHZGsuaCIKKyNpbmNsdWRlICJXaW5kb3dHZGsuaCIKIAorI2RlZmluZSBub3RJbXBsZW1l
bnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQg
JXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgw
KQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBHZGtEcmF3YWJsZSogcm9vdFdpbmRv
d0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK1BhZ2U6OlBhZ2UoKQorICAgICAgICA6IG1fZnJhbWVD
b3VudCgwKQorICAgICAgICAsIG1fZHJhZ0NhcmV0Q29udHJvbGxlcigwLCB0cnVlKQogewotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZnJhbWVWaWV3LT5kcmF3YWJsZSgpOwotICAg
IGlmICghZHJhd2FibGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghR0RLX1dJTkRPVyhk
cmF3YWJsZSkpCi0gICAgICAgIHJldHVybiBkcmF3YWJsZTsKLSAgICBHZGtXaW5kb3cqIHdpbmRv
dyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIHJldHVybiBnZGtfd2luZG93X2dldF90b3Bs
ZXZlbCh3aW5kb3cpOworICAgIGluaXQoKTsKIH0KIAogRmxvYXRSZWN0IFBhZ2U6OndpbmRvd1Jl
Y3QoKSBjb25zdAogewotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IHJvb3RXaW5kb3dGb3JG
cmFtZShtYWluRnJhbWUoKSk7Ci0gICAgaWYgKCFkcmF3YWJsZSkKKyAgICBGcmFtZUdkayogZnJh
bWUgPSBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KG1haW5GcmFtZSgpKTsKKyAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBnaW50IHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoOworICAgIEludFJlY3QgcmVjdDsKIAotICAgIGlmICghR0RLX0lTX1dJTkRP
VyhkcmF3YWJsZSkpIHsKLSAgICAgICAgZ2RrX2RyYXdhYmxlX2dldF9zaXplKGRyYXdhYmxlLCAm
d2lkdGgsICZoZWlnaHQpOwotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIHdpZHRoLCBo
ZWlnaHQpOwotICAgIH0KLQotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3
YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkod2luZG93LCAmeCwgJnksICZ3aWR0
aCwgJmhlaWdodCwgJmRlcHRoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOworICAgIGlmIChmcmFtZS0+d2luZG93KCkpCisgICAgICAgIHJlY3QgPSBmcmFtZS0+
d2luZG93KCktPmdlb21ldHJ5KCk7CisgICAgZWxzZQorICAgICAgICByZWN0ID0gZnJhbWUtPnZp
ZXcoKS0+ZnJhbWVHZW9tZXRyeSgpOworICAgIHJldHVybiBGbG9hdFJlY3QocmVjdCk7CiB9CiAK
IHZvaWQgUGFnZTo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgR2Rr
RHJhd2FibGUqIGRyYXdhYmxlID0gcm9vdFdpbmRvd0ZvckZyYW1lKG1haW5GcmFtZSgpKTsKLSAg
ICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKKyAgICBGcmFtZUdk
ayogZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KG1haW5GcmFtZSgpKTsKKyAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lO
RE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X21vdmVfcmVzaXplKHdpbmRvdywgKGludCly
LngoKSwgKGludClyLnkoKSwgKGludClyLndpZHRoKCksIChpbnQpci5oZWlnaHQoKSk7CisgICAg
SW50UmVjdCByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyKTsKKyAgICBpZiAoZnJhbWUtPndpbmRv
dygpKQorICAgICAgICBmcmFtZS0+d2luZG93KCktPnNldEdlb21ldHJ5KHJlY3QpOwogfQogCiti
b29sIFBhZ2U6OmNhblJ1bk1vZGFsKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7CiB9Citib29sIFBh
Z2U6OmNhblJ1bk1vZGFsTm93KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGFn
ZTo6cnVuTW9kYWwoKQoreworCit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0N1
cnNvckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ3Vyc29yR2Rr
LmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9DdXJzb3JHZGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3ICsyMiw3IEBACiAg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTMyLDE1ICszMiwx
OCBAQAogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
CisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBV
TklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZV
TkNUSU9OX18pOyB9IHdoaWxlKDApCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ3Vyc29yOjpD
dXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKLSAgICA6IG1faW1wbChvdGhlci5tX2ltcGwpCisg
ICAgICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkKIHsKICAgICBpZiAobV9pbXBsKQogICAgICAg
ICBnZGtfY3Vyc29yX3JlZihtX2ltcGwpOwogfQogCisKIEN1cnNvcjo6fkN1cnNvcigpCiB7CiAg
ICAgaWYgKG1faW1wbCkKQEAgLTU2LDcgKzU5LDcgQEAKIH0KIAogQ3Vyc29yOjpDdXJzb3IoR2Rr
Q3Vyc29yKiBjKQotICAgIDogbV9pbXBsKGMpCisgICAgICAgIDogbV9pbXBsKGMpCiB7CiAgICAg
bV9pbXBsID0gYzsKICAgICBBU1NFUlQoYyk7CkBAIC0xNzcsNCArMTgwLDEwIEBACiAgICAgcmV0
dXJuIGM7CiB9CiAKK2NvbnN0IEN1cnNvciYgcG9pbnRlckN1cnNvcigpCit7CisgICAgc3RhdGlj
IEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0FSUk9XKTsKKyAgICByZXR1cm4gYzsKIH0K
KworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNwcAkocmV2aXNpb24gMTcz
OTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaE1hcEdkay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTgsMTMgKzgsMTMgQEAKICAqIGFyZSBtZXQ6CiAgKgog
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
ICAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KICAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCiAgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9JbWFnZUdkay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0ltYWdlR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEgKzIw
LDEyIEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpZiBQTEFURk9S
TShDQUlSTykKICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtMzIsMzEgKzMzLDMyIEBACiAjZXJyb3Ig
IkdESyBwb3J0IHJlcXVpcmVzIFBMQVRGT1JNKENBSVJPKSIKICNlbmRpZgogCisjZGVmaW5lIG5v
dEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVE
OiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9
IHdoaWxlKDApCisKIC8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0
CiBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0gICAgdm9pZCBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgpCi0g
ICAgewotICAgIH0KK3ZvaWQgSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEoKQore30KIAotICAgIHZv
aWQgSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQotICAgIHsKLSAgICB9Cit2b2lkIElt
YWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKK3t9CiAKLSAgICBJbWFnZSogSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCi0gICAgewotICAgICAgICBWZWN0
b3I8Y2hhcj4gYXJyID0gbG9hZFJlc291cmNlSW50b0FycmF5KG5hbWUpOwotICAgICAgICBJbWFn
ZSogaW1nID0gbmV3IEltYWdlOwotICAgICAgICBpbWctPnNldE5hdGl2ZURhdGEoJmFyciwgdHJ1
ZSk7Ci0gICAgICAgIHJldHVybiBpbWc7Ci0gICAgfQorSW1hZ2UqIEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQoreworICAgIFZlY3RvcjxjaGFyPiBhcnIgPSBs
b2FkUmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7CisgICAgSW1hZ2UqIGltZyA9IG5ldyBJbWFnZTsK
KyAgICBpbWctPnNldE5hdGl2ZURhdGEoJmFyciwgdHJ1ZSk7CisgICAgcmV0dXJuIGltZzsKK30K
IAotICAgIGJvb2wgSW1hZ2U6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorYm9vbCBJbWFnZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAg
ICBpZiAodHlwZSA9PSAiaW1hZ2UvanBlZyIgfHwgdHlwZSA9PSAiaW1hZ2UvcG5nIikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQogCiB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9XaWRnZXRQcml2YXRlR2RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgV2lkZ2V0OworY2xhc3MgTm9kZTsKK2Ns
YXNzIFdpZGdldENsaWVudDsKK2NsYXNzIFJlc291cmNlTG9hZGVyOworY2xhc3MgRm9ybURhdGE7
CitjbGFzcyBGcmFtZVZpZXc7CisKKworY2xhc3MgV2lkZ2V0UHJpdmF0ZSA6IFJlc291cmNlTG9h
ZGVyQ2xpZW50Cit7CisKK3B1YmxpYzoKKyAgICBXaWRnZXRQcml2YXRlKFdpZGdldCopOworICAg
IHZpcnR1YWwgfldpZGdldFByaXZhdGUoKTsKKyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5n
JiBuYW1lKQorICAgIHsKKyAgICAgICAgdGhpcy0+bV9uYW1lID0gbmFtZTsKKyAgICB9CisgICAg
U3RyaW5nIG5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbmFtZTsKKyAgICB9CisgICAg
dm9pZCBjcmVhdGVWaWV3KEtVUkwgdXJsKTsKKyAgICBib29sIG9wZW5VUkwoY29uc3QgS1VSTCYg
dXJsKTsKKyAgICB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgRm9ybURhdGEqIHBvc3REYXRhKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUxvYWRlciopOworICAgIHZpcnR1YWwg
dm9pZCByZWNlaXZlZFJlZGlyZWN0KFJlc291cmNlTG9hZGVyKiwgY29uc3QgS1VSTCYpOworICAg
IHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlTG9hZGVyKiwgUGxhdGZvcm1S
ZXNwb25zZSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wRG9jdW1lbnQoKTsKKyNl
bmRpZgorcHVibGljOgorICAgIFN0cmluZyBtX25hbWU7CisgICAgS1VSTCBtX3VybDsKKyAgICBi
b29sIHZpc2libGU7CisgICAgYm9vbCBlbmFibGVkOworICAgIGJvb2wgc2VsZWN0ZWQ7CisgICAg
Ym9vbCBoYXNGb2N1czsKKyAgICBJbnRSZWN0IGdlb21ldHJ5OworICAgIEZvbnQgZm9udDsKKyAg
ICBXaWRnZXRDbGllbnQqIGNsaWVudDsKKyAgICBXaWRnZXQqIG1fd2lkZ2V0OworICAgIFdpZGdl
dCogbV9vd25lcjsKKyAgICBXaWRnZXQqIG1fcGFyZW50OworICAgIFJlZlB0cjxGcmFtZVZpZXc+
IG1fdmlldzsKKyAgICBib29sIG1faGFzU2Nyb2xsYmFyczsKKyAgICBib29sIG1fYm91bmQ7Cisg
ICAgYm9vbCBtX2lzRXJyb3I7Cit9OworCit9CisvLyB2aW06IHRzPTQgc3c9NCBldAorCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAxNzM5OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMyw3ICszLDcgQEAKICAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5j
cHAuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM0LDEyICszNCwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgeworY2xhc3Mg
Rm9udFBsYXRmb3JtRGF0YQorewogcHVibGljOgotICAgIGNsYXNzIERlbGV0ZWQge307Ci0gICAg
Rm9udFBsYXRmb3JtRGF0YShEZWxldGVkKSA6IG1fcGF0dGVybigoRmNQYXR0ZXJuKiktMSkgeyB9
CisgICAgY2xhc3MgRGVsZXRlZAorICAgICAgICB7fTsKKyAgICBGb250UGxhdGZvcm1EYXRhKERl
bGV0ZWQpIDogbV9wYXR0ZXJuKChGY1BhdHRlcm4qKS0xKQorICAgIHsgfQogCi0gICAgRm9udFBs
YXRmb3JtRGF0YSgpIDogbV9wYXR0ZXJuKDApIHsgfQorICAgIEZvbnRQbGF0Zm9ybURhdGEoKSA6
IG1fcGF0dGVybigwKQorICAgIHsgfQogCiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAgICAgfkZvbnRQbGF0
Zm9ybURhdGEoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Jyb3dzZXJFeHRlbnNpb25H
ZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Ccm93c2VyRXh0ZW5zaW9u
R2RrLmgJKHJldmlzaW9uIDE3Mjk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQnJvd3NlckV4
dGVuc2lvbkdkay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw0MSAr
MjIsMjIgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBCcm93c2VyRXh0ZW5zaW9u
R2RrX0hfCi0jZGVmaW5lIEJyb3dzZXJFeHRlbnNpb25HZGtfSF8KLQorI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkJyb3dzZXJFeHRlbnNpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBGcmFtZTsKLWNsYXNzIEZyYW1lR2RrOwogCi1jbGFzcyBCcm93c2VyRXh0ZW5z
aW9uR2RrIDogcHVibGljIEJyb3dzZXJFeHRlbnNpb24geworY2xhc3MgQnJvd3NlckV4dGVuc2lv
bkdkazogcHVibGljIEJyb3dzZXJFeHRlbnNpb24KK3sKIHB1YmxpYzoKLSAgICBCcm93c2VyRXh0
ZW5zaW9uR2RrKEZyYW1lKik7CisgICAgQnJvd3NlckV4dGVuc2lvbkdkaygpe30KKyAgICB+QnJv
d3NlckV4dGVuc2lvbkdkaygpe30KKyAgICB2b2lkIGNyZWF0ZU5ld1dpbmRvdyhjb25zdCBGcmFt
ZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2luZG93RmVhdHVyZXMmLCBGcmFtZSomKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVOZXdXaW5kb3coY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYpOwotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVOZXdXaW5kb3coY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNv
bnN0IFdpbmRvd0ZlYXR1cmVzJiwgRnJhbWUqJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SWNv
blVSTChjb25zdCBLVVJMJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFR5cGVkSWNvblVSTChjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0eXBlKTsKLQotICAgIHZpcnR1YWwgaW50IGdldEhpc3Rv
cnlMZW5ndGgoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5j
ZSk7Ci0gICAgdmlydHVhbCBLVVJMIGhpc3RvcnlVUkwoaW50IGRpc3RhbmNlKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBjYW5SdW5Nb2RhbCgpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5Nb2RhbE5v
dygpOwotICAgIHZpcnR1YWwgdm9pZCBydW5Nb2RhbCgpOwotCi1wcml2YXRlOgotICAgIEZyYW1l
R2RrKiBtX2ZyYW1lOwogfTsKIAogfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1Njcm9sbFZpZXdHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1Njcm9sbFZpZXdHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1Njcm9sbFZpZXdHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tIAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RAc3BzdS5lZHU+LgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMiw5MyArMjEsMTEyIEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29k
ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
S2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKKyNpbmNsdWRlICJXaWRnZXRQcml2YXRlR2RrLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiYXNzZXJ0LmgiCisjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJj
YWlyby5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAKKyNk
ZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1Q
TEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJ
T05fXyk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBJTkNSRU1FTlQgMjAKKwogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vL2hhY2sgdG8gc2ltdWxhdGUgc2Ny
b2xsIGJhcnMKLWNvbnN0IGludCBzY3JvbGxiYXJTaXplID0gMTA7Ci0KLWNsYXNzIFNjcm9sbFZp
ZXc6OlNjcm9sbFZpZXdQcml2YXRlCitjbGFzcyBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0
ZSA6IHB1YmxpYyBTY3JvbGxiYXJDbGllbnQKIHsKIHB1YmxpYzoKICAgICBTY3JvbGxWaWV3UHJp
dmF0ZSgpCi0gICAgICAgIDogaGFzU3RhdGljQmFja2dyb3VuZChmYWxzZSksIHN1cHByZXNzU2Ny
b2xsYmFycyhmYWxzZSkKLSAgICAgICAgLCB2U2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKSwg
aFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKLSAgICB7IH0KKyAgICAgICAgICAgIDogaGFz
U3RhdGljQmFja2dyb3VuZChmYWxzZSkKKyAgICAgICAgICAgICwgc3VwcHJlc3NTY3JvbGxiYXJz
KGZhbHNlKQorICAgICAgICAgICAgLCB2U2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQorICAg
ICAgICAgICAgLCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQorICAgICAgICAgICAgLCB2
U2Nyb2xsYmFyKDApCisgICAgICAgICAgICAsIGhTY3JvbGxiYXIoMCkKKyAgICAgICAgICAgICwg
dmlldygwKQorICAgIHt9CisgICAgdmlydHVhbCB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHt9
CisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQorICAgIHt9CiAKKyAg
ICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKyAgICB9CisKICAgICBJbnRTaXplIHNjcm9sbE9mZnNldDsKICAg
ICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKICAgICBib29sIGhhc1N0YXRpY0JhY2tncm91bmQ7CiAg
ICAgYm9vbCBzdXBwcmVzc1Njcm9sbGJhcnM7CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFy
TW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIGhTY3JvbGxiYXJNb2RlOwotICAgIEludFJlY3Qgdmlz
aWJsZUNvbnRlbnRBcmVhOwotICAgIEludFJlY3Qgdmlld3BvcnRBcmVhOwotICAgIEludFJlY3Qg
c2Nyb2xsVmlld0FyZWE7CisgICAgUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiBoU2Nyb2xsYmFy
OworICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gdlNjcm9sbGJhcjsKKyAgICBTY3JvbGxW
aWV3KiB2aWV3OwogfTsKIAotCiBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKLSAgICA6IG1fZGF0
YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUpCi17fQorICAgICAgICA6IG1fZGF0YShuZXcgU2Nyb2xs
Vmlld1ByaXZhdGUoKSkKK3sKKyAgICBtX2RhdGEtPnZpZXcgPSB0aGlzOworfQogCiBTY3JvbGxW
aWV3Ojp+U2Nyb2xsVmlldygpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotdm9pZCBTY3Jv
bGxWaWV3Ojp1cGRhdGVWaWV3KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KQot
ewotICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55
KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSB9OwotICAgIEdka0Ry
YXdhYmxlKiBnZGtkcmF3YWJsZSA9IFdpZGdldDo6ZHJhd2FibGUoKTsKLSAgICBpZiAoR0RLX0lT
X1dJTkRPVyhnZGtkcmF3YWJsZSkpIHsKLSAgICAgICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtf
V0lORE9XKGdka2RyYXdhYmxlKTsKLSAgICAgICAgZ2RrX3dpbmRvd19pbnZhbGlkYXRlX3JlY3Qo
d2luZG93LCAmcmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChub3cpCi0gICAgICAgICAgICBnZGtf
d2luZG93X3Byb2Nlc3NfdXBkYXRlcyh3aW5kb3csIHRydWUpOwotICAgIH0KLX0KLQogdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29s
IG5vdykKIHsKICAgICBJbnRSZWN0IGFkanVzdGVkRGlydHlSZWN0KHVwZGF0ZVJlY3QpOwogICAg
IGFkanVzdGVkRGlydHlSZWN0Lm1vdmUoLW1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKLSAgICB1cGRh
dGVWaWV3KGFkanVzdGVkRGlydHlSZWN0LCBub3cpOworICAgIHJlcGFpbnQoYWRqdXN0ZWREaXJ0
eVJlY3Qsbm93KTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fZGF0YS0+dmlld3BvcnRBcmVhLndpZHRoKCk7CisgICAgSW50UmVjdCBy
ID0gZW5jbG9zaW5nSW50UmVjdCh2aXNpYmxlQ29udGVudFJlY3QoKSk7CisgICAgcmV0dXJuIHIu
d2lkdGgoKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OnZpc2libGVIZWlnaHQoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2RhdGEtPnZpZXdwb3J0QXJlYS5oZWlnaHQoKTsKKyAgICBJbnRSZWN0IHIg
PSBlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKTsKKyAgICByZXR1cm4gci5o
ZWlnaHQoKTsKIH0KIAotLy8gUmVnaW9uIG9mIHRoZSBjb250ZW50IGN1cnJlbnRseSB2aXNpYmxl
IGluIHRoZSB2aWV3cG9ydCBpbiB0aGUgY29udGVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0u
CiBGbG9hdFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKIHsKLSAg
ICBGbG9hdFJlY3QgY29udGVudFJlY3QgPSBGbG9hdFJlY3QobV9kYXRhLT52aWV3cG9ydEFyZWEp
OwotICAgIGNvbnRlbnRSZWN0Lm1vdmUobV9kYXRhLT5zY3JvbGxPZmZzZXQpOwotICAgIHJldHVy
biBjb250ZW50UmVjdDsKKyAgICBJbnRSZWN0IHZpc1JlY3QgPSBJbnRSZWN0KDAsMCx3aWR0aCgp
LGhlaWdodCgpKTsKKyAgICBpZiAobV9kYXRhLT52U2Nyb2xsYmFyKQorICAgICAgICB2aXNSZWN0
LnNldFdpZHRoKHZpc1JlY3Qud2lkdGgoKSAtIG1fZGF0YS0+dlNjcm9sbGJhci0+d2lkdGgoKSk7
CisgICAgaWYgKG1fZGF0YS0+aFNjcm9sbGJhcikKKyAgICAgICAgdmlzUmVjdC5zZXRIZWlnaHQo
dmlzUmVjdC5oZWlnaHQoKSAtIG1fZGF0YS0+aFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAgIHZp
c1JlY3QubW92ZShtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0
KHZpc1JlY3QpOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldENvbnRlbnRzUG9zKGludCBuZXdY
LCBpbnQgbmV3WSkKQEAgLTExOCw5ICsxMzYsOSBAQAogICAgIHNjcm9sbEJ5KGR4LCBkeSk7CiB9
CiAKLXZvaWQgU2Nyb2xsVmlldzo6cmVzaXplQ29udGVudHMoaW50IHcsIGludCBoKQordm9pZCBT
Y3JvbGxWaWV3OjpyZXNpemVDb250ZW50cyhpbnQgdyxpbnQgaCkKIHsKLSAgICBJbnRTaXplIG5l
d1NpemUodywgaCk7CisgICAgSW50U2l6ZSBuZXdTaXplKHcsaCk7CiAgICAgaWYgKG1fZGF0YS0+
Y29udGVudHNTaXplICE9IG5ld1NpemUpIHsKICAgICAgICAgbV9kYXRhLT5jb250ZW50c1NpemUg
PSBuZXdTaXplOwogICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CkBAIC0xNDcsMjIgKzE2NSwz
MyBAQAogICAgIHJldHVybiBtX2RhdGEtPmNvbnRlbnRzU2l6ZS5oZWlnaHQoKTsKIH0KIAorSW50
UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQp
IGNvbnN0Cit7CisgICAgSW50UG9pbnQgcmVzdWx0ID0gcG9pbnQ7CisgICAgSW50UG9pbnQgZ2xv
YmFsID0gbG9jYXRpb25JbldpbmRvdygpOworICAgIHJlc3VsdC5tb3ZlKGdsb2JhbC54KCksZ2xv
YmFsLnkoKSk7CisgICAgcmV0dXJuIHJlc3VsdCArIHNjcm9sbE9mZnNldCgpOworfQorCitJbnRQ
b2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKK3sKKyAgICBJbnRQb2ludCByZXN1bHQgPSBwb2ludDsKKyAgICBJbnRQb2ludCBnbG9i
YWwgPSBsb2NhdGlvbkluV2luZG93KCk7CisgICAgcmVzdWx0Lm1vdmUoLWdsb2JhbC54KCksLWds
b2JhbC55KCkpOworICAgIHJldHVybiByZXN1bHQgLSBzY3JvbGxPZmZzZXQoKTsKK30KKwogSW50
U2l6ZSBTY3JvbGxWaWV3OjpzY3JvbGxPZmZzZXQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rh
dGEtPnNjcm9sbE9mZnNldDsKIH0KIAotSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xs
KCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGRlbHRhID0gbV9kYXRhLT5jb250ZW50c1NpemUgLSBt
X2RhdGEtPnNjcm9sbE9mZnNldDsKLSAgICBkZWx0YS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0g
ICAgcmV0dXJuIGRlbHRhOwogCi19CiB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbEJ5KGludCBkeCwg
aW50IGR5KQogewogICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0ID0gbV9kYXRhLT5zY3JvbGxPZmZz
ZXQ7Ci0gICAgSW50U2l6ZSBtYXhTY3JvbGwgPSBtYXhpbXVtU2Nyb2xsKCk7CisgICAgSW50U2l6
ZSBtYXhTY3JvbGwgPSBtX2RhdGEtPmNvbnRlbnRzU2l6ZSAtIEludFNpemUodmlzaWJsZVdpZHRo
KCksdmlzaWJsZUhlaWdodCgpKTsKKyAgICBtYXhTY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygp
OwogICAgIEludFNpemUgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsgSW50U2l6ZShk
eCwgZHkpOwogICAgIG5ld1Njcm9sbE9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAgICAg
bmV3U2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0LnNocnVua1RvKG1heFNjcm9sbCk7CkBA
IC0xNzAsMjcgKzE5OSwyMyBAQAogICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zm
c2V0KSB7CiAgICAgICAgIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0Owog
ICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci0gICAgICAgIC8vIFNjcm9sbGJhciB1cGRhdGVz
IGNhbiBmYWlsLCBzbyB3ZSBjaGVjayB0aGUgZmluYWwgZGVsdGEgYmVmb3JlIHNjcm9sbGluZwot
ICAgICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gbV9kYXRhLT5zY3JvbGxPZmZzZXQgLSBzY3Jv
bGxPZmZzZXQ7Ci0gICAgICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRTaXplKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChpc0ZyYW1lVmlldygpKSB7Ci0gICAgICAgICAgICBG
cmFtZVZpZXcqIGYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlzKTsKLSAgICAgICAgICAg
IGYtPmZyYW1lKCktPnJlbmRlcmVyKCktPmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0Ci0gICAgICAg
ICAgICAgICAgKG5ld1Njcm9sbE9mZnNldC53aWR0aCgpLCBuZXdTY3JvbGxPZmZzZXQuaGVpZ2h0
KCksIHRydWUsIHRydWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmKCJG
SVhNRSBTY3JvbGxWaWV3R2RrIFVuc3VwcG9ydGVkIFNjcm9sbCBvcGVyYXRpb24gISEhXG4iKTsK
LSAgICAgICAgICAgIHVwZGF0ZVZpZXcobV9kYXRhLT52aWV3cG9ydEFyZWEsIHRydWUpOwotICAg
ICAgICB9CisgICAgICAgIGZyYW1lVmlldygpLT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZlbnQoKTsK
KyAgICAgICAgcmVwYWludChmYWxzZSk7CiAgICAgfQogfQogCi1TY3JvbGxiYXJNb2RlIFNjcm9s
bFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUG9p
bnRSZWN1cnNpdmVseShpbnQgZHgsIGludCBkeSkKIHsKKyAgICBpZiAocGFyZW50KCkpCisgICAg
ICAgIHBhcmVudCgpLT5mcmFtZVZpZXcoKS0+c2Nyb2xsQnkoZHgsZHkpOworfQorCitXZWJDb3Jl
OjpTY3JvbGxiYXJNb2RlIFNjcm9sbFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKK3sKICAg
ICByZXR1cm4gbV9kYXRhLT5oU2Nyb2xsYmFyTW9kZTsKIH0KIAotU2Nyb2xsYmFyTW9kZSBTY3Jv
bGxWaWV3Ojp2U2Nyb2xsYmFyTW9kZSgpIGNvbnN0CitXZWJDb3JlOjpTY3JvbGxiYXJNb2RlIFNj
cm9sbFZpZXc6OnZTY3JvbGxiYXJNb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhLT52
U2Nyb2xsYmFyTW9kZTsKIH0KQEAgLTIyOSwyNSArMjU0LDI3MyBAQAogICAgIG1fZGF0YS0+aGFz
U3RhdGljQmFja2dyb3VuZCA9IGZsYWc7CiB9CiAKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQo
V2lkZ2V0KiBjaGlsZCkKK3sKKyAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMpOworfQorCisKK3Zv
aWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKK3sKKyAgICBjaGlsZC0+
c2V0UGFyZW50KDApOworICAgIHJlcGFpbnQoZmFsc2UpOworfQorCit2b2lkIFNjcm9sbFZpZXc6
OnVwZGF0ZVNjcm9sbGJhcnMoKQoreworICAgIGJvb2wgaGFzVmVydGljYWwgPSBmYWxzZTsKKyAg
ICBib29sIGhhc0hvcml6b250YWwgPSBmYWxzZTsKKyAgICBpbnQgcGFzcyA9MDsKKworICAgIC8v
bGF5b3V0IGZpcnN0IGlmIGF1dG8gc2Nyb2xsYmFycyBzY3JvbGwgYmFycworICAgIGlmICghbV9k
YXRhLT5zdXBwcmVzc1Njcm9sbGJhcnMgJiYKKyAgICAgICAgICAgIChtX2RhdGEtPmhTY3JvbGxi
YXJNb2RlID09IFNjcm9sbGJhckF1dG8gfHxtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID09IFNjcm9s
bGJhckF1dG8pKSB7CisgICAgICAgIGZyYW1lVmlldygpLT5sYXlvdXQoKTsKKyAgICB9CisKKyAg
ICAvL01ha2UgdHdvIHBhc3NlcyB0byBkZWFsIHdpdGggaW50ZXIgYmFyIGRlcGVuZGVuY2llcwor
ICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisKKyAgICAgICAgaWYg
KG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzIHx8IG1fZGF0YS0+dlNjcm9sbGJhck1vZGUgPT0g
U2Nyb2xsYmFyQWx3YXlzT2ZmKQorICAgICAgICAgICAgaGFzVmVydGljYWwgPSBmYWxzZTsKKyAg
ICAgICAgZWxzZSBpZiAobV9kYXRhLT52U2Nyb2xsYmFyTW9kZSA9PSBTY3JvbGxiYXJBbHdheXNP
bikKKyAgICAgICAgICAgIGhhc1ZlcnRpY2FsID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9k
YXRhLT52U2Nyb2xsYmFyTW9kZSA9PSBTY3JvbGxiYXJBdXRvKSB7CisgICAgICAgICAgICBpbnQg
aCA9IGhhc0hvcml6b250YWwgPyBoZWlnaHQoKSAtIFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCk6IGhlaWdodCgpOworICAgICAgICAgICAgaGFzVmVydGljYWwg
PSAgKGNvbnRlbnRzSGVpZ2h0KCkgPiBoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Rh
dGEtPnN1cHByZXNzU2Nyb2xsYmFycyB8fCBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlID09IFNjcm9s
bGJhckFsd2F5c09mZikKKyAgICAgICAgICAgIGhhc0hvcml6b250YWwgPSBmYWxzZTsKKyAgICAg
ICAgZWxzZSBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9PSBTY3JvbGxiYXJBbHdheXNPbikK
KyAgICAgICAgICAgIGhhc0hvcml6b250YWwgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX2Rh
dGEtPmhTY3JvbGxiYXJNb2RlID09IFNjcm9sbGJhckF1dG8pIHsKKyAgICAgICAgICAgIGludCB3
ID0gaGFzVmVydGljYWwgPyB3aWR0aCgpIC0gUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKTogd2lkdGgoKTsKKyAgICAgICAgICAgIGhhc0hvcml6b250YWw9IChjb250
ZW50c1dpZHRoKCkgPiB3KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChoYXNWZXJ0aWNh
bCAmJiAhbV9kYXRhLT52U2Nyb2xsYmFyKSB7CisgICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhciA9
IG5ldyBQbGF0Zm9ybVNjcm9sbGJhcihtX2RhdGEsVmVydGljYWxTY3JvbGxiYXIsUmVndWxhclNj
cm9sbGJhcik7CisgICAgICAgIGFkZENoaWxkKG1fZGF0YS0+dlNjcm9sbGJhci5nZXQoKSk7Cisg
ICAgfSBlbHNlIGlmICghaGFzVmVydGljYWwgJiYgbV9kYXRhLT52U2Nyb2xsYmFyKSB7CisgICAg
ICAgIHJlbW92ZUNoaWxkKG1fZGF0YS0+dlNjcm9sbGJhci5nZXQoKSk7CisgICAgICAgIG1fZGF0
YS0+dlNjcm9sbGJhciA9IDA7CisgICAgfQorCisgICAgaWYgKGhhc0hvcml6b250YWwgJiYgIW1f
ZGF0YS0+aFNjcm9sbGJhcikgeworICAgICAgICBtX2RhdGEtPmhTY3JvbGxiYXIgPSBuZXcgUGxh
dGZvcm1TY3JvbGxiYXIobV9kYXRhLEhvcml6b250YWxTY3JvbGxiYXIsUmVndWxhclNjcm9sbGJh
cik7CisgICAgICAgIGFkZENoaWxkKG1fZGF0YS0+aFNjcm9sbGJhci5nZXQoKSk7CisgICAgfSBl
bHNlIGlmICghaGFzSG9yaXpvbnRhbCAmJiBtX2RhdGEtPmhTY3JvbGxiYXIpIHsKKyAgICAgICAg
cmVtb3ZlQ2hpbGQobV9kYXRhLT5oU2Nyb2xsYmFyLmdldCgpKTsKKyAgICAgICAgbV9kYXRhLT5o
U2Nyb2xsYmFyID0gMDsKKyAgICB9CisKKyAgICAvL2xheW91dCBzY3JvbGxiYXJzCisgICAgaWYg
KG1fZGF0YS0+dlNjcm9sbGJhcikgeworICAgICAgICBpbnQgaCA9IGhlaWdodCgpOworICAgICAg
ICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKQorICAgICAgICAgICAgaCAtPSBtX2RhdGEtPnZTY3Jv
bGxiYXItPndpZHRoKCk7CisgICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhci0+c2V0RnJhbWVHZW9t
ZXRyeShJbnRSZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZHRoKCktbV9kYXRhLT52U2Nyb2xsYmFyLT53aWR0aCgpLDAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsbV9kYXRhLT52U2Nyb2xsYmFy
LT53aWR0aCgpLGgpKTsKKyAgICB9CisKKyAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKSB7Cisg
ICAgICAgIGludCB3ID0gd2lkdGgoKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhcikK
KyAgICAgICAgICAgIHcgLT0gbV9kYXRhLT52U2Nyb2xsYmFyLT53aWR0aCgpOworICAgICAgICBt
X2RhdGEtPmhTY3JvbGxiYXItPnNldEZyYW1lR2VvbWV0cnkoSW50UmVjdCgwLGhlaWdodCgpIC0g
bV9kYXRhLT5oU2Nyb2xsYmFyLT5oZWlnaHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLHcsbV9kYXRhLT5oU2Nyb2xsYmFyLT5oZWlnaHQoKSkpOworICAg
IH0KK30KKworUGxhdGZvcm1TY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhclVuZGVyTW91
c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQoreworICAgIFBsYXRmb3Jt
U2Nyb2xsYmFyKiBiYXIgPSBtX2RhdGEtPmhTY3JvbGxiYXIuZ2V0KCk7CisgICAgaWYgKGJhcikg
eworICAgICAgICBJbnRQb2ludCBwID0gYmFyLT5sb2NhdGlvbkluV2luZG93KCk7CisgICAgICAg
IEludFJlY3QgZ2VvbSA9IEludFJlY3QocC54KCkscC55KCksYmFyLT53aWR0aCgpLGJhci0+aGVp
Z2h0KCkpOworICAgICAgICBpZiAoZ2VvbS5jb250YWlucyhtb3VzZUV2ZW50LnBvcygpKSkKKyAg
ICAgICAgICAgIHJldHVybiBiYXI7CisKKyAgICB9CisgICAgYmFyID0gbV9kYXRhLT52U2Nyb2xs
YmFyLmdldCgpOworICAgIGlmIChiYXIpIHsKKyAgICAgICAgSW50UG9pbnQgcCA9IGJhci0+bG9j
YXRpb25JbldpbmRvdygpOworICAgICAgICBJbnRSZWN0IGdlb20gPSBJbnRSZWN0KHAueCgpLHAu
eSgpLGJhci0+d2lkdGgoKSxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgaWYgKGdlb20uY29udGFp
bnMobW91c2VFdmVudC5wb3MoKSkpCisgICAgICAgICAgICByZXR1cm4gYmFyOworCisgICAgfQor
ICAgIHJldHVybiAwOworfQorCitib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QKK3sK
KyAgICAvL2FyZSB3ZSB2aXNpYmxlID8KKyAgICAvL2JhZCBtZXRob2QgbmFtZQorICAgIC8vaGlk
ZGVuIHRhYiBtaW5pbWl6ZWQgZXRjID8/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpoYW5kbGVLZXlib2Fy
ZEV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCit7CisKKyAgICBp
ZiAoa2V5RXZlbnQuaXNLZXlVcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTZWxlY3Rpb25D
b250cm9sbGVyKiBjb250cm9sbGVyID0gZnJhbWVWaWV3KCktPmZyYW1lKCktPnNlbGVjdGlvbkNv
bnRyb2xsZXIoKTsKKyAgICBOb2RlKiBzdGFydCA9IGNvbnRyb2xsZXItPnN0YXJ0KCkubm9kZSgp
OworICAgIGlmIChzdGFydCAmJiBzdGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgeworCisgICAg
ICAgIHN3aXRjaCAoa2V5RXZlbnQuV2luZG93c0tleUNvZGUoKSkgeworICAgICAgICBjYXNlIFZL
X0JBQ0s6CisgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKGZyYW1l
VmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFZLX0RFTEVURToKKyAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxl
dGVLZXlQcmVzc2VkKGZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgICAgICBjb250cm9sbGVy
LT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpMRUZULCBDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAg
ICAgIGNvbnRyb2xsZXItPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULCBDaGFy
YWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWS19V
UDoKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpN
T1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkJBQ0tXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBWS19ET1dOOgorICAgICAgICAgICAgY29udHJvbGxlci0+bW9kaWZ5KFNlbGVj
dGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwgUGFyYWdyYXBoR3JhbnVsYXJpdHkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBUeXBpbmdDb21tYW5k
OjppbnNlcnRUZXh0KGZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLCBrZXlFdmVudC50
ZXh0KCksIGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPm1vZGlmeShTZWxlY3Rpb25D
b250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICBzd2l0Y2ggKGtleUV2ZW50LldpbmRvd3NL
ZXlDb2RlKCkpIHsKKyAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgIHNjcm9sbEJ5KC1JTkNSRU1F
TlQsMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgIHNjcm9s
bEJ5KElOQ1JFTUVOVCwwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19VUDoKKyAgICAg
ICAgc2Nyb2xsQnkoMCwtSU5DUkVNRU5UKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19E
T1dOOgorICAgICAgICBzY3JvbGxCeSgwLElOQ1JFTUVOVCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVktfUFJJT1I6CisgICAgICAgIC8vcmV0dXJuIFNCX1BBR0VVUDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBWS19ORVhUOgorICAgICAgICAvL3JldHVybiBTQl9QQUdFRE9XTjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19IT01FOgorICAgICAgICBpZiAoaXNGcmFtZVZpZXco
KSkgeworICAgICAgICAgICAgc2V0Q29udGVudHNQb3MoMCwwKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFZLX0VORDoKKyAgICAgICAgaWYgKGlzRnJhbWVWaWV3KCkpIHsK
KyAgICAgICAgICAgIHNldENvbnRlbnRzUG9zKDAsY29udGVudHNIZWlnaHQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19TUEFDRToKKyAgICAgICAgaWYgKGtleUV2
ZW50LnNoaWZ0S2V5KCkpCisgICAgICAgICAgICBzY3JvbGxCeSgwLC1JTkNSRU1FTlQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBzY3JvbGxCeSgwLElOQ1JFTUVOVCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnNldEZyYW1lR2VvbWV0cnkoY29u
c3QgSW50UmVjdCYgcikKIHsKLSAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkocik7Ci0gICAg
bV9kYXRhLT5zY3JvbGxWaWV3QXJlYSA9IEludFJlY3QoMCwgMCwgci53aWR0aCgpLCByLmhlaWdo
dCgpKTsKLSAgICBtX2RhdGEtPnZpZXdwb3J0QXJlYSA9IEludFJlY3QoMCwgMCwgci53aWR0aCgp
IC0gc2Nyb2xsYmFyU2l6ZSwgci5oZWlnaHQoKSAtIHNjcm9sbGJhclNpemUpOworICAgIGlmIChw
cml2YXRlRGF0YSgpLT5nZW9tZXRyeSA9PSByKQorICAgICAgICByZXR1cm47CisgICAgcHJpdmF0
ZURhdGEoKS0+Z2VvbWV0cnkgPSByOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICBEb2N1
bWVudCogZG9jID0gZnJhbWVWaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKGRv
YykgeworICAgICAgICBSZW5kZXJWaWV3ICpyb290ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVmlldyo+
KGRvYy0+cmVuZGVyZXIoKSk7CisgICAgICAgIGlmIChyb290KQorICAgICAgICAgICAgcm9vdC0+
c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICB9CisgICAgZnJhbWVWaWV3KCkt
PmxheW91dChmYWxzZSk7CisgICAgZnJhbWVWaWV3KCktPmxheW91dCh0cnVlKTsKKyAgICBmcmFt
ZVZpZXcoKS0+ZnJhbWUoKS0+c2VuZFJlc2l6ZUV2ZW50KCk7CisgICAgZnJhbWVWaWV3KCktPmZy
YW1lKCktPnNlbmRTY3JvbGxFdmVudCgpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnNldERyYXdh
YmxlKEdka0RyYXdhYmxlKiBnZGtkcmF3YWJsZSkKK3ZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIFdpZGdl
dDo6c2V0RHJhd2FibGUoZ2RrZHJhd2FibGUpOwotICAgIGlmICghR0RLX0lTX1dJTkRPVyhnZGtk
cmF3YWJsZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJpbWFnZSBzY3JvbGx2aWV3IG5vdCBzdXBw
b3J0ZWQiKTsKKyAgICAvL3N1YndpZGdldHMgY2FuIGNhdXNlIGEgcGFpbnQgYmVmb3JlIHdlIGFy
ZSBsb2FkZWQKKyAgICBpZiAoIWZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpIHx8ICFm
cmFtZVZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPXN0YXRpY19jYXN0PEdyYXBoaWNz
Q29udGV4dENhaXJvKj4oY29udGV4dCk7CisgICAgSW50UmVjdCBnZW9tID0gZnJhbWVHZW9tZXRy
eSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gbV9kYXRhLT5zY3JvbGxPZmZzZXQ7CisKKworICAg
IC8vZm9yIG5vdyBubyBvdGhlciBzdWJjbGFzc2VzCisgICAgYXNzZXJ0KGZyYW1lVmlldygpID09
IHRoaXMpOworICAgIGN0eC0+c2F2ZSgpOworICAgIEludFJlY3QgZGlydHk9IHJlY3Q7CisgICAg
SW50UG9pbnQgcCA9IGxvY2F0aW9uSW5XaW5kb3coKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnMgPSBjdHgtPmdldENUTSgpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBJbnRSZWN0KDAs
MCx3aWR0aCgpLGhlaWdodCgpKTsKKyAgICBJbnRSZWN0IHZDUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOworCisgICAgY3R4LT50cmFuc2xhdGUoLW9mZnNldC53
aWR0aCgpLC1vZmZzZXQuaGVpZ2h0KCkpOworICAgIEludFJlY3QgY2xpcCA9IGVuY2xvc2luZ0lu
dFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOworICAgIGN0eC0+Y2xlYXJDbGlwKCk7CisgICAg
Y3R4LT5jbGlwKGNsaXApOworICAgIGNhaXJvX3QqIGNyID0gY3R4LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+cGFpbnQoY3R4LGNsaXApOworICAgIGN0eC0+
cmVzdG9yZSgpOworCisgICAgaWYgKG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKSB7CisgICAgICAgIEludFJl
Y3QgciA9IG1fZGF0YS0+aFNjcm9sbGJhci0+ZnJhbWVHZW9tZXRyeSgpOworICAgICAgICBjdHgt
PnNhdmUoKTsKKyAgICAgICAgY3R4LT5jbGVhckNsaXAoKTsKKyAgICAgICAgY3R4LT50cmFuc2xh
dGUoci54KCksci55KCkpOworICAgICAgICBjbGlwID0gSW50UmVjdCgwLDAsci53aWR0aCgpLHIu
aGVpZ2h0KCkpOworICAgICAgICBjdHgtPmNsaXAoY2xpcCk7CisgICAgICAgIHRyYW5zID0gY3R4
LT5nZXRDVE0oKTsKKyAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyLT5wYWludChjdHgsY2xpcCk7
CisgICAgICAgIGN0eC0+cmVzdG9yZSgpOwogICAgIH0KLSAgICBHZGtXaW5kb3cqIGZyYW1lID0g
R0RLX1dJTkRPVyhnZGtkcmF3YWJsZSk7Ci0gICAgZ2ludCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aDsKLSAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShmcmFtZSwgJngsICZ5LCAmd2lkdGgs
ICZoZWlnaHQsICZkZXB0aCk7Ci0gICAgbV9kYXRhLT5zY3JvbGxWaWV3QXJlYSA9IEludFJlY3Qo
MCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbV9kYXRhLT52aWV3cG9ydEFyZWEgPSBJbnRSZWN0
KDAsIDAsIHdpZHRoIC0gc2Nyb2xsYmFyU2l6ZSwgaGVpZ2h0IC0gc2Nyb2xsYmFyU2l6ZSk7Cisg
ICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhcikgeworICAgICAgICBJbnRSZWN0IHIgPSBtX2RhdGEt
PnZTY3JvbGxiYXItPmZyYW1lR2VvbWV0cnkoKTsKKyAgICAgICAgY3R4LT5zYXZlKCk7CisgICAg
ICAgIGN0eC0+Y2xlYXJDbGlwKCk7CisgICAgICAgIGN0eC0+dHJhbnNsYXRlKHIueCgpLHIueSgp
KTsKKyAgICAgICAgY2xpcCA9IEludFJlY3QoMCwwLHIud2lkdGgoKSxyLmhlaWdodCgpKTsKKyAg
ICAgICAgY3R4LT5jbGlwKGNsaXApOworICAgICAgICB0cmFucyA9IGN0eC0+Z2V0Q1RNKCk7Cisg
ICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhci0+cGFpbnQoY3R4LGNsaXApOworICAgICAgICBjdHgt
PnJlc3RvcmUoKTsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Zv
bnRDYWNoZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udENh
Y2hlR2RrLmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250
Q2FjaGVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04LDEzICs4
LDEzIEBACiAgKiBhcmUgbWV0OgogICoKICAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgogICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgogICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAtMzMsNiArMzMsOCBAQAogCiAjaW5jbHVkZSAiRm9u
dC5oIgogI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5o
IgorI2luY2x1ZGUgPGFzc2VydC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0yMiw3ICsyMiw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgi
CiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5j
bHVkZSA8YXNzZXJ0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNDI0ICs0Miw0
NzIgQEAKIHN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZ3VpbnQga2V5
Q29kZSkKIHsKICAgICBzd2l0Y2ggKGtleUNvZGUpIHsKLSAgICAgICAgY2FzZSBHREtfTWVudToK
LSAgICAgICAgY2FzZSBHREtfQWx0X0w6Ci0gICAgICAgIGNhc2UgR0RLX0FsdF9SOgotICAgICAg
ICAgICAgcmV0dXJuICJBbHQiOwotICAgICAgICBjYXNlIEdES19DbGVhcjoKLSAgICAgICAgICAg
IHJldHVybiAiQ2xlYXIiOwotICAgICAgICBjYXNlIEdES19Eb3duOgotICAgICAgICAgICAgcmV0
dXJuICJEb3duIjsKLSAgICAgICAgICAgIC8vICJFbmQiCi0gICAgICAgIGNhc2UgR0RLX0VuZDoK
LSAgICAgICAgICAgIHJldHVybiAiRW5kIjsKLSAgICAgICAgICAgIC8vICJFbnRlciIKLSAgICAg
ICAgY2FzZSBHREtfSVNPX0VudGVyOgotICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKLSAgICAg
ICAgICAgIHJldHVybiAiRW50ZXIiOwotICAgICAgICBjYXNlIEdES19FeGVjdXRlOgotICAgICAg
ICAgICAgcmV0dXJuICJFeGVjdXRlIjsKLSAgICAgICAgY2FzZSBHREtfRjE6Ci0gICAgICAgICAg
ICByZXR1cm4gIkYxIjsKLSAgICAgICAgY2FzZSBHREtfRjI6Ci0gICAgICAgICAgICByZXR1cm4g
IkYyIjsKLSAgICAgICAgY2FzZSBHREtfRjM6Ci0gICAgICAgICAgICByZXR1cm4gIkYzIjsKLSAg
ICAgICAgY2FzZSBHREtfRjQ6Ci0gICAgICAgICAgICByZXR1cm4gIkY0IjsKLSAgICAgICAgY2Fz
ZSBHREtfRjU6Ci0gICAgICAgICAgICByZXR1cm4gIkY1IjsKLSAgICAgICAgY2FzZSBHREtfRjY6
Ci0gICAgICAgICAgICByZXR1cm4gIkY2IjsKLSAgICAgICAgY2FzZSBHREtfRjc6Ci0gICAgICAg
ICAgICByZXR1cm4gIkY3IjsKLSAgICAgICAgY2FzZSBHREtfRjg6Ci0gICAgICAgICAgICByZXR1
cm4gIkY4IjsKLSAgICAgICAgY2FzZSBHREtfRjk6Ci0gICAgICAgICAgICByZXR1cm4gIkY5IjsK
LSAgICAgICAgY2FzZSBHREtfRjEwOgotICAgICAgICAgICAgcmV0dXJuICJGMTAiOwotICAgICAg
ICBjYXNlIEdES19GMTE6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMSI7Ci0gICAgICAgIGNhc2Ug
R0RLX0YxMjoKLSAgICAgICAgICAgIHJldHVybiAiRjEyIjsKLSAgICAgICAgY2FzZSBHREtfRjEz
OgotICAgICAgICAgICAgcmV0dXJuICJGMTMiOwotICAgICAgICBjYXNlIEdES19GMTQ6Ci0gICAg
ICAgICAgICByZXR1cm4gIkYxNCI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNToKLSAgICAgICAgICAg
IHJldHVybiAiRjE1IjsKLSAgICAgICAgY2FzZSBHREtfRjE2OgotICAgICAgICAgICAgcmV0dXJu
ICJGMTYiOwotICAgICAgICBjYXNlIEdES19GMTc6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNyI7
Ci0gICAgICAgIGNhc2UgR0RLX0YxODoKLSAgICAgICAgICAgIHJldHVybiAiRjE4IjsKLSAgICAg
ICAgY2FzZSBHREtfRjE5OgotICAgICAgICAgICAgcmV0dXJuICJGMTkiOwotICAgICAgICBjYXNl
IEdES19GMjA6Ci0gICAgICAgICAgICByZXR1cm4gIkYyMCI7Ci0gICAgICAgIGNhc2UgR0RLX0Yy
MToKLSAgICAgICAgICAgIHJldHVybiAiRjIxIjsKLSAgICAgICAgY2FzZSBHREtfRjIyOgotICAg
ICAgICAgICAgcmV0dXJuICJGMjIiOwotICAgICAgICBjYXNlIEdES19GMjM6Ci0gICAgICAgICAg
ICByZXR1cm4gIkYyMyI7Ci0gICAgICAgIGNhc2UgR0RLX0YyNDoKLSAgICAgICAgICAgIHJldHVy
biAiRjI0IjsKLSAgICAgICAgY2FzZSBHREtfSGVscDoKLSAgICAgICAgICAgIHJldHVybiAiSGVs
cCI7Ci0gICAgICAgIGNhc2UgR0RLX0hvbWU6Ci0gICAgICAgICAgICByZXR1cm4gIkhvbWUiOwot
ICAgICAgICBjYXNlIEdES19JbnNlcnQ6Ci0gICAgICAgICAgICByZXR1cm4gIkluc2VydCI7Ci0g
ICAgICAgIGNhc2UgR0RLX0xlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gIkxlZnQiOwotICAgICAg
ICBjYXNlIEdES19QYWdlX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gIlBhZ2VEb3duIjsKLSAg
ICAgICAgY2FzZSBHREtfUGFnZV9VcDoKLSAgICAgICAgICAgIHJldHVybiAiUGFnZVVwIjsKLSAg
ICAgICAgY2FzZSBHREtfUGF1c2U6Ci0gICAgICAgICAgICByZXR1cm4gIlBhdXNlIjsKLSAgICAg
ICAgY2FzZSBHREtfMzI3MF9QcmludFNjcmVlbjoKLSAgICAgICAgICAgIHJldHVybiAiUHJpbnRT
Y3JlZW4iOwotICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAgICAgICAgIHJldHVybiAiUmln
aHQiOwotICAgICAgICBjYXNlIEdES19TZWxlY3Q6Ci0gICAgICAgICAgICByZXR1cm4gIlNlbGVj
dCI7Ci0gICAgICAgIGNhc2UgR0RLX1VwOgotICAgICAgICAgICAgcmV0dXJuICJVcCI7Ci0gICAg
ICAgICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDAwN0YuCi0gICAg
ICAgIGNhc2UgR0RLX0RlbGV0ZToKLSAgICAgICAgICAgIHJldHVybiAiVSswMDAwN0YiOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6c3ByaW50ZigiVSslMDZY
IiwgdG91cHBlcihrZXlDb2RlKSk7CisgICAgY2FzZSBHREtfTWVudToKKyAgICBjYXNlIEdES19B
bHRfTDoKKyAgICBjYXNlIEdES19BbHRfUjoKKyAgICAgICAgcmV0dXJuICJBbHQiOworICAgIGNh
c2UgR0RLX0NsZWFyOgorICAgICAgICByZXR1cm4gIkNsZWFyIjsKKyAgICBjYXNlIEdES19Eb3du
OgorICAgICAgICByZXR1cm4gIkRvd24iOworICAgICAgICAvLyAiRW5kIgorICAgIGNhc2UgR0RL
X0VuZDoKKyAgICAgICAgcmV0dXJuICJFbmQiOworICAgICAgICAvLyAiRW50ZXIiCisgICAgY2Fz
ZSBHREtfSVNPX0VudGVyOgorICAgIGNhc2UgR0RLX0tQX0VudGVyOgorICAgICAgICByZXR1cm4g
IkVudGVyIjsKKyAgICBjYXNlIEdES19FeGVjdXRlOgorICAgICAgICByZXR1cm4gIkV4ZWN1dGUi
OworICAgIGNhc2UgR0RLX0YxOgorICAgICAgICByZXR1cm4gIkYxIjsKKyAgICBjYXNlIEdES19G
MjoKKyAgICAgICAgcmV0dXJuICJGMiI7CisgICAgY2FzZSBHREtfRjM6CisgICAgICAgIHJldHVy
biAiRjMiOworICAgIGNhc2UgR0RLX0Y0OgorICAgICAgICByZXR1cm4gIkY0IjsKKyAgICBjYXNl
IEdES19GNToKKyAgICAgICAgcmV0dXJuICJGNSI7CisgICAgY2FzZSBHREtfRjY6CisgICAgICAg
IHJldHVybiAiRjYiOworICAgIGNhc2UgR0RLX0Y3OgorICAgICAgICByZXR1cm4gIkY3IjsKKyAg
ICBjYXNlIEdES19GODoKKyAgICAgICAgcmV0dXJuICJGOCI7CisgICAgY2FzZSBHREtfRjk6Cisg
ICAgICAgIHJldHVybiAiRjkiOworICAgIGNhc2UgR0RLX0YxMDoKKyAgICAgICAgcmV0dXJuICJG
MTAiOworICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgcmV0dXJuICJGMTEiOworICAgIGNhc2Ug
R0RLX0YxMjoKKyAgICAgICAgcmV0dXJuICJGMTIiOworICAgIGNhc2UgR0RLX0YxMzoKKyAgICAg
ICAgcmV0dXJuICJGMTMiOworICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgcmV0dXJuICJGMTQi
OworICAgIGNhc2UgR0RLX0YxNToKKyAgICAgICAgcmV0dXJuICJGMTUiOworICAgIGNhc2UgR0RL
X0YxNjoKKyAgICAgICAgcmV0dXJuICJGMTYiOworICAgIGNhc2UgR0RLX0YxNzoKKyAgICAgICAg
cmV0dXJuICJGMTciOworICAgIGNhc2UgR0RLX0YxODoKKyAgICAgICAgcmV0dXJuICJGMTgiOwor
ICAgIGNhc2UgR0RLX0YxOToKKyAgICAgICAgcmV0dXJuICJGMTkiOworICAgIGNhc2UgR0RLX0Yy
MDoKKyAgICAgICAgcmV0dXJuICJGMjAiOworICAgIGNhc2UgR0RLX0YyMToKKyAgICAgICAgcmV0
dXJuICJGMjEiOworICAgIGNhc2UgR0RLX0YyMjoKKyAgICAgICAgcmV0dXJuICJGMjIiOworICAg
IGNhc2UgR0RLX0YyMzoKKyAgICAgICAgcmV0dXJuICJGMjMiOworICAgIGNhc2UgR0RLX0YyNDoK
KyAgICAgICAgcmV0dXJuICJGMjQiOworICAgIGNhc2UgR0RLX0hlbHA6CisgICAgICAgIHJldHVy
biAiSGVscCI7CisgICAgY2FzZSBHREtfSG9tZToKKyAgICAgICAgcmV0dXJuICJIb21lIjsKKyAg
ICBjYXNlIEdES19JbnNlcnQ6CisgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKKyAgICBjYXNlIEdE
S19MZWZ0OgorICAgICAgICByZXR1cm4gIkxlZnQiOworICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoK
KyAgICAgICAgcmV0dXJuICJQYWdlRG93biI7CisgICAgY2FzZSBHREtfUGFnZV9VcDoKKyAgICAg
ICAgcmV0dXJuICJQYWdlVXAiOworICAgIGNhc2UgR0RLX1BhdXNlOgorICAgICAgICByZXR1cm4g
IlBhdXNlIjsKKyAgICBjYXNlIEdES18zMjcwX1ByaW50U2NyZWVuOgorICAgICAgICByZXR1cm4g
IlByaW50U2NyZWVuIjsKKyAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgcmV0dXJuICJSaWdo
dCI7CisgICAgY2FzZSBHREtfU2VsZWN0OgorICAgICAgICByZXR1cm4gIlNlbGVjdCI7CisgICAg
Y2FzZSBHREtfVXA6CisgICAgICAgIHJldHVybiAiVXAiOworICAgICAgICAvLyBTdGFuZGFyZCBz
YXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDAwN0YuCisgICAgY2FzZSBHREtfRGVsZXRlOgorICAg
ICAgICByZXR1cm4gIlUrMDAwMDdGIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU3Ry
aW5nOjpzcHJpbnRmKCJVKyUwNlgiLCB0b3VwcGVyKGtleUNvZGUpKTsKICAgICB9CiB9CiAKIHN0
YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBpbnQga2V5Y29kZSkK
IHsKICAgICBzd2l0Y2ggKGtleWNvZGUpIHsKLSAgICAgICAgY2FzZSBHREtfS1BfMDoKLSAgICAg
ICAgICAgIHJldHVybiBWS19OVU1QQUQwOy8vICg2MCkgTnVtZXJpYyBrZXlwYWQgMCBrZXkKLSAg
ICAgICAgY2FzZSBHREtfS1BfMToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQxOy8vICg2
MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfMjoKLSAgICAgICAg
ICAgIHJldHVybiAgVktfTlVNUEFEMjsgLy8gKDYyKSBOdW1lcmljIGtleXBhZCAyIGtleQotICAg
ICAgICBjYXNlIEdES19LUF8zOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDM7IC8vICg2
MykgTnVtZXJpYyBrZXlwYWQgMyBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19OVU1QQUQ0OyAvLyAoNjQpIE51bWVyaWMga2V5cGFkIDQga2V5Ci0gICAg
ICAgIGNhc2UgR0RLX0tQXzU6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENTsgLy8oNjUp
IE51bWVyaWMga2V5cGFkIDUga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzY6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfTlVNUEFENjsgLy8gKDY2KSBOdW1lcmljIGtleXBhZCA2IGtleQotICAgICAg
ICBjYXNlIEdES19LUF83OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDc7IC8vICg2Nykg
TnVtZXJpYyBrZXlwYWQgNyBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfODoKLSAgICAgICAgICAg
IHJldHVybiBWS19OVU1QQUQ4OyAvLyAoNjgpIE51bWVyaWMga2V5cGFkIDgga2V5Ci0gICAgICAg
IGNhc2UgR0RLX0tQXzk6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEOTsgLy8gKDY5KSBO
dW1lcmljIGtleXBhZCA5IGtleQotICAgICAgICBjYXNlIEdES19LUF9NdWx0aXBseToKLSAgICAg
ICAgICAgIHJldHVybiBWS19NVUxUSVBMWTsgLy8gKDZBKSBNdWx0aXBseSBrZXkKLSAgICAgICAg
Y2FzZSBHREtfS1BfQWRkOgotICAgICAgICAgICAgcmV0dXJuIFZLX0FERDsgLy8gKDZCKSBBZGQg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX1N1YnRyYWN0OgotICAgICAgICAgICAgcmV0dXJuIFZL
X1NVQlRSQUNUOyAvLyAoNkQpIFN1YnRyYWN0IGtleQotICAgICAgICBjYXNlIEdES19LUF9EZWNp
bWFsOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1hbCBrZXkK
LSAgICAgICAgY2FzZSBHREtfS1BfRGl2aWRlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RJVklE
RTsgLy8gKDZGKSBEaXZpZGUga2V5CisgICAgY2FzZSBHREtfS1BfMDoKKyAgICAgICAgcmV0dXJu
IFZLX05VTVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgIGNhc2UgR0RLX0tQ
XzE6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQxOy8vICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBr
ZXkKKyAgICBjYXNlIEdES19LUF8yOgorICAgICAgICByZXR1cm4gIFZLX05VTVBBRDI7IC8vICg2
MikgTnVtZXJpYyBrZXlwYWQgMiBrZXkKKyAgICBjYXNlIEdES19LUF8zOgorICAgICAgICByZXR1
cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgIGNhc2UgR0RL
X0tQXzQ6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQ0OyAvLyAoNjQpIE51bWVyaWMga2V5cGFk
IDQga2V5CisgICAgY2FzZSBHREtfS1BfNToKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDU7IC8v
KDY1KSBOdW1lcmljIGtleXBhZCA1IGtleQorICAgIGNhc2UgR0RLX0tQXzY6CisgICAgICAgIHJl
dHVybiBWS19OVU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5CisgICAgY2FzZSBH
REtfS1BfNzoKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDc7IC8vICg2NykgTnVtZXJpYyBrZXlw
YWQgNyBrZXkKKyAgICBjYXNlIEdES19LUF84OgorICAgICAgICByZXR1cm4gVktfTlVNUEFEODsg
Ly8gKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQorICAgIGNhc2UgR0RLX0tQXzk6CisgICAgICAg
IHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5CisgICAgY2Fz
ZSBHREtfS1BfTXVsdGlwbHk6CisgICAgICAgIHJldHVybiBWS19NVUxUSVBMWTsgLy8gKDZBKSBN
dWx0aXBseSBrZXkKKyAgICBjYXNlIEdES19LUF9BZGQ6CisgICAgICAgIHJldHVybiBWS19BREQ7
IC8vICg2QikgQWRkIGtleQorICAgIGNhc2UgR0RLX0tQX1N1YnRyYWN0OgorICAgICAgICByZXR1
cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5CisgICAgY2FzZSBHREtfS1BfRGVj
aW1hbDoKKyAgICAgICAgcmV0dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1hbCBrZXkKKyAg
ICBjYXNlIEdES19LUF9EaXZpZGU6CisgICAgICAgIHJldHVybiBWS19ESVZJREU7IC8vICg2Rikg
RGl2aWRlIGtleQogCi0gICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKLSAgICAgICAgICAgIHJl
dHVybiBWS19CQUNLOyAvLyAoMDgpIEJBQ0tTUEFDRSBrZXkKLSAgICAgICAgY2FzZSBHREtfVGFi
OgotICAgICAgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5Ci0gICAgICAgIGNh
c2UgR0RLX0NsZWFyOgotICAgICAgICAgICAgcmV0dXJuIFZLX0NMRUFSOyAvLyAoMEMpIENMRUFS
IGtleQotICAgICAgICBjYXNlIEdES19SZXR1cm46Ci0gICAgICAgICAgICByZXR1cm4gVktfUkVU
VVJOOyAvLygwRCkgUmV0dXJuIGtleQotICAgICAgICBjYXNlIEdES19TaGlmdF9MOgotICAgICAg
ICBjYXNlIEdES19TaGlmdF9SOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NISUZUOyAvLyAoMTAp
IFNISUZUIGtleQotICAgICAgICBjYXNlIEdES19Db250cm9sX0w6Ci0gICAgICAgIGNhc2UgR0RL
X0NvbnRyb2xfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19DT05UUk9MOyAvLyAoMTEpIENUUkwg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX01lbnU6Ci0gICAgICAgIGNhc2UgR0RLX0FsdF9MOgotICAg
ICAgICBjYXNlIEdES19BbHRfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19NRU5VOyAvLyAoMTIp
IEFMVCBrZXkKKyAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgIHJldHVybiBWS19CQUNL
OyAvLyAoMDgpIEJBQ0tTUEFDRSBrZXkKKyAgICBjYXNlIEdES19UYWI6CisgICAgICAgIHJldHVy
biBWS19UQUI7IC8vICgwOSkgVEFCIGtleQorICAgIGNhc2UgR0RLX0NsZWFyOgorICAgICAgICBy
ZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIga2V5CisgICAgY2FzZSBHREtfUmV0dXJuOgor
ICAgICAgICByZXR1cm4gVktfUkVUVVJOOyAvLygwRCkgUmV0dXJuIGtleQorICAgIGNhc2UgR0RL
X1NoaWZ0X0w6CisgICAgY2FzZSBHREtfU2hpZnRfUjoKKyAgICAgICAgcmV0dXJuIFZLX1NISUZU
OyAvLyAoMTApIFNISUZUIGtleQorICAgIGNhc2UgR0RLX0NvbnRyb2xfTDoKKyAgICBjYXNlIEdE
S19Db250cm9sX1I6CisgICAgICAgIHJldHVybiBWS19DT05UUk9MOyAvLyAoMTEpIENUUkwga2V5
CisgICAgY2FzZSBHREtfTWVudToKKyAgICBjYXNlIEdES19BbHRfTDoKKyAgICBjYXNlIEdES19B
bHRfUjoKKyAgICAgICAgcmV0dXJuIFZLX01FTlU7IC8vICgxMikgQUxUIGtleQogCi0gICAgICAg
IGNhc2UgR0RLX1BhdXNlOgotICAgICAgICAgICAgcmV0dXJuIFZLX1BBVVNFOyAvLyAoMTMpIFBB
VVNFIGtleQotICAgICAgICBjYXNlIEdES19DYXBzX0xvY2s6Ci0gICAgICAgICAgICByZXR1cm4g
VktfQ0FQSVRBTDsgLy8gKDE0KSBDQVBTIExPQ0sga2V5Ci0gICAgICAgIGNhc2UgR0RLX0thbmFf
TG9jazoKLSAgICAgICAgY2FzZSBHREtfS2FuYV9TaGlmdDoKLSAgICAgICAgICAgIHJldHVybiBW
S19LQU5BOyAvLyAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElNRSkgS2FuYSBtb2RlCi0gICAg
ICAgIGNhc2UgR0RLX0hhbmd1bDoKLSAgICAgICAgICAgIHJldHVybiBWS19IQU5HVUw7IC8vIFZL
X0hBTkdVTCAoMTUpIElNRSBIYW5ndWwgbW9kZQotICAgICAgICAgICAgLy8gVktfSlVOSkEgKDE3
KSBJTUUgSnVuamEgbW9kZQotICAgICAgICAgICAgLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwg
bW9kZQotICAgICAgICBjYXNlIEdES19IYW5ndWxfSGFuamE6Ci0gICAgICAgICAgICByZXR1cm4g
VktfSEFOSkE7IC8vICgxOSkgSU1FIEhhbmphIG1vZGUKLSAgICAgICAgY2FzZSBHREtfS2Fuamk6
Ci0gICAgICAgICAgICByZXR1cm4gVktfS0FOSkk7IC8vICgxOSkgSU1FIEthbmppIG1vZGUKLSAg
ICAgICAgY2FzZSBHREtfRXNjYXBlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VTQ0FQRTsgLy8g
KDFCKSBFU0Mga2V5Ci0gICAgICAgICAgICAvLyBWS19DT05WRVJUICgxQykgSU1FIGNvbnZlcnQK
LSAgICAgICAgICAgIC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29udmVydAotICAgICAg
ICAgICAgLy8gVktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAotICAgICAgICAgICAgLy8gVktfTU9E
RUNIQU5HRSAoMUYpIElNRSBtb2RlIGNoYW5nZSByZXF1ZXN0Ci0gICAgICAgIGNhc2UgR0RLX3Nw
YWNlOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NQQUNFOyAvLyAoMjApIFNQQUNFQkFSCi0gICAg
ICAgIGNhc2UgR0RLX1BhZ2VfVXA6Ci0gICAgICAgICAgICByZXR1cm4gVktfUFJJT1I7IC8vICgy
MSkgUEFHRSBVUCBrZXkKLSAgICAgICAgY2FzZSBHREtfUGFnZV9Eb3duOgotICAgICAgICAgICAg
cmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQotICAgICAgICBjYXNlIEdES19F
bmQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKLSAgICAgICAg
Y2FzZSBHREtfSG9tZToKLSAgICAgICAgICAgIHJldHVybiBWS19IT01FOyAvLyAoMjQpIEhPTUUg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX0xlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfTEVGVDsg
Ly8gKDI1KSBMRUZUIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19VcDoKLSAgICAgICAgICAg
IHJldHVybiBWS19VUDsgLy8gKDI2KSBVUCBBUlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfUmln
aHQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cga2V5
Ci0gICAgICAgIGNhc2UgR0RLX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8g
KDI4KSBET1dOIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19TZWxlY3Q6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfU0VMRUNUOyAvLyAoMjkpIFNFTEVDVCBrZXkKLSAgICAgICAgY2FzZSBHREtf
UHJpbnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfUFJJTlQ7IC8vICgyQSkgUFJJTlQga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRVhFQ1VURTsv
LyAoMkIpIEVYRUNVVEUga2V5Ci0gICAgICAgICAgICAvL2R1bm5vIG9uIHRoaXMKLSAgICAgICAg
ICAgIC8vY2FzZSBHREtfUHJpbnRTY3JlZW46Ci0gICAgICAgICAgICAvLyAgICAgIHJldHVybiBW
S19TTkFQU0hPVDsgLy8gKDJDKSBQUklOVCBTQ1JFRU4ga2V5Ci0gICAgICAgIGNhc2UgR0RLX0lu
c2VydDoKLSAgICAgICAgICAgIHJldHVybiBWS19JTlNFUlQ7IC8vICgyRCkgSU5TIGtleQotICAg
ICAgICBjYXNlIEdES19EZWxldGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfREVMRVRFOyAvLyAo
MkUpIERFTCBrZXkKLSAgICAgICAgY2FzZSBHREtfSGVscDoKLSAgICAgICAgICAgIHJldHVybiBW
S19IRUxQOyAvLyAoMkYpIEhFTFAga2V5Ci0gICAgICAgIGNhc2UgR0RLXzA6Ci0gICAgICAgIGNh
c2UgR0RLX3BhcmVubGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS18wOyAgICAvLyAgKDMwKSAw
KSBrZXkKLSAgICAgICAgY2FzZSBHREtfMToKLSAgICAgICAgICAgIHJldHVybiBWS18xOyAvLyAg
KDMxKSAxICEga2V5Ci0gICAgICAgIGNhc2UgR0RLXzI6Ci0gICAgICAgIGNhc2UgR0RLX2F0Ogot
ICAgICAgICAgICAgcmV0dXJuIFZLXzI7IC8vICAoMzIpIDIgJiBrZXkKLSAgICAgICAgY2FzZSBH
REtfMzoKLSAgICAgICAgY2FzZSBHREtfbnVtYmVyc2lnbjoKLSAgICAgICAgICAgIHJldHVybiBW
S18zOyAvL2Nhc2UgJzMnOiBjYXNlICcjJzsKLSAgICAgICAgY2FzZSBHREtfNDoKLSAgICAgICAg
Y2FzZSBHREtfZG9sbGFyOiAvLyAgKDM0KSA0IGtleSAnJCc7Ci0gICAgICAgICAgICByZXR1cm4g
VktfNDsKLSAgICAgICAgY2FzZSBHREtfNToKLSAgICAgICAgY2FzZSBHREtfcGVyY2VudDoKLSAg
ICAgICAgICAgIHJldHVybiBWS181OyAvLyAgKDM1KSA1IGtleSAgJyUnCi0gICAgICAgIGNhc2Ug
R0RLXzY6Ci0gICAgICAgIGNhc2UgR0RLX2FzY2lpY2lyY3VtOgotICAgICAgICAgICAgcmV0dXJu
IFZLXzY7IC8vICAoMzYpIDYga2V5ICAnXicKLSAgICAgICAgY2FzZSBHREtfNzoKLSAgICAgICAg
Y2FzZSBHREtfYW1wZXJzYW5kOgotICAgICAgICAgICAgcmV0dXJuIFZLXzc7IC8vICAoMzcpIDcg
a2V5ICBjYXNlICcmJwotICAgICAgICBjYXNlIEdES184OgotICAgICAgICBjYXNlIEdES19hc3Rl
cmlzazoKLSAgICAgICAgICAgIHJldHVybiBWS184OyAvLyAgKDM4KSA4IGtleSAgJyonCi0gICAg
ICAgIGNhc2UgR0RLXzk6Ci0gICAgICAgIGNhc2UgR0RLX3BhcmVucmlnaHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfOTsgLy8gICgzOSkgOSBrZXkgJygnCi0gICAgICAgIGNhc2UgR0RLX2E6Ci0g
ICAgICAgIGNhc2UgR0RLX0E6Ci0gICAgICAgICAgICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBr
ZXkgY2FzZSAnYSc6IGNhc2UgJ0EnOiByZXR1cm4gMHg0MTsKLSAgICAgICAgY2FzZSBHREtfYjoK
LSAgICAgICAgY2FzZSBHREtfQjoKLSAgICAgICAgICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBC
IGtleSBjYXNlICdiJzogY2FzZSAnQic6IHJldHVybiAweDQyOwotICAgICAgICBjYXNlIEdES19j
OgotICAgICAgICBjYXNlIEdES19DOgotICAgICAgICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMp
IEMga2V5IGNhc2UgJ2MnOiBjYXNlICdDJzogcmV0dXJuIDB4NDM7Ci0gICAgICAgIGNhc2UgR0RL
X2Q6Ci0gICAgICAgIGNhc2UgR0RLX0Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfRDsgLy8gICg0
NCkgRCBrZXkgY2FzZSAnZCc6IGNhc2UgJ0QnOiByZXR1cm4gMHg0NDsKLSAgICAgICAgY2FzZSBH
REtfZToKLSAgICAgICAgY2FzZSBHREtfRToKLSAgICAgICAgICAgIHJldHVybiBWS19FOyAvLyAg
KDQ1KSBFIGtleSBjYXNlICdlJzogY2FzZSAnRSc6IHJldHVybiAweDQ1OwotICAgICAgICBjYXNl
IEdES19mOgotICAgICAgICBjYXNlIEdES19GOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8v
ICAoNDYpIEYga2V5IGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7Ci0gICAgICAgIGNh
c2UgR0RLX2c6Ci0gICAgICAgIGNhc2UgR0RLX0c6Ci0gICAgICAgICAgICByZXR1cm4gVktfRzsg
Ly8gICg0NykgRyBrZXkgY2FzZSAnZyc6IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsKLSAgICAgICAg
Y2FzZSBHREtfaDoKLSAgICAgICAgY2FzZSBHREtfSDoKLSAgICAgICAgICAgIHJldHVybiBWS19I
OyAvLyAgKDQ4KSBIIGtleSBjYXNlICdoJzogY2FzZSAnSCc6IHJldHVybiAweDQ4OwotICAgICAg
ICBjYXNlIEdES19pOgotICAgICAgICBjYXNlIEdES19JOgotICAgICAgICAgICAgcmV0dXJuIFZL
X0k7IC8vICAoNDkpIEkga2V5IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4NDk7Ci0gICAg
ICAgIGNhc2UgR0RLX2o6Ci0gICAgICAgIGNhc2UgR0RLX0o6Ci0gICAgICAgICAgICByZXR1cm4g
VktfSjsgLy8gICg0QSkgSiBrZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKLSAg
ICAgICAgY2FzZSBHREtfazoKLSAgICAgICAgY2FzZSBHREtfSzoKLSAgICAgICAgICAgIHJldHVy
biBWS19LOyAvLyAgKDRCKSBLIGtleSBjYXNlICdrJzogY2FzZSAnSyc6IHJldHVybiAweDRCOwot
ICAgICAgICBjYXNlIEdES19sOgotICAgICAgICBjYXNlIEdES19MOgotICAgICAgICAgICAgcmV0
dXJuIFZLX0w7IC8vICAoNEMpIEwga2V5IGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7
Ci0gICAgICAgIGNhc2UgR0RLX206Ci0gICAgICAgIGNhc2UgR0RLX006Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfTTsgLy8gICg0RCkgTSBrZXkgY2FzZSAnbSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0
RDsKLSAgICAgICAgY2FzZSBHREtfbjoKLSAgICAgICAgY2FzZSBHREtfTjoKLSAgICAgICAgICAg
IHJldHVybiBWS19OOyAvLyAgKDRFKSBOIGtleSBjYXNlICduJzogY2FzZSAnTic6IHJldHVybiAw
eDRFOwotICAgICAgICBjYXNlIEdES19vOgotICAgICAgICBjYXNlIEdES19POgotICAgICAgICAg
ICAgcmV0dXJuIFZLX087IC8vICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJu
IDB4NEY7Ci0gICAgICAgIGNhc2UgR0RLX3A6Ci0gICAgICAgIGNhc2UgR0RLX1A6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfUDsgLy8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1
cm4gMHg1MDsKLSAgICAgICAgY2FzZSBHREtfcToKLSAgICAgICAgY2FzZSBHREtfUToKLSAgICAg
ICAgICAgIHJldHVybiBWS19ROyAvLyAgKDUxKSBRIGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJl
dHVybiAweDUxOwotICAgICAgICBjYXNlIEdES19yOgotICAgICAgICBjYXNlIEdES19SOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX1I7IC8vICAoNTIpIFIga2V5IGNhc2UgJ3InOiBjYXNlICdSJzog
cmV0dXJuIDB4NTI7Ci0gICAgICAgIGNhc2UgR0RLX3M6Ci0gICAgICAgIGNhc2UgR0RLX1M6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6IGNhc2UgJ1Mn
OiByZXR1cm4gMHg1MzsKLSAgICAgICAgY2FzZSBHREtfdDoKLSAgICAgICAgY2FzZSBHREtfVDoK
LSAgICAgICAgICAgIHJldHVybiBWS19UOyAvLyAgKDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAn
VCc6IHJldHVybiAweDU0OwotICAgICAgICBjYXNlIEdES191OgotICAgICAgICBjYXNlIEdES19V
OgotICAgICAgICAgICAgcmV0dXJuIFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNl
ICdVJzogcmV0dXJuIDB4NTU7Ci0gICAgICAgIGNhc2UgR0RLX3Y6Ci0gICAgICAgIGNhc2UgR0RL
X1Y6Ci0gICAgICAgICAgICByZXR1cm4gVktfVjsgLy8gICg1NikgViBrZXkgY2FzZSAndic6IGNh
c2UgJ1YnOiByZXR1cm4gMHg1NjsKLSAgICAgICAgY2FzZSBHREtfdzoKLSAgICAgICAgY2FzZSBH
REtfVzoKLSAgICAgICAgICAgIHJldHVybiBWS19XOyAvLyAgKDU3KSBXIGtleSBjYXNlICd3Jzog
Y2FzZSAnVyc6IHJldHVybiAweDU3OwotICAgICAgICBjYXNlIEdES194OgotICAgICAgICBjYXNl
IEdES19YOgotICAgICAgICAgICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gn
OiBjYXNlICdYJzogcmV0dXJuIDB4NTg7Ci0gICAgICAgIGNhc2UgR0RLX3k6Ci0gICAgICAgIGNh
c2UgR0RLX1k6Ci0gICAgICAgICAgICByZXR1cm4gVktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAn
eSc6IGNhc2UgJ1knOiByZXR1cm4gMHg1OTsKLSAgICAgICAgY2FzZSBHREtfejoKLSAgICAgICAg
Y2FzZSBHREtfWjoKLSAgICAgICAgICAgIHJldHVybiBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNl
ICd6JzogY2FzZSAnWic6IHJldHVybiAweDVBOwotICAgICAgICBjYXNlIEdES19NZXRhX0w6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNy
b3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKLSAgICAgICAgY2FzZSBHREtfTWV0YV9SOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX1JXSU47IC8vICg1QykgUmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwg
a2V5Ym9hcmQpCi0gICAgICAgICAgICAvLyBWS19BUFBTICg1RCkgQXBwbGljYXRpb25zIGtleSAo
TmF0dXJhbCBrZXlib2FyZCkKLSAgICAgICAgICAgIC8vIFZLX1NMRUVQICg1RikgQ29tcHV0ZXIg
U2xlZXAga2V5Ci0gICAgICAgICAgICAvLyBWS19TRVBBUkFUT1IgKDZDKSBTZXBhcmF0b3Iga2V5
Ci0gICAgICAgICAgICAvLyBWS19TVUJUUkFDVCAoNkQpIFN1YnRyYWN0IGtleQotICAgICAgICAg
ICAgLy8gVktfREVDSU1BTCAoNkUpIERlY2ltYWwga2V5Ci0gICAgICAgICAgICAvLyBWS19ESVZJ
REUgKDZGKSBEaXZpZGUga2V5Ci0gICAgICAgICAgICAvLyBoYW5kbGVkIGJ5IGtleSBjb2RlIGFi
b3ZlCisgICAgY2FzZSBHREtfUGF1c2U6CisgICAgICAgIHJldHVybiBWS19QQVVTRTsgLy8gKDEz
KSBQQVVTRSBrZXkKKyAgICBjYXNlIEdES19DYXBzX0xvY2s6CisgICAgICAgIHJldHVybiBWS19D
QVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKKyAgICBjYXNlIEdES19LYW5hX0xvY2s6Cisg
ICAgY2FzZSBHREtfS2FuYV9TaGlmdDoKKyAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgxNSkg
SW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKKyAgICBjYXNlIEdES19IYW5ndWw6
CisgICAgICAgIHJldHVybiBWS19IQU5HVUw7IC8vIFZLX0hBTkdVTCAoMTUpIElNRSBIYW5ndWwg
bW9kZQorICAgICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgICAgIC8v
IFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKKyAgICBjYXNlIEdES19IYW5ndWxfSGFuamE6
CisgICAgICAgIHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9kZQorICAgIGNh
c2UgR0RLX0thbmppOgorICAgICAgICByZXR1cm4gVktfS0FOSkk7IC8vICgxOSkgSU1FIEthbmpp
IG1vZGUKKyAgICBjYXNlIEdES19Fc2NhcGU6CisgICAgICAgIHJldHVybiBWS19FU0NBUEU7IC8v
ICgxQikgRVNDIGtleQorICAgICAgICAvLyBWS19DT05WRVJUICgxQykgSU1FIGNvbnZlcnQKKyAg
ICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0CisgICAgICAgIC8vIFZL
X0FDQ0VQVCAoMUUpIElNRSBhY2NlcHQKKyAgICAgICAgLy8gVktfTU9ERUNIQU5HRSAoMUYpIElN
RSBtb2RlIGNoYW5nZSByZXF1ZXN0CisgICAgY2FzZSBHREtfc3BhY2U6CisgICAgICAgIHJldHVy
biBWS19TUEFDRTsgLy8gKDIwKSBTUEFDRUJBUgorICAgIGNhc2UgR0RLX1BhZ2VfVXA6CisgICAg
ICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgIGNhc2UgR0RLX1Bh
Z2VfRG93bjoKKyAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQor
ICAgIGNhc2UgR0RLX0VuZDoKKyAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5
CisgICAgY2FzZSBHREtfSG9tZToKKyAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9N
RSBrZXkKKyAgICBjYXNlIEdES19MZWZ0OgorICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1
KSBMRUZUIEFSUk9XIGtleQorICAgIGNhc2UgR0RLX1VwOgorICAgICAgICByZXR1cm4gVktfVVA7
IC8vICgyNikgVVAgQVJST1cga2V5CisgICAgY2FzZSBHREtfUmlnaHQ6CisgICAgICAgIHJldHVy
biBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19Eb3duOgor
ICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8gKDI4KSBET1dOIEFSUk9XIGtleQorICAgIGNhc2Ug
R0RLX1NlbGVjdDoKKyAgICAgICAgcmV0dXJuIFZLX1NFTEVDVDsgLy8gKDI5KSBTRUxFQ1Qga2V5
CisgICAgY2FzZSBHREtfUHJpbnQ6CisgICAgICAgIHJldHVybiBWS19QUklOVDsgLy8gKDJBKSBQ
UklOVCBrZXkKKyAgICBjYXNlIEdES19FeGVjdXRlOgorICAgICAgICByZXR1cm4gVktfRVhFQ1VU
RTsvLyAoMkIpIEVYRUNVVEUga2V5CisgICAgICAgIC8vZHVubm8gb24gdGhpcworICAgICAgICAv
L2Nhc2UgR0RLX1ByaW50U2NyZWVuOgorICAgICAgICAvLyAgICAgIHJldHVybiBWS19TTkFQU0hP
VDsgLy8gKDJDKSBQUklOVCBTQ1JFRU4ga2V5CisgICAgY2FzZSBHREtfSW5zZXJ0OgorICAgICAg
ICByZXR1cm4gVktfSU5TRVJUOyAvLyAoMkQpIElOUyBrZXkKKyAgICBjYXNlIEdES19EZWxldGU6
CisgICAgICAgIHJldHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVMIGtleQorICAgIGNhc2UgR0RL
X0hlbHA6CisgICAgICAgIHJldHVybiBWS19IRUxQOyAvLyAoMkYpIEhFTFAga2V5CisgICAgY2Fz
ZSBHREtfMDoKKyAgICBjYXNlIEdES19wYXJlbmxlZnQ6CisgICAgICAgIHJldHVybiBWS18wOyAg
ICAvLyAgKDMwKSAwKSBrZXkKKyAgICBjYXNlIEdES18xOgorICAgICAgICByZXR1cm4gVktfMTsg
Ly8gICgzMSkgMSAhIGtleQorICAgIGNhc2UgR0RLXzI6CisgICAgY2FzZSBHREtfYXQ6CisgICAg
ICAgIHJldHVybiBWS18yOyAvLyAgKDMyKSAyICYga2V5CisgICAgY2FzZSBHREtfMzoKKyAgICBj
YXNlIEdES19udW1iZXJzaWduOgorICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNlICczJzogY2Fz
ZSAnIyc7CisgICAgY2FzZSBHREtfNDoKKyAgICBjYXNlIEdES19kb2xsYXI6IC8vICAoMzQpIDQg
a2V5ICckJzsKKyAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAgY2FzZSBHREtfNToKKyAgICBjYXNl
IEdES19wZXJjZW50OgorICAgICAgICByZXR1cm4gVktfNTsgLy8gICgzNSkgNSBrZXkgICclJwor
ICAgIGNhc2UgR0RLXzY6CisgICAgY2FzZSBHREtfYXNjaWljaXJjdW06CisgICAgICAgIHJldHVy
biBWS182OyAvLyAgKDM2KSA2IGtleSAgJ14nCisgICAgY2FzZSBHREtfNzoKKyAgICBjYXNlIEdE
S19hbXBlcnNhbmQ6CisgICAgICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAn
JicKKyAgICBjYXNlIEdES184OgorICAgIGNhc2UgR0RLX2FzdGVyaXNrOgorICAgICAgICByZXR1
cm4gVktfODsgLy8gICgzOCkgOCBrZXkgICcqJworICAgIGNhc2UgR0RLXzk6CisgICAgY2FzZSBH
REtfcGFyZW5yaWdodDoKKyAgICAgICAgcmV0dXJuIFZLXzk7IC8vICAoMzkpIDkga2V5ICcoJwor
ICAgIGNhc2UgR0RLX2E6CisgICAgY2FzZSBHREtfQToKKyAgICAgICAgcmV0dXJuIFZLX0E7IC8v
ICAoNDEpIEEga2V5IGNhc2UgJ2EnOiBjYXNlICdBJzogcmV0dXJuIDB4NDE7CisgICAgY2FzZSBH
REtfYjoKKyAgICBjYXNlIEdES19COgorICAgICAgICByZXR1cm4gVktfQjsgLy8gICg0MikgQiBr
ZXkgY2FzZSAnYic6IGNhc2UgJ0InOiByZXR1cm4gMHg0MjsKKyAgICBjYXNlIEdES19jOgorICAg
IGNhc2UgR0RLX0M6CisgICAgICAgIHJldHVybiBWS19DOyAvLyAgKDQzKSBDIGtleSBjYXNlICdj
JzogY2FzZSAnQyc6IHJldHVybiAweDQzOworICAgIGNhc2UgR0RLX2Q6CisgICAgY2FzZSBHREtf
RDoKKyAgICAgICAgcmV0dXJuIFZLX0Q7IC8vICAoNDQpIEQga2V5IGNhc2UgJ2QnOiBjYXNlICdE
JzogcmV0dXJuIDB4NDQ7CisgICAgY2FzZSBHREtfZToKKyAgICBjYXNlIEdES19FOgorICAgICAg
ICByZXR1cm4gVktfRTsgLy8gICg0NSkgRSBrZXkgY2FzZSAnZSc6IGNhc2UgJ0UnOiByZXR1cm4g
MHg0NTsKKyAgICBjYXNlIEdES19mOgorICAgIGNhc2UgR0RLX0Y6CisgICAgICAgIHJldHVybiBW
S19GOyAvLyAgKDQ2KSBGIGtleSBjYXNlICdmJzogY2FzZSAnRic6IHJldHVybiAweDQ2OworICAg
IGNhc2UgR0RLX2c6CisgICAgY2FzZSBHREtfRzoKKyAgICAgICAgcmV0dXJuIFZLX0c7IC8vICAo
NDcpIEcga2V5IGNhc2UgJ2cnOiBjYXNlICdHJzogcmV0dXJuIDB4NDc7CisgICAgY2FzZSBHREtf
aDoKKyAgICBjYXNlIEdES19IOgorICAgICAgICByZXR1cm4gVktfSDsgLy8gICg0OCkgSCBrZXkg
Y2FzZSAnaCc6IGNhc2UgJ0gnOiByZXR1cm4gMHg0ODsKKyAgICBjYXNlIEdES19pOgorICAgIGNh
c2UgR0RLX0k6CisgICAgICAgIHJldHVybiBWS19JOyAvLyAgKDQ5KSBJIGtleSBjYXNlICdpJzog
Y2FzZSAnSSc6IHJldHVybiAweDQ5OworICAgIGNhc2UgR0RLX2o6CisgICAgY2FzZSBHREtfSjoK
KyAgICAgICAgcmV0dXJuIFZLX0o7IC8vICAoNEEpIEoga2V5IGNhc2UgJ2onOiBjYXNlICdKJzog
cmV0dXJuIDB4NEE7CisgICAgY2FzZSBHREtfazoKKyAgICBjYXNlIEdES19LOgorICAgICAgICBy
ZXR1cm4gVktfSzsgLy8gICg0QikgSyBrZXkgY2FzZSAnayc6IGNhc2UgJ0snOiByZXR1cm4gMHg0
QjsKKyAgICBjYXNlIEdES19sOgorICAgIGNhc2UgR0RLX0w6CisgICAgICAgIHJldHVybiBWS19M
OyAvLyAgKDRDKSBMIGtleSBjYXNlICdsJzogY2FzZSAnTCc6IHJldHVybiAweDRDOworICAgIGNh
c2UgR0RLX206CisgICAgY2FzZSBHREtfTToKKyAgICAgICAgcmV0dXJuIFZLX007IC8vICAoNEQp
IE0ga2V5IGNhc2UgJ20nOiBjYXNlICdNJzogcmV0dXJuIDB4NEQ7CisgICAgY2FzZSBHREtfbjoK
KyAgICBjYXNlIEdES19OOgorICAgICAgICByZXR1cm4gVktfTjsgLy8gICg0RSkgTiBrZXkgY2Fz
ZSAnbic6IGNhc2UgJ04nOiByZXR1cm4gMHg0RTsKKyAgICBjYXNlIEdES19vOgorICAgIGNhc2Ug
R0RLX086CisgICAgICAgIHJldHVybiBWS19POyAvLyAgKDRGKSBPIGtleSBjYXNlICdvJzogY2Fz
ZSAnTyc6IHJldHVybiAweDRGOworICAgIGNhc2UgR0RLX3A6CisgICAgY2FzZSBHREtfUDoKKyAg
ICAgICAgcmV0dXJuIFZLX1A7IC8vICAoNTApIFAga2V5IGNhc2UgJ3AnOiBjYXNlICdQJzogcmV0
dXJuIDB4NTA7CisgICAgY2FzZSBHREtfcToKKyAgICBjYXNlIEdES19ROgorICAgICAgICByZXR1
cm4gVktfUTsgLy8gICg1MSkgUSBrZXkgY2FzZSAncSc6IGNhc2UgJ1EnOiByZXR1cm4gMHg1MTsK
KyAgICBjYXNlIEdES19yOgorICAgIGNhc2UgR0RLX1I6CisgICAgICAgIHJldHVybiBWS19SOyAv
LyAgKDUyKSBSIGtleSBjYXNlICdyJzogY2FzZSAnUic6IHJldHVybiAweDUyOworICAgIGNhc2Ug
R0RLX3M6CisgICAgY2FzZSBHREtfUzoKKyAgICAgICAgcmV0dXJuIFZLX1M7IC8vICAoNTMpIFMg
a2V5IGNhc2UgJ3MnOiBjYXNlICdTJzogcmV0dXJuIDB4NTM7CisgICAgY2FzZSBHREtfdDoKKyAg
ICBjYXNlIEdES19UOgorICAgICAgICByZXR1cm4gVktfVDsgLy8gICg1NCkgVCBrZXkgY2FzZSAn
dCc6IGNhc2UgJ1QnOiByZXR1cm4gMHg1NDsKKyAgICBjYXNlIEdES191OgorICAgIGNhc2UgR0RL
X1U6CisgICAgICAgIHJldHVybiBWS19VOyAvLyAgKDU1KSBVIGtleSBjYXNlICd1JzogY2FzZSAn
VSc6IHJldHVybiAweDU1OworICAgIGNhc2UgR0RLX3Y6CisgICAgY2FzZSBHREtfVjoKKyAgICAg
ICAgcmV0dXJuIFZLX1Y7IC8vICAoNTYpIFYga2V5IGNhc2UgJ3YnOiBjYXNlICdWJzogcmV0dXJu
IDB4NTY7CisgICAgY2FzZSBHREtfdzoKKyAgICBjYXNlIEdES19XOgorICAgICAgICByZXR1cm4g
VktfVzsgLy8gICg1NykgVyBrZXkgY2FzZSAndyc6IGNhc2UgJ1cnOiByZXR1cm4gMHg1NzsKKyAg
ICBjYXNlIEdES194OgorICAgIGNhc2UgR0RLX1g6CisgICAgICAgIHJldHVybiBWS19YOyAvLyAg
KDU4KSBYIGtleSBjYXNlICd4JzogY2FzZSAnWCc6IHJldHVybiAweDU4OworICAgIGNhc2UgR0RL
X3k6CisgICAgY2FzZSBHREtfWToKKyAgICAgICAgcmV0dXJuIFZLX1k7IC8vICAoNTkpIFkga2V5
IGNhc2UgJ3knOiBjYXNlICdZJzogcmV0dXJuIDB4NTk7CisgICAgY2FzZSBHREtfejoKKyAgICBj
YXNlIEdES19aOgorICAgICAgICByZXR1cm4gVktfWjsgLy8gICg1QSkgWiBrZXkgY2FzZSAneic6
IGNhc2UgJ1onOiByZXR1cm4gMHg1QTsKKyAgICBjYXNlIEdES19GMToKKyAgICAgICAgcmV0dXJu
IFZLX0YxOworICAgIGNhc2UgR0RLX0YyOgorICAgICAgICByZXR1cm4gVktfRjI7CisgICAgY2Fz
ZSBHREtfRjM6CisgICAgICAgIHJldHVybiBWS19GMzsKKyAgICBjYXNlIEdES19GNDoKKyAgICAg
ICAgcmV0dXJuIFZLX0Y0OworICAgIGNhc2UgR0RLX0Y1OgorICAgICAgICByZXR1cm4gVktfRjU7
CisgICAgY2FzZSBHREtfRjY6CisgICAgICAgIHJldHVybiBWS19GNjsKKyAgICBjYXNlIEdES19G
NzoKKyAgICAgICAgcmV0dXJuIFZLX0Y3OworICAgIGNhc2UgR0RLX0Y4OgorICAgICAgICByZXR1
cm4gVktfRjg7CisgICAgY2FzZSBHREtfRjk6CisgICAgICAgIHJldHVybiBWS19GOTsKKyAgICBj
YXNlIEdES19GMTA6CisgICAgICAgIHJldHVybiBWS19GMTA7CisgICAgY2FzZSBHREtfRjExOgor
ICAgICAgICByZXR1cm4gVktfRjExOworICAgIGNhc2UgR0RLX0YxMjoKKyAgICAgICAgcmV0dXJu
IFZLX0YxMjsKKyAgICBjYXNlIEdES19GMTM6CisgICAgICAgIHJldHVybiBWS19GMTM7CisgICAg
Y2FzZSBHREtfRjE0OgorICAgICAgICByZXR1cm4gVktfRjE0OworICAgIGNhc2UgR0RLX0YxNToK
KyAgICAgICAgcmV0dXJuIFZLX0YxNTsKKyAgICBjYXNlIEdES19GMTY6CisgICAgICAgIHJldHVy
biBWS19GMTY7CisgICAgY2FzZSBHREtfRjE3OgorICAgICAgICByZXR1cm4gVktfRjE3OworICAg
IGNhc2UgR0RLX0YxODoKKyAgICAgICAgcmV0dXJuIFZLX0YxODsKKyAgICBjYXNlIEdES19GMTk6
CisgICAgICAgIHJldHVybiBWS19GMTk7CisgICAgY2FzZSBHREtfRjIwOgorICAgICAgICByZXR1
cm4gVktfRjIwOworICAgIGNhc2UgR0RLX0YyMToKKyAgICAgICAgcmV0dXJuIFZLX0YyMTsKKyAg
ICBjYXNlIEdES19GMjI6CisgICAgICAgIHJldHVybiBWS19GMjI7CisgICAgY2FzZSBHREtfRjIz
OgorICAgICAgICByZXR1cm4gVktfRjIzOworICAgIGNhc2UgR0RLX0YyNDoKKyAgICAgICAgcmV0
dXJuIFZLX0YyNDsKKyAgICBjYXNlIEdES19NZXRhX0w6CisgICAgICAgIHJldHVybiBWS19MV0lO
OyAvLyAoNUIpIExlZnQgV2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFsIGtleWJvYXJkKQor
ICAgIGNhc2UgR0RLX01ldGFfUjoKKyAgICAgICAgcmV0dXJuIFZLX1JXSU47IC8vICg1QykgUmln
aHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAgIC8vIFZLX0FQUFMgKDVE
KSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgICAgICAvLyBWS19TTEVF
UCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorICAgICAgICAvLyBWS19TRVBBUkFUT1IgKDZDKSBT
ZXBhcmF0b3Iga2V5CisgICAgICAgIC8vIFZLX1NVQlRSQUNUICg2RCkgU3VidHJhY3Qga2V5Cisg
ICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorICAgICAgICAvLyBWS19ESVZJ
REUgKDZGKSBEaXZpZGUga2V5CisgICAgICAgIC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJvdmUK
IAotICAgICAgICBjYXNlIEdES19OdW1fTG9jazoKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1M
T0NLOyAvLyAoOTApIE5VTSBMT0NLIGtleQorICAgIGNhc2UgR0RLX051bV9Mb2NrOgorICAgICAg
ICByZXR1cm4gVktfTlVNTE9DSzsgLy8gKDkwKSBOVU0gTE9DSyBrZXkKIAotICAgICAgICBjYXNl
IEdES19TY3JvbGxfTG9jazoKLSAgICAgICAgICAgIHJldHVybiBWS19TQ1JPTEw7IC8vICg5MSkg
U0NST0xMIExPQ0sga2V5CisgICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6CisgICAgICAgIHJldHVy
biBWS19TQ1JPTEw7IC8vICg5MSkgU0NST0xMIExPQ0sga2V5CiAKLSAgICAgICAgICAgIC8vIFZL
X0xTSElGVCAoQTApIExlZnQgU0hJRlQga2V5Ci0gICAgICAgICAgICAvLyBWS19SU0hJRlQgKEEx
KSBSaWdodCBTSElGVCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xDT05UUk9MIChBMikgTGVmdCBD
T05UUk9MIGtleQotICAgICAgICAgICAgLy8gVktfUkNPTlRST0wgKEEzKSBSaWdodCBDT05UUk9M
IGtleQotICAgICAgICAgICAgLy8gVktfTE1FTlUgKEE0KSBMZWZ0IE1FTlUga2V5Ci0gICAgICAg
ICAgICAvLyBWS19STUVOVSAoQTUpIFJpZ2h0IE1FTlUga2V5Ci0gICAgICAgICAgICAvLyBWS19C
Uk9XU0VSX0JBQ0sgKEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKLSAgICAg
ICAgICAgIC8vIFZLX0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3Nl
ciBGb3J3YXJkIGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2lu
ZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gga2V5Ci0gICAgICAgICAgICAvLyBWS19CUk9X
U0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKLSAgICAgICAg
ICAgIC8vIFZLX0JST1dTRVJfU0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNl
YXJjaCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93
cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dT
RVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdGFydCBhbmQgSG9tZSBrZXkK
LSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1
bWUgTXV0ZSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAy
MDAwL1hQOiBWb2x1bWUgRG93biBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYp
IFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFf
TkVYVF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKLSAgICAgICAg
ICAgIC8vIFZLX01FRElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3Vz
IFRyYWNrIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAw
MC9YUDogU3RvcCBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0Ug
KEIzKSBXaW5kb3dzIDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5Ci0gICAgICAgICAgICAv
LyBWS19MQVVOQ0hfTUFJTCAoQjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKLSAg
ICAgICAgICAgIC8vIFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6
IFNlbGVjdCBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2lu
ZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQotICAgICAgICAgICAgLy8gVktf
TEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5
CisgICAgICAgIC8vIFZLX0xTSElGVCAoQTApIExlZnQgU0hJRlQga2V5CisgICAgICAgIC8vIFZL
X1JTSElGVCAoQTEpIFJpZ2h0IFNISUZUIGtleQorICAgICAgICAvLyBWS19MQ09OVFJPTCAoQTIp
IExlZnQgQ09OVFJPTCBrZXkKKyAgICAgICAgLy8gVktfUkNPTlRST0wgKEEzKSBSaWdodCBDT05U
Uk9MIGtleQorICAgICAgICAvLyBWS19MTUVOVSAoQTQpIExlZnQgTUVOVSBrZXkKKyAgICAgICAg
Ly8gVktfUk1FTlUgKEE1KSBSaWdodCBNRU5VIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX0JB
Q0sgKEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKKyAgICAgICAgLy8gVktf
QlJPV1NFUl9GT1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZvcndhcmQga2V5
CisgICAgICAgIC8vIFZLX0JST1dTRVJfUkVGUkVTSCAoQTgpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBSZWZyZXNoIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dz
IDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKKyAgICAgICAgLy8gVktfQlJPV1NFUl9TRUFSQ0gg
KEFBKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU2VhcmNoIGtleQorICAgICAgICAvLyBWS19C
Uk9XU0VSX0ZBVk9SSVRFUyAoQUIpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZvcml0ZXMg
a2V5CisgICAgICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBTdGFydCBhbmQgSG9tZSBrZXkKKyAgICAgICAgLy8gVktfVk9MVU1FX01VVEUgKEFEKSBX
aW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQorICAgICAgICAvLyBWS19WT0xVTUVfRE9X
TiAoQUUpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIERvd24ga2V5CisgICAgICAgIC8vIFZLX1ZP
TFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQorICAgICAgICAvLyBW
S19NRURJQV9ORVhUX1RSQUNLIChCMCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQor
ICAgICAgICAvLyBWS19NRURJQV9QUkVWX1RSQUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQcmV2
aW91cyBUcmFjayBrZXkKKyAgICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAw
MC9YUDogU3RvcCBNZWRpYSBrZXkKKyAgICAgICAgLy8gVktfTUVESUFfUExBWV9QQVVTRSAoQjMp
IFdpbmRvd3MgMjAwMC9YUDogUGxheS9QYXVzZSBNZWRpYSBrZXkKKyAgICAgICAgLy8gVktfTEFV
TkNIX01BSUwgKEI0KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwga2V5CisgICAgICAgIC8v
IFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRp
YSBrZXkKKyAgICAgICAgLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5kb3dzIDIwMDAvWFA6IFN0
YXJ0IEFwcGxpY2F0aW9uIDEga2V5CisgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAyIChCNykgV2lu
ZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAyIGtleQogCi0gICAgICAgICAgICAvLyBW
S19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZh
cnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXli
b2FyZCwgdGhlICc7Oicga2V5Ci0gICAgICAgIGNhc2UgR0RLX3NlbWljb2xvbjoKLSAgICAgICAg
Y2FzZSBHREtfY29sb246Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzE7IC8vY2FzZSAnOyc6
IGNhc2UgJzonOiByZXR1cm4gMHhCQTsKLSAgICAgICAgICAgIC8vIFZLX09FTV9QTFVTIChCQikg
V2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJysnIGtleQotICAg
ICAgICBjYXNlIEdES19wbHVzOgotICAgICAgICBjYXNlIEdES19lcXVhbDoKLSAgICAgICAgICAg
IHJldHVybiBWS19PRU1fUExVUzsgLy9jYXNlICc9JzogY2FzZSAnKyc6IHJldHVybiAweEJCOwot
ICAgICAgICAgICAgLy8gVktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55
IGNvdW50cnkvcmVnaW9uLCB0aGUgJywnIGtleQotICAgICAgICBjYXNlIEdES19jb21tYToKLSAg
ICAgICAgY2FzZSBHREtfbGVzczoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fQ09NTUE7IC8v
Y2FzZSAnLCc6IGNhc2UgJzwnOiByZXR1cm4gMHhCQzsKLSAgICAgICAgICAgIC8vIFZLX09FTV9N
SU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICct
JyBrZXkKLSAgICAgICAgY2FzZSBHREtfbWludXM6Ci0gICAgICAgIGNhc2UgR0RLX3VuZGVyc2Nv
cmU6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNX01JTlVTOyAvL2Nhc2UgJy0nOiBjYXNlICdf
JzogcmV0dXJuIDB4QkQ7Ci0gICAgICAgICAgICAvLyBWS19PRU1fUEVSSU9EIChCRSkgV2luZG93
cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy4nIGtleQotICAgICAgICBj
YXNlIEdES19wZXJpb2Q6Ci0gICAgICAgIGNhc2UgR0RLX2dyZWF0ZXI6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfT0VNX1BFUklPRDsgLy9jYXNlICcuJzogY2FzZSAnPic6IHJldHVybiAweEJFOwot
ICAgICAgICAgICAgLy8gVktfT0VNXzIgKEJGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJh
Y3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUg
VVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnLz8nIGtleQotICAgICAgICBjYXNlIEdES19zbGFz
aDoKLSAgICAgICAgY2FzZSBHREtfcXVlc3Rpb246Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VN
XzI7IC8vY2FzZSAnLyc6IGNhc2UgJz8nOiByZXR1cm4gMHhCRjsKLSAgICAgICAgICAgIC8vIFZL
X09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFy
eSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJv
YXJkLCB0aGUgJ2B+JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYXNjaWl0aWxkZToKLSAgICAgICAg
Y2FzZSBHREtfcXVvdGVsZWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8zOyAvL2Nhc2Ug
J2AnOiBjYXNlICd+JzogcmV0dXJuIDB4QzA7Ci0gICAgICAgICAgICAvLyBWS19PRU1fNCAoREIp
IFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9h
cmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdb
eycga2V5Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNrZXRsZWZ0OgotICAgICAgICBjYXNlIEdES19i
cmFjZWxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzQ7IC8vY2FzZSAnWyc6IGNhc2Ug
J3snOiByZXR1cm4gMHhEQjsKLSAgICAgICAgICAgIC8vIFZLX09FTV81IChEQykgVXNlZCBmb3Ig
bWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93
cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKLSAg
ICAgICAgY2FzZSBHREtfYmFja3NsYXNoOgotICAgICAgICBjYXNlIEdES19iYXI6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfT0VNXzU7IC8vY2FzZSAnXFwnOiBjYXNlICd8JzogcmV0dXJuIDB4REM7
Ci0gICAgICAgICAgICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hh
cmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRo
ZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5Ci0gICAgICAgIGNhc2UgR0RLX2Jy
YWNrZXRyaWdodDoKLSAgICAgICAgY2FzZSBHREtfYnJhY2VyaWdodDoKLSAgICAgICAgICAgIHJl
dHVybiBWS19PRU1fNjsgLy8gY2FzZSAnXSc6IGNhc2UgJ30nOiByZXR1cm4gMHhERDsKLSAgICAg
ICAgICAgIC8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJz
OyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0
YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtleQotICAg
ICAgICBjYXNlIEdES19xdW90ZXJpZ2h0OgotICAgICAgICBjYXNlIEdES19xdW90ZWRibDoKLSAg
ICAgICAgICAgIHJldHVybiBWS19PRU1fNzsgLy8gY2FzZSAnXCcnOiBjYXNlICciJzogcmV0dXJu
IDB4REU7Ci0gICAgICAgICAgICAvLyBWS19PRU1fOCAoREYpIFVzZWQgZm9yIG1pc2NlbGxhbmVv
dXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuCi0gICAgICAgICAgICAvLyBW
S19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQOiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQg
a2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBSVCAxMDIta2V5IGtleWJvYXJkCi0gICAg
ICAgICAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkgV2luZG93cyA5NS85OC9NZSwgV2luZG93cyBO
VCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBST0NFU1Mga2V5Ci0gICAgICAgICAgICAvLyBW
S19QQUNLRVQgKEU3KSBXaW5kb3dzIDIwMDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJh
Y3RlcnMgYXMgaWYgdGhleSB3ZXJlIGtleXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRo
ZSBsb3cgd29yZCBvZiBhIDMyLWJpdCBWaXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5
Ym9hcmQgaW5wdXQgbWV0aG9kcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4g
S0VZQkRJTlBVVCxTZW5kSW5wdXQsIFdNX0tFWURPV04sIGFuZCBXTV9LRVlVUAotICAgICAgICAg
ICAgLy8gVktfQVRUTiAoRjYpIEF0dG4ga2V5Ci0gICAgICAgICAgICAvLyBWS19DUlNFTCAoRjcp
IENyU2VsIGtleQotICAgICAgICAgICAgLy8gVktfRVhTRUwgKEY4KSBFeFNlbCBrZXkKLSAgICAg
ICAgICAgIC8vIFZLX0VSRU9GIChGOSkgRXJhc2UgRU9GIGtleQotICAgICAgICAgICAgLy8gVktf
UExBWSAoRkEpIFBsYXkga2V5Ci0gICAgICAgICAgICAvLyBWS19aT09NIChGQikgWm9vbSBrZXkK
LSAgICAgICAgICAgIC8vIFZLX05PTkFNRSAoRkMpIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCi0g
ICAgICAgICAgICAvLyBWS19QQTEgKEZEKSBQQTEga2V5Ci0gICAgICAgICAgICAvLyBWS19PRU1f
Q0xFQVIgKEZFKSBDbGVhciBrZXkKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hh
cmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRo
ZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICc7Oicga2V5CisgICAgY2FzZSBHREtfc2VtaWNv
bG9uOgorICAgIGNhc2UgR0RLX2NvbG9uOgorICAgICAgICByZXR1cm4gVktfT0VNXzE7IC8vY2Fz
ZSAnOyc6IGNhc2UgJzonOiByZXR1cm4gMHhCQTsKKyAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJC
KSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5Cisg
ICAgY2FzZSBHREtfcGx1czoKKyAgICBjYXNlIEdES19lcXVhbDoKKyAgICAgICAgcmV0dXJuIFZL
X09FTV9QTFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7CisgICAgICAgIC8v
IFZLX09FTV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lv
biwgdGhlICcsJyBrZXkKKyAgICBjYXNlIEdES19jb21tYToKKyAgICBjYXNlIEdES19sZXNzOgor
ICAgICAgICByZXR1cm4gVktfT0VNX0NPTU1BOyAvL2Nhc2UgJywnOiBjYXNlICc8JzogcmV0dXJu
IDB4QkM7CisgICAgICAgIC8vIFZLX09FTV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9y
IGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKKyAgICBjYXNlIEdES19taW51czoKKyAg
ICBjYXNlIEdES191bmRlcnNjb3JlOgorICAgICAgICByZXR1cm4gVktfT0VNX01JTlVTOyAvL2Nh
c2UgJy0nOiBjYXNlICdfJzogcmV0dXJuIDB4QkQ7CisgICAgICAgIC8vIFZLX09FTV9QRVJJT0Qg
KEJFKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5
CisgICAgY2FzZSBHREtfcGVyaW9kOgorICAgIGNhc2UgR0RLX2dyZWF0ZXI6CisgICAgICAgIHJl
dHVybiBWS19PRU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7Cisg
ICAgICAgIC8vIFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJz
OyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0
YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKKyAgICBjYXNlIEdES19zbGFzaDoKKyAgICBj
YXNlIEdES19xdWVzdGlvbjoKKyAgICAgICAgcmV0dXJuIFZLX09FTV8yOyAvL2Nhc2UgJy8nOiBj
YXNlICc/JzogcmV0dXJuIDB4QkY7CisgICAgICAgIC8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3Ig
bWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93
cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKKyAg
ICBjYXNlIEdES19hc2NpaXRpbGRlOgorICAgIGNhc2UgR0RLX3F1b3RlbGVmdDoKKyAgICAgICAg
cmV0dXJuIFZLX09FTV8zOyAvL2Nhc2UgJ2AnOiBjYXNlICd+JzogcmV0dXJuIDB4QzA7CisgICAg
ICAgIC8vIFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBp
dCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5k
YXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkKKyAgICBjYXNlIEdES19icmFja2V0bGVmdDoKKyAg
ICBjYXNlIEdES19icmFjZWxlZnQ6CisgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdb
JzogY2FzZSAneyc6IHJldHVybiAweERCOworICAgICAgICAvLyBWS19PRU1fNSAoREMpIFVzZWQg
Zm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdp
bmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5
CisgICAgY2FzZSBHREtfYmFja3NsYXNoOgorICAgIGNhc2UgR0RLX2JhcjoKKyAgICAgICAgcmV0
dXJuIFZLX09FTV81OyAvL2Nhc2UgJ1xcJzogY2FzZSAnfCc6IHJldHVybiAweERDOworICAgICAg
ICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQg
Y2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFy
ZCBrZXlib2FyZCwgdGhlICddfScga2V5CisgICAgY2FzZSBHREtfYnJhY2tldHJpZ2h0OgorICAg
IGNhc2UgR0RLX2JyYWNlcmlnaHQ6CisgICAgICAgIHJldHVybiBWS19PRU1fNjsgLy8gY2FzZSAn
XSc6IGNhc2UgJ30nOiByZXR1cm4gMHhERDsKKyAgICAgICAgLy8gVktfT0VNXzcgKERFKSBVc2Vk
IGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBX
aW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xl
LXF1b3RlL2RvdWJsZS1xdW90ZScga2V5CisgICAgY2FzZSBHREtfcXVvdGVyaWdodDoKKyAgICBj
YXNlIEdES19xdW90ZWRibDoKKyAgICAgICAgcmV0dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6
IGNhc2UgJyInOiByZXR1cm4gMHhERTsKKyAgICAgICAgLy8gVktfT0VNXzggKERGKSBVc2VkIGZv
ciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLgorICAg
ICAgICAvLyBWS19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQOiBFaXRoZXIgdGhlIGFuZ2xl
IGJyYWNrZXQga2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBSVCAxMDIta2V5IGtleWJv
YXJkCisgICAgICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5k
b3dzIE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKKyAgICAgICAgLy8g
VktfUEFDS0VUIChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFy
YWN0ZXJzIGFzIGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0
aGUgbG93IHdvcmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtl
eWJvYXJkIGlucHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGlu
IEtFWUJESU5QVVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKKyAgICAgICAg
Ly8gVktfQVRUTiAoRjYpIEF0dG4ga2V5CisgICAgICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwg
a2V5CisgICAgICAgIC8vIFZLX0VYU0VMIChGOCkgRXhTZWwga2V5CisgICAgICAgIC8vIFZLX0VS
RU9GIChGOSkgRXJhc2UgRU9GIGtleQorICAgICAgICAvLyBWS19QTEFZIChGQSkgUGxheSBrZXkK
KyAgICAgICAgLy8gVktfWk9PTSAoRkIpIFpvb20ga2V5CisgICAgICAgIC8vIFZLX05PTkFNRSAo
RkMpIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisgICAgICAgIC8vIFZLX1BBMSAoRkQpIFBBMSBr
ZXkKKyAgICAgICAgLy8gVktfT0VNX0NMRUFSIChGRSkgQ2xlYXIga2V5CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiB9CiAKIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50KiBldmVudCkKIHsKLSAgICBtX2lzS2V5VXAg
PSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0U7CisgICAgbV9pc0tleVVwID0gKGV2ZW50
LT50eXBlID09IEdES19LRVlfUkVMRUFTRSk7CiAgICAgbV9zaGlmdEtleSA9IGV2ZW50LT5rZXku
c3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwOwogICAgIG1fY3RybEtleSA9IGV2ZW50LT5rZXku
c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLICE9IDA7CiAgICAgbV9hbHRLZXkgPSBldmVudC0+a2V5
LnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOwpAQCAtNDY3LDYgKzUxNiw5IEBACiAgICAgbV91
bm1vZGlmaWVkVGV4dCA9IGV2ZW50LT5rZXkuc3RyaW5nOwogICAgIG1fa2V5SWRlbnRpZmllciA9
IGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXkua2V5dmFsKTsKICAgICBtX1dp
bmRvd3NLZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5LmtleXZh
bCk7CisgICAgaWYgKG1fV2luZG93c0tleUNvZGUgPT0gMCkKKyAgICAgICAgcHJpbnRmKCIgQkFE
IEtFWSBQUkVTUyAlZCBcbiIsZXZlbnQtPmtleS5rZXl2YWwpOworICAgIGFzc2VydChtX1dpbmRv
d3NLZXlDb2RlICE9IDApOwogICAgIG1fYXV0b1JlcGVhdCA9IGZhbHNlOwogICAgIG1faXNLZXlw
YWQgPSBmYWxzZTsKIApAQCAtNDc2LDQgKzUyOCwyMiBAQAogICAgIH0KIH0KIAorUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50JiBwYXJlbnQsIGJvb2wgcmVwZWF0KQoreworICAgIG1faXNLZXlVcCA9IHBhcmVudC5t
X2lzS2V5VXA7CisgICAgbV9zaGlmdEtleSA9IHBhcmVudC5tX3NoaWZ0S2V5OworICAgIG1fY3Ry
bEtleSA9IHBhcmVudC5tX2N0cmxLZXk7CisgICAgbV9hbHRLZXkgPSBwYXJlbnQubV9hbHRLZXk7
CisgICAgbV9tZXRhS2V5ID0gcGFyZW50Lm1fbWV0YUtleTsKKyAgICBtX3RleHQgPSBwYXJlbnQu
bV90ZXh0OworICAgIG1fdW5tb2RpZmllZFRleHQgPSBwYXJlbnQubV91bm1vZGlmaWVkVGV4dDsK
KyAgICBtX2tleUlkZW50aWZpZXIgPSBwYXJlbnQubV9rZXlJZGVudGlmaWVyOworICAgIG1fV2lu
ZG93c0tleUNvZGUgPSBwYXJlbnQubV9XaW5kb3dzS2V5Q29kZTsKKyAgICBtX2lzS2V5cGFkID0g
cGFyZW50Lm1faXNLZXlwYWQ7CisgICAgbV90ZXh0ID0gcGFyZW50Lm1fdGV4dDsKKyAgICBtX2F1
dG9SZXBlYXQgPSByZXBlYXQ7CiB9CisKK30KKy8vIHZpbTp0cz00OmV0CisKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20gCisqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MjEsNyArMjEsNyBAQAogKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0z
Miw1MyArMzIsNTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQ6OkN1cnJlbnRFdmVudFRhZyBQbGF0Zm9ybU1vdXNlRXZlbnQ6OmN1cnJlbnRFdmVu
dCA9IHt9OworY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50OjpDdXJyZW50RXZlbnRUYWcgUGxhdGZv
cm1Nb3VzZUV2ZW50OjpjdXJyZW50RXZlbnQgPQorICAgIHt9OwogCiAvLyBGSVhNRTogV291bGQg
YmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBtb2RpZmllciBpcyBBbHQgaW5zdGVh
ZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KIAogUGxhdGZvcm1Nb3VzZUV2ZW50OjpQ
bGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQogewogICAgIHN3aXRjaCAoZXZlbnQt
PnR5cGUpIHsKLSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgICAgIG1f
cG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT5tb3Rpb24ueCwgKGludClldmVudC0+bW90
aW9uLnkpOwotICAgICAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZl
bnQtPm1vdGlvbi54X3Jvb3QsIChpbnQpZXZlbnQtPm1vdGlvbi55X3Jvb3QpOwotICAgICAgICAg
ICAgbV9idXR0b24gPSAoTW91c2VCdXR0b24pKC0xKTsKLSAgICAgICAgICAgIG1fY2xpY2tDb3Vu
dCA9IDA7Ci0gICAgICAgICAgICBtX3NoaWZ0S2V5ID0gIGV2ZW50LT5tb3Rpb24uc3RhdGUgJiBH
REtfU0hJRlRfTUFTSyAhPSAwOwotICAgICAgICAgICAgbV9jdHJsS2V5ID0gZXZlbnQtPm1vdGlv
bi5zdGF0ZSAmIEdES19DT05UUk9MX01BU0sgIT0gMDsKLSAgICAgICAgICAgIG1fYWx0S2V5ID0g
IGV2ZW50LT5tb3Rpb24uc3RhdGUgJiBHREtfTU9EMV9NQVNLICE9IDA7Ci0gICAgICAgICAgICBt
X21ldGFLZXkgPSBldmVudC0+bW90aW9uLnN0YXRlICYgR0RLX01PRDJfTUFTSyAhPSAwOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICAgICAgbV9w
b3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPm1vdGlvbi54LCAoaW50KWV2ZW50LT5tb3Rp
b24ueSk7CisgICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT5t
b3Rpb24ueF9yb290LCAoaW50KWV2ZW50LT5tb3Rpb24ueV9yb290KTsKKyAgICAgICAgbV9idXR0
b24gPSAoTW91c2VCdXR0b24pKC0xKTsKKyAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAg
ICAgbV9zaGlmdEtleSA9ICBldmVudC0+bW90aW9uLnN0YXRlICYgR0RLX1NISUZUX01BU0sgIT0g
MDsKKyAgICAgICAgbV9jdHJsS2V5ID0gZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19DT05UUk9M
X01BU0sgIT0gMDsKKyAgICAgICAgbV9hbHRLZXkgPSAgZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdE
S19NT0QxX01BU0sgIT0gMDsKKyAgICAgICAgbV9tZXRhS2V5ID0gZXZlbnQtPm1vdGlvbi5zdGF0
ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBH
REtfQlVUVE9OX1BSRVNTOgotICAgICAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgotICAgICAg
ICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgotICAgICAgICBjYXNlIEdES19CVVRUT05fUkVMRUFT
RToKLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTKQotICAg
ICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVu
dC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykKLSAgICAgICAgICAgICAgICBtX2NsaWNrQ291
bnQgPSAyOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05f
UFJFU1MpCi0gICAgICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsKKyAgICBjYXNlIEdES19C
VVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18z
QlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNFOgorICAgICAgICBpZiAo
ZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tDb3Vu
dCA9IDE7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNT
KQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQt
PnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAz
OwogCi0gICAgICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMSkKLSAgICAgICAg
ICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVu
dC0+YnV0dG9uLmJ1dHRvbiA9PSAyKQotICAgICAgICAgICAgICAgIG1fYnV0dG9uID0gTWlkZGxl
QnV0dG9uOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMykK
LSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOworICAgICAgICBpZiAoZXZl
bnQtPmJ1dHRvbi5idXR0b24gPT0gMSkKKyAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRv
bjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMikKKyAgICAgICAg
ICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0
dG9uLmJ1dHRvbiA9PSAzKQorICAgICAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKIAot
ICAgICAgICAgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPmJ1dHRvbi54LCAo
aW50KWV2ZW50LT5idXR0b24ueSk7Ci0gICAgICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50
UG9pbnQoKGludClldmVudC0+YnV0dG9uLnhfcm9vdCwgKGludClldmVudC0+YnV0dG9uLnlfcm9v
dCk7Ci0gICAgICAgICAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19T
SElGVF9NQVNLICE9IDA7Ci0gICAgICAgICAgICBtX2N0cmxLZXkgPSBldmVudC0+YnV0dG9uLnN0
YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAwOwotICAgICAgICAgICAgbV9hbHRLZXkgPSBldmVu
dC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOwotICAgICAgICAgICAgbV9tZXRh
S2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+YnV0
dG9uLngsIChpbnQpZXZlbnQtPmJ1dHRvbi55KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9
IEludFBvaW50KChpbnQpZXZlbnQtPmJ1dHRvbi54X3Jvb3QsIChpbnQpZXZlbnQtPmJ1dHRvbi55
X3Jvb3QpOworICAgICAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19T
SElGVF9NQVNLICE9IDA7CisgICAgICAgIG1fY3RybEtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUg
JiBHREtfQ09OVFJPTF9NQVNLICE9IDA7CisgICAgICAgIG1fYWx0S2V5ID0gZXZlbnQtPmJ1dHRv
bi5zdGF0ZSAmIEdES19NT0QxX01BU0sgIT0gMDsKKyAgICAgICAgbV9tZXRhS2V5ID0gZXZlbnQt
PmJ1dHRvbi5zdGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBtb3Vz
ZSBldmVudFxuIik7Ci0gICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG1vdXNlIGV2ZW50XG4iKTsKKyAgICAgICAgYXNz
ZXJ0KDApOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTIyLDE3ICsyMiwxNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKKyNkZWZpbmUgV0lOMzJfQ09NUElMRV9IQUNLCisKICNpbmNsdWRlIDxzdGRpby5o
PgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJO
b2RlLmgiCiAjaW5jbHVkZSAiVGV4dEZpZWxkLmgiCi0jaW5jbHVkZSAiRmlsZUNob29zZXIuaCIK
ICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiTGlzdEJveC5oIgogI2luY2x1ZGUgIkludFBv
aW50LmgiCkBAIC00MSwxMSArNDEsNyBAQAogI2luY2x1ZGUgIlNsaWRlci5oIgogI2luY2x1ZGUg
IkN1cnNvci5oIgogI2luY2x1ZGUgImxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgotI2luY2x1
ZGUgIlNjcm9sbEJhci5oIgotI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1v
dXNlRXZlbnQuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJTY3JlZW4uaCIK
QEAgLTU1LDMzNyArNTEsNTU0IEBACiAjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkJy
b3dzZXJFeHRlbnNpb25HZGsuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5j
bHVkZSAiUmVuZGVyVGhlbWVHZGsuaCIKICNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5oIgogI2lu
Y2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgotI2luY2x1
ZGUgIkljb24uaCIKLSNpbmNsdWRlICJJY29uTG9hZGVyLmgiCi0jaW5jbHVkZSAiSWNvbkRhdGFi
YXNlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVk
U3RyaW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJT
U0xLZXlHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJTb3VuZC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotc3RydWN0IFBsYXRmb3JtRGF0YVN0cnVj
dAorCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1F
OiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZ
X0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisKK1dpZGdldCogRnJhbWVHZGs6OmNyZWF0ZUphdmFB
cHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYpCiB7Ci19OworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CiAKLXN0cnVjdCBQbGF0Zm9ybVJlc3BvbnNlU3RydWN0Cit2b2lkIFRleHRGaWVsZDo6c2Vs
ZWN0QWxsKCkKIHsKLX07CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KK3ZvaWQgVGV4dEZpZWxk
OjphZGRTZWFyY2hSZXN1bHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitpbnQgVGV4
dEZpZWxkOjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KK2Jvb2wgVGV4dEZpZWxkOjpoYXNTZWxlY3RlZFRleHQoKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CitTdHJpbmcgVGV4
dEZpZWxkOjpzZWxlY3RlZFRleHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQordm9pZCBUZXh0RmllbGQ6OnNldEF1dG9TYXZlTmFtZShT
dHJpbmcgY29uc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Citib29sIFRleHRGaWVs
ZDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9Cit2b2lkIFRleHRGaWVsZDo6c2V0U2VsZWN0aW9u
KGludCwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lkIFRleHRGaWVsZDo6
c2V0TWF4UmVzdWx0cyhpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK2Jvb2wgVGV4
dEZpZWxkOjplZGl0ZWQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CiAKLSNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJy
LCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzIGluICVzOiVkXG4iLCBfX0ZVTkNUSU9OX18sIF9f
RklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKK1NsaWRlcjo6U2xpZGVyKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorSW50U2l6ZSBTbGlkZXI6OnNpemVIaW50KCkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRTaXplKCk7Cit9Cit2b2lkIFNs
aWRlcjo6c2V0VmFsdWUoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lk
IFNsaWRlcjo6c2V0TWF4VmFsdWUoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
Cit2b2lkIFNsaWRlcjo6c2V0TWluVmFsdWUoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CitTbGlkZXI6On5TbGlkZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2
b2lkIFNsaWRlcjo6c2V0Rm9udChXZWJDb3JlOjpGb250IGNvbnN0JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorZG91YmxlIFNsaWRlcjo6dmFsdWUoKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLXZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVC
b3JkZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VQ
cmVzc0V2ZW50VG9TY3JvbGxiYXIoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIFBsYXRm
b3JtU2Nyb2xsYmFyKikgeyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzTW91
c2VQcmVzc0V2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJh
bWUqKSB7IHJldHVybiB0cnVlOyB9Ci1ib29sIEZyYW1lVmlldzo6cGFzc01vdXNlUmVsZWFzZUV2
ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJhbWUqKSB7IHJl
dHVybiB0cnVlOyB9Ci1ib29sIEZyYW1lVmlldzo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFt
ZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJhbWUqKSB7IHJldHVybiB0cnVlOyB9
Ci1ib29sIEZyYW1lVmlldzo6cGFzc1doZWVsRXZlbnRUb1N1YmZyYW1lKFBsYXRmb3JtV2hlZWxF
dmVudCYsIEZyYW1lKikgeyByZXR1cm4gdHJ1ZTsgfQordm9pZCBMaXN0Qm94OjpzZXRTZWxlY3Rl
ZChpbnQsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK0ludFNpemUgTGlzdEJv
eDo6c2l6ZUZvck51bWJlck9mTGluZXMoaW50KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIEludFNpemUoKTsKK30KK2Jvb2wgTGlzdEJveDo6aXNTZWxlY3RlZChp
bnQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK3Zv
aWQgTGlzdEJveDo6YXBwZW5kSXRlbShEZXByZWNhdGVkU3RyaW5nIGNvbnN0JiwgTGlzdEJveEl0
ZW1UeXBlLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lkIExpc3RCb3g6
OmRvbmVBcHBlbmRpbmdJdGVtcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQg
TGlzdEJveDo6c2V0V3JpdGluZ0RpcmVjdGlvbihUZXh0RGlyZWN0aW9uKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9Cit2b2lkIExpc3RCb3g6OnNldEVuYWJsZWQoYm9vbCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBMaXN0Qm94OjpjbGVhcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KK2Jvb2wgTGlzdEJveDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAotdm9p
ZCBXaWRnZXQ6OmVuYWJsZUZsdXNoRHJhd2luZygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9v
bCBXaWRnZXQ6OmlzRW5hYmxlZCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KLVdpZGdldDo6Rm9jdXNQb2xpY3kgV2lkZ2V0Ojpmb2N1c1BvbGljeSgpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5vRm9jdXM7IH0KLXZvaWQgV2lkZ2V0OjpkaXNhYmxlRmx1
c2hEcmF3aW5nKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1HcmFwaGljc0NvbnRleHQqIFdpZGdl
dDo6bG9ja0RyYXdpbmdGb2N1cygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZv
aWQgV2lkZ2V0Ojp1bmxvY2tEcmF3aW5nRm9jdXMoR3JhcGhpY3NDb250ZXh0KikgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9Ci12b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgpIHsgfQogCi12b2lk
IFRleHRGaWVsZDo6c2VsZWN0QWxsKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFRleHRG
aWVsZDo6YWRkU2VhcmNoUmVzdWx0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1pbnQgVGV4dEZp
ZWxkOjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KLWJvb2wgVGV4dEZpZWxkOjpoYXNTZWxlY3RlZFRleHQoKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Ci1TdHJpbmcgVGV4dEZpZWxkOjpzZWxlY3RlZFRleHQoKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQotdm9pZCBUZXh0RmllbGQ6
OnNldEF1dG9TYXZlTmFtZShTdHJpbmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJv
b2wgVGV4dEZpZWxkOjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKCkgY29uc3QgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRTZWxlY3Rpb24o
aW50LCBpbnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBUZXh0RmllbGQ6OnNldE1heFJl
c3VsdHMoaW50KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgVGV4dEZpZWxkOjplZGl0ZWQo
KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CitXaWRnZXQ6OkZvY3VzUG9s
aWN5IFNsaWRlcjo6Zm9jdXNQb2xpY3koKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIENsaWNrRm9jdXM7Cit9CitXaWRnZXQ6OkZvY3VzUG9saWN5IExpc3RCb3g6
OmZvY3VzUG9saWN5KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBDbGlja0ZvY3VzOworfQorV2lkZ2V0OjpGb2N1c1BvbGljeSBUZXh0RmllbGQ6OmZvY3VzUG9s
aWN5KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBDbGlja0Zv
Y3VzOworfQogCi1TbGlkZXI6OlNsaWRlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotSW50U2l6
ZSBTbGlkZXI6OnNpemVIaW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gSW50
U2l6ZSgpOyB9Ci12b2lkIFNsaWRlcjo6c2V0VmFsdWUoZG91YmxlKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLXZvaWQgU2xpZGVyOjpzZXRNYXhWYWx1ZShkb3VibGUpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotdm9pZCBTbGlkZXI6OnNldE1pblZhbHVlKGRvdWJsZSkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9Ci1TbGlkZXI6On5TbGlkZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgU2xpZGVy
OjpzZXRGb250KFdlYkNvcmU6OkZvbnQgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWRv
dWJsZSBTbGlkZXI6OnZhbHVlKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsg
fQorQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KIAotdm9pZCBMaXN0Qm94OjpzZXRTZWxlY3RlZChpbnQsIGJvb2wpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQotSW50U2l6ZSBMaXN0Qm94OjpzaXplRm9yTnVtYmVyT2ZMaW5l
cyhpbnQpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFNpemUoKTsgfQotYm9v
bCBMaXN0Qm94Ojppc1NlbGVjdGVkKGludCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQotdm9pZCBMaXN0Qm94OjphcHBlbmRJdGVtKERlcHJlY2F0ZWRTdHJpbmcgY29uc3Qm
LCBMaXN0Qm94SXRlbVR5cGUsIGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBMaXN0
Qm94Ojpkb25lQXBwZW5kaW5nSXRlbXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgTGlz
dEJveDo6c2V0V3JpdGluZ0RpcmVjdGlvbihUZXh0RGlyZWN0aW9uKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLXZvaWQgTGlzdEJveDo6c2V0RW5hYmxlZChib29sKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLXZvaWQgTGlzdEJveDo6Y2xlYXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgTGlz
dEJveDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KK1BsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNv
bnN0IEN1cnJlbnRFdmVudFRhZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK1N0cmlu
ZyBXZWJDb3JlOjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQogCi1XaWRnZXQ6OkZvY3VzUG9saWN5
IFNsaWRlcjo6Zm9jdXNQb2xpY3koKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBO
b0ZvY3VzOyB9Ci1XaWRnZXQ6OkZvY3VzUG9saWN5IExpc3RCb3g6OmZvY3VzUG9saWN5KCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9Gb2N1czsgfQotV2lkZ2V0OjpGb2N1c1Bv
bGljeSBUZXh0RmllbGQ6OmZvY3VzUG9saWN5KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gTm9Gb2N1czsgfQoraW50IFdlYkNvcmU6OmZpbmROZXh0U2VudGVuY2VGcm9tSW5kZXgo
VUNoYXIgY29uc3QqLCBpbnQsIGludCwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQordm9pZCBXZWJDb3JlOjpmaW5kU2VudGVuY2VCb3VuZGFyeShVQ2hh
ciBjb25zdCosIGludCwgaW50LCBpbnQqLCBpbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CitpbnQgV2ViQ29yZTo6ZmluZE5leHRXb3JkRnJvbUluZGV4KFVDaGFyIGNvbnN0KiwgaW50
LCBpbnQsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
IAotQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQogCi1QbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChjb25zdCBD
dXJyZW50RXZlbnRUYWcmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVN0cmluZyBXZWJDb3JlOjpz
ZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBT
dHJpbmcoKTsgfQordm9pZCBGcmFtZUdkazo6Zm9jdXNXaW5kb3coKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9Cit2b2lkIEZyYW1lR2RrOjp1bmZvY3VzV2luZG93KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorYm9vbCBGcmFtZUdkazo6bG9jYXRpb25iYXJWaXNpYmxlKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQordm9pZCBGcmFtZUdkazo6
aXNzdWVSZWRvQ29tbWFuZCh2b2lkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWVHZGs6OmdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0
KFdpZGdldCAqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CitL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWVHZGs6OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRn
ZXQoV2lkZ2V0ICopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
K0tKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIEZyYW1lR2RrOjpiaW5kaW5nUm9vdE9iamVjdCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVH
ZGs6OmNhblJlZG8oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9Citib29sIEZyYW1lR2RrOjpjYW5VbmRvKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQordm9pZCBGcmFtZUdkazo6cmVnaXN0ZXJDb21tYW5k
Rm9yUmVkbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorYm9vbCBGcmFtZUdkazo6cnVuSmF2YVNjcmlwdFByb21wdChTdHJpbmcg
Y29uc3QmLCBTdHJpbmcgY29uc3QmLCBTdHJpbmcgJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorYm9vbCBGcmFtZUdkazo6c2hvdWxkSW50ZXJydXB0SmF2YVNj
cmlwdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9Cit2
b2lkIEZyYW1lR2RrOjpwcmludCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK0tKUzo6
QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQo
V2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQordm9p
ZCBGcmFtZUdkazo6aXNzdWVDdXRDb21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQordm9pZCBGcmFtZUdkazo6aXNzdWVDb3B5Q29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KK3ZvaWQgRnJhbWVHZGs6Omlzc3VlVW5kb0NvbW1hbmQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9Cit2b2lkIEZyYW1lR2RrOjppc3N1ZVBhc3RlQ29tbWFuZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgRnJhbWVHZGs6OnNjaGVkdWxlQ2xvc2UoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Citib29sIEZyYW1lR2RrOjptZW51YmFyVmlzaWJs
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK2Jvb2wgRnJh
bWVHZGs6OnBlcnNvbmFsYmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVHZGs6OnN0YXR1c2JhclZpc2libGUoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Citib29sIEZyYW1lR2RrOjp0b29s
YmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
K3ZvaWQgRnJhbWVHZGs6Omlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KK2Jvb2wgRnJhbWVHZGs6OmNhblBhc3RlKCkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQogCi1pbnQgV2ViQ29yZTo6ZmluZE5leHRT
ZW50ZW5jZUZyb21JbmRleChVQ2hhciBjb25zdCosIGludCwgaW50LCBib29sKSB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIFdlYkNvcmU6OmZpbmRTZW50ZW5jZUJvdW5kYXJ5
KFVDaGFyIGNvbnN0KiwgaW50LCBpbnQsIGludCosIGludCopIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQotaW50IFdlYkNvcmU6OmZpbmROZXh0V29yZEZyb21JbmRleChVQ2hhciBjb25zdCosIGludCwg
aW50LCBib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CitlbnVtIFdlYkNvcmU6
Ok9iamVjdENvbnRlbnRUeXBlIEZyYW1lR2RrOjpvYmplY3RDb250ZW50VHlwZShLVVJMIGNvbnN0
JiwgU3RyaW5nIGNvbnN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAo
T2JqZWN0Q29udGVudFR5cGUpMDsKK30KK2Jvb2wgRnJhbWVHZGs6OmNhbkdvQmFja09yRm9yd2Fy
ZChpbnQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
IAotbmFtZXNwYWNlIFdlYkNvcmUgewordm9pZCBGcmFtZUdkazo6Z29CYWNrT3JGb3J3YXJkKGlu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQogCi1WZWN0b3I8Y2hhcj4gU2VydmVTeW5j
aHJvbm91c1JlcXVlc3QoTG9hZGVyKixEb2NMb2FkZXIqLFJlc291cmNlTG9hZGVyKixLVVJMJixE
ZXByZWNhdGVkU3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPGNoYXI+
KCk7IH0KK2ludCBGcmFtZUdkazo6Z2V0SGlzdG9yeUxlbmd0aCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAorS1VSTCBGcmFtZUdkazo6aGlzdG9yeVVSTChp
bnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gS1VSTCgpOwogfQogCi12
b2lkIEZyYW1lR2RrOjpmb2N1c1dpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBG
cmFtZUdkazo6dW5mb2N1c1dpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBGcmFt
ZUdkazo6bG9jYXRpb25iYXJWaXNpYmxlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsg
fQotdm9pZCBGcmFtZUdkazo6aXNzdWVSZWRvQ29tbWFuZCh2b2lkKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0T2JqZWN0SW5zdGFu
Y2VGb3JXaWRnZXQoV2lkZ2V0ICopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLUtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0RW1iZWRJbnN0YW5jZUZvcldpZGdl
dChXaWRnZXQgKikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotS0pTOjpCaW5kaW5n
czo6Um9vdE9iamVjdCogRnJhbWVHZGs6OmJpbmRpbmdSb290T2JqZWN0KCkgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMDsgfQotV2lkZ2V0KiBGcmFtZUdkazo6Y3JlYXRlSmF2YUFwcGxldFdp
ZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6Y2Fu
UmVkbygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVH
ZGs6OmNhblVuZG8oKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lk
IEZyYW1lR2RrOjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRp
dENvbW1hbmQ+KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVHZGs6OnJ1bkphdmFT
Y3JpcHRQcm9tcHQoU3RyaW5nIGNvbnN0JiwgU3RyaW5nIGNvbnN0JiwgU3RyaW5nICYpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6OnNob3VsZEludGVycnVw
dEphdmFTY3JpcHQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBG
cmFtZUdkazo6cHJpbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUtKUzo6QmluZGluZ3M6Oklu
c3RhbmNlKiBGcmFtZUdkazo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6cGFzc01vdXNlRG93
bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQot
dm9pZCBGcmFtZUdkazo6aXNzdWVDdXRDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12
b2lkIEZyYW1lR2RrOjppc3N1ZUNvcHlDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12
b2lkIEZyYW1lR2RrOjppc3N1ZVVuZG9Db21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1T
dHJpbmcgRnJhbWVHZGs6Om1pbWVUeXBlRm9yRmlsZU5hbWUoU3RyaW5nIGNvbnN0JikgY29uc3Qg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLXZvaWQgRnJhbWVHZGs6Omlz
c3VlUGFzdGVDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjpz
Y2hlZHVsZUNsb3NlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjptYXJr
TWlzc3BlbGxpbmdzKFdlYkNvcmU6OlNlbGVjdGlvbiBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotYm9vbCBGcmFtZUdkazo6bWVudWJhclZpc2libGUoKSB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiAwOyB9Ci1ib29sIEZyYW1lR2RrOjpwZXJzb25hbGJhclZpc2libGUoKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIEZyYW1lR2RrOjpzdGF0dXNiYXJWaXNpYmxl
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6dG9vbGJh
clZpc2libGUoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZyYW1lR2Rr
Ojppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJh
bWVHZGs6OmNhblBhc3RlKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQot
ZW51bSBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZSBGcmFtZUdkazo6b2JqZWN0Q29udGVudFR5
cGUoS1VSTCBjb25zdCYsIFN0cmluZyBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IChPYmplY3RDb250ZW50VHlwZSkwOyB9Ci1ib29sIEZyYW1lR2RrOjpjYW5Hb0JhY2tPckZvcndh
cmQoaW50KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZyYW1l
R2RrOjppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQoKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLWJvb2wgRnJhbWVHZGs6OmlzTG9hZFR5cGVSZWxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiBmYWxzZTsgfQotS1VSTCBGcmFtZUdkazo6b3JpZ2luYWxSZXF1ZXN0VVJMKCkgY29u
c3QgeyByZXR1cm4gS1VSTCgpOyB9Ci1QbHVnaW4qIEZyYW1lR2RrOjpjcmVhdGVQbHVnaW4oRWxl
bWVudCosIEtVUkwgY29uc3QmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiwgU3RyaW5nIGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQor
dm9pZCBGcmFtZUdkazo6aXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorUGx1Z2luKiBGcmFtZUdkazo6Y3JlYXRlUGx1Z2luKEVsZW1l
bnQqLCBLVVJMIGNvbnN0JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYsIFN0cmluZyBjb25zdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KIAotYm9vbCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpjYW5SdW5Nb2RhbCgpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6Y3Jl
YXRlTmV3V2luZG93KHN0cnVjdCBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1ZXN0IGNvbnN0Jiwgc3Ry
dWN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzIGNvbnN0JiwgRnJhbWUqJikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci12b2lkIEJyb3dzZXJFeHRlbnNpb25HZGs6OmNyZWF0ZU5ld1dpbmRvdyhzdHJ1
Y3QgV2ViQ29yZTo6RnJhbWVMb2FkUmVxdWVzdCBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQotYm9vbCBCcm93c2VyRXh0ZW5zaW9uR2RrOjpjYW5SdW5Nb2RhbE5vdygpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6cnVuTW9kYWwo
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6Z29CYWNr
T3JGb3J3YXJkKGludCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1LVVJMIEJyb3dzZXJFeHRlbnNp
b25HZGs6Omhpc3RvcnlVUkwoaW50IGRpc3RhbmNlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBLVVJMKCk7IH0KLUJyb3dzZXJFeHRlbnNpb25HZGs6OkJyb3dzZXJFeHRlbnNpb25HZGsoV2Vi
Q29yZTo6RnJhbWUqKSB7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6c2V0VHlwZWRJY29u
VVJMKEtVUkwgY29uc3QmLCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgQnJvd3NlckV4dGVuc2lv
bkdkazo6c2V0SWNvblVSTChLVVJMIGNvbnN0JikgeyB9Ci1pbnQgQnJvd3NlckV4dGVuc2lvbkdk
azo6Z2V0SGlzdG9yeUxlbmd0aCgpIHsgcmV0dXJuIDA7IH0KK2ludCBXZWJDb3JlOjpzY3JlZW5E
ZXB0aFBlckNvbXBvbmVudChjb25zdCBQYWdlKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQorYm9vbCBXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUoY29uc3Qg
UGFnZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAK
LWludCBXZWJDb3JlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudChjb25zdCBQYWdlKikgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJv
bWUoY29uc3QgUGFnZSopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0KIC8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
IC8qIENvbXBsZXRlbHkgZW1wdHkgc3R1YnMgKG1vc3RseSB0byBhbGxvdyBEUlQgdG8gcnVuKTog
Ki8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KIHN0YXRpYyBDdXJzb3IgbG9jYWxDdXJzb3I7Ci1jb25zdCBDdXJzb3ImIFdlYkNvcmU6
Om1vdmVDdXJzb3IoKSB7IHJldHVybiBsb2NhbEN1cnNvcjsgfQorY29uc3QgQ3Vyc29yJiBXZWJD
b3JlOjptb3ZlQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gbG9jYWxDdXJzb3I7Cit9CiAKIGJvb2wg
QVhPYmplY3RDYWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiAKLWJvb2wgV2Vi
Q29yZTo6aGlzdG9yeUNvbnRhaW5zKERlcHJlY2F0ZWRTdHJpbmcgY29uc3QmKSB7IHJldHVybiBm
YWxzZTsgfQotU3RyaW5nIFdlYkNvcmU6OnN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpIHsgcmV0
dXJuICJTdWJtaXQiOyB9Ci1TdHJpbmcgV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4dCgpIHsg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsgfQotU3RyaW5nIFdlYkNvcmU6OnJlc2V0QnV0dG9u
RGVmYXVsdExhYmVsKCkgeyByZXR1cm4gIlJlc2V0IjsgfQotU3RyaW5nIFdlYkNvcmU6OmZpbGVC
dXR0b25DaG9vc2VGaWxlTGFiZWwoKSB7IHJldHVybiAiQnJvd3NlLi4uIjsgfQotU3RyaW5nIFdl
YkNvcmU6OmZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkgeyByZXR1cm4gU3RyaW5nKCk7
IH0KK2Jvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKERlcHJlY2F0ZWRTdHJpbmcgY29uc3Qm
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KK1N0cmluZyBXZWJDb3JlOjpzdWJtaXRCdXR0b25E
ZWZhdWx0TGFiZWwoKQoreworICAgIHJldHVybiAiU3VibWl0IjsKK30KK1N0cmluZyBXZWJDb3Jl
OjppbnB1dEVsZW1lbnRBbHRUZXh0KCkKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygp
OworfQorU3RyaW5nIFdlYkNvcmU6OnJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkKK3sKKyAgICBy
ZXR1cm4gIlJlc2V0IjsKK30KK1N0cmluZyBXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UoKQorewor
ICAgIHJldHVybiAiZW4iOworfQorU3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VGaWxl
TGFiZWwoKQoreworICAgIHJldHVybiAiQ2hvb3NlIEZpbGUiOworfQogCi1TdHJpbmcgV2ViQ29y
ZTo6ZGVmYXVsdExhbmd1YWdlKCkgeyByZXR1cm4gImVuIjsgfQordm9pZCBXZWJDb3JlOjpmaW5k
V29yZEJvdW5kYXJ5KFVDaGFyIGNvbnN0KiBzdHIsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50
KiBzdGFydCwgaW50KiBlbmQpCit7CisgICAgKnN0YXJ0ID0gcG9zaXRpb247CisgICAgKmVuZCA9
IHBvc2l0aW9uOworfQogCi12b2lkIFdlYkNvcmU6OmZpbmRXb3JkQm91bmRhcnkoVUNoYXIgY29u
c3QqIHN0ciwgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkgeypz
dGFydCA9IHBvc2l0aW9uOyAqZW5kID0gcG9zaXRpb247IH0KK1BsdWdpbkluZm8qUGx1Z0luSW5m
b1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkKK3sKKyAg
ICByZXR1cm4gMDsKK30KK3Vuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBj
b25zdAoreworICAgIHJldHVybiAwOworfQorYm9vbCBXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6
OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9Cit2b2lkIFdlYkNvcmU6OnJlZnJlc2hQbHVnaW5zKGJvb2wpCit7IH0KIAotUGx1
Z2luSW5mbypQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4
KHVuc2lnbmVkKSB7IHJldHVybiAwO30KLXVuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2lu
Q291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci1ib29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9y
ZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmKSB7IHJldHVybiBmYWxz
ZTsgfQotdm9pZCBXZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IH0KK3ZvaWQgRnJhbWVH
ZGs6OnJlc3RvcmVEb2N1bWVudFN0YXRlKCkKK3sgfQordm9pZCBGcmFtZUdkazo6cGFydENsZWFy
ZWRJbkJlZ2luKCkKK3sgfQordm9pZCBGcmFtZUdkazo6Y3JlYXRlRW1wdHlEb2N1bWVudCgpCit7
IH0KK1N0cmluZyBGcmFtZUdkazo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAoreworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KK3ZvaWQgRnJhbWVHZGs6OmhhbmRsZWRPbmxvYWRFdmVudHMoKQor
eyB9CitSYW5nZSogRnJhbWVHZGs6Om1hcmtlZFRleHRSYW5nZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDA7Cit9Citib29sIEZyYW1lR2RrOjpsYXN0RXZlbnRJc01vdXNlVXAoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KK3ZvaWQgRnJhbWVHZGs6OmFkZE1lc3NhZ2VUb0NvbnNvbGUo
U3RyaW5nIGNvbnN0JiwgdW5zaWduZWQgaW50LCBTdHJpbmcgY29uc3QmKQoreyB9CiAKLXZvaWQg
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmFzc2VtYmxlUmVzcG9uc2VIZWFkZXJzKCkgY29uc3Qg
eyB9Ci12b2lkIFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpyZXRyaWV2ZUNoYXJzZXQoKSBjb25z
dCB7IH0KK3ZvaWQgRnJhbWVHZGs6OnNhdmVEb2N1bWVudFN0YXRlKCkKK3sgfQordm9pZCBGcmFt
ZUdkazo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21t
YW5kPikKK3sgfQordm9pZCBGcmFtZUdkazo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnModm9pZCkK
K3sgfQorU3RyaW5nIEZyYW1lR2RrOjppbmNvbWluZ1JlZmVycmVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9Cit2b2lkIEZyYW1lR2RrOjptYXJrTWlzc3BlbGxpbmdzSW5BZGph
Y2VudFdvcmRzKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiBjb25zdCYpCit7IH0KIAotdm9pZCBG
cmFtZUdkazo6cmVzdG9yZURvY3VtZW50U3RhdGUoKSB7IH0KLXZvaWQgRnJhbWVHZGs6OnBhcnRD
bGVhcmVkSW5CZWdpbigpIHsgfQotdm9pZCBGcmFtZUdkazo6Y3JlYXRlRW1wdHlEb2N1bWVudCgp
IHsgfQotU3RyaW5nIEZyYW1lR2RrOjpvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IFN0cmluZygpOyB9Ci12b2lkIEZyYW1lR2RrOjpoYW5kbGVkT25sb2FkRXZlbnRzKCkgeyB9Ci1S
YW5nZSogRnJhbWVHZGs6Om1hcmtlZFRleHRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLWJv
b2wgRnJhbWVHZGs6Omxhc3RFdmVudElzTW91c2VVcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci12b2lkIEZyYW1lR2RrOjphZGRNZXNzYWdlVG9Db25zb2xlKFN0cmluZyBjb25zdCYsIHVuc2ln
bmVkIGludCwgU3RyaW5nIGNvbnN0JikgeyB9Ci1ib29sIEZyYW1lR2RrOjpzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiwgY29uc3QgU2VsZWN0aW9uJiwgV2ViQ29yZTo6RUFm
ZmluaXR5LCBib29sKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci1ib29sIEZyYW1lR2RrOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotdm9pZCBGcmFtZUdkazo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihXZWJDb3JlOjpTZWxl
Y3Rpb24gY29uc3QmLCBib29sKSB7IH0KLUZyYW1lKiBGcmFtZUdkazo6Y3JlYXRlRnJhbWUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwg
Y29uc3QgU3RyaW5nJiByZWZlcnJlcikgeyByZXR1cm4gMDsgfQogCi12b2lkIEZyYW1lR2RrOjpz
YXZlRG9jdW1lbnRTdGF0ZSgpIHsgfQotdm9pZCBGcmFtZUdkazo6cmVnaXN0ZXJDb21tYW5kRm9y
VW5kbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikgeyB9Ci12b2lkIEZyYW1lR2Rr
OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyh2b2lkKSB7IH0KLVN0cmluZyBGcmFtZUdkazo6aW5j
b21pbmdSZWZlcnJlcigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIEZyYW1lR2Rr
OjptYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKFdlYkNvcmU6OlZpc2libGVQb3NpdGlv
biBjb25zdCYpIHsgfQotdm9pZCBGcmFtZUdkazo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNv
bnN0IFNlbGVjdGlvbiYpIHsgfQorVGV4dEZpZWxkOjpUZXh0RmllbGQoVGV4dEZpZWxkOjpUeXBl
KQoreyB9CitUZXh0RmllbGQ6On5UZXh0RmllbGQoKQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0
Rm9udChXZWJDb3JlOjpGb250IGNvbnN0JikKK3sgfQordm9pZCBUZXh0RmllbGQ6OnNldEFsaWdu
bWVudChIb3Jpem9udGFsQWxpZ25tZW50KQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0V3JpdGlu
Z0RpcmVjdGlvbihUZXh0RGlyZWN0aW9uKQoreyB9CitpbnQgVGV4dEZpZWxkOjptYXhMZW5ndGgo
KSBjb25zdAoreworICAgIHJldHVybiAwOworfQordm9pZCBUZXh0RmllbGQ6OnNldE1heExlbmd0
aChpbnQpCit7IH0KK1N0cmluZyBUZXh0RmllbGQ6OnRleHQoKSBjb25zdAoreworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KK3ZvaWQgVGV4dEZpZWxkOjpzZXRUZXh0KFN0cmluZyBjb25zdCYpCit7
IH0KK2ludCBUZXh0RmllbGQ6OmN1cnNvclBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
MDsKK30KK3ZvaWQgVGV4dEZpZWxkOjpzZXRDdXJzb3JQb3NpdGlvbihpbnQpCit7IH0KK3ZvaWQg
VGV4dEZpZWxkOjpzZXRFZGl0ZWQoYm9vbCkKK3sgfQordm9pZCBUZXh0RmllbGQ6OnNldFJlYWRP
bmx5KGJvb2wpCit7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRQbGFjZWhvbGRlclN0cmluZyhTdHJp
bmcgY29uc3QmKQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0Q29sb3JzKENvbG9yIGNvbnN0Jiwg
Q29sb3IgY29uc3QmKQoreyB9CitJbnRTaXplIFRleHRGaWVsZDo6c2l6ZUZvckNoYXJhY3Rlcldp
ZHRoKGludCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZSgpOworfQoraW50IFRleHRGaWVs
ZDo6YmFzZWxpbmVQb3NpdGlvbihpbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9Cit2b2lk
IFRleHRGaWVsZDo6c2V0TGl2ZVNlYXJjaChib29sKQoreyB9CiAKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKK0xpc3RCb3g6Okxpc3RCb3goKQoreyB9CitMaXN0Qm94Ojp+TGlzdEJveCgpCit7IH0KK3Zv
aWQgTGlzdEJveDo6c2V0U2VsZWN0aW9uTW9kZShMaXN0Qm94OjpTZWxlY3Rpb25Nb2RlKQoreyB9
Cit2b2lkIExpc3RCb3g6OnNldEZvbnQoV2ViQ29yZTo6Rm9udCBjb25zdCYpCit7IH0KIAotYm9v
bCBDaGVja0lmUmVsb2FkaW5nKERvY0xvYWRlciopIHsgcmV0dXJuIGZhbHNlOyB9Ci10aW1lX3Qg
Q2FjaGVPYmplY3RFeHBpcmVzVGltZShEb2NMb2FkZXIqLCBQbGF0Zm9ybVJlc3BvbnNlKSB7IHJl
dHVybiAwOyB9Ci12b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiwgQ2FjaGVk
UmVzb3VyY2UqKSB7IH0KLURlcHJlY2F0ZWRTdHJpbmcgUmVzcG9uc2VVUkwoUGxhdGZvcm1SZXNw
b25zZSkgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOyB9Ci1ib29sIElzUmVzcG9uc2VVUkxF
cXVhbFRvVVJMKFBsYXRmb3JtUmVzcG9uc2UgLCBjb25zdCBTdHJpbmcmIFVSTCkgeyByZXR1cm4g
ZmFsc2U7IH0KLWJvb2wgUmVzcG9uc2VJc011bHRpcGFydChQbGF0Zm9ybVJlc3BvbnNlKSB7IHJl
dHVybiBmYWxzZTsgfQotRGVwcmVjYXRlZFN0cmluZyBSZXNwb25zZU1JTUVUeXBlKFBsYXRmb3Jt
UmVzcG9uc2UpIHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsgfQotdm9pZCBDYWNoZWRSZXNv
dXJjZTo6c2V0UmVzcG9uc2UoUGxhdGZvcm1SZXNwb25zZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Ci12b2lkIENhY2hlZFJlc291cmNlOjpzZXRBbGxEYXRhKFBsYXRmb3JtRGF0YSkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9Ci0KK0NvbG9yIFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkKK3sKKyAgICBy
ZXR1cm4gMHhGRjAwMDBGRjsKIH0KK3ZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFu
Z2VGdW5jdGlvbih2b2lkICgqKSgpKQoreyB9CiAKLXZvaWQgV2lkZ2V0OjpzZXRFbmFibGVkKGJv
b2wpIHsgfQotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QgY29u
c3QmKSB7IH0KLXZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpIHsgfQotdm9pZCBXaWRn
ZXQ6OmludmFsaWRhdGUoKSB7IH0KLXZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiByKSB7IH0KK3ZvaWQgRnJhbWU6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCit7IH0K
IAotdm9pZCBTY3JvbGxWaWV3OjphZGRDaGlsZChXaWRnZXQqKSB7IH0KLXZvaWQgU2Nyb2xsVmll
dzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0KikgeyB9Ci12b2lkIFNjcm9sbFZpZXc6OnNjcm9sbFBvaW50
UmVjdXJzaXZlbHkoaW50IHgsIGludCB5KSB7IH0KLWJvb2wgU2Nyb2xsVmlldzo6aW5XaW5kb3co
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci12b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxh
dGZvcm1XaGVlbEV2ZW50JikgeyB9Ci12b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMo
KSB7IH0KLWludCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxJbmZvKHNob3J0IHR5cGUsIGludCBj
dXJyZW50LCBpbnQgbWF4LCBpbnQgcGFnZVNpemUpIHsgcmV0dXJuIDA7IH0KLUludFBvaW50IFNj
cm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdCB7
IHJldHVybiBwb2ludDsgfQotSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyhj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIHBvaW50OyB9Ci1QbGF0Zm9ybVNj
cm9sbGJhciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFyVW5kZXJNb3VzZShjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIG1vdXNlRXZlbnQpIHsgcmV0dXJuIDA7IH0KK3ZvaWQgSW1hZ2U6OmRyYXdUaWxl
ZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBU
aWxlUnVsZSwgVGlsZVJ1bGUsIENvbXBvc2l0ZU9wZXJhdG9yKQoreyB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
SW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCi0gICAgICAgIGNvbnN0
IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0
Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coSW50U2l6ZSBjb25zdCYsIGlu
dCwgQ29sb3IgY29uc3QmKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygp
IHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
IHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkgeyB9Ci12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIHsg
fQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVXaWR0aChmbG9hdCkgeyB9Ci12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbikgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TWl0ZXJMaW1pdChmbG9hdCkgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxv
YXQpIHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcikgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRo
JikgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0KSB7IH0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmKSB7IH0KK0Zsb2F0UmVjdCBGb250
OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRT
dHlsZSYsIGNvbnN0IEludFBvaW50JiwgaW50KSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKK30KK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CitpbnQgRm9udDo6b2Zmc2V0Rm9y
UG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwg
aW50LCBib29sKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CiAKLVBhdGg6OlBhdGgoKXsgfQotUGF0aDo6flBhdGgoKXsgfQotUGF0aDo6UGF0aChjb25z
dCBQYXRoJil7IH0KLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIFdpbmRS
dWxlIHJ1bGUpIGNvbnN0eyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNv
bnN0IEZsb2F0U2l6ZSYpeyB9Ci1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3Qg
eyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLVBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRo
Jil7IHJldHVybiAqIHRoaXM7IH0KLXZvaWQgUGF0aDo6Y2xlYXIoKSB7IH0KLXZvaWQgUGF0aDo6
bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KLXZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0
IEZsb2F0UG9pbnQmKSB7IH0KLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVU
byhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQm
KSB7IH0KLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCkgeyB9Ci12b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpIHsgfQotdm9pZCBQ
YXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wp
IHsgfQotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotdm9pZCBQYXRo
OjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIHsgfQorbmFtZXNwYWNlIFdlYkNvcmUgewor
VmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CitTdHJpbmcgc2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5n
ICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVybCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CiAKLVRleHRGaWVsZDo6VGV4dEZpZWxkKFRleHRGaWVsZDo6VHlwZSkgeyB9Ci1UZXh0
RmllbGQ6On5UZXh0RmllbGQoKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRGb250KFdlYkNvcmU6
OkZvbnQgY29uc3QmKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRBbGlnbm1lbnQoSG9yaXpvbnRh
bEFsaWdubWVudCkgeyB9Ci12b2lkIFRleHRGaWVsZDo6c2V0V3JpdGluZ0RpcmVjdGlvbihUZXh0
RGlyZWN0aW9uKSB7IH0KLWludCBUZXh0RmllbGQ6Om1heExlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRNYXhMZW5ndGgoaW50KSB7IH0KLVN0cmluZyBUZXh0
RmllbGQ6OnRleHQoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotdm9pZCBUZXh0RmllbGQ6
OnNldFRleHQoU3RyaW5nIGNvbnN0JikgeyB9Ci1pbnQgVGV4dEZpZWxkOjpjdXJzb3JQb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRDdXJzb3JQb3NpdGlv
bihpbnQpIHsgfQotdm9pZCBUZXh0RmllbGQ6OnNldEVkaXRlZChib29sKSB7IH0KLXZvaWQgVGV4
dEZpZWxkOjpzZXRSZWFkT25seShib29sKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRQbGFjZWhv
bGRlclN0cmluZyhTdHJpbmcgY29uc3QmKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRDb2xvcnMo
Q29sb3IgY29uc3QmLCBDb2xvciBjb25zdCYpIHsgfQotSW50U2l6ZSBUZXh0RmllbGQ6OnNpemVG
b3JDaGFyYWN0ZXJXaWR0aChpbnQpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQotaW50IFRl
eHRGaWVsZDo6YmFzZWxpbmVQb3NpdGlvbihpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLXZvaWQg
VGV4dEZpZWxkOjpzZXRMaXZlU2VhcmNoKGJvb2wpIHsgfQordm9pZCBzeXN0ZW1CZWVwKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQogCi1QbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1T
Y3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgOiBTY3JvbGxiYXIo
Y2xpZW50LCBvcmllbnRhdGlvbiwgY29udHJvbFNpemUpIHsgfQotUGxhdGZvcm1TY3JvbGxiYXI6
On5QbGF0Zm9ybVNjcm9sbGJhcigpIHsgfQotaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLWludCBQbGF0Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gMDsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0RW5hYmxlZChib29s
KSB7IH0KLXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QpIHsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBk
YXRlVGh1bWJQb3NpdGlvbigpIHsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1
bWJQcm9wb3J0aW9uKCkgeyB9Ci12b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0KGNvbnN0
IEludFJlY3QmKSB7IH0KIAotTGlzdEJveDo6TGlzdEJveCgpIHsgfQotTGlzdEJveDo6fkxpc3RC
b3goKSB7IH0KLXZvaWQgTGlzdEJveDo6c2V0U2VsZWN0aW9uTW9kZShMaXN0Qm94OjpTZWxlY3Rp
b25Nb2RlKSB7IH0KLXZvaWQgTGlzdEJveDo6c2V0Rm9udChXZWJDb3JlOjpGb250IGNvbnN0Jikg
eyB9Ci0KLUZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihEb2N1bWVudCosIFJlbmRlckZpbGVVcGxv
YWRDb250cm9sKikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1GaWxlQ2hvb3Nlcjo6fkZpbGVDaG9v
c2VyKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1QYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBGaWxl
Q2hvb3Nlcjo6Y3JlYXRlKERvY3VtZW50KiwgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNo
b29zZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVN0cmluZyBGaWxlQ2hvb3Nlcjo6YmFzZW5h
bWVGb3JXaWR0aChpbnQgd2lkdGgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0
cmluZygpOyB9Ci12b2lkIEZpbGVDaG9vc2VyOjpkaXNjb25uZWN0VXBsb2FkQ29udHJvbCgpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQotQ29sb3IgV2ViQ29yZTo6
Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9Ci12b2lkIFdlYkNvcmU6OnNl
dEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9Ci0KLXZvaWQgRnJh
bWU6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpIHsgfQotCi12b2lkIEltYWdlOjpkcmF3VGlsZWQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgVGls
ZVJ1bGUsIFRpbGVSdWxlLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9Ci0KLXZvaWQgUmVuZGVyVGhl
bWVHZGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQotYm9vbCBSZW5k
ZXJUaGVtZUdkazo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgUmVu
ZGVyVGhlbWVHZGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQotdm9pZCBS
ZW5kZXJUaGVtZUdkazo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCogZSkgY29uc3Qge30KLWJvb2wgUmVuZGVyVGhlbWVHZGs6OnBh
aW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLUljb246Okljb24oKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KLUljb246On5JY29uKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1Q
YXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFBhc3NSZWZQdHI8SWNvbj4obmV3IEljb24o
KSk7IH0KLXZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi12b2lkIEljb25Mb2FkZXI6OnN0b3BMb2FkaW5nKCkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9IAotdm9pZCBJY29uTG9hZGVyOjpzdGFydExvYWRpbmcoKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0gCi1JY29uTG9hZGVyKiBJY29uTG9hZGVyOjpjcmVhdGVGb3JG
cmFtZShGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIDA7IH0gCi0KLWJvb2wgSWNvbkRhdGFiYXNlOjpp
c0ljb25FeHBpcmVkRm9ySWNvblVSTChjb25zdCBTdHJpbmcmIHVybCkgeyByZXR1cm4gZmFsc2U7
IH0KLWJvb2wgSWNvbkRhdGFiYXNlOjpoYXNFbnRyeUZvckljb25VUkwoY29uc3QgU3RyaW5nJiB1
cmwpIHsgcmV0dXJuIGZhbHNlOyB9Ci1JY29uRGF0YWJhc2UqIEljb25EYXRhYmFzZTo6c2hhcmVk
SWNvbkRhdGFiYXNlKCkgeyByZXR1cm4gMDsgfQotYm9vbCBJY29uRGF0YWJhc2U6OnNldEljb25V
UkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgY29uc3QgU3RyaW5nJiBwYWdlVVJM
KSB7IHJldHVybiBmYWxzZTsgfQotCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBJbnRQb2lu
dCYsIGludCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLXZvaWQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5
bGUmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1mbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRl
eHRTdHlsZSYpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWludCBGb250
OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBU
ZXh0U3R5bGUmLCBpbnQsIGJvb2wpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkS2V5U2l6
ZXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9Ci1TdHJp
bmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRl
eCwgY29uc3QgU3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVybCkgeyByZXR1
cm4gU3RyaW5nKCk7IH0KLQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU3lzdGVtVGlt
ZUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TeXN0ZW1UaW1l
TGludXguY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1N5c3Rl
bVRpbWVMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tIAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1kb3VibGUgY3VycmVudFRpbWUoKQotewotICBzdHJ1Y3QgdGlt
ZXZhbCBhVGltZXZhbDsKLSAgc3RydWN0IHRpbWV6b25lIGFUaW1lem9uZTsKLSAKLSAgZ2V0dGlt
ZW9mZGF5KCAmYVRpbWV2YWwsICZhVGltZXpvbmUgKTsKLSAgcmV0dXJuIChkb3VibGUpYVRpbWV2
YWwudHZfc2VjICsgKGRvdWJsZSkoYVRpbWV2YWwudHZfdXNlYyAvIDEwMDAwMDAuMCApOwotfQot
Ci19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsuaAkocmV2
aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRz
IGluIFdlYkNvcmUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbSAKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0g
Ki8KLQotI2lmbmRlZiBSRU5ERVJfUE9QVVBNRU5VX0dES19ICi0jZGVmaW5lIFJFTkRFUl9QT1BV
UE1FTlVfR0RLX0gKLQotI2luY2x1ZGUgIlBvcHVwTWVudS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEhUTUxPcHRpb25FbGVtZW50OwotY2xhc3MgSFRNTE9wdEdyb3VwRWxlbWVu
dDsKLQotY2xhc3MgUG9wdXBNZW51R2RrIDogcHVibGljIFBvcHVwTWVudSB7Ci1wdWJsaWM6Ci0g
ICAgUG9wdXBNZW51R2RrKE5vZGUqLCAgUmVuZGVyTWVudUxpc3QqKTsKLSAgICB+UG9wdXBNZW51
R2RrKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9w
dWxhdGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1BvcHVwKGNvbnN0IEludFJlY3QmLCBGcmFt
ZVZpZXcqLCBpbnQgaW5kZXgpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlUG9wdXAoKTsKLSAgICAK
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU2VwYXJhdG9yKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGFkZEdyb3VwTGFiZWwoSFRNTE9wdEdyb3VwRWxlbWVudCopOwotICAgIHZpcnR1YWwg
dm9pZCBhZGRPcHRpb24oSFRNTE9wdGlvbkVsZW1lbnQqKTsKLQotfTsKLQotfQotCi0jZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0yMiw3MCArMjIsNTAgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBGcmFt
ZUdka19IXwogI2RlZmluZSBGcmFtZUdka19IXwogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJXaW5kb3dHZGsuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckNsaWVudC5oIgotI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlICJ3dGYvUmVmUHRyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYW1lR2RrOworY2xhc3MgRG9jdW1l
bnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKK2NsYXNzIFdpbmRvd0dkazsKK2NsYXNz
IFBsYXRmb3JtV2hlZWxFdmVudDsKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKK2NsYXNzIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDsKK2NsYXNzIFBsYXRmb3JtU2Nyb2xsQmFyOworY2xhc3MgRWRp
dG9yQ2xpZW50OworY2xhc3MgRXZlbnQ7CiAKLWNsYXNzIEZyYW1lR2RrQ2xpZW50IHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5GcmFtZUdka0NsaWVudCgpIHt9OwogCi0gICAgdmlydHVhbCB2b2lk
IHNldEZyYW1lKGNvbnN0IEZyYW1lR2RrKikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIG9wZW5V
UkwoY29uc3QgS1VSTCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBT
dHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYsIGNvbnN0IEZvcm1EYXRhKikgPSAwOwotfTsKLQot
Y2xhc3MgRnJhbWVHZGtDbGllbnREZWZhdWx0IDogcHVibGljIEZyYW1lR2RrQ2xpZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljICBSZXNvdXJjZUxvYWRlckNsaWVudCAK
K2NsYXNzIEZyYW1lR2RrIDogcHVibGljIEZyYW1lLCBSZXNvdXJjZUxvYWRlckNsaWVudAogewog
cHVibGljOgotCi0gICAgRnJhbWVHZGtDbGllbnREZWZhdWx0KCk7Ci0gICAgdmlydHVhbCB+RnJh
bWVHZGtDbGllbnREZWZhdWx0KCk7Ci0KLSAgICAvLyBGcmFtZUdka0NsaWVudAotICAgIHZpcnR1
YWwgdm9pZCBzZXRGcmFtZShjb25zdCBGcmFtZUdkayopOwotICAgIHZpcnR1YWwgdm9pZCBvcGVu
VVJMKGNvbnN0IEtVUkwmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBTdHJp
bmcmIG1ldGhvZCwgY29uc3QgS1VSTCYsIGNvbnN0IEZvcm1EYXRhKik7Ci0KLSAgICAvLyBSZXNv
dXJjZUxvYWRlckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFJlc291
cmNlTG9hZGVyKiwgUGxhdGZvcm1SZXNwb25zZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY2VpdmVkQWxsRGF0YShSZXNvdXJjZUxvYWRlciosIFBsYXRmb3JtRGF0YSk7Ci0KLXBy
aXZhdGU6Ci0gICAgRnJhbWVHZGsqIG1fZnJhbWU7Ci0gICAgYm9vbCBtX2JlZ2luQ2FsbGVkIDog
MTsKLQotfTsKLQotY2xhc3MgRnJhbWVHZGsgOiBwdWJsaWMgRnJhbWUgewotcHVibGljOgotICAg
IEZyYW1lR2RrKFBhZ2UqLCBFbGVtZW50Kik7Ci0gICAgRnJhbWVHZGsoR2RrRHJhd2FibGUqKTsK
KyAgICBGcmFtZUdkayhQYWdlKiwgRWxlbWVudCosIFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PixX
aW5kb3dHZGsqIHdpbmRvdyk7CiAgICAgdmlydHVhbCB+RnJhbWVHZGsoKTsKLQotICAgIHZvaWQg
aGFuZGxlR2RrRXZlbnQoR2RrRXZlbnQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlblVSTChjb25z
dCBLVVJMJik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5VUkxSZXF1ZXN0KGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBGcmFtZUxvYWRS
ZXF1ZXN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJl
cXVlc3QmKTsKLQorICAgIHZpcnR1YWwgdm9pZCB1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRS
ZXF1ZXN0Jixjb25zdCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25z
dCBDdXJzb3ImIGN1cnNvcik7CiAKICAgICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVj
dENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKICAgICB2
aXJ0dWFsIFBsdWdpbiogY3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpOwog
CisgICAgdmlydHVhbCBib29sIGlzTG9hZFR5cGVSZWxvYWQoKTsKKworICAgIHZpcnR1YWwgS1VS
TCBvcmlnaW5hbFJlcXVlc3RVUkwoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUNsb3NlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1c1dpbmRvdygpOwpAQCAtMTE1LDEy
ICs5NSwxMyBAQAogICAgIHZpcnR1YWwgU3RyaW5nIG1pbWVUeXBlRm9yRmlsZU5hbWUoY29uc3Qg
U3RyaW5nJikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5nc0luQWRq
YWNlbnRXb3Jkcyhjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFy
a01pc3NwZWxsaW5ncyhjb25zdCBTZWxlY3Rpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya01p
c3NwZWxsaW5ncyhjb25zdCBTZWxlY3Rpb24mKQorICAgIHt9CiAKICAgICB2aXJ0dWFsIGJvb2wg
bGFzdEV2ZW50SXNNb3VzZVVwKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFzc1N1YmZy
YW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgJiwgRnJhbWUq
IHN1YmZyYW1lID0gMCk7CiAgICAgdmlydHVhbCBib29sIHBhc3NXaGVlbEV2ZW50VG9DaGlsZFdp
ZGdldChOb2RlKik7CisgICAgdmlydHVhbCBib29sIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0
KFdpZGdldCopOwogCiAgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25z
dDsKIApAQCAtMTM5LDEzICsxMjAsMjIgQEAKICAgICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUNv
bW1hbmQoKTsKICAgICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5k
KCk7CiAgICAgdmlydHVhbCB2b2lkIGlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpOwotICAgIHZpcnR1
YWwgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hh
bmdlZENvbnRlbnRzKGNvbnN0IFNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKTsKLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0
aW9uLCBjb25zdCBTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBi
b29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdDsKLSAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGlv
bihjb25zdCBTZWxlY3Rpb24mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5
cGluZykKKyAgICB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KGNvbnN0IFNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQorICAgIHt9OworICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24s
IGNvbnN0IFNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wg
c3RpbGxTZWxlY3RpbmcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fTsKKwogICAgIHZpcnR1YWwgdm9pZCBwYXJ0Q2xlYXJlZEluQmVnaW4oKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBjYW5Hb0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNlKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgZ29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkgOworICAgIHZpcnR1YWwgaW50
IGdldEhpc3RvcnlMZW5ndGgoKTsKKyAgICB2aXJ0dWFsIEtVUkwgaGlzdG9yeVVSTChpbnQgZGlz
dGFuY2UpOworCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZWRPbmxvYWRFdmVudHMoKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBjYW5QYXN0ZSgpIGNvbnN0OwpAQCAtMTUzLDI1ICsxNDMsNDUgQEAKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuVW5kbygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwcmludCgp
OwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7CisgICAgdmly
dHVhbCBib29sIGRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiwgY29uc3QgUGxh
dGZvcm1LZXlib2FyZEV2ZW50Kik7CiAKLSAgICBib29sIGtleVByZXNzKGNvbnN0IFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCYpOwotICAgIHZpcnR1YWwgS1VSTCBvcmlnaW5hbFJlcXVlc3RVUkwoKSBj
b25zdDsKLQotICAgIEludFJlY3QgZnJhbWVHZW9tZXRyeSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBGcmFtZSogY3JlYXRl
RnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgRWxlbWVudCogb3duZXJFbGVt
ZW50LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKTsKICAgICBXaWRnZXQqIGNyZWF0ZUphdmFBcHBs
ZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiYpOwotCisgICAgLy9HZGsgc3BlY2lmaWMKKyAgICBzdGF0aWMgdm9pZCBzZXRJbnN0
YWxsTG9jYXRpb24oY29uc3QgY2hhciAqKTsKKyAgICBzdGF0aWMgU3RyaW5nIGluc3RhbGxMb2Nh
dGlvbigpOworICAgIGJvb2wgaXNUb3BMZXZlbCgpCisgICAgeworICAgICAgICByZXR1cm4gbV93
aW5kb3cuZ2V0KCkgIT0gMDsKKyAgICB9CisgICAgdm9pZCBwcm9jZXNzUGxhdGZvcm1Gb2N1c0No
YW5nZShib29sIGZvY3VzZWQpOworICAgIHZvaWQgcHJvY2Vzc1BsYXRmb3JtV2hlZWxFdmVudChQ
bGF0Zm9ybVdoZWVsRXZlbnQgZXZlbnQpOworICAgIHZvaWQgcHJvY2Vzc1BsYXRmb3JtS2V5Ym9h
cmRFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQsIGNvbnN0IEF0b21pY1N0cmluZyBl
dmVudFR5cGUpOworICAgIHZvaWQgcHJvY2Vzc1BsYXRmb3JtTW91c2VFdmVudChQbGF0Zm9ybU1v
dXNlRXZlbnQgZXZlbnQsIGNvbnN0IEF0b21pY1N0cmluZyBldmVudFR5cGUpOworICAgIEZyYW1l
R2RrKiBnZXRSb290RnJhbWUoKTsKKyAgICAvL3ZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVj
dCYsIGJvb2wgZnJvbVN5c3RlbSk7CisgICAgLy9JbnRSZWN0IGZyYW1lR2VvbWV0cnkoKSBjb25z
dDsKKyAgICAvL3ZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgRnJh
bWVHZGsqIHBhcmVudCgpOworICAgIHZvaWQgc2V0UGFyZW50KEZyYW1lR2RrKik7CisgICAgdm9p
ZCByZXBhaW50KGJvb2wgbm93KTsKKyAgICB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBk
YXRlUmVjdCwgYm9vbCBub3cpOworICAgIC8vSW50UG9pbnQgZ2V0QWJzb2x1dGVQb3NpdGlvbigp
OworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAg
ICBHcmFwaGljc0NvbnRleHRDYWlybyogYmVnaW5QYWludGluZyhjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdm9pZCBlbmRQYWludGluZyhHcmFwaGljc0NvbnRleHRDYWlybyopOworICAgIFdpbmRvd0dk
ayogd2luZG93KCkKKyAgICB7CisgICAgICAgIHJldHVybiAgbV93aW5kb3cuZ2V0KCk7CisgICAg
fQorICAgIHZvaWQgICAgYXR0YWNoV2luZG93KFdpbmRvd0dkayopOworICAgIHZvaWQgICAgZGV0
YWNoV2luZG93KCk7Citwcm90ZWN0ZWQ6CisgICAgQXRvbWljU3RyaW5nICAgIG1fZXZlbnRUeXBl
OwogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkVHlwZVJlbG9hZCgpOwotICAgIHZp
cnR1YWwgYm9vbCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKLQotICAgIEZy
YW1lR2RrQ2xpZW50KiBtX2NsaWVudDsKLSAgICBHZGtEcmF3YWJsZSogbV9kcmF3YWJsZTsKKyAg
ICBSZWZQdHI8V2luZG93R2RrPiBtX3dpbmRvdzsKIH07CiAKLWlubGluZSBGcmFtZUdkayogV2lu
KEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVHZGsqPihmcmFtZSk7IH0K
LWlubGluZSBjb25zdCBGcmFtZUdkayogV2luKGNvbnN0IEZyYW1lKiBmcmFtZSkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVHZGsqPihmcmFtZSk7IH0KIAogfQogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAkocmV2aXNpb24gMTczOTkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIsNyArMjIsNyBAQAogICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0zMSw5ICszMSwxOSBAQAogI2luY2x1ZGUgIlN5
c3RlbVRpbWUuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPGdsaWIu
aD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZG91YmxlIGN1cnJlbnRUaW1lKCkKK3sKKyAgICBzdHJ1Y3QgdGlt
ZXZhbCBhVGltZXZhbDsKKyAgICBzdHJ1Y3QgdGltZXpvbmUgYVRpbWV6b25lOworICAgIGdldHRp
bWVvZmRheSgmYVRpbWV2YWwsICZhVGltZXpvbmUpOworICAgIHJldHVybiAoZG91YmxlKWFUaW1l
dmFsLnR2X3NlYyArIChkb3VibGUpKGFUaW1ldmFsLnR2X3VzZWMgLyAxMDAwMDAwLjApOworfQor
CiBzdGF0aWMgZ3VpbnQgc2hhcmVkVGltZXI7CiBzdGF0aWMgdm9pZCAoKnNoYXJlZFRpbWVyRmly
ZWRGdW5jdGlvbikoKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdk
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5j
cHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdk
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDcgKzIyLDcgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0Nvb2tpZUphckdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5oCShyZXZp
c2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IHByb2plY3QuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI5LDI2
ICsyOSwzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBUaGVtZURhdGEgewot
ICAgIFRoZW1lRGF0YSgpIDogbV9wYXJ0KDApLCBtX3N0YXRlKDApIHt9CitzdHJ1Y3QgVGhlbWVE
YXRhCit7CisgICAgVGhlbWVEYXRhKCkgOiBtX3BhcnQoMCksIG1fc3RhdGUoMCkKKyAgICB7fQog
CiAgICAgdW5zaWduZWQgbV9wYXJ0OwogICAgIHVuc2lnbmVkIG1fc3RhdGU7CiB9OwogCi1jbGFz
cyBSZW5kZXJUaGVtZUdkayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CitjbGFzcyBSZW5kZXJUaGVt
ZUdkayA6IHB1YmxpYyBSZW5kZXJUaGVtZQorewogcHVibGljOgotICAgIFJlbmRlclRoZW1lR2Rr
KCkgOiBSZW5kZXJUaGVtZSgpIHsgfQorICAgIFJlbmRlclRoZW1lR2RrKCkgOiBSZW5kZXJUaGVt
ZSgpCisgICAgeyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29u
dHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi0gICAgeyBy
ZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7IH0KKyAgICB7CisgICAgICAgIHJldHVybiBwYWlu
dEJ1dHRvbihvLCBpLCByKTsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6
ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50UmFk
aW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKLSAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworICAgIH0KICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZv
cm1TY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9y
bVNjcm9sbGJhci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZv
cm1TY3JvbGxiYXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3JtU2Nyb2xsYmFyX2gKKyNkZWZpbmUgUGxhdGZv
cm1TY3JvbGxiYXJfaAorCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiU2Nyb2xsQmFy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBw
dWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYmFyCit7CitwdWJsaWM6CisgICAgUGxhdGZvcm1T
Y3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplKTsKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybVNjcm9sbGJhcigpOworCisgICAg
dmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAg
ICB2aXJ0dWFsIEludFJlY3QgZnJhbWVHZW9tZXRyeSgpOworCisgICAgLy8gRklYTUU6IEltcGxl
bWVudC4KKyAgICBzdGF0aWMgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIDE3OworICAgIH0KKyAgICBzdGF0aWMgaW50IHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE3OworICAgIH0KKworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOworfTsKKworfQorCisjZW5kaWYgLy8gUGxhdGZv
cm1TY3JvbGxiYXJfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaW5kb3dHZGsuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdpbmRvd0dka19IXworI2RlZmluZSBXaW5kb3dHZGtfSF8KKyNpbmNsdWRlICJT
aGFyZWQuaCIKKyNpbmNsdWRlICJCcm93c2VyRXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2luZG93
RmVhdHVyZXMuaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOworY2xhc3MgQ3Vy
c29yOworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJbnRTaXplOworY2xhc3MgSW50UmVjdDsKK2Ns
YXNzIEZyYW1lR2RrOworY2xhc3MgU3RyaW5nOworCisKK2NsYXNzIFdpbmRvd0dkayA6ICBwdWJs
aWMgU2hhcmVkPFdpbmRvd0dkaz4KK3sKKworcHVibGljOgorICAgIFdpbmRvd0dkaygpOworICAg
IFdpbmRvd0dkayhHZGtXaW5kb3cqKTsKKyAgICBXaW5kb3dHZGsoY29uc3QgV2luZG93RmVhdHVy
ZXMmKTsKKyAgICB2aXJ0dWFsIH5XaW5kb3dHZGsoKTsKKyAgICBzdGF0aWMgV2luZG93R2RrKiBm
aW5kV2luZG93KEdka1dpbmRvdyopOworICAgIHZvaWQgaGFuZGxlR2RrRXZlbnQoR2RrRXZlbnQq
KTsKKyAgICB2b2lkIHNldEZyYW1lKEZyYW1lR2RrKiBmcmFtZSkKKyAgICB7CisgICAgICAgIG1f
ZnJhbWUgPSBmcmFtZTsKKyAgICB9CisgICAgRnJhbWVHZGsqIGZyYW1lKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2ZyYW1lOworICAgIH0KKyAgICB2b2lkIHNldElzQWN0aXZlKGJvb2wgZmxh
Zyk7CisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpOworICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBzZXRGdWxsU2NyZWVuKGJvb2wpOworICAgIHZvaWQgc2V0TWF4aW1pemVk
KGJvb2wpOworICAgIFdpbmRvd0dkayogZ2V0UG9pbnRlckluZm8oSW50UG9pbnQmLCAvKnBvc2l0
aW9uIHJlbGF0aXZlIHRvIHRoaXMgd2luZG93Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wmIHNoaWZ0S2V5LGJvb2wmIGN0cmxLZXksIGJvb2wmIGFsdEtleSwgYm9vbCYgbWV0
YUtleSk7CisgICAgV2luZG93R2RrKiB3aW5kb3dBdFBvaW50ZXIoKTsKKyAgICBJbnRSZWN0IGdl
b21ldHJ5KCkgY29uc3Q7CisgICAgSW50UG9pbnQgcG9zaXRpb24oKSBjb25zdDsKKyAgICBJbnRT
aXplIHNpemUoKSBjb25zdDsKKyAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsK
KyAgICB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBub3cpOwor
ICAgIEdka1dpbmRvdyogd2luZG93KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dpbmRvdzsK
KyAgICB9CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
OworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiAgYmVnaW5QYWludGluZyhjb25zdCBJbnRSZWN0
Jik7CisgICAgdm9pZCBlbmRQYWludGluZyhHcmFwaGljc0NvbnRleHRDYWlybyopOworICAgIElu
dFBvaW50IGdldEFic29sdXRlUG9zaXRpb24oKSBjb25zdDsKKyAgICBXaW5kb3dGZWF0dXJlcyB3
aW5kb3dGZWF0dXJlcygpCisgICAgeworICAgICAgICByZXR1cm4gbV93aW5kb3dGZWF0dXJlczsK
KyAgICB9Citwcml2YXRlOgorICAgIGJvb2wgbV9jcmVhdGVkRHJhd2FibGU7CisgICAgR2RrV2lu
ZG93KiBtX3dpbmRvdzsKKyAgICBXaW5kb3dGZWF0dXJlcyBtX3dpbmRvd0ZlYXR1cmVzOworICAg
IEZyYW1lR2RrKiBtX2ZyYW1lOworfTsKKworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9XaWRnZXRQcml2YXRlR2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0UHJpdmF0ZUdkay5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5o
IgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyTWFuYWdlci5oIgorI2luY2x1ZGUgIldpZGdldC5o
IgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGcmFtZUdkay5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiUmVuZGVy
VHJlZUFzVGV4dC5oIgorI2VuZGlmCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZw
cmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVf
XywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKworCit1c2luZyBu
YW1lc3BhY2UgS0pTOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKworV2lkZ2V0UHJpdmF0ZTo6
V2lkZ2V0UHJpdmF0ZShXaWRnZXQqIHdpZGdldCkKKyAgICAgICAgOiBSZXNvdXJjZUxvYWRlckNs
aWVudCgpCisgICAgICAgICwgbV9uYW1lKCJfYmxhbmsiKQorICAgICAgICAsIG1fdXJsKCkKKyAg
ICAgICAgLCB2aXNpYmxlKGZhbHNlKQorICAgICAgICAsIGVuYWJsZWQoZmFsc2UpCisgICAgICAg
ICwgc2VsZWN0ZWQoZmFsc2UpCisgICAgICAgICwgaGFzRm9jdXMoZmFsc2UpCisgICAgICAgICwg
Z2VvbWV0cnkoKQorICAgICAgICAsIGZvbnQoKQorICAgICAgICAsIGNsaWVudCgwKQorICAgICAg
ICAsIG1fd2lkZ2V0KHdpZGdldCkKKyAgICAgICAgLCBtX293bmVyKDApCisgICAgICAgICwgbV9w
YXJlbnQoMCkKKyAgICAgICAgLCBtX3ZpZXcoMCkKKyAgICAgICAgLCBtX2hhc1Njcm9sbGJhcnMo
dHJ1ZSkKKyAgICAgICAgLCBtX2lzRXJyb3IoZmFsc2UpCit7fQorCitXaWRnZXRQcml2YXRlOjp+
V2lkZ2V0UHJpdmF0ZSgpCit7CisgICAgaWYgKG1fdmlldy5nZXQoKSkKKyAgICAgICAgbV92aWV3
LT5wcml2YXRlRGF0YSgpLT5tX293bmVyID0gMDsKKyAgICBtX3BhcmVudCA9IDA7CisgICAgbV93
aWRnZXQgPSAwOworICAgIG1fdmlldyA9IDA7CisgICAgY2xpZW50ID0gMDsKK30KKwordm9pZCBX
aWRnZXRQcml2YXRlOjpjcmVhdGVWaWV3KEtVUkwgdXJsKQoreworICAgIG1fdXJsID0gdXJsOwor
ICAgIG1fbmFtZSA9IFN0cmluZyh1cmwudXJsKCkpOworICAgIC8vYSByZWJpbmQKKyAgICBpZiAo
bV92aWV3KSB7CisgICAgICAgIGRlbGV0ZSBtX3ZpZXctPmZyYW1lKCk7CisgICAgICAgIG1fdmll
dyA9IDA7CisgICAgfQorICAgIFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3I7CisgICAg
RnJhbWVHZGsqIHRtcCA9IG5ldyBGcmFtZUdkayhuZXcgUGFnZSgpLDAsZWRpdG9yLDApOworICAg
IHRtcC0+dHJlZSgpLT5zZXROYW1lKG1fdXJsLnVybCgpKTsKKyAgICBtX3ZpZXcgPSB0bXAtPnZp
ZXcoKTsKKworICAgIC8vaW1wb3J0YW50IG9yIHdlIGhhdmUgcmVjdXJzaW9uCisgICAgbV92aWV3
LT5wcml2YXRlRGF0YSgpLT5tX2hhc1Njcm9sbGJhcnMgPSBtX2hhc1Njcm9sbGJhcnM7CisgICAg
bV92aWV3LT5wcml2YXRlRGF0YSgpLT5tX25hbWUgPSBtX25hbWUrIlt2aWV3XSI7CisgICAgbV92
aWV3LT5zZXRPd25lcih0aGlzLT5tX3dpZGdldCk7CisKKyAgICBpZiAoIW1faGFzU2Nyb2xsYmFy
cykgeworICAgICAgICBtX3ZpZXctPnN1cHByZXNzU2Nyb2xsYmFycyh0cnVlLGZhbHNlKTsKKyAg
ICAgICAgbV92aWV3LT5zZXRWU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBbHdheXNPZmYpOworICAg
ICAgICBtX3ZpZXctPnNldEhTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckFsd2F5c09mZik7CisgICAg
fQorICAgIHRtcC0+b3BlblVSTChtX3VybCk7Cit9CisKK2Jvb2wgV2lkZ2V0UHJpdmF0ZTo6b3Bl
blVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCFtX293bmVyKQorICAgICAgICBtX25h
bWU9U3RyaW5nKHVybC51cmwoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsK
KyAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IG1fdmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSA/
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmRvY3VtZW50KCkt
PmRvY0xvYWRlcigpOiAwOworICAgIFJlc291cmNlTG9hZGVyOjpjcmVhdGUocmVxdWVzdCx0aGlz
LGRvY0xvYWRlcik7CisgICAgLy9GSVhNRTogd2h5IGlzIHRoaXMgc2V0IHRvIHRydWUgYnkgZGVm
YXVsdCA/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2lkZ2V0UHJpdmF0ZTo6c3VibWl0
Rm9ybShjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBGb3JtRGF0
YSogcG9zdERhdGEpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKKyAgICBy
ZXF1ZXN0LnNldEhUVFBNZXRob2QobWV0aG9kKTsKKyAgICByZXF1ZXN0LnNldEhUVFBCb2R5KCpw
b3N0RGF0YSk7CisKKyAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IG1fdmlldy0+ZnJhbWUoKS0+
ZG9jdW1lbnQoKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCkt
PmRvY3VtZW50KCktPmRvY0xvYWRlcigpOiAwOworICAgIFJlc291cmNlTG9hZGVyOjpjcmVhdGUo
cmVxdWVzdCx0aGlzLGRvY0xvYWRlcik7Cit9CisKK3ZvaWQgV2lkZ2V0UHJpdmF0ZTo6cmVjZWl2
ZWRSZWRpcmVjdChSZXNvdXJjZUxvYWRlciogam9iLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
am9iLT5jYW5jZWwoKTsKKyAgICBvcGVuVVJMKHVybCk7Cit9CisKKy8qCisgKiBEYXRhIGlzIHRo
ZSBmdWxsIHNldCBvZiBoZWFkZXJzCisgKiBDYWxsZWQgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IHJl
Y2lldmVkIGRhdGEgb3IgYWxsIGRhdGEKKyAqLwordm9pZCBXaWRnZXRQcml2YXRlOjpyZWNlaXZl
ZFJlc3BvbnNlKFJlc291cmNlTG9hZGVyKiBqb2IsIFBsYXRmb3JtUmVzcG9uc2UgZGF0YSkKK3sK
KyAgICBSZXNvdXJjZUxvYWRlckludGVybmFsKiBpbnRlcm5hbCA9IGpvYi0+Z2V0SW50ZXJuYWwo
KTsKKyAgICBpbnRlcm5hbC0+YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzID0gdHJ1ZTsKKworICAg
IEZyYW1lKiBmcmFtZSA9IG1fdmlldy0+ZnJhbWUoKTsKKworICAgIFN0cmluZyBtaW1lVHlwZSA9
IGRhdGEtPm1pbWVUeXBlOworCisgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkgeworICAgICAg
ICBTdHJpbmcgcGF0aCA9ICBTdHJpbmcoam9iLT51cmwoKS5wYXRoKCkpOworICAgICAgICBtaW1l
VHlwZSA9IFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0TWltZVR5cGUocGF0aCk7CisgICAgfQor
CisgICAgZnJhbWUtPnNldFJlc3BvbnNlTUlNRVR5cGUobWltZVR5cGUpOworICAgIFN0cmluZyBj
aGFyc2V0ID0gZGF0YS0+Y2hhcnNldDsKKworICAgIG1fdmlldy0+ZnJhbWUoKS0+YWRkTWV0YURh
dGEoIkhUVFAtSGVhZGVycyIsU3RyaW5nKGludGVybmFsLT5yZXNwb25zZUhlYWRlcnMpKTsKKwor
ICAgIC8vIHNldEVuY29kaW5nIGNhbGxzIGJlZ2luKCkgZm9yIHVzLCBkZXNwaXRlIHRoZSBtaXNs
ZWFkaW5nIG5hbWUKKyAgICBpZiAoIWNoYXJzZXQuaXNFbXB0eSgpKQorICAgICAgICBmcmFtZS0+
c2V0RW5jb2RpbmcoY2hhcnNldCx0cnVlKTsKKyAgICBlbHNlCisgICAgICAgIGZyYW1lLT5zZXRF
bmNvZGluZyhtX3ZpZXctPmZyYW1lKCktPmVuY29kaW5nKCksZmFsc2UpOworfQorCit2b2lkIFdp
ZGdldFByaXZhdGU6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlTG9hZGVyKiBqb2IsIGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgbV92aWV3LT5mcmFtZSgpLT5hZGREYXRhKGRh
dGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgV2lkZ2V0UHJpdmF0ZTo6ZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUxvYWRlciogam9iKQoreworCisgICAgbV9pc0Vycm9yID0gam9iLT5pc0Vycm9yUGFn
ZSgpOworICAgIG1fdmlldy0+ZnJhbWUoKS0+ZW5kKCk7CisgICAgbV92aWV3LT5yZXBhaW50KGZh
bHNlKTsKK30KKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgV2lkZ2V0UHJpdmF0ZTo6ZHVtcERvY3Vt
ZW50KCkKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHM7CisgICAgRG9jdW1lbnQgKmRvYyA9IG1f
dmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBUZXh0U3RyZWFtIHRzKCZzKTsKKyAgICBk
b2MtPmR1bXAoJnRzLERlcHJlY2F0ZWRTdHJpbmcoIiAiKSk7CisgICAgcHJpbnRmKCJXSURHRVQg
Tk9ERVM6JXNcbiVzXG4iLG1fbmFtZS5kZXByZWNhdGVkU3RyaW5nKCkuYXNjaWkoKSxzLmFzY2lp
KCkpOworICAgIHByaW50ZigiRU5EX05PREVTXG4iKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHN0
ID0gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihkb2MtPnJlbmRlcmVyKCkpOworICAgIHByaW50Zigi
V0lER0VUICVzIFJFTkRFUkVTOlxuJXNcbiIsbV9uYW1lLmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2Np
aSgpLHN0LmFzY2lpKCkpOworICAgIHByaW50ZigiRU5EX1JFTkRFUkVTXG4iKTsKK30KKyNlbmRp
ZgorCit9CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
U2NyZWVuR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JlZW5H
ZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1NjcmVlbkdk
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyLDMwICsyMiw0MyBA
QAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U2NyZWVuLmgiCi0KICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiRnJhbWVHZGsuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogCisjZGVmaW5lIG5vdElt
cGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAl
czolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdo
aWxlKDApCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEdka0RyYXdhYmxlKiBkcmF3
YWJsZUZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSAocGFn
ZSA/IHBhZ2UtPm1haW5GcmFtZSgpIDogMCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgRnJhbWVHZGsqIGlmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4oZnJh
bWUpOworICAgIEZyYW1lR2RrKiByb290ID0gaWZyYW1lLT5nZXRSb290RnJhbWUoKTsKKyAgICBp
ZiAoIXJvb3QgfHwgIXJvb3QtPndpbmRvdygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiByb290LT53aW5kb3coKS0+d2luZG93KCk7Cit9CisKK3N0YXRpYyBXaWRnZXQqIHdpZGdl
dEZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSAocGFnZSA/
IHBhZ2UtPm1haW5GcmFtZSgpIDogMCk7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSAoZnJh
bWUgPyBmcmFtZS0+dmlldygpIDogMCk7Ci0gICAgCiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBmcmFtZVZpZXctPmRyYXdhYmxlKCk7Cisg
ICAgcmV0dXJuIGZyYW1lVmlldzsKIH0KIAogRmxvYXRSZWN0IHNjcmVlblJlY3QoY29uc3QgUGFn
ZSogcGFnZSkKQEAgLTY1LDE1ICs3OCwxNSBAQAogICAgIHJldHVybiBnZGtfZHJhd2FibGVfZ2V0
X2RlcHRoKGRyYXdhYmxlKTsKIH0KIAotRmxvYXRSZWN0IHVzYWJsZVNjcmVlblJlY3QoY29uc3Qg
UGFnZSogcGFnZSkKK2Zsb2F0IHNjYWxlRmFjdG9yKGNvbnN0IFBhZ2UqKQogewotICAgIHJldHVy
biBzY3JlZW5SZWN0KHBhZ2UpOworICAgIHJldHVybiAxLjBmOwogfQogCi1mbG9hdCBzY2FsZUZh
Y3Rvcihjb25zdCBQYWdlKikKK0Zsb2F0UmVjdCB1c2FibGVTY3JlZW5SZWN0KGNvbnN0IFBhZ2Uq
IHBhZ2UpCiB7Ci0gICAgcmV0dXJuIDEuMGY7Ci0KKyAgICByZXR1cm4gc2NyZWVuUmVjdChwYWdl
KTsKIH0KIAogfQorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Jy
b3dzZXJFeHRlbnNpb25HZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0Jyb3dzZXJFeHRlbnNpb25HZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvQnJvd3NlckV4dGVuc2lvbkdkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnJvd3NlckV4dGVuc2lvbkdkay5oIgorI2luY2x1ZGUg
IldpbmRvd0ZlYXR1cmVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKworI2RlZmluZSBub3RJbXBs
ZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6
JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGls
ZSgwKQorbmFtZXNwYWNlIFdlYkNvcmUgeworCisKK3ZvaWQgQnJvd3NlckV4dGVuc2lvbkdkazo6
Y3JlYXRlTmV3V2luZG93KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dGZWF0
dXJlcyYsIEZyYW1lKiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQorCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjIsNTIgKzIyLDg2IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKLQorI2luY2x1ZGUgIldpZGdldFByaXZh
dGVHZGsuaCIKKyNpbmNsdWRlICJGcmFtZUdkay5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgogI2lu
Y2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAiUmVu
ZGVyUGFydC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8
bWF0aC5oPgogCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwg
IkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIixcCisgICAgICAgIF9fRklMRV9fLCBf
X0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIFdpZGdldFByaXZhdGUgewotcHVibGljOgotICAgIEdka0RyYXdhYmxl
KiBkcmF3YWJsZTsKLSAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBJbnRSZWN0IGdlb21l
dHJ5OwotICAgIEZvbnQgZm9udDsKLX07CiAKKworc3RhdGljIEZyYW1lR2RrKiBpZnJhbWVQYXJl
bnQoY29uc3QgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQtPmlzRnJhbWVWaWV3
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IEZyYW1lVmlldyogdmlldyA9IHN0YXRp
Y19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHdpZGdldCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEZyYW1lR2RrKj4odmlldy0+ZnJhbWUoKSk7Cit9CisKIFdpZGdldDo6V2lkZ2V0KCkKLSAgICA6
IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCisgICAgICAgIDogZGF0YShuZXcgV2lkZ2V0UHJpdmF0
ZSh0aGlzKSkKK3t9CisKK0ZyYW1lVmlldyogV2lkZ2V0OjpmcmFtZVZpZXcoKSBjb25zdAogewot
ICAgIGRhdGEtPmRyYXdhYmxlID0gMDsKKyAgICByZXR1cm4gZGF0YS0+bV92aWV3LmdldCgpOwog
fQogCi1XaWRnZXQ6OldpZGdldChHZGtEcmF3YWJsZSogZHJhd2FibGUpCi0gICAgOiBkYXRhKG5l
dyBXaWRnZXRQcml2YXRlKQordm9pZCBXaWRnZXQ6OnNldEZyYW1lVmlldyhGcmFtZVZpZXcqIHZp
ZXcpCiB7Ci0gICAgc2V0RHJhd2FibGUoZHJhd2FibGUpOworICAgIGRhdGEtPm1fdmlldyA9IHZp
ZXc7CisgICAgdmlldy0+ZGF0YS0+Z2VvbWV0cnkgPSBkYXRhLT5nZW9tZXRyeTsKKyAgICB2aWV3
LT5kYXRhLT5tX3BhcmVudCA9IGRhdGEtPm1fcGFyZW50OwogfQogCi1HZGtEcmF3YWJsZSogV2lk
Z2V0OjpkcmF3YWJsZSgpIGNvbnN0Cit2b2lkIFdpZGdldDo6c2V0T3duZXIoV2lkZ2V0KiBwKQog
ewotICAgIHJldHVybiBkYXRhLT5kcmF3YWJsZTsKKyAgICBkYXRhLT5tX293bmVyID0gcDsKIH0K
IAotdm9pZCBXaWRnZXQ6OnNldERyYXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSkKK1dpZGdl
dCogV2lkZ2V0Ojpvd25lcigpIGNvbnN0CiB7Ci0gICAgZGF0YS0+ZHJhd2FibGUgPSBkcmF3YWJs
ZTsKKyAgICByZXR1cm4gZGF0YS0+bV9vd25lcjsKIH0KIAorV2lkZ2V0KiBXaWRnZXQ6OnBhcmVu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPm1fcGFyZW50OworfQorCit2b2lkIFdpZGdl
dDo6c2V0UGFyZW50KFdpZGdldCogcCkKK3sKKyAgICBkYXRhLT5tX3BhcmVudCA9IHA7CisgICAg
aWYgKHApCisgICAgICAgIHJlcGFpbnQoZmFsc2UpOworfQorCit2b2lkIFdpZGdldDo6cmVtb3Zl
RnJvbVBhcmVudCgpCit7CisgICAgZGF0YS0+bV9wYXJlbnQ9MDsKK30KKwogV2lkZ2V0Ojp+V2lk
Z2V0KCkKIHsKICAgICBkZWxldGUgZGF0YTsKQEAgLTgzLDYgKzExNyw1OSBAQAogICAgIHJldHVy
biBkYXRhLT5jbGllbnQ7CiB9CiAKK3ZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBJ
bnRSZWN0IHIoMCwwLGRhdGEtPmdlb21ldHJ5LndpZHRoKCksZGF0YS0+Z2VvbWV0cnkuaGVpZ2h0
KCkpOworICAgIGludmFsaWRhdGVSZWN0KHIpOworfQorCit2b2lkIFdpZGdldDo6aW52YWxpZGF0
ZVJlY3QoY29uc3QgSW50UmVjdCYgcikKK3sKKworICAgIHJlcGFpbnQocixmYWxzZSk7Cit9CisK
K3ZvaWQgV2lkZ2V0OjpyZXBhaW50KGJvb2wgbm93KQoreworICAgIEludFJlY3QgcigwLDAsZGF0
YS0+Z2VvbWV0cnkud2lkdGgoKSxkYXRhLT5nZW9tZXRyeS5oZWlnaHQoKSk7CisgICAgcmVwYWlu
dChyLG5vdyk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpyZXBhaW50KGNvbnN0IEludFJlY3QmIHVwZGF0
ZVJlY3QsIGJvb2wgbm93KQoreworICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIC8vaWYgd2UgYXJlIG93bmVkIGxldCBvd25lciByZXBhaW50CisgICAg
aWYgKG93bmVyKCkgIT0gMCkgeworICAgICAgICBvd25lcigpLT5yZXBhaW50KHVwZGF0ZVJlY3Qs
bm93KTsKKyAgICB9IGVsc2UgaWYgKGlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAgRnJhbWVWaWV3
KiB2ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyk7CisgICAgICAgIEZyYW1lR2RrKiBm
cmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4odi0+ZnJhbWUoKSk7CisgICAgICAgIEludFJl
Y3QgZGlydHkgPSB1cGRhdGVSZWN0OworICAgICAgICBkaXJ0eS5tb3ZlKEludFNpemUoZGF0YS0+
Z2VvbWV0cnkueCgpLGRhdGEtPmdlb21ldHJ5LnkoKSkpOworICAgICAgICBmcmFtZS0+cmVwYWlu
dChkaXJ0eSxub3cpOworICAgIH0gZWxzZSBpZiAocGFyZW50KCkgIT0gMCkgeworICAgICAgICBJ
bnRSZWN0IGRpcnR5ID0gdXBkYXRlUmVjdDsKKyAgICAgICAgZGlydHkubW92ZShJbnRTaXplKGRh
dGEtPmdlb21ldHJ5LngoKSxkYXRhLT5nZW9tZXRyeS55KCkpKTsKKyAgICAgICAgcGFyZW50KCkt
PnJlcGFpbnQoZGlydHksbm93KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NlcnQoMCk7Cisg
ICAgfQorfQorCisvKgorICogU2luY2Ugd2UgY2FsbCByZXBhaW50IG9uIHRoZSByb290IGZyYW1l
IHRoZSByZWN0IGNvbWVzCisgKiBiYWNrIHRvIHVzIGluIHRoZSByb290IGZyYW1lIGNvb3JkaW5h
dGUgc3lzdGVtCisgKiBub3QgdGhlIHdpZGdldHMKKyAqLwordm9pZCBXaWRnZXQ6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghZnJh
bWVWaWV3KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhc3NlcnQoZnJhbWVWaWV3KCkgIT0gdGhp
cyk7CisgICAgZnJhbWVWaWV3KCktPnBhaW50KGN0eCxyZWN0KTsKK30KKwogSW50UmVjdCBXaWRn
ZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAogewogICAgIHJldHVybiBkYXRhLT5nZW9tZXRyeTsK
QEAgLTkwLDIwICsxNzcsMTcgQEAKIAogYm9vbCBXaWRnZXQ6Omhhc0ZvY3VzKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRhdGEtPmhhc0ZvY3VzOwogfQogCiB2b2lk
IFdpZGdldDo6c2V0Rm9jdXMoKQogewotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IGRhdGEt
PmRyYXdhYmxlOwotICAgIGlmICghZHJhd2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUp
KQotICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRy
YXdhYmxlKTsKLSAgICBnZGtfd2luZG93X2ZvY3VzKHdpbmRvdywgR0RLX0NVUlJFTlRfVElNRSk7
CisgICAgZGF0YS0+aGFzRm9jdXM9IHRydWU7CiB9CiAKIHZvaWQgV2lkZ2V0OjpjbGVhckZvY3Vz
KCkKIHsKKyAgICBkYXRhLT5oYXNGb2N1cz0gZmFsc2U7CiB9CiAKIGNvbnN0IEZvbnQmIFdpZGdl
dDo6Zm9udCgpIGNvbnN0CkBAIC0xMTgsNDQgKzIwMiwxMTIgQEAKIAogdm9pZCBXaWRnZXQ6OnNl
dEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICBHZGtDdXJzb3IqIHBjdXIgPSBj
dXJzb3IuaW1wbCgpOwotICAgIGlmICghcGN1cikKLSAgICAgICAgcmV0dXJuOwogCi0gICAgR2Rr
RHJhd2FibGUqIGRyYXdhYmxlID0gZGF0YS0+ZHJhd2FibGU7Ci0gICAgaWYgKCFkcmF3YWJsZSB8
fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5k
b3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfc2V0X2N1
cnNvcih3aW5kb3csIHBjdXIpOworICAgIEZyYW1lR2RrKiBmcmFtZSA9IGlmcmFtZVBhcmVudCh0
aGlzKTsKIAorICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJhbWUtPnNldEN1cnNvcihjdXJzb3Ip
OworICAgIGVsc2UgaWYgKHBhcmVudCgpKQorICAgICAgICBwYXJlbnQoKS0+c2V0Q3Vyc29yKGN1
cnNvcik7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzaG93KCkKIHsKLSAgICBHZGtEcmF3YWJsZSogZHJh
d2FibGUgPSBkYXRhLT5kcmF3YWJsZTsKLSAgICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lO
RE9XKGRyYXdhYmxlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93ID0g
R0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdpbmRvdyk7CisgICAg
ZGF0YS0+dmlzaWJsZSA9IHRydWU7CiB9CiAKKwogdm9pZCBXaWRnZXQ6OmhpZGUoKQogewotICAg
IEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IGRhdGEtPmRyYXdhYmxlOwotICAgIGlmICghZHJhd2Fi
bGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAgICByZXR1cm47Ci0gICAgR2Rr
V2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X2hp
ZGUod2luZG93KTsKKyAgICBkYXRhLT52aXNpYmxlID0gZmFsc2U7CiB9CiAKK0ludFBvaW50IFdp
ZGdldDo6bG9jYXRpb25JbldpbmRvdygpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcCgwLDApOwor
ICAgIFdpZGdldCogd2lkZ2V0ID0gY29uc3RfY2FzdDxXaWRnZXQqPih0aGlzKTsKKworICAgIHdo
aWxlICh3aWRnZXQpIHsKKyAgICAgICAgUmVuZGVyUGFydCogcmVuZGVyZXIgPSAgd2lkZ2V0LT5m
cmFtZVZpZXcoKS0+ZnJhbWUoKS0+b3duZXJSZW5kZXJlcigpOworICAgICAgICBpZiAod2lkZ2V0
LT5vd25lcigpKSB7CisgICAgICAgICAgICB3aWRnZXQgPSB3aWRnZXQtPm93bmVyKCk7CisgICAg
ICAgICAgICBJbnRSZWN0IHIgPSB3aWRnZXQtPmZyYW1lR2VvbWV0cnkoKTsKKyAgICAgICAgfSBl
bHNlIGlmICh3aWRnZXQtPmlzRnJhbWVWaWV3KCkgJiYgcmVuZGVyZXIpIHsKKyAgICAgICAgICAg
IEFmZmluZVRyYW5zZm9ybSB0eCA9IHJlbmRlcmVyLT5hYnNvbHV0ZVRyYW5zZm9ybSgpOworICAg
ICAgICAgICAgcC5tb3ZlKChpbnQpdHguZHgoKSwoaW50KXR4LmR5KCkpOworICAgICAgICAgICAg
d2lkZ2V0ID0gd2lkZ2V0LT5wYXJlbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEludFJlY3QgciA9IHdpZGdldC0+ZnJhbWVHZW9tZXRyeSgpOworICAgICAgICAgICAgcC5tb3Zl
KHIueCgpLHIueSgpKTsKKyAgICAgICAgICAgIHdpZGdldCA9IHdpZGdldC0+cGFyZW50KCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKwogdm9pZCBXaWRnZXQ6OnNldEZy
YW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBkYXRhLT5nZW9tZXRyeSA9IHI7
Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZGF0YS0+ZHJhd2FibGU7Ci0gICAgaWYgKCFk
cmF3YWJsZSB8fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCisgICAgaWYgKGRhdGEtPmdlb21l
dHJ5ID09IHIpCiAgICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19X
SU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfbW92ZV9yZXNpemUod2luZG93LCByLngo
KSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgZGF0YS0+Z2VvbWV0cnk9cjsK
KyAgICBpZiAoZnJhbWVWaWV3KCkgJiYgZnJhbWVWaWV3KCkgIT0gdGhpcykKKyAgICAgICAgZnJh
bWVWaWV3KCktPnNldEZyYW1lR2VvbWV0cnkocik7CiB9CiAKK3ZvaWQgV2lkZ2V0OjpzZXRFbmFi
bGVkKGJvb2wgYikKK3sKKyAgICBkYXRhLT5lbmFibGVkID0gYjsKIH0KKworYm9vbCBXaWRnZXQ6
OmlzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPmVuYWJsZWQ7Cit9CisKK3Zv
aWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wgYikKK3sKKyAgICBkYXRhLT5zZWxlY3RlZCA9
IGI7Cit9CisKKworV2lkZ2V0OjpGb2N1c1BvbGljeSBXaWRnZXQ6OmZvY3VzUG9saWN5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQ2xpY2tGb2N1czsKK30KKwordm9pZCBXaWRnZXQ6OmRpc2FibGVG
bHVzaERyYXdpbmcoKQore30KKwordm9pZCBXaWRnZXQ6OmVuYWJsZUZsdXNoRHJhd2luZygpCit7
fQorCitHcmFwaGljc0NvbnRleHQqIFdpZGdldDo6bG9ja0RyYXdpbmdGb2N1cygpCit7CisgICAg
V2lkZ2V0KiBwciA9IHRoaXM7CisgICAgSW50UmVjdCByZWN0KDAsMCxkYXRhLT5nZW9tZXRyeS53
aWR0aCgpLGRhdGEtPmdlb21ldHJ5LmhlaWdodCgpKTsKKworICAgIHdoaWxlIChwcikgeworICAg
ICAgICBGcmFtZUdkayogaWZyYW1lID0gaWZyYW1lUGFyZW50KHByKTsKKyAgICAgICAgaWYgKGlm
cmFtZSkKKyAgICAgICAgICAgIHJldHVybiBpZnJhbWUtPmJlZ2luUGFpbnRpbmcocmVjdCk7Cisg
ICAgICAgIHJlY3QubW92ZShwci0+ZGF0YS0+Z2VvbWV0cnkueCgpLHByLT5kYXRhLT5nZW9tZXRy
eS55KCkpOworICAgICAgICBwciA9IHByLT5wYXJlbnQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgV2lkZ2V0Ojp1bmxvY2tEcmF3aW5nRm9jdXMoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQoreworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBzdGF0aWNfY2FzdDxH
cmFwaGljc0NvbnRleHRDYWlybyo+KGNvbnRleHQpOworICAgIFdpZGdldCogcHIgPSB0aGlzOwor
ICAgIHdoaWxlIChwcikgeworICAgICAgICBGcmFtZUdkayogaWZyYW1lID0gaWZyYW1lUGFyZW50
KHByKTsKKyAgICAgICAgaWYgKGlmcmFtZSkKKyAgICAgICAgICAgIGlmcmFtZS0+ZW5kUGFpbnRp
bmcoY3R4KTsKKyAgICAgICAgcHIgPSBwci0+cGFyZW50KCk7CisgICAgfQorfQorCit9CisvLyB2
aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3Jv
bGxiYXJHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3Jt
U2Nyb2xsYmFyR2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Bs
YXRmb3JtU2Nyb2xsYmFyR2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJXaWRnZXRQcml2YXRlR2Rr
LmgiCisjaW5jbHVkZSAiRnJhbWVHZGsuaCIKKyNpbmNsdWRlICJTY3JvbGxCYXIuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVNjcm9sbGJhci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIktVUkwu
aCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRl
ICJTVkdTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSA8YXNz
ZXJ0Lmg+CisKKworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIs
ICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxf
X1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy9GSVhNRTogaGFjayB0aWxsIHdlIGhhdmUgYSBy
ZWFsIHByaXZhdGUgY29uZmlnICBwYWdlIGJyb3dzZXJDb25maWcueG1sCitzdGF0aWMgU3RyaW5n
IGltcGxVUkwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgaWYgKG9y
aWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCIv
U2Nyb2xsYmFyL1Njcm9sbGJhci5zdmc/dmVydGljYWwiKTsKKworICAgIHJldHVybiBTdHJpbmco
Ii9TY3JvbGxiYXIvU2Nyb2xsYmFyLnN2Zz9ob3Jpem9udGFsIik7Cit9CisKKworc3RhdGljIHZv
aWQgZG9TY3JvbGwoY29uc3QgUmVuZGVyT2JqZWN0KiByLCBib29sIGlzSG9yaXpvbnRhbCwgaW50
IG11bHRpcGxpZXIpCit7CisgICAgLy8gRklYTUU6IFRoZSBzY3JvbGxpbmcgZG9uZSBoZXJlIHNo
b3VsZCBiZSBkb25lIGluIHRoZSBkZWZhdWx0IGhhbmRsZXJzCisgICAgLy8gb2YgdGhlIGVsZW1l
bnRzIHJhdGhlciB0aGFuIGhlcmUgaW4gdGhlIHBhcnQuCisgICAgaWYgKCFyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvL2Jyb2tlbiBzaW5jZSBpdCBjYWxscyBzY3JvbGwgb24gc2Nyb2xsYmFy
cworICAgIC8vYW5kIHdlIGhhdmUgbm9uZSBub3cKKyAgICAvL3ItPnNjcm9sbChkaXJlY3Rpb24s
IFNjcm9sbEJ5V2hlZWwsIG11bHRpcGxpZXIpOworICAgIGlmICghci0+bGF5ZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGludCB4ID0gci0+bGF5ZXIoKS0+c2Nyb2xsWE9mZnNldCgpOworICAg
IGludCB5ID0gci0+bGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgpOworICAgIGlmIChpc0hvcml6b250
YWwpCisgICAgICAgIHggKz0gbXVsdGlwbGllcjsKKyAgICBlbHNlCisgICAgICAgIHkgKz0gbXVs
dGlwbGllcjsKKyAgICByLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCh4LCB5LCB0cnVlLCB0cnVl
KTsKK30KKworCitQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFy
Q2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sU2Nyb2xsYmFyQ29udHJvbFNpemUgY3NpemUp
IDoKKyAgICAgICAgU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sY3NpemUpLFdpZGdldCgp
Cit7CisgICAgcHJpdmF0ZURhdGEoKS0+bV9oYXNTY3JvbGxiYXJzID0gZmFsc2U7CisgICAgU3Ry
aW5nIHVybCA9IEZyYW1lR2RrOjppbnN0YWxsTG9jYXRpb24oKTsKKyAgICBTdHJpbmcgbm0gPSBp
bXBsVVJMKG9yaWVudGF0aW9uKTsKKyAgICB1cmwgKz0gbm07CisgICAgcHJpdmF0ZURhdGEoKS0+
Y3JlYXRlVmlldyhLVVJMKHVybC5kZXByZWNhdGVkU3RyaW5nKCkpKTsKK30KKworUGxhdGZvcm1T
Y3JvbGxiYXI6On5QbGF0Zm9ybVNjcm9sbGJhcigpCit7fQorCitJbnRSZWN0ICBQbGF0Zm9ybVNj
cm9sbGJhcjo6ZnJhbWVHZW9tZXRyeSgpCit7CisgICAgSW50UmVjdCByID0gV2lkZ2V0OjpmcmFt
ZUdlb21ldHJ5KCk7CisgICAgaWYgKHIuaXNFbXB0eSgpKQorICAgICAgICByID0gSW50UmVjdCgw
LDAsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KSk7CisgICAgcmV0dXJuIHI7Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6d2lkdGgoKSBj
b25zdAoreworICAgIGludCB3aWR0aCA9IFdpZGdldDo6d2lkdGgoKTsKKyAgICBpZiAod2lkdGgg
PT0gMCB8fCBvcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOy8vRklYTUU6IGhhY2sgZm9yIG5vdworICAgIHJl
dHVybiB3aWR0aDsKKworfQorCitpbnQgUGxhdGZvcm1TY3JvbGxiYXI6OmhlaWdodCgpIGNvbnN0
Cit7CisgICAgaW50IGhlaWdodCA9IFdpZGdldDo6aGVpZ2h0KCk7CisgICAgaWYgKGhlaWdodCA9
PSAwIHx8IG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0
dXJuIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsvL2hhY2sgZm9yIG5vdworICAgIHJldHVy
biBoZWlnaHQ7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworICAgIFdpZGdldDo6c2V0RW5hYmxlZChlbmFibGVkKTsKK30KKwordm9pZCBQ
bGF0Zm9ybVNjcm9sbGJhcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QpCit7CisgICAgV2lkZ2V0OjpwYWludChjdHgsZGFtYWdlUmVjdCk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAoZnJhbWVHZW9tZXRyeSgpID09IHJlY3QpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgRnJhbWVWaWV3KiB2ID0gZnJhbWVWaWV3KCk7Cisg
ICAgLyoKKyAgICBpZih2KSB7CisgICAgICAgIERvY3VtZW50KiBkb2MgPSB2LT5mcmFtZSgpLT5k
b2N1bWVudCgpOworICAgICAgICBpZighZG9jKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4oZG9jLT5n
ZXRFbGVtZW50QnlJZCgibWFpbiIpKTsKKyAgICAgICAgaWYoIXN2ZykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgc3ZnLT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cixTdHJp
bmc6Om51bWJlcihyZWN0LndpZHRoKCkpKTsKKyAgICAgICAgc3ZnLT5zZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmhlaWdodEF0dHIsU3RyaW5nOjpudW1iZXIocmVjdC5oZWlnaHQoKSkpOworICAgICAg
ICBzdmctPndpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlKHJlY3Qud2lkdGgoKSk7CisgICAgICAg
IHN2Zy0+aGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlKHJlY3QuaGVpZ2h0KCkpOworICAgIH0K
KyAgICAqLworICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShyZWN0KTsKK30KKwordm9pZCBQ
bGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQcm9wb3J0
aW9uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1BvcHVwTWVudUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1BvcHVwTWVudUdkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlvbiBm
b3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVt
bWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
b3B1cE1lbnUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgbm90SW1wbGVtZW50
ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkXG4i
LCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdoaWxlKDApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUG9wdXBNZW51OjpQb3B1cE1lbnUoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1BvcHVwTWVudTo6flBvcHVwTWVudSgpCit7fQorCit2
b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50IGluZGV4
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51OjpoaWRlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBvcHVwTWVudTo6dXBkYXRlRnJv
bUVsZW1lbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KKwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyUG9wdXBNZW51R2RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsuY3BwCShyZXZpc2lvbiAxNzM5
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclBvcHVwTWVudUdkay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJD
b3JlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb3B1cE1lbnUuaCIKLQotI2luY2x1ZGUgPHN0
ZGlvLmg+Ci0KLSNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAi
RklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdo
aWxlKDApCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUG9wdXBNZW51OjpQb3B1cE1lbnUoUmVu
ZGVyTWVudUxpc3QqIG1lbnVMaXN0KQotewotfQotCi1Qb3B1cE1lbnU6On5Qb3B1cE1lbnUoKQot
ewotfQotCi12b2lkIFBvcHVwTWVudTo6Y2xlYXIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgUG9wdXBNZW51Ojpwb3B1bGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyos
IGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBvcHVwTWVudTo6aGlk
ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQb3B1cE1lbnU6OmFkZFNl
cGFyYXRvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQb3B1cE1lbnU6
OmFkZEdyb3VwTGFiZWwoSFRNTE9wdEdyb3VwRWxlbWVudCopCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBQb3B1cE1lbnU6OmFkZE9wdGlvbihIVE1MT3B0aW9uRWxlbWVudCop
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQotCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dkay9JY29uR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9J
Y29uR2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ljb25HZGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgIkljb24uaCIKKyNpbmNsdWRl
ICJJY29uTG9hZGVyLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisKKworI2RlZmluZSBu
b3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRF
RDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsg
fSB3aGlsZSgwKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgSWNvbkxvYWRlcjo6cmVj
ZWl2ZWRSZXNwb25zZShSZXNvdXJjZUxvYWRlciosIFBsYXRmb3JtUmVzcG9uc2UpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJY29uTG9hZGVyOjpub3RpZnlJY29uQ2hhbmdl
ZChjb25zdCBLVVJMJiBpY29uVVJMKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwor
SWNvbjo6SWNvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSWNvbjo6fkljb24o
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6
bmV3SWNvbkZvckZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBQYXNzUmVmUHRyPEljb24+KDApOworfQorCit2b2lkIEljb246
OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9GcmFtZUdkay5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvRnJhbWVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiwx
NyArMjIsMjQgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCisjaW5jbHVkZSAi
RWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiV2lkZ2V0UHJpdmF0ZUdkay5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbGJhci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRE9N
SW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJCcm93c2VyRXh0ZW5zaW9uR2RrLmgiCkBAIC00
MCw4ICs0NywxMiBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgi
CiAjaW5jbHVkZSAiRnJhbWVQcml2YXRlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJIVE1MRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck1h
bmFnZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNl
TG9hZGVySW50ZXJuYWwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKQEAgLTUy
LDkgKzYzLDEyIEBACiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIlNTTEtl
eUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKLSNpbmNsdWRlICJGcmFt
ZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgIlBhdGguaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZw
cmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVf
XywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKIAogLy8gVGhpcyBm
dW5jdGlvbiBsb2FkcyByZXNvdXJjZXMgZnJvbSBXZWJLaXQKIC8vIFRoaXMgZG9lcyBub3QgYmVs
b25nIGhlcmUgYW5kIEknbSBub3Qgc3VyZSB3aGVyZQpAQCAtNzEsMTU4ICs4NSwxNjEgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GcmFtZUdka0NsaWVudERlZmF1bHQ6OkZyYW1lR2RrQ2xp
ZW50RGVmYXVsdCgpCi0gICAgOiBSZXNvdXJjZUxvYWRlckNsaWVudCgpCi0gICAgLCBtX2ZyYW1l
KDApCi0gICAgLCBtX2JlZ2luQ2FsbGVkKGZhbHNlKQotewotfQordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAotRnJhbWVHZGtDbGllbnREZWZhdWx0Ojp+RnJhbWVHZGtDbGllbnREZWZhdWx0
KCkKLXsKLX0KK3N0YXRpYyBjaGFyKiBpbnN0YWxsUGF0aDsKK3N0YXRpYyBGcmFtZUdkayogZm9j
dXNGcmFtZTsKIAotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OnNldEZyYW1lKGNvbnN0IEZy
YW1lR2RrKiBmcmFtZSkKK3ZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVCb3JkZXIoKQogewotICAgIG1f
ZnJhbWUgPSBjb25zdF9jYXN0PEZyYW1lR2RrKj4oZnJhbWUpOworICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgRnJhbWVHZGtDbGllbnREZWZhdWx0OjpvcGVuVVJMKGNvbnN0IEtVUkwm
IHVybCkKK2Jvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VQcmVzc0V2ZW50VG9TY3JvbGxiYXIoTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgaGl0LCBQbGF0Zm9ybVNjcm9sbGJhciogYmFyKQog
ewotICAgIG1fZnJhbWUtPmRpZE9wZW5VUkwodXJsKTsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFs
c2U7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAgIFJlZlB0cjxSZXNv
dXJjZUxvYWRlcj4gbG9hZGVyID0gUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShyZXF1ZXN0LCB0aGlz
LCAwKTsKKyAgICBGcmFtZSogZnJhbWUgPSBiYXItPmZyYW1lVmlldygpLT5mcmFtZSgpOworICAg
IGlmIChmcmFtZSkgeworICAgICAgICBmcmFtZS0+dmlldygpLT5oYW5kbGVNb3VzZVByZXNzRXZl
bnQoaGl0LmV2ZW50KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6c3VibWl0Rm9ybShjb25z
dCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBGb3JtRGF0YSogcG9zdERh
dGEpCitib29sIEZyYW1lVmlldzo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgaGl0LCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9iZWdp
bkNhbGxlZCA9IGZhbHNlOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSAg
ICByZXF1ZXN0LnNldEhUVFBNZXRob2QobWV0aG9kKTsKLSAgICByZXF1ZXN0LnNldEhUVFBCb2R5
KCpwb3N0RGF0YSk7Ci0KLSAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFJlc291
cmNlTG9hZGVyOjpjcmVhdGUocmVxdWVzdCwgdGhpcywgMCk7CisgICAgaWYgKGZvY3VzRnJhbWUg
JiYgZm9jdXNGcmFtZSAhPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAgIGZvY3VzRnJhbWUtPmlu
dmFsaWRhdGVTZWxlY3Rpb24oKTsKKyAgICAgICAgZm9jdXNGcmFtZS0+c2V0SXNBY3RpdmUoZmFs
c2UpOworICAgICAgICBmb2N1c0ZyYW1lLT5zZXRXaW5kb3dIYXNGb2N1cyhmYWxzZSk7CisgICAg
fQorICAgIGZvY3VzRnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KGZyYW1lKTsKKyAgICBm
b2N1c0ZyYW1lLT5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICBmb2N1c0ZyYW1lLT5zZXRXaW5kb3dI
YXNGb2N1cyh0cnVlKTsKKyAgICBmb2N1c0ZyYW1lLT52aWV3KCktPmhhbmRsZU1vdXNlUHJlc3NF
dmVudChoaXQuZXZlbnQoKSk7CisgICAgZm9jdXNGcmFtZS0+aW52YWxpZGF0ZVNlbGVjdGlvbigp
OworICAgIHJldHVybiB0cnVlOwogfQotCi12b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6cmVj
ZWl2ZWRSZXNwb25zZShSZXNvdXJjZUxvYWRlciosIFBsYXRmb3JtUmVzcG9uc2UpCitib29sIEZy
YW1lVmlldzo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJiBoaXQsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICAvLyBuby1vcAorICAgIGZy
YW1lLT52aWV3KCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGhpdC5ldmVudCgpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OmRpZFJlY2VpdmVE
YXRhKFJlc291cmNlTG9hZGVyKiBqb2IsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiti
b29sIEZyYW1lVmlldzo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzJiBoaXQsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fYmVnaW5D
YWxsZWQpIHsKLSAgICAgICAgbV9iZWdpbkNhbGxlZCA9IHRydWU7Ci0KLSNpZiAwICAvLyBGSVhN
RTogVGhpcyBpcyBmcm9tIFF0IHZlcnNpb24sIG5lZWQgdG8gYmUgcmVtb3ZlZCBvciBHZGsgZXF1
aXZhbGVudCB3cml0dGVuCi0gICAgICAgIC8vIEFzc2lnbiBjb3JyZWN0IG1pbWV0eXBlIF9iZWZv
cmVfIGNhbGxpbmcgYmVnaW4oKSEKLSAgICAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9
IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICAgICAgaWYgKGQpIHsKLSAgICAgICAgICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0KG1fZnJhbWUtPnJlc291cmNlUmVxdWVzdCgpKTsKLSAgICAgICAg
ICAgIHJlcXVlc3QubV9yZXNwb25zZU1JTUVUeXBlID0gZC0+bV9taW1ldHlwZTsKLSAgICAgICAg
ICAgIG1fZnJhbWUtPnNldFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgfQotI2Vu
ZGlmCi0gICAgICAgIG1fZnJhbWUtPmJlZ2luKGpvYi0+dXJsKCkpOwotICAgIH0KLQotICAgIG1f
ZnJhbWUtPndyaXRlKGRhdGEsIGxlbmd0aCk7CisgICAgZnJhbWUtPnZpZXcoKS0+aGFuZGxlTW91
c2VNb3ZlRXZlbnQoaGl0LmV2ZW50KCkpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZy
YW1lR2RrQ2xpZW50RGVmYXVsdDo6cmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlTG9hZGVyKiBqb2Is
IFBsYXRmb3JtRGF0YSBkYXRhKQorYm9vbCBGcmFtZVZpZXc6OnBhc3NXaGVlbEV2ZW50VG9TdWJm
cmFtZShQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIEZyYW1lKiBmcmFtZSkKIHsKLSAg
ICBtX2ZyYW1lLT5lbmQoKTsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7CisgICAgZnJhbWUt
PnZpZXcoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIHZvaWQgZG9TY3JvbGwoY29uc3QgUmVuZGVyT2JqZWN0KiByLCBmbG9hdCBk
ZWx0YVgsIGZsb2F0IGRlbHRhWSkKLXsKLSAgICAvLyBGSVhNRTogVGhlIHNjcm9sbGluZyBkb25l
IGhlcmUgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGRlZmF1bHQgaGFuZGxlcnMKLSAgICAvLyBvZiB0
aGUgZWxlbWVudHMgcmF0aGVyIHRoYW4gaGVyZSBpbiB0aGUgcGFydC4KLSAgICBpZiAoIXIpCi0g
ICAgICAgIHJldHVybjsKIAotICAgIC8vYnJva2VuIHNpbmNlIGl0IGNhbGxzIHNjcm9sbCBvbiBz
Y3JvbGxiYXJzCi0gICAgLy9hbmQgd2UgaGF2ZSBub25lIG5vdwotICAgIC8vci0+c2Nyb2xsKGRp
cmVjdGlvbiwgU2Nyb2xsQnlXaGVlbCwgbXVsdGlwbGllcik7Ci0gICAgaWYgKCFyLT5sYXllcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeCA9IHItPmxheWVyKCktPnNjcm9sbFhPZmZz
ZXQoKSArIGRlbHRhWDsKLSAgICBpbnQgeSA9IHItPmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKSAr
IGRlbHRhWTsKLSAgICByLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCh4LCB5LCB0cnVlLCB0cnVl
KTsKLX0KLQotRnJhbWVHZGs6OkZyYW1lR2RrKEdka0RyYXdhYmxlKiBnZGtkcmF3YWJsZSkKLSAg
ICA6IEZyYW1lKG5ldyBQYWdlLCAwKSwgbV9kcmF3YWJsZShnZGtkcmF3YWJsZSkKK0ZyYW1lR2Rr
OjpGcmFtZUdkayhQYWdlKiBwYWdlLCBFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPEVkaXRv
ckNsaWVudD4gY2xpZW50LCBXaW5kb3dHZGsqIHdpbmRvdykKKyAgICAgICAgOiBGcmFtZShwYWdl
LGVsZW1lbnQsY2xpZW50KQorICAgICAgICAsIG1fZXZlbnRUeXBlKCkKKyAgICAgICAgLCBtX3dp
bmRvdygwKQogewotICAgIGQtPm1fZXh0ZW5zaW9uID0gbmV3IEJyb3dzZXJFeHRlbnNpb25HZGso
dGhpcyk7CisgICAgZC0+bV9leHRlbnNpb24gPSBuZXcgQnJvd3NlckV4dGVuc2lvbkdkaygpOwog
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nczsKICAgICBzZXR0aW5ncy0+c2V0
QXV0b0xvYWRJbWFnZXModHJ1ZSk7CiAgICAgc2V0dGluZ3MtPnNldE1pbkZvbnRTaXplKDUpOwog
ICAgIHNldHRpbmdzLT5zZXRNaW5Mb2dpY2FsRm9udFNpemUoNSk7CiAgICAgc2V0dGluZ3MtPnNl
dFNob3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7Ci0KICAgICBzZXR0aW5ncy0+c2V0TWVkaXVt
Rml4ZWRGb250U2l6ZSgxNCk7CiAgICAgc2V0dGluZ3MtPnNldE1lZGl1bUZvbnRTaXplKDE0KTsK
ICAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250TmFtZSgiVGltZXMgTmV3IFJvbWFuIik7CiAgICAg
c2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnROYW1lKCJBcmlhbCIpOwogICAgIHNldHRpbmdzLT5z
ZXRGaXhlZEZvbnROYW1lKCJDb3VyaWVyIik7CiAgICAgc2V0dGluZ3MtPnNldFN0ZEZvbnROYW1l
KCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRJc0phdmFTY3JpcHRFbmFibGVkKHRydWUpOwor
ICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KHRy
dWUpOworICAgIC8vcGljayB1cCB1c2VyIHN0eWxlIHNoZWV0CisgICAgU3RyaW5nIGxvY2F0aW9u
ID0gaW5zdGFsbExvY2F0aW9uKCk7CisgICAgaWYgKCFsb2NhdGlvbi5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgU3RyaW5nIHN0eWxlID0gbG9jYXRpb24rIi9icm93c2VyLmNzcyI7CisgICAgICAgIEtV
UkwgdXNlclN0eWxlU2hlZXQgPSBLVVJMKHN0eWxlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAg
ICAgIHNldHRpbmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHVzZXJTdHlsZVNoZWV0KTsK
KyAgICB9CiAgICAgc2V0U2V0dGluZ3Moc2V0dGluZ3MpOwotICAgIHBhZ2UoKS0+c2V0TWFpbkZy
YW1lKHRoaXMpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG5ldyBGcmFtZVZpZXcodGhpcyk7Cisg
ICAgdmlldy0+c2V0RnJhbWVWaWV3KHZpZXcpOwogICAgIHNldFZpZXcodmlldyk7Ci0gICAgSW50
UmVjdCBnZW9tID0gZnJhbWVHZW9tZXRyeSgpOwotICAgIHZpZXctPnJlc2l6ZShnZW9tLndpZHRo
KCksIGdlb20uaGVpZ2h0KCkpOwotICAgIHZpZXctPlNjcm9sbFZpZXc6OnNldERyYXdhYmxlKGdk
a2RyYXdhYmxlKTsKKyAgICBpZiAoIWVsZW1lbnQgJiYgIXBhZ2UtPm1haW5GcmFtZSgpKQorICAg
ICAgICBwYWdlLT5zZXRNYWluRnJhbWUodGhpcyk7CisgICAgYXR0YWNoV2luZG93KHdpbmRvdyk7
Cit9CiAKLSAgICBtX2NsaWVudCA9IG5ldyBGcmFtZUdka0NsaWVudERlZmF1bHQoKTsKLSAgICBt
X2NsaWVudC0+c2V0RnJhbWUodGhpcyk7CitGcmFtZUdkazo6fkZyYW1lR2RrKCkKK3sKKyAgICBp
ZiAoZm9jdXNGcmFtZSA9PSB0aGlzKQorICAgICAgICBmb2N1c0ZyYW1lID0gMDsKIH0KIAotRnJh
bWVHZGs6OkZyYW1lR2RrKFBhZ2UqIHBhZ2UsIEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBGcmFt
ZShwYWdlLGVsZW1lbnQpCisKK0ZyYW1lKiBGcmFtZUdkazo6Y3JlYXRlRnJhbWUoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3Qg
U3RyaW5nJiByZWZlcnJlcikKIHsKLSAgICBkLT5tX2V4dGVuc2lvbiA9IG5ldyBCcm93c2VyRXh0
ZW5zaW9uR2RrKHRoaXMpOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nczsK
LSAgICBzZXR0aW5ncy0+c2V0QXV0b0xvYWRJbWFnZXModHJ1ZSk7Ci0gICAgc2V0U2V0dGluZ3Mo
c2V0dGluZ3MpOwotICAgIG1fY2xpZW50ID0gbmV3IEZyYW1lR2RrQ2xpZW50RGVmYXVsdCgpOwot
ICAgIG1fY2xpZW50LT5zZXRGcmFtZSh0aGlzKTsKKyAgICBQYWdlKiBwYWdlOworICAgIGlmIChv
d25lckVsZW1lbnQpCisgICAgICAgIHBhZ2UgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCktPmZy
YW1lKCktPnBhZ2UoKTsKKyAgICBlbHNlCisgICAgICAgIHBhZ2UgPSBuZXcgUGFnZSgpOworICAg
IFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3I7CisgICAgRnJhbWVHZGsqIGZjaGlsZCA9
IG5ldyBGcmFtZUdkayhwYWdlLG93bmVyRWxlbWVudCxlZGl0b3IsMCk7CisgICAgZmNoaWxkLT50
cmVlKCktPnNldE5hbWUobmFtZSk7CisgICAgaWYgKG93bmVyRWxlbWVudCkgeworICAgICAgICBG
cmFtZUdkayogcCA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4ob3duZXJFbGVtZW50LT5kb2N1bWVu
dCgpLT5mcmFtZSgpKTsKKyAgICAgICAgZmNoaWxkLT5zZXRQYXJlbnQocCk7CisgICAgfQorICAg
IGZjaGlsZC0+b3BlblVSTCh1cmwpOworICAgIHJldHVybiBmY2hpbGQ7CiB9CiAKLUZyYW1lR2Rr
Ojp+RnJhbWVHZGsoKQordm9pZCBGcmFtZUdkazo6b3BlblVSTFJlcXVlc3QoY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCkKIHsKLSAgICBjYW5jZWxBbmRDbGVhcigpOwor
ICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gZnJhbWVMb2FkUmVxdWVzdC5tX3JlcXVlc3Q7
CisgICAgb3BlblVSTChyZXF1ZXN0LnVybCgpKTsKIH0KIAorYm9vbCBGcmFtZUdkazo6b3BlblVS
TChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgZGlkT3BlblVSTCh1cmwpOworICAgIHZpZXcoKS0+
cHJpdmF0ZURhdGEoKS0+b3BlblVSTCh1cmwpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lk
IEZyYW1lR2RrOjpzdWJtaXRGb3JtKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJl
cXVlc3QpCiB7CiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBmcmFtZUxvYWRSZXF1ZXN0
Lm1fcmVxdWVzdDsKLQogICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgaGFjayBpbmhlcml0ZWQgZnJv
bSBGcmFtZU1hYywgYW5kIHNob3VsZCBiZSBwdXNoZWQgaW50byBGcmFtZQogICAgIGlmIChkLT5t
X3N1Ym1pdHRlZEZvcm1VUkwgPT0gcmVxdWVzdC51cmwoKSkKICAgICAgICAgcmV0dXJuOwotCiAg
ICAgZC0+bV9zdWJtaXR0ZWRGb3JtVVJMID0gcmVxdWVzdC51cmwoKTsKLQotICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgbV9jbGllbnQtPnN1Ym1pdEZvcm0ocmVxdWVzdC5kb1Bvc3QoKSA/ICJQ
T1NUIiA6ICJHRVQiLCByZXF1ZXN0LnVybCgpLCAmcmVxdWVzdC5wb3N0RGF0YSk7CisgICAgZGlk
T3BlblVSTChyZXF1ZXN0LnVybCgpKTsKKyAgICB2aWV3KCktPnByaXZhdGVEYXRhKCktPnN1Ym1p
dEZvcm0ocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIlBPU1QiID8gIlBPU1QiIDogIkdFVCIsIHJl
cXVlc3QudXJsKCksICZyZXF1ZXN0Lmh0dHBCb2R5KCkpOwogICAgIGNsZWFyUmVjb3JkZWRGb3Jt
VmFsdWVzKCk7CiB9CiAKLXZvaWQgRnJhbWVHZGs6OnVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QpCitLVVJMIEZyYW1lR2RrOjpvcmlnaW5hbFJlcXVl
c3RVUkwoKSBjb25zdAogewotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gZnJhbWVMb2Fk
UmVxdWVzdC5tX3JlcXVlc3Q7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gS1VS
TCgpOworfQogCi0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuOworYm9vbCBGcmFt
ZUdkazo6aXNMb2FkVHlwZVJlbG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBtX2NsaWVudC0+b3BlblVSTChyZXF1ZXN0LnVybCgpKTsK
Kwordm9pZCBGcmFtZUdkazo6dXJsU2VsZWN0ZWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJh
bWVMb2FkUmVxdWVzdCxjb25zdCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQoreworICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0ID0gZnJhbWVMb2FkUmVxdWVzdC5tX3JlcXVlc3Q7CisgICAgb3Bl
blVSTChyZXF1ZXN0LnVybCgpKTsKIH0KIAogU3RyaW5nIEZyYW1lR2RrOjp1c2VyQWdlbnQoKSBj
b25zdApAQCAtMjMyLDYgKzI0OSw3IEBACiAKIHZvaWQgRnJhbWVHZGs6OnJ1bkphdmFTY3JpcHRB
bGVydChTdHJpbmcgY29uc3QmIG1lc3NhZ2UpCiB7CisgICAgcHJpbnRmKCJKYXZhU2NyaXB0QWxl
cnQ6JXNcbjoiLG1lc3NhZ2UuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCkpOwogfQogCiBib29s
IEZyYW1lR2RrOjpydW5KYXZhU2NyaXB0Q29uZmlybShTdHJpbmcgY29uc3QmIG1lc3NhZ2UpCkBA
IC0yNDEsMTY0ICsyNTksMTUwIEBACiAKIHZvaWQgRnJhbWVHZGs6OnNldFRpdGxlKGNvbnN0IFN0
cmluZyAmdGl0bGUpCiB7CisgICAgaWYgKG1fd2luZG93LmdldCgpKQorICAgICAgICBtX3dpbmRv
dy0+c2V0VGl0bGUodGl0bGUpOwogfQogCi12b2lkIEZyYW1lR2RrOjpoYW5kbGVHZGtFdmVudChH
ZGtFdmVudCogZXZlbnQpCisKK2Jvb2wgRnJhbWVHZGs6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21F
dmVudChFbGVtZW50Km5vZGUsIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V2ZW50KQog
ewotICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBHREtfRVhQT1NFOiB7
Ci0gICAgICAgICAgICBHZGtSZWN0YW5nbGUgY2xpcDsKLSAgICAgICAgICAgIGdka19yZWdpb25f
Z2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdpb24sICZjbGlwKTsKLSAgICAgICAgICAgIGdk
a193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9uIChldmVudC0+YW55LndpbmRvdywgZXZlbnQtPmV4
cG9zZS5yZWdpb24pOwotICAgICAgICAgICAgY2Fpcm9fdCogY3IgPSBnZGtfY2Fpcm9fY3JlYXRl
IChldmVudC0+YW55LndpbmRvdyk7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIGN0eCA9
IG5ldyBHcmFwaGljc0NvbnRleHQoY3IpOwotICAgICAgICAgICAgcGFpbnQoY3R4LCBJbnRSZWN0
KGNsaXAueCwgY2xpcC55LCBjbGlwLndpZHRoLCBjbGlwLmhlaWdodCkpOwotICAgICAgICAgICAg
ZGVsZXRlIGN0eDsKLSAgICAgICAgICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwotICAgICAgICAgICAg
Z2RrX3dpbmRvd19lbmRfcGFpbnQgKGV2ZW50LT5hbnkud2luZG93KTsKKyAgICBOb2RlKiBzdGFy
dCA9IHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c3RhcnQoKS5ub2RlKCk7CisKKyAgICBpZiAoc3Rh
cnQgJiYgc3RhcnQtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgc3dpdGNoIChrZXZl
bnQtPldpbmRvd3NLZXlDb2RlKCkpIHsKKyAgICAgICAgY2FzZSBWS19CQUNLOgorICAgICAgICAg
ICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1bWVudCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0RLX1NDUk9MTDogewotICAgICAg
ICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAg
dmlldygpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHdo
ZWVsRXZlbnQuaXNBY2NlcHRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyBub2RlSW5mbyh0cnVl
LCB0cnVlKTsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRlc3Qobm9kZUlu
Zm8sIHdoZWVsRXZlbnQucG9zKCkpOwotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJbmZv
LmlubmVyTm9kZSgpOwotICAgICAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIC8vRGVmYXVsdCB0byBzY3JvbGxpbmcgdGhlIHBhZ2UKLSAgICAg
ICAgICAgIC8vbm90IHN1cmUgd2h5IGl0cyBudWxsCi0gICAgICAgICAgICAvL2Jyb2tlIGFueXdh
eSB3aGVuIGl0cyBub3QgbnVsbAotICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgd2hl
ZWxFdmVudC5kZWx0YVgoKSwgd2hlZWxFdmVudC5kZWx0YVkoKSk7CisgICAgICAgIGNhc2UgVktf
REVMRVRFOgorICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNz
ZWQoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEdES19EUkFHX0VOVEVSOgotICAgICAgICBjYXNlIEdES19EUkFHX0xFQVZFOgotICAgICAg
ICBjYXNlIEdES19EUkFHX01PVElPTjoKLSAgICAgICAgY2FzZSBHREtfRFJBR19TVEFUVVM6Ci0g
ICAgICAgIGNhc2UgR0RLX0RST1BfU1RBUlQ6Ci0gICAgICAgIGNhc2UgR0RLX0RST1BfRklOSVNI
RUQ6IHsKLSAgICAgICAgICAgIC8vYm9vbCB1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKLSAgICAgICAgICAgIC8vdm9pZCBjYW5jZWxEcmFn
QW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKLSAgICAgICAg
ICAgIC8vYm9vbCBwZXJmb3JtRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jiwg
Q2xpcGJvYXJkKik7CisgICAgICAgIGNhc2UgVktfTEVGVDoKKyAgICAgICAgICAgIHNlbGVjdGlv
bkNvbnRyb2xsZXIoKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpM
RUZULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgotICAgICAgICAgICAgdmlldygpLT5o
YW5kbGVNb3VzZU1vdmVFdmVudChldmVudCk7CisgICAgICAgIGNhc2UgVktfUklHSFQ6CisgICAg
ICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVy
OjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlcjo6UklHSFQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RL
XzJCVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgICAg
ICAgICB2aWV3KCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CisgICAgICAgIGNhc2Ug
VktfVVA6CisgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rp
b25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQsIFBhcmFncmFwaEdyYW51bGFyaXR5
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToK
LSAgICAgICAgICAgIHZpZXcoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOworICAg
ICAgICBjYXNlIFZLX0RPV046CisgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1v
ZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwgUGFyYWdyYXBo
R3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX0tFWV9Q
UkVTUzoKLSAgICAgICAgY2FzZSBHREtfS0VZX1JFTEVBU0U6IHsKLSAgICAgICAgICAgIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudCBrZXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgYm9vbCBoYW5kbGVk
ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWtldmVudC5pc0tleVVwKCkpIHsKLSAgICAgICAg
ICAgICAgICBOb2RlKiBzdGFydCA9IHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c3RhcnQoKS5ub2Rl
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICYmIHN0YXJ0LT5pc0NvbnRlbnRFZGl0YWJs
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChrZXZlbnQuV2luZG93c0tleUNvZGUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19CQUNLOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZG9jdW1lbnQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFZLX0RFTEVURToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBp
bmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChkb2N1bWVudCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VktfTEVGVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVy
KCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rpb25Db250cm9sbGVy
OjpMRUZULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX1JJR0hUOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+bW9kaWZ5KFNlbGVj
dGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1P
VkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIFZLX0RPV046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9u
Q29udHJvbGxlcigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9u
Q29udHJvbGxlcjo6Rk9SV0FSRCwgUGFyYWdyYXBoR3JhbnVsYXJpdHkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRv
Y3VtZW50KCksIGtldmVudC50ZXh0KCksIGZhbHNlKTsKKyAgICAgICAgY2FzZSBWS19SRVRVUk46
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50KCksIGtldmVudC0+dGV4dCgpLCBm
YWxzZSk7CisgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rp
b25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsK
IAotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWhhbmRsZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChrZXZlbnQuV2luZG93c0tleUNvZGUoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19MRUZUOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvU2Nyb2xsKHJlbmRlcmVyKCksIHRydWUsIC0xMjApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19S
SUdIVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Njcm9sbChyZW5kZXJlcigpLCB0
cnVlLCAxMjApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBWS19VUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b1Njcm9sbChyZW5kZXJlcigpLCBmYWxzZSwgLTEyMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX1BSSU9SOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIFNCX1BBR0VVUDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktf
TkVYVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBTQl9QQUdFRE9XTjsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgVktfRE9XTjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Njcm9sbChy
ZW5kZXJlcigpLCBmYWxzZSwgMTIwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfSE9NRToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW5kZXJlcigpLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCgwLCAwLCB0
cnVlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Njcm9sbChyZW5kZXJl
cigpLCBmYWxzZSwgMTIwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfRU5EOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbmRlcmVyKCktPmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KDAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+aGVpZ2h0KCksIHRydWUsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19TUEFDRToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V2ZW50LnNoaWZ0S2V5KCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvU2Nyb2xsKHJlbmRlcmVyKCksIGZhbHNlLCAtMTIwKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvU2Nyb2xsKHJlbmRlcmVyKCksIGZhbHNlLCAxMjApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIEZyYW1lR2RrOjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJl
Y3QgJnIpCit2b2lkIEZyYW1lR2RrOjpwcm9jZXNzUGxhdGZvcm1Gb2N1c0NoYW5nZShib29sIGZv
Y3VzZWQpCiB7Ci0gICAgaWYgKCFtX2RyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKG1fZHJhd2Fi
bGUpKQorI2lmIDAKKyAgICBpZiAoIWRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1cobV9kcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRv
d19tb3ZlX3Jlc2l6ZSh3aW5kb3csIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgp
KTsKKyAgICBtX2V2ZW50VHlwZSA9IGZvY3VzZWQgPyBFdmVudE5hbWVzOjpmb2N1c0V2ZW50IDog
RXZlbnROYW1lczo6Ymx1ckV2ZW50OworICAgIGludmFsaWRhdGVTZWxlY3Rpb24oKTsKKyAgICBz
ZXRJc0FjdGl2ZShmb2N1c2VkKTsKKyAgICBzZXRXaW5kb3dIYXNGb2N1cyhmb2N1c2VkKTsKKyNl
bmRpZgorICAgIGZvY3VzRnJhbWUgPSBmb2N1c2VkID8gdGhpczowOwogfQogCi1JbnRSZWN0IEZy
YW1lR2RrOjpmcmFtZUdlb21ldHJ5KCkgY29uc3QKK3ZvaWQgRnJhbWVHZGs6OnByb2Nlc3NQbGF0
Zm9ybVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50KQogewotICAgIGdpbnQgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZGVwdGg7Ci0gICAgaWYgKCFtX2RyYXdhYmxlKQotICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOworICAgIGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fZXZlbnRUeXBlID0gRXZlbnROYW1lczo6bW91c2V3aGVlbEV2ZW50OwogCi0gICAgaWYg
KCFHREtfSVNfV0lORE9XKG1fZHJhd2FibGUpKSB7Ci0gICAgICAgIGdka19kcmF3YWJsZV9nZXRf
c2l6ZShtX2RyYXdhYmxlLCAmd2lkdGgsICZoZWlnaHQpOwotICAgICAgICByZXR1cm4gSW50UmVj
dCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB2aWV3KCktPmhhbmRsZVdoZWVsRXZlbnQoZXZl
bnQpOworCit9CisKK3ZvaWQgRnJhbWVHZGs6OnByb2Nlc3NQbGF0Zm9ybUtleWJvYXJkRXZlbnQo
UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50LAorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcg
ZXZlbnRUeXBlKQoreworICAgIGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICghZm9jdXNGcmFtZSkKKyAgICAgICAgZm9jdXNGcmFtZSA9IHRoaXM7CisKKyAgICBpZiAo
Zm9jdXNGcmFtZSAhPSB0aGlzKSB7CisgICAgICAgIGZvY3VzRnJhbWUtPnByb2Nlc3NQbGF0Zm9y
bUtleWJvYXJkRXZlbnQoZXZlbnQsZXZlbnRUeXBlKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhtX2RyYXdhYmxlKTsKLSAgICBn
ZGtfd2luZG93X2dldF9nZW9tZXRyeSh3aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCAm
ZGVwdGgpOwotICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIG1f
ZXZlbnRUeXBlID0gZXZlbnRUeXBlOworCisgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7
CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybjsKKworICAgIE5vZGUqIG5vZGUgPSBkb2Mt
PmZvY3VzTm9kZSgpOworICAgIGlmICghbm9kZSkgeworICAgICAgICBpZiAoZG9jLT5pc0hUTUxE
b2N1bWVudCgpKQorICAgICAgICAgICAgbm9kZSA9IGRvYy0+Ym9keSgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBub2RlID0gZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKKworICAgICAgICBp
ZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFldmVudC5p
c0tleVVwKCkpCisgICAgICAgIHByZXBhcmVGb3JVc2VyQWN0aW9uKCk7CisKKyAgICBib29sIG5v
dGhhbmRsZWQgPSBFdmVudFRhcmdldE5vZGVDYXN0KG5vZGUpLT5kaXNwYXRjaEtleUV2ZW50KGV2
ZW50KTsKKworICAgIC8vaGFjayB0byBjYXVzZSBhIGtleSBwcmVzcyBzZWUgRnJhbWVNYWMubW0K
KyAgICBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OmtleWRvd25FdmVudCkgeworICAgICAg
ICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgcmVwZWF0RXZlbnQoZXZlbnQsdHJ1ZSk7CisgICAgICAg
IGJvb2wgcHJlc3NOb3RoYW5kbGVkID0gRXZlbnRUYXJnZXROb2RlQ2FzdChub2RlKS0+ZGlzcGF0
Y2hLZXlFdmVudChyZXBlYXRFdmVudCk7CisgICAgICAgIGlmIChub3RoYW5kbGVkKQorICAgICAg
ICAgICAgbm90aGFuZGxlZCA9IHByZXNzTm90aGFuZGxlZDsKKyAgICB9CisgICAgaWYgKG5vdGhh
bmRsZWQpIHsKKyAgICAgICAgdmlldygpLT5oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50KTsKKyAg
ICB9CiB9CiAKK3ZvaWQgRnJhbWVHZGs6OnByb2Nlc3NQbGF0Zm9ybU1vdXNlRXZlbnQoUGxhdGZv
cm1Nb3VzZUV2ZW50IGV2ZW50LAorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBl
KQoreworICAgIGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZXZlbnRU
eXBlID0gZXZlbnRUeXBlOworCisgICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjptb3Vz
ZW1vdmVFdmVudCkKKyAgICAgICAgdmlldygpLT5oYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCk7
CisgICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjptb3VzZWRvd25FdmVudCkgeworICAg
ICAgICBpZiAoZm9jdXNGcmFtZSAmJiBmb2N1c0ZyYW1lICE9IHRoaXMpIHsKKyAgICAgICAgICAg
IGZvY3VzRnJhbWUtPmludmFsaWRhdGVTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGZvY3VzRnJh
bWUtPnNldElzQWN0aXZlKGZhbHNlKTsKKyAgICAgICAgICAgIGZvY3VzRnJhbWUtPnNldFdpbmRv
d0hhc0ZvY3VzKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBmb2N1c0ZyYW1lID0gdGhpczsK
KyAgICAgICAgZm9jdXNGcmFtZS0+aW52YWxpZGF0ZVNlbGVjdGlvbigpOworICAgICAgICBmb2N1
c0ZyYW1lLT5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICAgICAgZm9jdXNGcmFtZS0+c2V0V2luZG93
SGFzRm9jdXModHJ1ZSk7CisgICAgICAgIHZpZXcoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2
ZW50KTsKKyAgICB9CisgICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjptb3VzZXVwRXZl
bnQpCisgICAgICAgIHZpZXcoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOworfQor
CiBib29sIEZyYW1lR2RrOjpwYXNzV2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQoTm9kZSogbm9kZSkK
IHsKKyAgICAvL0ZJWE1FOiBkZXRlcm1pbmUgaWYgYSB3aGVlbCBlbmFibGVzIHdpZGdldCBpcyBh
Y3RpdmUKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKQEAgLTQxMCwxMSArNDE0LDE5MSBA
QAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZyYW1lR2RrOjpwYXNzU3ViZnJhbWVFdmVu
dFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSopCisK
KworYm9vbCBGcmFtZUdkazo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRn
ZXQpCiB7Ci0gICAgaWYgKG1ldi50YXJnZXROb2RlKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQorRnJhbWVHZGsqIEZyYW1lR2RrOjpnZXRSb290RnJh
bWUoKQoreworICAgIEZyYW1lR2RrKiBjdXIgPSB0aGlzOworICAgIHdoaWxlICghY3VyLT5pc1Rv
cExldmVsKCkpIHsKKyAgICAgICAgY3VyID0gY3VyLT5wYXJlbnQoKTsKKyAgICB9CisgICAgcmV0
dXJuICBjdXI7CiAKIH0KKworCit2b2lkIEZyYW1lR2RrOjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29y
JiBjdXJzb3IpCit7CisgICAgaWYgKG1fd2luZG93LmdldCgpKSB7CisgICAgICAgIG1fd2luZG93
LT5zZXRDdXJzb3IoY3Vyc29yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGcmFtZUdk
ayogcCA9IHBhcmVudCgpOworICAgIGlmIChwKQorICAgICAgICBwLT5zZXRDdXJzb3IoY3Vyc29y
KTsKK30KKworI2lmIDAKK0ludFJlY3QgIEZyYW1lR2RrOjpmcmFtZUdlb21ldHJ5KCkgY29uc3QK
K3sKKyAgICBpZiAobV93aW5kb3cuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX3dpbmRvdy0+Z2Vv
bWV0cnkoKTsKKyAgICByZXR1cm4gbV9nZW9tZXRyeTsKKworfQorCit2b2lkIEZyYW1lR2RrOjpz
ZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByLCBib29sIGZyb21TeXN0ZW0pCit7CisgICAgaWYg
KG1fZ2VvbWV0cnkgPT0gcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fZ2VvbWV0cnkgPSByOwor
ICAgIGlmIChmcm9tU3lzdGVtKSB7CisgICAgICAgIHZpZXcoKS0+bGF5b3V0KGZhbHNlKTsKKyAg
ICAgICAgdmlldygpLT51cGRhdGVTY3JvbGxCYXJzKCk7CisgICAgICAgIHNlbmRSZXNpemVFdmVu
dCgpOworICAgIH0KK30KKwordm9pZCAgRnJhbWVHZGs6OnNldEZyYW1lR2VvbWV0cnkoY29uc3Qg
SW50UmVjdCYgcikKK3sKKyAgICBzZXRHZW9tZXRyeShyLGZhbHNlKTsKK30KKyNlbmRpZgorCit2
b2lkIEZyYW1lR2RrOjpyZXBhaW50KGJvb2wgbm93KQoreworCisgICAgSW50UmVjdCByID0gdmll
dygpLT5mcmFtZUdlb21ldHJ5KCk7CisgICAgci5zZXRYKDApOworICAgIHIuc2V0WSgwKTsKKyAg
ICByZXBhaW50KHIsbm93KTsKK30KKwordm9pZCBGcmFtZUdkazo6cmVwYWludChjb25zdCBJbnRS
ZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKK3sKKyAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV93aW5kb3cuZ2V0KCkpIHsKKyAgICAgICAg
SW50UmVjdCByID0gdmlldygpLT5mcmFtZUdlb21ldHJ5KCk7CisgICAgICAgIC8vRklYTUUgSEFD
SyBzaW5jZSB3ZSBkb24ndCBnZXQgY29ycmVjdCByZXBhaW50cworICAgICAgICBtX3dpbmRvdy0+
cmVwYWludChyLG5vdyk7CisgICAgICAgIC8vbV93aW5kb3ctPnJlcGFpbnQodXBkYXRlUmVjdCxu
b3cpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZyYW1lR2RrKiBwYXJlbnQgPSBzdGF0
aWNfY2FzdDxGcmFtZUdkayo+KHRyZWUoKS0+cGFyZW50KCkpOworICAgIGlmIChwYXJlbnQpIHsK
KyAgICAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB1cGRhdGVSZWN0OworICAgICAgICBJbnRSZWN0
IHIgPSB2aWV3KCktPmZyYW1lR2VvbWV0cnkoKTsKKyAgICAgICAgZGlydHlSZWN0Lm1vdmUoci54
KCksci55KCkpOworICAgICAgICBwYXJlbnQtPnJlcGFpbnQoZGlydHlSZWN0LG5vdyk7CisgICAg
fQorfQorCitTdHJpbmcgRnJhbWVHZGs6Om1pbWVUeXBlRm9yRmlsZU5hbWUoU3RyaW5nIGNvbnN0
JiBwYXRoKSBjb25zdAoreworICAgIFN0cmluZyBucGF0aCA9ICBTdHJpbmcocGF0aCk7CisgICAg
cmV0dXJuIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0TWltZVR5cGUobnBhdGgpOworfQorCit2
b2lkIEZyYW1lR2RrOjpzZXRQYXJlbnQoRnJhbWVHZGsqIHApCit7CisgICAgaWYgKCFwKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKHAgPT0gcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBwLT50cmVlKCktPmFwcGVuZENoaWxkKHRoaXMpOworICAgIHZpZXcoKS0+c2V0UGFyZW50KHAt
PnZpZXcoKSk7Cit9CisKK0ZyYW1lR2RrKiBGcmFtZUdkazo6cGFyZW50KCkKK3sKKyAgICByZXR1
cm4gIHN0YXRpY19jYXN0PEZyYW1lR2RrKj4odHJlZSgpLT5wYXJlbnQoKSk7Cit9CisKKyNpZiAw
CitJbnRQb2ludCBGcmFtZUdkazo6Z2V0QWJzb2x1dGVQb3NpdGlvbigpCit7CisgICAgaWYgKGlz
VG9wTGV2ZWwoKSkKKyAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CisKKyAgICBGcmFtZUdkayog
cCA9IHBhcmVudCgpOworICAgIGFzc2VydChwICE9IDApOworICAgIGlmIChwKQorICAgICAgICBy
ZXR1cm4gdmlldygpLT5mcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKTsKKyAgICBJbnRQb2ludCBw
dCA9IHAtPmdldEFic29sdXRlUG9zaXRpb24oKTsKKyAgICBwdC5tb3ZlKG1fZ2VvbWV0cnkueCgp
LG1fZ2VvbWV0cnkueSgpKTsKKyAgICByZXR1cm4gcHQ7Cit9CisjZW5kaWYKKworR3JhcGhpY3ND
b250ZXh0Q2Fpcm8qIEZyYW1lR2RrOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQoreworICAgIGlm
IChtX3dpbmRvdy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2luZG93LT5jcmVhdGVHcmFwaGlj
c0NvbnRleHQoKTsKKworICAgIEZyYW1lR2RrKiBwYXJlbnQgPSBzdGF0aWNfY2FzdDxGcmFtZUdk
ayo+KHRyZWUoKS0+cGFyZW50KCkpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBw
YXJlbnQtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIEludFBvaW50IHAgPSB2aWV3KCkt
PmZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpOworICAgIGN0eC0+dHJhbnNsYXRlKHAueCgpLHAu
eSgpKTsKKyAgICByZXR1cm4gY3R4OworfQorCitHcmFwaGljc0NvbnRleHRDYWlybyogRnJhbWVH
ZGs6OmJlZ2luUGFpbnRpbmcoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV93aW5k
b3cuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX3dpbmRvdy0+YmVnaW5QYWludGluZyhyZWN0KTsK
KyAgICBJbnRSZWN0IHJlZ2lvbiA9IHJlY3Q7CisgICAgSW50UmVjdCByID0gdmlldygpLT5mcmFt
ZUdlb21ldHJ5KCk7CisgICAgcmVnaW9uLm1vdmUoci54KCksci55KCkpOworICAgIEZyYW1lR2Rr
KiBwYXJlbnQgPSBzdGF0aWNfY2FzdDxGcmFtZUdkayo+KHRyZWUoKS0+cGFyZW50KCkpOworICAg
IHJldHVybiBwYXJlbnQtPmJlZ2luUGFpbnRpbmcocmVnaW9uKTsKK30KKwordm9pZCBGcmFtZUdk
azo6ZW5kUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIGN0eCkKK3sKKyAgICBpZiAobV93
aW5kb3cuZ2V0KCkpIHsKKyAgICAgICAgbV93aW5kb3ctPmVuZFBhaW50aW5nKGN0eCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGcmFtZUdkayogcGFyZW50ID0gc3RhdGljX2Nhc3Q8
RnJhbWVHZGsqPih0cmVlKCktPnBhcmVudCgpKTsKKyAgICBwYXJlbnQtPmVuZFBhaW50aW5nKGN0
eCk7Cit9CisKK3ZvaWQgRnJhbWVHZGs6OmF0dGFjaFdpbmRvdyhXaW5kb3dHZGsqIHdpbmRvdykK
K3sKKyAgICBtX3dpbmRvdyA9IHdpbmRvdzsKKyAgICBpZiAoIW1fd2luZG93KQorICAgICAgICBy
ZXR1cm47CisgICAgbV93aW5kb3ctPnNldEZyYW1lKHRoaXMpOworICAgIEludFJlY3QgciA9IHdp
bmRvdy0+Z2VvbWV0cnkoKTsKKyAgICByLnNldFgoMCk7CisgICAgci5zZXRZKDApOworICAgIHZp
ZXcoKS0+c2V0RnJhbWVHZW9tZXRyeShyKTsKK30KKwordm9pZCBGcmFtZUdkazo6ZGV0YWNoV2lu
ZG93KCkKK3sKKyAgICBpZiAoIW1fd2luZG93KQorICAgICAgICByZXR1cm47CisgICAgbV93aW5k
b3ctPnNldEZyYW1lKDApOworICAgIG1fd2luZG93LnJlbGVhc2UoKTsKKyAgICBtX3dpbmRvdyA9
IDA7Cit9CisKK3ZvaWQgRnJhbWVHZGs6OnNldEluc3RhbGxMb2NhdGlvbihjb25zdCBjaGFyICps
b2NhdGlvbikKK3sKKyAgICBpbnN0YWxsUGF0aCA9IHN0cmR1cChsb2NhdGlvbik7Cit9CisKK1N0
cmluZyBGcmFtZUdkazo6aW5zdGFsbExvY2F0aW9uKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKGlu
c3RhbGxQYXRoKTsKK30KKworfQorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL0tleWJvYXJkQ29kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9LZXlib2FyZENvZGVzLmgJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvS2V5Ym9hcmRDb2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
ICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMSw3ICsyMSw3
IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgS2V5Ym9hcmRDb2Rlc19ICkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVt
bWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtOCwxMyArOCwxMyBAQAogICogYXJlIG1ldDoKICAqCiAgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTQxLDYgKzQx
LDggQEAKICNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJG
SVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BS
RVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNk
ZWZpbmUgVVNFX09MRF9DQUlSTyAxCkBAIC01NywxMCArNTksMTAgQEAKICAgICBtX3hIZWlnaHQg
PSAxMzsKICAgICBtX3NwYWNlV2lkdGggPSAxMDsKICNlbHNlCi0gICAgY2Fpcm9fc2NhbGVkX2Zv
bnRfdGV4dF9leHRlbnRzKG1fZm9udC5tX3NjYWxlZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7
Ci0gICAgbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhlaWdodDsKLSAgICBjYWlyb19zY2FsZWRf
Zm9udF90ZXh0X2V4dGVudHMobV9mb250Lm1fc2NhbGVkRm9udCwgIiAiLCAmdGV4dF9leHRlbnRz
KTsKLSAgICBtX3NwYWNlV2lkdGggPSAgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0X2V4dGVudHMueF9h
ZHZhbmNlKTsKKyAgICAvL2NhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9z
Y2FsZWRGb250LCAieCIsICZ0ZXh0X2V4dGVudHMpOworICAgIC8vbV94SGVpZ2h0ID0gdGV4dF9l
eHRlbnRzLmhlaWdodDsKKyAgICAvL2NhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX2Zv
bnQubV9zY2FsZWRGb250LCAiICIsICZ0ZXh0X2V4dGVudHMpOworICAgIC8vbV9zcGFjZVdpZHRo
ID0gIHN0YXRpY19jYXN0PGludD4odGV4dF9leHRlbnRzLnhfYWR2YW5jZSk7CiAjZW5kaWYKICAg
ICBhc3NlcnQobV9zcGFjZVdpZHRoICE9IDApOwogICAgIG1fbGluZUdhcCA9IG1fbGluZVNwYWNp
bmcgLSBtX2FzY2VudCAtIG1fZGVzY2VudDsKQEAgLTY4LDcgKzcwLDggQEAKIAogdm9pZCBGb250
RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0
YTsKKyAgICBpZiAobV9zbWFsbENhcHNGb250RGF0YSkKKyAgICAgICAgZGVsZXRlIG1fc21hbGxD
YXBzRm9udERhdGE7CiB9CiAKIEZvbnREYXRhKiBGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dkay9GaWxlQ2hvb3Nlckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvRmlsZUNob29zZXJHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvRmlsZUNob29zZXJHZGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZUNob29z
ZXIuaCIKKworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJG
SVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BS
RVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8RmlsZUNob29zZXI+IEZpbGVDaG9vc2VyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCogdXBsb2FkQ29udHJvbCkKK3sKKyAgICBQYXNz
UmVmUHRyPEZpbGVDaG9vc2VyPiBmaWxlQ2hvb3NlcihuZXcgRmlsZUNob29zZXIoZG9jdW1lbnQs
IHVwbG9hZENvbnRyb2wpKTsKKyAgICByZXR1cm4gZmlsZUNob29zZXI7Cit9CisKK0ZpbGVDaG9v
c2VyOjpGaWxlQ2hvb3NlcihEb2N1bWVudCosIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmls
ZUNob29zZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBGaWxlQ2hv
b3Nlcjo6YmFzZW5hbWVGb3JXaWR0aChpbnQgd2lkdGgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRmlsZUNob29zZXI6OmRp
c2Nvbm5lY3RVcGxvYWRDb250cm9sKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAkocmV2aXNpb24gMTczOTkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHBy
b2plY3QuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDcgKzI0LDYgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lR2RrLmgiCi0jaW5j
bHVkZSAiUmVuZGVyUG9wdXBNZW51R2RrLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtNTgsOCArNTcsNyBAQAogfQogCiB2b2lkIFJl
bmRlclRoZW1lR2RrOjpjbG9zZSgpCi17Ci19Cit7fQogCiB2b2lkIFJlbmRlclRoZW1lR2RrOjph
ZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKQEAgLTg5LDEy
ICs4NywxMiBAQAogYm9vbCBSZW5kZXJUaGVtZUdkazo6c3VwcG9ydHNGb2N1cyhFQXBwZWFyYW5j
ZSBhcHBlYXJhbmNlKQogewogICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgICAgICBjYXNl
IFB1c2hCdXR0b25BcHBlYXJhbmNlOgotICAgICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6Ci0g
ICAgICAgIGNhc2UgVGV4dEZpZWxkQXBwZWFyYW5jZToKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2Ug
UHVzaEJ1dHRvbkFwcGVhcmFuY2U6CisgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgorICAgIGNh
c2UgVGV4dEZpZWxkQXBwZWFyYW5jZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAg
LTEyMiwyMyArMTIwLDIzIEBACiB7CiAgICAgVGhlbWVEYXRhIHJlc3VsdDsKICAgICBzd2l0Y2gg
KG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgewotICAgICAgICBjYXNlIFB1c2hCdXR0b25BcHBl
YXJhbmNlOgotICAgICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXN1
bHQubV9wYXJ0ID0gQlBfQlVUVE9OOwotICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRl
cm1pbmVTdGF0ZShvKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENoZWNrYm94
QXBwZWFyYW5jZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9DSEVDS0JPWDsKLSAg
ICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBSYWRpb0FwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXN1
bHQubV9wYXJ0ID0gQlBfUkFESU87Ci0gICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVy
bWluZVN0YXRlKG8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGV4dEZpZWxk
QXBwZWFyYW5jZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBURlBfVEVYVEZJRUxEOwot
ICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUHVzaEJ1dHRvbkFwcGVhcmFuY2U6CisgICAgY2FzZSBCdXR0
b25BcHBlYXJhbmNlOgorICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfQlVUVE9OOworICAgICAg
ICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENoZWNrYm94QXBwZWFyYW5jZToKKyAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0NI
RUNLQk9YOworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFJhZGlvQXBwZWFyYW5jZToKKyAgICAgICAgcmVzdWx0Lm1f
cGFydCA9IEJQX1JBRElPOworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRl
KG8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6CisgICAg
ICAgIHJlc3VsdC5tX3BhcnQgPSBURlBfVEVYVEZJRUxEOworICAgICAgICByZXN1bHQubV9zdGF0
ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtMTUwLDggKzE0OCwyMSBAQAogfQogCiB2b2lkIFJlbmRlclRoZW1lR2Rr
OjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0CisgICAge30K
Kwordm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29u
c3QKKyAgICB7IH0KK2Jvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCiB7Ci0K
KyAgICByZXR1cm4gZmFsc2U7CiB9Cit2b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRSYWRpb1NpemUo
UmVuZGVyU3R5bGUqKSBjb25zdAorICAgIHsgfQordm9pZCBSZW5kZXJUaGVtZUdkazo6YWRqdXN0
VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCog
ZSkgY29uc3QKKyAgICB7fQorYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zLDcgKzMsNyBAQAogICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4K
ICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzQsMTAgKzM0LDEyIEBACiAjaW5j
bHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKKyNk
ZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1Q
TEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJ
T05fXyk7IH0gd2hpbGUoMCkKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCi0gICAgOiBtX2ZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pCisgICAgICAgIDogbV9mb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKSxtX3BhdHRlcm4oMCkKIHsKICAgICBpbml0KCk7CiAKQEAgLTUyLDE2ICs1NCwx
NiBAQAogCiAgICAgaW50IHR5cGUgPSBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOwog
ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZG
YW1pbHk6Ci0gICAgICAgICAgICBmYW1pbHkgPSAoRmNDaGFyOCopInNhbnMtc2VyaWYiOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZG
YW1pbHk6Ci0gICAgICAgICAgICBmYW1pbHkgPSAoRmNDaGFyOCopInNhbnMtc2VyaWYiOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToK
LSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5OgotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgZmFtaWx5ID0gKEZjQ2hhcjgqKSJzYW5zLXNlcmlmIjsKKyAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlseSA9IChG
Y0NoYXI4Kikic2Fucy1zZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlseSA9IChGY0NoYXI4Kikic2Fu
cy1zZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0Zh
bWlseToKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6CisgICAgZGVm
YXVsdDoKKyAgICAgICAgZmFtaWx5ID0gKEZjQ2hhcjgqKSJzYW5zLXNlcmlmIjsKICAgICB9CiAg
ICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7CiAgICAgYXNzZXJ0KHBh
dHRlcm4gIT0gMCk7CkBAIC0xNTAsNyArMTUyLDYgQEAKICAgICBjYWlyb19mb250X2ZhY2VfdCoq
IHJlc3VsdCA9IChjYWlyb19mb250X2ZhY2VfdCoqKW1hbGxvYygoZnMtPm5mb250ICsgMSkgKiBz
aXplb2YoY2Fpcm9fZm9udF9mYWNlX3QqKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcy0+
bmZvbnQ7IGkrKykgewogICAgICAgICBGY0NoYXI4KiBmb250ID0gRmNOYW1lVW5wYXJzZShmcy0+
Zm9udHNbaV0pOwotICAgICAgICBwcmludGYoIiVzXG4iLCBmb250KTsKICAgICAgICAgcmVzdWx0
W2ldID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmcy0+Zm9udHNbaV0p
OwogICAgIH0KICAgICByZXN1bHRbZnMtPm5mb250XSA9IE5VTEw7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9Gb250R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9Gb250R2RrLmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9G
b250R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIsNDIgKzIy
LDUzIEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJGb250LmgiCiAKICNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uaCIKIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIs
ICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxf
X1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fdCogY3IgPSBncmFwaGljc0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NDb250ZXh0Q2Fpcm8qPihncmFwaGljc0NvbnRleHQpOwog
CiAgICAgLy8gU2V0IHRoZSB0ZXh0IGNvbG9yIHRvIHVzZSBmb3IgZHJhd2luZy4KKyAgICBkb3Vi
bGUgeCx5OwogICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwogICAgIENvbG9yIHBl
bkNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5wZW4oKS5jb2xvcigpOwogICAgIHBlbkNvbG9yLmdl
dFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfcmdi
YShjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9yZ2JhKGNyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAKLSAgICAvLyBTZWxlY3QgdGhl
IHNjYWxlZCBmb250LgotICAgIGZvbnQtPnNldEZvbnQoY29udGV4dCk7CisgICAgY2Fpcm9fc2F2
ZShjcik7CiAKLSAgICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMgPSAoR2x5cGhCdWZmZXJHbHlw
aCopIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKKyAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7
CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwmbWF0cml4KTsKKyAgICBmb250LT5zZXRGb250KGNy
KTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNyLCZtYXRyaXgpOworICAgIGNhaXJvX25ld19wYXRo
KGNyKTsKKyAgICBjYWlyb19tb3ZlX3RvKGNyLHBvaW50LngoKSxwb2ludC55KCkpOworICAgIGNh
aXJvX2dldF9jdXJyZW50X3BvaW50KGNyLCZ4LCZ5KTsKKyAgICBmbG9hdCBvZmZzZXQgPSB4Owog
Ci0gICAgZmxvYXQgb2Zmc2V0ID0gcG9pbnQueCgpOwogCisgICAgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzID0gY29uc3RfY2FzdDxHbHlwaEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhz
KGZyb20pKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykg
ewogICAgICAgICBnbHlwaHNbaV0ueCA9IG9mZnNldDsKLSAgICAgICAgZ2x5cGhzW2ldLnkgPSBw
b2ludC55KCk7CisgICAgICAgIGdseXBoc1tpXS55ID0geTsKICAgICAgICAgb2Zmc2V0ICs9IGds
eXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsgaSk7CiAgICAgfQotICAgIGNhaXJvX3Nob3dfZ2x5
cGhzKGNvbnRleHQsIGdseXBocywgbnVtR2x5cGhzKTsKKyAgICBjYWlyb19zaG93X2dseXBocyhj
ciwgZ2x5cGhzLCBudW1HbHlwaHMpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmgJKHJldmlzaW9uIDE3
Mzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIFBsYXRmb3JtU2Nyb2xsQmFyX2gKLSNkZWZpbmUgUGxhdGZvcm1TY3JvbGxCYXJfaAotCi0j
aW5jbHVkZSAiV2lkZ2V0LmgiCi0jaW5jbHVkZSAiU2Nyb2xsQmFyLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBwdWJsaWMgV2lkZ2V0LCBwdWJs
aWMgU2Nyb2xsYmFyIHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJD
bGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOwotICAg
IHZpcnR1YWwgflBsYXRmb3JtU2Nyb2xsYmFyKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNXaWRn
ZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29s
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIHN0YXRpYyBp
bnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIHsgcmV0dXJuIDE1OyB9Ci0gICAgc3RhdGlj
IGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgeyByZXR1cm4gMTU7IH0KLQotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gUGxhdGZv
cm1TY3JvbGxCYXJfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaW5kb3dHZGsuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCisjaW5j
bHVkZSAiRnJhbWVHZGsuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiQ3Vy
c29yLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgor
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRE9NV2luZG93
LmgiCisjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJCcm93c2VyRXh0
ZW5zaW9uR2RrLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJIVE1MRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlcklu
dGVybmFsLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisj
aW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgorI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisjaW5jbHVkZSAi
U1NMS2V5R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUg
IlBhdGguaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOworCitzdGF0aWMgSGFzaE1hcDxHZGtEcmF3YWJsZSosV2luZG93R2Rr
Kj4gd2luZG93czsKK3N0YXRpYyBXaW5kb3dHZGsqIGN1cnJlbnRBY3RpdmVGcmFtZTsKKworI2lm
IDAKK2dfaWRsZV9hZGQoR1NvdXJjZUZ1bmMgZnVuY3Rpb24sZ3BvaW50ZXIgZGF0YSk7CitnYm9v
bGVhbiAgICAoKkdTb3VyY2VGdW5jKShncG9pbnRlciBkYXRhKTsKKworc3RhdGljIGdib29sZWFu
IHBhaW50X2NhbGxiYWNrKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ2RrX3RocmVhZHNfZW50ZXIo
KTsKKyAgICBnZGtfdGhyZWFkc19sZWF2ZSgpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRv
U2Nyb2xsKGNvbnN0IFJlbmRlck9iamVjdCogciwgYm9vbCBpc0hvcml6b250YWwsIGludCBtdWx0
aXBsaWVyKQoreworICAgIC8vIEZJWE1FOiBUaGUgc2Nyb2xsaW5nIGRvbmUgaGVyZSBzaG91bGQg
YmUgZG9uZSBpbiB0aGUgZGVmYXVsdCBoYW5kbGVycworICAgIC8vIG9mIHRoZSBlbGVtZW50cyBy
YXRoZXIgdGhhbiBoZXJlIGluIHRoZSBwYXJ0LgorICAgIGlmICghcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy9icm9rZW4gc2luY2UgaXQgY2FsbHMgc2Nyb2xsIG9uIHNjcm9sbGJhcnMKKyAg
ICAvL2FuZCB3ZSBoYXZlIG5vbmUgbm93CisgICAgLy9yLT5zY3JvbGwoZGlyZWN0aW9uLCBTY3Jv
bGxCeVdoZWVsLCBtdWx0aXBsaWVyKTsKKyAgICBpZiAoIXItPmxheWVyKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbnQgeCA9IHItPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKKyAgICBpbnQg
eSA9IHItPmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKTsKKyAgICBpZiAoaXNIb3Jpem9udGFsKQor
ICAgICAgICB4ICs9IG11bHRpcGxpZXI7CisgICAgZWxzZQorICAgICAgICB5ICs9IG11bHRpcGxp
ZXI7CisgICAgci0+bGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQoeCwgeSwgdHJ1ZSwgdHJ1ZSk7Cit9
CisKK1dpbmRvd0dkazo6V2luZG93R2RrKEdka1dpbmRvdyogd2luZG93KQorICAgICAgICA6IG1f
d2luZG93KHdpbmRvdyksbV93aW5kb3dGZWF0dXJlcygpCit7CisgICAgSW50UmVjdCByID0gZ2Vv
bWV0cnkoKTsKKyAgICB3aW5kb3dzLmFkZChtX3dpbmRvdyx0aGlzKTsKKyAgICBzZXRHZW9tZXRy
eShyKTsKK30KKworV2luZG93R2RrOjpXaW5kb3dHZGsoY29uc3QgV2luZG93RmVhdHVyZXMmIGFy
Z3MpCisgICAgICAgIDogbV93aW5kb3dGZWF0dXJlcyhhcmdzKQoreworICAgIEdka1dpbmRvd0F0
dHIgYXR0cjsKKyAgICBpbnQgZXh0cmFBdHRyczsKKworICAgIGlmIChhcmdzLnhTZXQpIHsKKyAg
ICAgICAgYXR0ci54ID0gKGludClhcmdzLng7CisgICAgICAgIGV4dHJhQXR0cnMgfD1HREtfV0Ff
WDsKKyAgICB9CisgICAgaWYgKGFyZ3MueVNldCkgeworICAgICAgICBhdHRyLnkgPSAoaW50KWFy
Z3MueDsKKyAgICAgICAgZXh0cmFBdHRycyB8PUdES19XQV9ZOworICAgIH0KKyAgICBpZiAoYXJn
cy5oaWRlRnJhbWVEZWNvcmF0aW9ucykgeworICAgICAgICBhdHRyLm92ZXJyaWRlX3JlZGlyZWN0
ID0gdHJ1ZTsKKyAgICAgICAgZXh0cmFBdHRycyB8PUdES19XQV9OT1JFRElSOworICAgIH0KKyAg
ICBhdHRyLndpZHRoID0gYXJncy53aWR0aFNldCA/IHN0YXRpY19jYXN0PGdpbnQ+KGFyZ3Mud2lk
dGgpOjMwMDsKKyAgICBhdHRyLmhlaWdodCA9IGFyZ3MuaGVpZ2h0U2V0ID8gc3RhdGljX2Nhc3Q8
Z2ludD4oYXJncy5oZWlnaHQpOjE1MDsKKyAgICBhdHRyLndpbmRvd190eXBlID0gR0RLX1dJTkRP
V19UT1BMRVZFTDsKKyAgICBhdHRyLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0
ci5ldmVudF9tYXNrID0gKChHREtfQUxMX0VWRU5UU19NQVNLXkdES19QT0lOVEVSX01PVElPTl9I
SU5UX01BU0spKTsKKworICAgIG1fd2luZG93ID0gZ2RrX3dpbmRvd19uZXcobV93aW5kb3csJmF0
dHIsZXh0cmFBdHRycyk7CisgICAgZ2RrX3dpbmRvd19zZXRfYWNjZXB0X2ZvY3VzKG1fd2luZG93
LFRSVUUpOworICAgIGlmIChhcmdzLmZ1bGxzY3JlZW4pIHsKKyAgICAgICAgc2V0RnVsbFNjcmVl
bih0cnVlKTsKKyAgICB9Cit9CisKK1dpbmRvd0dkayogV2luZG93R2RrOjpmaW5kV2luZG93KEdk
a1dpbmRvdyogd2luZG93KQoreworICAgIHJldHVybiB3aW5kb3dzLmdldCh3aW5kb3cpOworfQor
CitXaW5kb3dHZGs6On5XaW5kb3dHZGsoKQoreworICAgIHdpbmRvd3MucmVtb3ZlKG1fd2luZG93
KTsKKyAgICBnZGtfd2luZG93X2Rlc3Ryb3kobV93aW5kb3cpOworICAgIG1fd2luZG93ID0gMDsK
K30KKwordm9pZCBXaW5kb3dHZGs6OnNldEZ1bGxTY3JlZW4oYm9vbCBmdWxsKQoreworICAgIGlm
IChmdWxsKQorICAgICAgICBnZGtfd2luZG93X2Z1bGxzY3JlZW4obV93aW5kb3cpOworICAgIGVs
c2UKKyAgICAgICAgZ2RrX3dpbmRvd191bmZ1bGxzY3JlZW4obV93aW5kb3cpOworfQorCit2b2lk
IFdpbmRvd0dkazo6c2V0TWF4aW1pemVkKGJvb2wgbWF4aW1pemVkKQoreworICAgIGlmIChtYXhp
bWl6ZWQpCisgICAgICAgIGdka193aW5kb3dfbWF4aW1pemUobV93aW5kb3cpOworICAgIGVsc2UK
KyAgICAgICAgZ2RrX3dpbmRvd191bm1heGltaXplKG1fd2luZG93KTsKK30KKworV2luZG93R2Rr
KiBXaW5kb3dHZGs6OmdldFBvaW50ZXJJbmZvKEludFBvaW50JiBwb3NpdGlvbiwgLypwb3NpdGlv
biByZWxhdGl2ZSB0byB0aGlzIHdpbmRvdyovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCYgc2hpZnRLZXksYm9vbCYgY3RybEtleSwgYm9vbCYgYWx0S2V5LCBib29s
JiBtZXRhS2V5KQoreworICAgIEdka01vZGlmaWVyVHlwZSBtYXNrOworICAgIGludCB4LHk7Cisg
ICAgR2RrV2luZG93KiB3aW4gPSBnZGtfd2luZG93X2dldF9wb2ludGVyKG1fd2luZG93LCZ4LCZ5
LCZtYXNrKTsKKyAgICBwb3NpdGlvbi5zZXRYKHgpOworICAgIHBvc2l0aW9uLnNldFkoeSk7Cisg
ICAgaWYgKG1hc2sgJiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgc2hpZnRLZXk9dHJ1ZTsKKyAg
ICBpZiAobWFzayAmIEdES19DT05UUk9MX01BU0spCisgICAgICAgIGN0cmxLZXk9dHJ1ZTsKKyAg
ICBpZiAobWFzayAmIEdES19NT0QxX01BU0spCisgICAgICAgIGFsdEtleSA9IHRydWU7CisgICAg
aWYgKG1hc2sgJiBHREtfTU9EMl9NQVNLKQorICAgICAgICBtZXRhS2V5ID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gZmluZFdpbmRvdyh3aW4pOworfQorCit2b2lkIFdpbmRvd0dkazo6c2V0VGl0bGUoY29u
c3QgU3RyaW5nICZ0aXRsZSkKK3sKKyAgICBnZGtfd2luZG93X3NldF90aXRsZShtX3dpbmRvdyx0
aXRsZS5kZXByZWNhdGVkU3RyaW5nKCkuYXNjaWkoKSk7Cit9CisKK3ZvaWQgV2luZG93R2RrOjpz
ZXRJc0FjdGl2ZShib29sIGZsYWcpCit7CisgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgZ2RrX3dp
bmRvd19zaG93KG1fd2luZG93KTsKKyAgICAgICAgZ2RrX3dpbmRvd19mb2N1cyhtX3dpbmRvdyxH
REtfQ1VSUkVOVF9USU1FKTsKKyAgICB9Cit9CisKKy8qCisgKiBQb3NpdGlvbiBpbiB0aGUgdG9w
IGxldmVsIG9yIHBhaW50aW5nIFBhcmVudAorICogemVybyBmb3IgdG9wIGxldmVsIGZyYW1lcwor
ICovCitJbnRQb2ludCBXaW5kb3dHZGs6OmdldEFic29sdXRlUG9zaXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBJbnRQb2ludCgpOworfQorCitHcmFwaGljc0NvbnRleHRDYWlybyogV2luZG93
R2RrOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQoreworICAgIGNhaXJvX3QqIGNyID0gZ2RrX2Nh
aXJvX2NyZWF0ZSAobV93aW5kb3cpOworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0Q2Fp
cm8oY3IpOworfQorCitHcmFwaGljc0NvbnRleHRDYWlybyogV2luZG93R2RrOjpiZWdpblBhaW50
aW5nKGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9
IHsgcGFpbnRSZWN0LngoKSwgcGFpbnRSZWN0LnkoKSwgcGFpbnRSZWN0LndpZHRoKCksIHBhaW50
UmVjdC5oZWlnaHQoKSB9OworICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVjdCAobV93aW5k
b3csICZyZWN0KTsKKyAgICByZXR1cm4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisKK3Zv
aWQgV2luZG93R2RrOjplbmRQYWludGluZyhHcmFwaGljc0NvbnRleHRDYWlybyogY3R4KQorewor
ICAgIGlmIChjdHgpCisgICAgICAgIGRlbGV0ZSBjdHg7CisgICAgZ2RrX3dpbmRvd19lbmRfcGFp
bnQgKG1fd2luZG93KTsKKyAgICBnZGtfZmx1c2goKTsKK30KKworCit2b2lkIFdpbmRvd0dkazo6
aGFuZGxlR2RrRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQtPnR5
cGUpIHsKKyAgICBjYXNlIEdES19ERUxFVEU6CisgICAgICAgIC8vRklYTUU6IHNhdmUgY2FsbGJh
Y2sgaGVyZQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19FWFBPU0U6IHsKKyAgICAgICAg
R2RrUmVjdGFuZ2xlIGNsaXA7CisgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQt
PmV4cG9zZS5yZWdpb24sICZjbGlwKTsKKyAgICAgICAgSW50UmVjdCBkaXJ0eSA9IEludFJlY3Qo
Y2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8qIGN0eCA9IGJlZ2luUGFpbnRpbmcoZGlydHkpOworICAgICAgICBtX2Zy
YW1lLT52aWV3KCktPnBhaW50KGN0eCxkaXJ0eSk7CisgICAgICAgIGVuZFBhaW50aW5nKGN0eCk7
CisgICAgfQorICAgIGJyZWFrOworICAgIGNhc2UgR0RLX0RSQUdfRU5URVI6CisgICAgY2FzZSBH
REtfRFJBR19MRUFWRToKKyAgICBjYXNlIEdES19EUkFHX01PVElPTjoKKyAgICBjYXNlIEdES19E
UkFHX1NUQVRVUzoKKyAgICBjYXNlIEdES19EUk9QX1NUQVJUOgorICAgIGNhc2UgR0RLX0RST1Bf
RklOSVNIRUQ6IHsKKyAgICAgICAgLy9ib29sIHVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOworICAgICAgICAvL3ZvaWQgY2FuY2VsRHJhZ0Fu
ZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7CisgICAgICAgIC8v
Ym9vbCBwZXJmb3JtRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJv
YXJkKik7CisgICAgICAgIC8vdmlldygpLT5pbnZhbGlkYXRlQ2xpY2soKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgR0RLX0ZPQ1VTX0NIQU5HRTogeworICAgICAgICBtX2ZyYW1l
LT5wcm9jZXNzUGxhdGZvcm1Gb2N1c0NoYW5nZShldmVudC0+Zm9jdXNfY2hhbmdlLmluKTsKKyAg
ICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBHREtfU0NST0xMOiB7CisgICAgICAgIFBsYXRmb3Jt
V2hlZWxFdmVudCB3aGVlbEV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9mcmFtZS0+cHJvY2Vzc1Bs
YXRmb3JtV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICB9CisgICAgYnJlYWs7CisgICAgY2Fz
ZSBHREtfTU9USU9OX05PVElGWTogeworICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VF
dmVudChldmVudCk7CisgICAgICAgIG1fZnJhbWUtPnByb2Nlc3NQbGF0Zm9ybU1vdXNlRXZlbnQo
bW91c2VFdmVudCxFdmVudE5hbWVzOjptb3VzZW1vdmVFdmVudCk7CisgICAgfQorICAgIGJyZWFr
OworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNT
OgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2
ZW50IG1vdXNlRXZlbnQoZXZlbnQpOworICAgICAgICBtX2ZyYW1lLT5wcm9jZXNzUGxhdGZvcm1N
b3VzZUV2ZW50KG1vdXNlRXZlbnQsRXZlbnROYW1lczo6bW91c2Vkb3duRXZlbnQpOworICAgIH0K
KyAgICBicmVhazsKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRTogeworICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudChldmVudCk7CisgICAgICAgIG1fZnJhbWUtPnByb2Nl
c3NQbGF0Zm9ybU1vdXNlRXZlbnQobW91c2VFdmVudCxFdmVudE5hbWVzOjptb3VzZXVwRXZlbnQp
OworICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIEdES19LRVlfUFJFU1M6IHsKKyAgICAgICAg
UGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9mcmFtZS0+
cHJvY2Vzc1BsYXRmb3JtS2V5Ym9hcmRFdmVudChrZXlFdmVudCxFdmVudE5hbWVzOjprZXlkb3du
RXZlbnQpOworICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIEdES19LRVlfUkVMRUFTRTogewor
ICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5RXZlbnQoZXZlbnQpOworICAgICAgICBt
X2ZyYW1lLT5wcm9jZXNzUGxhdGZvcm1LZXlib2FyZEV2ZW50KGtleUV2ZW50LEV2ZW50TmFtZXM6
OmtleXVwRXZlbnQpOworICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIEdES19DT05GSUdVUkU6
IHsKKyAgICAgICAgSW50UmVjdCBuZXdHZW9tKDAsMCxldmVudC0+Y29uZmlndXJlLndpZHRoLGV2
ZW50LT5jb25maWd1cmUuaGVpZ2h0KTsKKyAgICAgICAgbV9mcmFtZS0+dmlldygpLT5zZXRGcmFt
ZUdlb21ldHJ5KG5ld0dlb20pOworICAgIH0KKyAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKKwordm9pZCBXaW5kb3dHZGs6OnNob3coKQoreworICAg
IGdka193aW5kb3dfc2hvdyhtX3dpbmRvdyk7Cit9CisKK3ZvaWQgV2luZG93R2RrOjpoaWRlKCkK
K3sKKyAgICBnZGtfd2luZG93X2hpZGUobV93aW5kb3cpOworfQorCit2b2lkIFdpbmRvd0dkazo6
c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBnZGtfd2luZG93X21vdmVfcmVz
aXplKG1fd2luZG93LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7Cit9CisK
K0ludFJlY3QgV2luZG93R2RrOjpnZW9tZXRyeSgpIGNvbnN0Cit7CisgICAgZ2ludCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aDsKKyAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShtX3dpbmRv
dywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsICZkZXB0aCk7CisgICAgcmV0dXJuIEludFJlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKKwordm9pZCBXaW5kb3dHZGs6OnNldEN1cnNvcihj
b25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBHZGtDdXJzb3IqIHBjdXIgPSBjdXJzb3IuaW1w
bCgpOworICAgIGlmICghcGN1cikKKyAgICAgICAgcmV0dXJuOworICAgIGdka193aW5kb3dfc2V0
X2N1cnNvcihtX3dpbmRvdywgcGN1cik7Cit9CisKKworSW50UG9pbnQgV2luZG93R2RrOjpwb3Np
dGlvbigpIGNvbnN0Cit7CisgICAgZ2ludCB4LCB5OworICAgIGdka193aW5kb3dfZ2V0X29yaWdp
bihtX3dpbmRvdywgJngsICZ5KTsKKyAgICByZXR1cm4gSW50UG9pbnQoeCx5KTsKK30KKworSW50
U2l6ZSBXaW5kb3dHZGs6OnNpemUoKSBjb25zdAoreworICAgIGdpbnQgdyxoOworICAgIGdka193
aW5kb3dfZ2V0X3NpemUobV93aW5kb3csICZ3LCAmaCk7CisgICAgcmV0dXJuIEludFNpemUodyxo
KTsKK30KKwordm9pZCBXaW5kb3dHZGs6OnJlcGFpbnQoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVj
dCwgYm9vbCBub3cpCit7CisgICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7dXBkYXRlUmVjdC54KCks
IHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCkg
fTsKKyAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdChtX3dpbmRvdywgJnJlY3QsIHRydWUp
OworCisgICAgaWYgKG5vdykgeworICAgICAgICBnZGtfd2luZG93X3Byb2Nlc3NfdXBkYXRlcyht
X3dpbmRvdywgdHJ1ZSk7CisgICAgfQorICAgIGdka19mbHVzaCgpOworfQorCisKK30KKy8vIHZp
bTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZS5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw5IEBACiBw
dWJsaWM6CiAgICAgSW1hZ2UoKTsKICAgICBJbWFnZShJbWFnZUFuaW1hdGlvbk9ic2VydmVyKiBv
YnNlcnZlciwgYm9vbCBpc1BERiA9IGZhbHNlKTsKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICBJ
bWFnZShJbnRTaXplIHNpemUpOworI2VuZGlmCiAgICAgfkltYWdlKCk7CiAgICAgCiAgICAgc3Rh
dGljIEltYWdlKiBsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9XaWRnZXQuaAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgSFdORF9f
KiBIV05EOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHREspCi10eXBlZGVmIHN0cnVjdCBfR2Rr
RHJhd2FibGUgR2RrRHJhd2FibGU7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFFUKQogY2xhc3Mg
UVdpZGdldDsKICNlbmRpZgpAQCAtNjAsOCArNTYsMjAgQEAKICAgICBjbGFzcyBTY3JvbGxWaWV3
OwogICAgIGNsYXNzIFdpZGdldENsaWVudDsKICAgICBjbGFzcyBXaWRnZXRQcml2YXRlOworI2lm
IFBMQVRGT1JNKEdESykKKyAgICBjbGFzcyBJbnRlcm5hbEZyYW1lR2RrOworICAgIGNsYXNzIEtV
Ukw7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBTdHJp
bmc7CisgICAgY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OworICAgIGNsYXNzIEZyYW1lVmll
dzsKKyNlbmRpZgogCiAgICAgY2xhc3MgV2lkZ2V0IHsKKyNpZiBQTEFURk9STShHREspCisgICAg
ICAgIGZyaWVuZCBjbGFzcyBGcmFtZUdkazsKKyNlbmRpZgogICAgIHB1YmxpYzoKIAogICAgICAg
ICBlbnVtIEZvY3VzUG9saWN5IHsKQEAgLTE3NCwxNSArMTgyLDIyIEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKEdESykKLSAgICAgICAgV2lkZ2V0KEdka0RyYXdhYmxlKiBkcmF3YWJsZSk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3YWJsZShHZGtEcmF3YWJsZSogZHJhd2FibGUpOwot
ICAgICAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUoKSBjb25zdDsKKyAgICAgIFdpZGdldFByaXZh
dGUqIHByaXZhdGVEYXRhKCkgY29uc3R7cmV0dXJuIGRhdGE7fQorICAgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcoKSBjb25zdDsKKyAgICAgIHZvaWQgc2V0RnJhbWVWaWV3KEZyYW1lVmlldyopOwor
ICAgICAgdm9pZCBzZXRQYXJlbnQoV2lkZ2V0Kik7CisgICAgICBXaWRnZXQqIHBhcmVudCgpIGNv
bnN0OworICAgICAgdm9pZCBzZXRPd25lcihXaWRnZXQqKTsKKyAgICAgIFdpZGdldCogb3duZXIo
KSBjb25zdDsKKyAgICAgIEludFBvaW50IGxvY2F0aW9uSW5XaW5kb3coKSBjb25zdDsKKyAgICAg
IHZvaWQgcmVwYWludChib29sIG5vdyk7CisgICAgICB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCwgYm9vbCBub3cpOworICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWJv
YXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBldnQpe307CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRV2lkZ2V0KiBwYXJlbnRXaWRnZXQoKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudFdpZGdldChRV2lkZ2V0Kik7Ci0KICAgICAg
ICAgUVdpZGdldCogcXdpZGdldCgpOwogICAgICAgICB2b2lkIHNldFFXaWRnZXQoUVdpZGdldCop
OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTczOTkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUs
MTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udERhdGE6OkZvbnREYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIGYpCi0gICAgOiBtX2ZvbnQoZikKKyAgICA6IG1fYXNjZW50KDApCisg
ICAgLCBtX2Rlc2NlbnQoMCkKKyAgICAsIG1fbGluZVNwYWNpbmcoMCkKKyAgICAsIG1fbGluZUdh
cCgwKQorICAgICwgbV94SGVpZ2h0KDApCisgICAgLCBtX2ZvbnQoZikKICAgICAsIG1fdHJlYXRB
c0ZpeGVkUGl0Y2goZmFsc2UpCisgICAgLCBtX3NwYWNlR2x5cGgoMCkKKyAgICAsIG1fc3BhY2VX
aWR0aCgwKQorICAgICwgbV9hZGp1c3RlZFNwYWNlV2lkdGgoMCkKICAgICAsIG1fc21hbGxDYXBz
Rm9udERhdGEoMCkKIHsgICAgCiAgICAgcGxhdGZvcm1Jbml0KCk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9JbWFn
ZVNvdXJjZS5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vSW1hZ2VTb3Vy
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTkgKzI5LDIwIEBACiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisKICNpZiBQTEFURk9STShD
RykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4K
ICNlbGlmIFBMQVRGT1JNKFFUKQogY2xhc3MgUUltYWdlOwogI2VsaWYgUExBVEZPUk0oQ0FJUk8p
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgogc3RydWN0IF9jYWlyb19zdXJmYWNlOwogdHlwZWRlZiBz
dHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBJbnRTaXplOwogCi1jbGFzcyBJbnRTaXplOwotCiAjaWYg
UExBVEZPUk0oQ0cpCiB0eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQ
dHI7CiB0eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7CkBAIC01MSwxMSArNTIsMTYg
QEAKIHR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKIHR5cGVkZWYg
Y29uc3QgVmVjdG9yPGNoYXI+KiBOYXRpdmVCeXRlUHRyOwogdHlwZWRlZiBRSW1hZ2UqIE5hdGl2
ZUltYWdlUHRyOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCitjbGFzcyBJbWFnZURlY29kZXI7Cit0
eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7Cit0eXBlZGVmIGNvbnN0
IFZlY3RvcjxjaGFyPiogTmF0aXZlQnl0ZVB0cjsKK3R5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBO
YXRpdmVJbWFnZVB0cjsKICNlbHNlCiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVmIEltYWdl
RGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiB0eXBlZGVmIGNvbnN0IFZlY3RvcjxjaGFy
PiogTmF0aXZlQnl0ZVB0cjsKLXR5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBOYXRpdmVJbWFnZVB0
cjsKK3R5cGVkZWYgdm9pZCogTmF0aXZlSW1hZ2VQdHI7CiAjZW5kaWYKIAogY29uc3QgaW50IGNB
bmltYXRpb25Mb29wT25jZSA9IC0xOwpAQCAtNzIsNiArNzgsOSBAQAogCiAgICAgYm9vbCBpc1Np
emVBdmFpbGFibGUoKTsKICAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyNpZiBQTEFURk9STShD
QUlSTykKKyAgICB2b2lkIHNldFNpemUoSW50U2l6ZSBzaXplKXsgbV9zaXplID0gc2l6ZTsgfQor
I2VuZGlmCiAgICAgCiAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpOwogICAgIApAQCAtODIsNiAr
OTEsOSBAQAogCiBwcml2YXRlOgogICAgIE5hdGl2ZUltYWdlU291cmNlUHRyIG1fZGVjb2RlcjsK
KyNpZiBQTEFURk9STShDQUlSTykKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyNlbmRpZgogfTsKIAog
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL0FmZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiAxNzM5OSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vQWZmaW5lVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDggQEAKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFNYXRyaXg+CisjZWxpZiBQ
TEFURk9STShHREspCisjaW5jbHVkZSA8Y2Fpcm8uaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00Nyw2ICs0OSw4IEBACiAgICAgQWZmaW5lVHJhbnNmb3JtKENHQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybSk7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBBZmZpbmVUcmFuc2Zv
cm0oY29uc3QgUU1hdHJpeCAmbWF0cml4KTsKKyNlbGlmIFBMQVRGT1JNKEdESykKKyAgICBBZmZp
bmVUcmFuc2Zvcm0oY29uc3QgY2Fpcm9fbWF0cml4X3QgJm1hdHJpeCk7CiAjZW5kaWYKIAogICAg
IHZvaWQgc2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBk
b3VibGUgdHgsIGRvdWJsZSB0eSk7CkBAIC03OCw2ICs4Miw4IEBACiAgICAgb3BlcmF0b3IgQ0dB
ZmZpbmVUcmFuc2Zvcm0oKSBjb25zdDsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIG9wZXJhdG9y
IFFNYXRyaXgoKSBjb25zdDsKKyNlbGlmIFBMQVRGT1JNKEdESykKKyAgICBvcGVyYXRvciBjYWly
b19tYXRyaXhfdCgpIGNvbnN0OwogI2VuZGlmCiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7CkBAIC04OSw2ICs5NSw4IEBACiAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gbV90cmFuc2Zvcm07CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBRTWF0cml4IG1f
dHJhbnNmb3JtOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgY2Fpcm9fbWF0cml4X3QgbV90
cmFuc2Zvcm07CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lv
biAxNzM5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCwxNSBAQAogdHlwZWRlZiBzdHJ1Y3QgSFJHTl9fKiBIUkdOOwogI2VuZGlm
CiAKKwogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgICAgICAKKyNpZiBQTEFURk9STShHREspCisg
ICAgY2xhc3MgU2Nyb2xsQmFyOworICAgIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKKyAg
ICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisjZW5kaWYKICAg
ICBjbGFzcyBGbG9hdFJlY3Q7CiAgICAgY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogICAgIGNs
YXNzIFBsYXRmb3JtU2Nyb2xsYmFyOwpAQCAtMTMwLDE1ICsxMzgsMTMgQEAKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oR0RLKQotICAgICAgICB2b2lkIHVwZGF0ZVZpZXcoY29uc3QgSW50UmVjdCYs
IGJvb2wgbm93ID0gZmFsc2UpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd2FibGUoR2Rr
RHJhd2FibGUqIGRyYXdhYmxlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lR2VvbWV0
cnkoY29uc3QgSW50UmVjdCYpOwogICAgICAgICBTY3JvbGxWaWV3KCk7CiAgICAgICAgIH5TY3Jv
bGxWaWV3KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgZXZ0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZy
YW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOwotICAgICAgICBJbnRTaXplIG1heGltdW1TY3JvbGwo
KSBjb25zdDsKLSAgICAgICAgaW50IHVwZGF0ZVNjcm9sbEluZm8oc2hvcnQgdHlwZSwgaW50IGN1
cnJlbnQsIGludCBtYXgsIGludCBwYWdlU2l6ZSk7CiAgICAgICAgIGNsYXNzIFNjcm9sbFZpZXdQ
cml2YXRlOwogICAgICAgICBTY3JvbGxWaWV3UHJpdmF0ZSogbV9kYXRhOwogI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L1BhdGguaAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BhdGguaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTUgKzI3LDIxIEBACiAjaWZuZGVmIFBhdGhfaAogI2RlZmluZSBQ
YXRoX2gKIAorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKwogI2lmIFBMQVRGT1JNKENHKQog
dHlwZWRlZiBzdHJ1Y3QgQ0dQYXRoIFBsYXRmb3JtUGF0aDsKICNlbGlmIFBMQVRGT1JNKFFUKQog
Y2xhc3MgUVBhaW50ZXJQYXRoOwogdHlwZWRlZiBRUGFpbnRlclBhdGggUGxhdGZvcm1QYXRoOwor
I2VsaWYgUExBVEZPUk0oQ0FJUk8pCit0eXBlZGVmIHN0cnVjdCBjYWlyb19wYXRoIGNhaXJvX3Bh
dGhfdDsKK3R5cGVkZWYgY2Fpcm9fcGF0aF90IFBsYXRmb3JtUGF0aDsKICNlbHNlCiB0eXBlZGVm
IHZvaWQgUGxhdGZvcm1QYXRoOwogI2VuZGlmCiAKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpAQCAtNTYsNiArNjIsOSBAQAogICAgICAgICBQYXRo
RWxlbWVudEFkZEN1cnZlVG9Qb2ludCwKICAgICAgICAgUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGgK
ICAgICB9OworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dENh
aXJvOworI2VuZGlmCiAKICAgICBzdHJ1Y3QgUGF0aEVsZW1lbnQgewogICAgICAgICBQYXRoRWxl
bWVudFR5cGUgdHlwZTsKQEAgLTc0LDcgKzgzLDE0IEBACiAKICAgICAgICAgYm9vbCBjb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiwgV2luZFJ1bGUgcnVsZSA9IFJVTEVfTk9OWkVSTykgY29uc3Q7
CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKKyNpZiBQTEFURk9STShD
QUlSTykKKyAgICAgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgbGluZV93aWR0aCwKKyAgICAgICAgICAgICAgICBMaW5lQ2FwIGNhcCxMaW5lSm9p
biBqb2luLCBmbG9hdCBtaXRlckxpbWl0ID0gMTAuMCkgY29uc3Q7CiAKKyAgICAgICAgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nUmVjdChmbG9hdCBsaW5lV2lkdGgsCisgICAgICAgICAgICAgICAg
TGluZUNhcCxMaW5lSm9pbiwgZmxvYXQgbWl0ZXJMaW1pdCA9IDEwLjApIGNvbnN0OworI2VuZGlm
CisKICAgICAgICAgdm9pZCBjbGVhcigpOwogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
IApAQCAtOTYsNyArMTEyLDExIEBACiAKICAgICAgICAgU3RyaW5nIGRlYnVnU3RyaW5nKCkgY29u
c3Q7CiAKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICAgICAgUGxhdGZvcm1QYXRoKiBwbGF0Zm9y
bVBhdGgoKSBjb25zdDsKKyNlbHNlCiAgICAgICAgIFBsYXRmb3JtUGF0aCogcGxhdGZvcm1QYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisjZW5kaWYKIAogICAgICAgICBzdGF0aWMgUGF0
aCBjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6
ZSYgcm91bmRpbmdSYWRpaSk7CiAgICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZVJlY3RhbmdsZShj
b25zdCBGbG9hdFJlY3QmKTsKQEAgLTEwOCwxMCArMTI4LDE1IEBACiAgICAgICAgIHZvaWQgdHJh
bnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCiAgICAgcHJpdmF0ZToKKyNpZiBQTEFU
Rk9STShDQUlSTykKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIG1fZ2M7CisjZWxzZQog
ICAgICAgICBQbGF0Zm9ybVBhdGgqIG1fcGF0aDsKKyNlbmRpZgogICAgICAgICBXaW5kUnVsZSBt
X3J1bGU7CiAgICAgfTsKIAogfQorI2VuZGlmCisvLyB2aW06IHRzPTQgc3c9NCBldAogCi0jZW5k
aWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAkocmV2aXNpb24gMTcz
OTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNiArMTA1LDcgQEAKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdESykgCiAgICAg
ICAgIFBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudCopOworICAgICAgICB2b2lkIHNldFBvc2l0
aW9uKGNvbnN0IEludFBvaW50IHBvcykgeyBtX3Bvc2l0aW9uID0gcG9zOyB9CiAjZW5kaWYKICNp
ZiBQTEFURk9STShRVCkKICAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KFFNb3VzZUV2ZW50Kiwg
aW50IGNsaWNrQ291bnQpOwpJbmRleDogV2ViQ29yZS9Qcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsu
YmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvUHJvamVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJrbAko
cmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL1Byb2plY3RzL2dkay93ZWJjb3JlLWdkay5ia2wJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzEsNTQgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgPz4K
LTwhLS0gZ2VuZXJhdGUgR251TWFrZWZpbGUgd2l0aAotCWJha2VmaWxlIC1mIGdudSBndGt3ZWJj
b3JlLmJrbAotCWNvbnNpZGVyIGZvcmNpbmcgaW5jbHVkZXMgYWdpYW4KLQlDWFggPSBnKysgIC1J
LiBpbmNsdWRlIGNvbmZpZy5oCi0tLT4KKzxtYWtlZmlsZT4KIAorICAgICA8c2V0IHZhcj0iU1JD
RElSIiBhcHBlbmQ9IjAiPi4uLy4uPC9zZXQ+CiAKLTxtYWtlZmlsZT4KKwk8b3B0aW9uIG5hbWU9
IkVOQ09ESU5HU19GSUxFIj4KKwkgICAgIDxkZWZhdWx0LXZhbHVlPnBsYXRmb3JtL2dkay9nZGst
ZW5jb2RpbmdzLnR4dDwvZGVmYXVsdC12YWx1ZT4KKwkgICAgIDx2YWx1ZXM+cGxhdGZvcm0vZ2Rr
L2dkay1lbmNvZGluZ3MudHh0PC92YWx1ZXM+CisJPC9vcHRpb24+CiAKLQkJPG9wdGlvbiBuYW1l
PSJFTkNPRElOR1NfRklMRSI+Ci0JCTxkZWZhdWx0LXZhbHVlPnBsYXRmb3JtL2dkay9nZGstZW5j
b2RpbmdzLnR4dDwvZGVmYXVsdC12YWx1ZT4KLQkJPHZhbHVlcz5wbGF0Zm9ybS9nZGsvZ2RrLWVu
Y29kaW5ncy50eHQ8L3ZhbHVlcz4KLQkJPC9vcHRpb24+CisJPG9wdGlvbiBuYW1lPSJGRUFUVVJF
X0RFRklORVMiIG5ldmVyX2VtcHR5PSIxIiA+CisJPCEtLSBTVkdfU1VQUE9SVCBYUEFUSF9TVVBQ
T1JULS0+CisJPGRlZmF1bHQtdmFsdWU+WFBBVEhfU1VQUE9SVDwvZGVmYXVsdC12YWx1ZT4KKwk8
dmFsdWVzPlhQQVRIX1NVUFBPUlQsU1ZHX1NVUFBPUlQ8L3ZhbHVlcz4KKwk8L29wdGlvbj4KKwk8
c2V0IHZhcj0iRkVBVFVSRV9ERUZJTkVTIj5YUEFUSF9TVVBQT1JULFNWR19TVVBQT1JUPC9zZXQ+
CisJPHNldCB2YXI9IkVOQ09ESU5HU19GSUxFIj4kKFNSQ0RJUikvcGxhdGZvcm0vZ2RrL2dkay1l
bmNvZGluZ3MudHh0PC9zZXQ+CiAKLQkJPG9wdGlvbiBuYW1lPSJGRUFUVVJFX0RFRklORVMiIG5l
dmVyX2VtcHR5PSIxIiA+Ci0JCTwhLS0gU1ZHX1NVUFBPUlQgWFBBVEhfU1VQUE9SVC0tPgotCQk8
ZGVmYXVsdC12YWx1ZT5YUEFUSF9TVVBQT1JUPC9kZWZhdWx0LXZhbHVlPgotCQk8dmFsdWVzPlhQ
QVRIX1NVUFBPUlQsU1ZHX1NVUFBPUlQ8L3ZhbHVlcz4KLQkJPC9vcHRpb24+Ci0JCTxzZXQgdmFy
PSJGRUFUVVJFX0RFRklORVMiPlhQQVRIX1NVUFBPUlQ8L3NldD4KLQkJPHNldCB2YXI9IkVOQ09E
SU5HU19GSUxFIj4kKFNSQ0RJUikvcGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3MudHh0PC9zZXQ+
Ci0KIAk8aW5jbHVkZSBmaWxlPSIuLi8uLi93ZWJjb3JlLWJhc2UuYmtsIi8+CiAKICAgIDxhY3Rp
b24gaWQ9Ii5EZXJpdmVkU291cmNlcyI+Ci0gICA8IS0tIFRoaXMgY2F1c2VzIGEgZnVsbCByZWJ1
aWxkIGV2ZXJ5dGltZQorICAgICA8IS0tIAogICAgICA8aXMtcGhvbnkvPgotCSAtLT4KLSAgICAg
ICAgPGNvbW1hbmQ+YmFzaCAtYyAiY2QgLi4vLi47IC4vbW92ZS1qcy1oZWFkZXJzLnNoIjwvY29t
bWFuZD4KKyAgICAgICAgICBwcm90ZWN0IHdpdGggYSBpbnRlcm5hbCB0b3VjaGVkIGZpbGUgb3Ro
ZXJ3aXNlIAorICAgICAgICAgIG1vdmUtanMtaGVhZGVycyBjYXVzZXMgcmVidWlsZAorICAgICAg
ICAgIGlzLXBob255IGlzIG5vdCB3b3JraW5nCisgICAgICAgICAgaWYgeW91IGNoYW5nZSBhIGlk
bCBmaWxlIHlvdSB3aWxsIGhhdmUgdG8gbWFudWFsbHkKKyAgICAgICAgICBydW4gdGhpcyBydWxl
IGFmdGVyIGRlbGV0aW5nIC5EZXJpdmVkU291cmNlcworICAgICAgLS0+CiAgICAgICAgIDxjb21t
YW5kPgotCQliYXNoIC1jICJjZCAuLi8uLjtcCisJCWJhc2ggLWMgIlwKKyAgICAgICAgICBjZCAu
Li8uLjtcCisgICAgICAgICAgaWYgWyAhIC1lIFByb2plY3RzL2dkay8uRGVyaXZlZFNvdXJjZXMg
XSA7XAorICAgICAgICAgIHRoZW4gXAorICAgICAgICAgIC4vbW92ZS1qcy1oZWFkZXJzLnNoOyBc
CisgICAgICAgICAgdG91Y2ggUHJvamVjdHMvZ2RrLy5EZXJpdmVkU291cmNlcztcCisgICAgICAg
ICAgZmk7IFwKKyAgICAgICAgICBleHBvcnQgUExBVEZPUk09R0RLXAogCQlleHBvcnQgRkVBVFVS
RV9ERUZJTkVTPSQoRkVBVFVSRV9ERUZJTkVTKTtcCi0JCS4vbWFrZS1nZW5lcmF0ZWQtc291cmNl
cy5zaCAkKEVOQ09ESU5HU19GSUxFKSIKKwkJLi9tYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoICQo
RU5DT0RJTkdTX0ZJTEUpOyIKIAkJPC9jb21tYW5kPgotICAgICAgICA8Y29tbWFuZD5iYXNoIC1j
ICJ0b3VjaCAuRGVyaXZlZFNvdXJjZXMiPC9jb21tYW5kPgogICAgPC9hY3Rpb24+CiAKLSAgICA8
ZGxsIGlkPSJ3ZWJjb3JlLWdkayIgdGVtcGxhdGU9IndlYmNvcmVfYmFzZSxmcmVldHlwZSxndGss
Y3VybCxjYWlybyxzcWxpdGUzIj4gICAgICAgIAorICAgIDxkbGwgaWQ9IndlYmNvcmUtZ2RrIiB0
ZW1wbGF0ZT0id2ViY29yZV9iYXNlLGpzY29yZSxmcmVldHlwZSxnZGssY3VybCxjYWlybyxzcWxp
dGUzIj4gICAgICAgIAogCTwhLS0gRklYTUU6IGNyZWF0ZSBhIGRlYnVnIG9wdGlvbiBhbmQgc2V0
IHRoZXNlIGFjY29yZGluZ2x5IC0tPgogCTwhLS0gY2hlY2sgZm9yIHVuZGVmaW5lZCBzeW1ib2xz
IGZvciBkZWJ1Z2dpbmcgcmVhc29ucyAtLT4KIAk8IS0tCiAJPGxkZmxhZ3M+Vyx1bmRlZmluZWQ8
L2xkZmxhZ3M+CiAJLS0+CiAKLQkJPHByZS1idWlsZC10YXJnZXQ+LkRlcml2ZWRTb3VyY2VzPC9w
cmUtYnVpbGQtdGFyZ2V0PgorCSAgIDxwcmUtYnVpbGQtdGFyZ2V0Pi5EZXJpdmVkU291cmNlczwv
cHJlLWJ1aWxkLXRhcmdldD4KICAgICAgICAgPGRpcm5hbWU+LjwvZGlybmFtZT4KICAgICAgICAg
PHBpYz5vbjwvcGljPgogICAgICAgICA8dGhyZWFkaW5nPm11bHRpPC90aHJlYWRpbmc+CkBAIC01
MSw0NCArNTYsNDggQEAKICAgICAgICAgPGN4eC1ydHRpPm9mZjwvY3h4LXJ0dGk+CiAgICAgICAg
IDxjeHgtZXhjZXB0aW9ucz5vZmY8L2N4eC1leGNlcHRpb25zPgogICAgICAgICA8ZGVidWctaW5m
bz5vbjwvZGVidWctaW5mbz4KKyAgICAJPGRlZmluZT5YUEFUSF9TVVBQT1JUPC9kZWZpbmU+Cisg
ICAgCTxkZWZpbmU+U1ZHX1NVUFBPUlQ8L2RlZmluZT4KKyAgICAJPGRlZmluZT5CVUlMRElOR19H
REtfXzwvZGVmaW5lPgorICAgIAk8ZGVmaW5lPkJVSUxESU5HX0NBSVJPX188L2RlZmluZT4KICAg
ICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2dkazwvaW5jbHVkZT4KICAgICAgICAg
PGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL25ldHdvcmsvZ2RrPC9pbmNsdWRlPgotICAgIAk8
ZGVmaW5lPkJVSUxESU5HX0dES19fPC9kZWZpbmU+Ci0gICAgCTxkZWZpbmU+QlVJTERJTkdfQ0FJ
Uk9fXzwvZGVmaW5lPgotCQk8aW5jbHVkZT5wbGF0Zm9ybS9nZGs8L2luY2x1ZGU+Ci0JCTxpbmNs
dWRlPnBsYXRmb3JtL2NhaXJvPC9pbmNsdWRlPgorCQk8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZv
cm0vZ2RrPC9pbmNsdWRlPgorCQk8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vY2Fpcm88L2lu
Y2x1ZGU+CiAJICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2RldmljZS9jYWlybzwvaW5j
bHVkZT4KLSAgICAJPGRlZmluZT5YUEFUSF9TVVBQT1JUPC9kZWZpbmU+Ci0gICAgICAgIDwhLS0g
Z2RrIGJ1aWxkIGJyb2tlbiB3aXRoIHdpdGhvdXQgTkRFQlVHIGRlZmluZWQgLS0+Ci0gICAgCTxk
ZWZpbmU+TkRFQlVHPC9kZWZpbmU+Ci0gCisKICAgICAgICAgPHNvdXJjZXM+CQkKLSAgICAgICAg
ICBwbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKLSAgICAgICAgICBwbGF0
Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2NhaXJvL0ltYWdl
U291cmNlQ2Fpcm8uY3BwCisgICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VM
b2FkZXJNYW5hZ2VyLmNwcAorICAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNl
TG9hZGVyQ3VybC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2dkay9Mb2FkZXJGdW5j
dGlvbnNDdXJsLmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9Ccm93c2VyRXh0ZW5zaW9uR2Rr
LmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3BwCiAgICAgICAgICAg
cGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udENh
Y2hlR2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAKICAgICAg
ICAgICBwbGF0Zm9ybS9nZGsvRm9udEdkay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9u
dFBsYXRmb3JtRGF0YUdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvRmlsZUNob29zZXJH
ZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAogICAgICAgICAgIHBs
YXRmb3JtL2dkay9HbHlwaE1hcEdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvSWNvbkdk
ay5jcHAKICAgICAgICAgICBwbGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3BwCiAgICAgICAgICAgcGxh
dGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9Nb3VzZUV2
ZW50R2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9QYWdlR2RrLmNwcAotICAgICAgICAg
IHBsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAKICAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ2Rr
L1JlbmRlclBvcHVwTWVudUdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvUG9wdXBNZW51
R2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9TY3JlZW5HZGsuY3BwCisgICAgICAgICAg
cGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsYmFyR2RrLmNwcAogICAgICAgICAgIHBsYXRmb3Jt
L2dkay9TY3JvbGxWaWV3R2RrLmNwcAogICAgICAgICAgIHBsYXRmb3JtL2dkay9TaGFyZWRUaW1l
ckxpbnV4LmNwcAotICAgICAgICAgIHBsYXRmb3JtL2dkay9TeXN0ZW1UaW1lTGludXguY3BwCiAg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKLSAgICAgICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCiAgICAgICAgICAgcGxh
dGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCiAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1dpZGdl
dEdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAKKyAg
ICAgICAgICBwbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAorICAgICAgICAgICQoV0VCQ09SRV9C
QVNFX1NPVVJDRVMpCisgICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfQ0FJUk9fQklORElOR1Mp
CiAJCTwvc291cmNlcz4KIAogCQk8Y2xlYW4tZmlsZXM+CkBAIC05OSw1ICsxMDgsMzggQEAKIAkJ
PC9jbGVhbi1maWxlcz4KIAkJPCEtLUhBQ0sgYmxvY2sgZGVwZW5kZW5jaWVzIG9uIHRoZSBwaG9u
eSB0YXJnZXQgLS0+CiAgICAgPC9kbGw+CisKKyAgICA8ZGxsIGlkPSJ3ZWJjb3JlLXN2ZyIgdGVt
cGxhdGU9IndlYmNvcmVfYmFzZSxmcmVldHlwZSxnZGssY3VybCxjYWlybyxzcWxpdGUzIj4gICAg
ICAgIAorCTwhLS0KKwk8bGRmbGFncz5XLHVuZGVmaW5lZDwvbGRmbGFncz4KKwktLT4KKyAgICAg
PGRpcm5hbWU+LjwvZGlybmFtZT4KKyAgICAgPHBpYz5vbjwvcGljPgorICAgICA8dGhyZWFkaW5n
Pm11bHRpPC90aHJlYWRpbmc+CisgICAgIDx3YXJuaW5ncz5ubzwvd2FybmluZ3M+CisJIDxjeHhm
bGFncz4tdzwvY3h4ZmxhZ3M+CisgICAgIDxjeHgtcnR0aT5vZmY8L2N4eC1ydHRpPgorICAgICA8
Y3h4LWV4Y2VwdGlvbnM+b2ZmPC9jeHgtZXhjZXB0aW9ucz4KKworICAgICA8aW5jbHVkZT4kKFNS
Q0RJUikvLi4vSmF2YVNjcmlwdENvcmU8L2luY2x1ZGU+CisgICAgIDxpbmNsdWRlPiQoU1JDRElS
KS9wbGF0Zm9ybS9nZGs8L2luY2x1ZGU+CisgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9y
bS9jYWlybzwvaW5jbHVkZT4KKwk8Y2ZsYWdzPi13PC9jZmxhZ3M+CisgICAgCTxkZWZpbmU+QlVJ
TERJTkdfR0RLX188L2RlZmluZT4KKyAgICAJPGRlZmluZT5CVUlMRElOR19DQUlST19fPC9kZWZp
bmU+CisJPGluY2x1ZGU+cGxhdGZvcm0vZ2RrPC9pbmNsdWRlPgorCTxpbmNsdWRlPnBsYXRmb3Jt
L2NhaXJvPC9pbmNsdWRlPgorCTxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2RldmljZS9jYWly
bzwvaW5jbHVkZT4KKyAgICAJPGRlZmluZT5YUEFUSF9TVVBQT1JUPC9kZWZpbmU+CisgICAgCTxk
ZWZpbmU+U1ZHX1NVUFBPUlQ8L2RlZmluZT4KKyAgICAgPHNvdXJjZXM+CQkKKyAgICAgICAga2Nh
bnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmNwcAorICAgICAgICAkKFdF
QkNPUkVfU09VUkNFU19DVVJMKQorCQkkKFdFQkNPUkVfU09VUkNFU19LQ0FOVkFTKQorCQkkKFdF
QkNPUkVfU09VUkNFU19LU1ZHMikKKwkgCSQoV0VCQ09SRV9TT1VSQ0VTX1NWR19ERVJJVkVEU09V
UkNFUykKKyAgIAk8L3NvdXJjZXM+CisgICA8L2RsbD4KKwogPC9tYWtlZmlsZT4KIApJbmRleDog
V2ViQ29yZS9Qcm9qZWN0cy93eC93ZWJjb3JlLXd4LmJrbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1Byb2plY3RzL3d4L3dlYmNvcmUtd3guYmtsCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUv
UHJvamVjdHMvd3gvd2ViY29yZS13eC5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCwx
MyBAQAogICAgICAgICA8Y29tbWFuZD5jZCAkKFNSQ0RJUik7YmFzaCBtb3ZlLWpzLWhlYWRlcnMu
c2g7IGJhc2ggbWFrZS1nZW5lcmF0ZWQtc291cmNlcy5zaCBwbGF0Zm9ybS93eC93eC1lbmNvZGlu
Z3MudHh0O2NkIFByb2plY3RzL3d4PC9jb21tYW5kPgogICAgIDwvYWN0aW9uPgogICAgICAgCi0g
ICAgPGxpYiBpZD0id2ViY29yZS13eCIgdGVtcGxhdGU9IndlYmNvcmVfYmFzZSI+CisgICAgPGxp
YiBpZD0id2ViY29yZS13eCIgdGVtcGxhdGU9IndlYmNvcmVfYmFzZSxqc2NvcmUiPgogICAgICAg
ICA8cHJlLWJ1aWxkLXRhcmdldD5EZXJpdmVkU291cmNlczwvcHJlLWJ1aWxkLXRhcmdldD4KICAg
ICAgICAgPGRpcm5hbWU+LjwvZGlybmFtZT4KICAgICAgICAgPCEtLSBwbGF0Zm9ybS93eCBzb3Vy
Y2VzIGdvIGhlcmUgd2hlbiB0aGV5IGV4aXN0ISAtLT4KKyAgICAgICAgPHNvdXJjZXM+CisgICAg
ICAgICAgJChXRUJDT1JFX0JBU0VfU09VUkNFUykKKyAgICAgICAgPC9zb3VyY2VzPgogICAgIDwv
bGliPgogCiA8L21ha2VmaWxlPgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250
YWluZXIuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQAogICAgICAg
ICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KHgsIHksIHcsIGgpOwogICAgIH0gZWxzZSBpZiAoc3Zn
ZWxlbS0+aGFzVGFnTmFtZShTVkdOYW1lczo6bWFya2VyVGFnKSkgewogICAgICAgICBTVkdNYXJr
ZXJFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4oZWxlbWVudCgp
KTsKLSAgICAgICAgICAgIGRvdWJsZSB3ID0gc3ZnLT5tYXJrZXJXaWR0aCgpLT52YWx1ZSgpOwor
ICAgICAgICBkb3VibGUgdyA9IHN2Zy0+bWFya2VyV2lkdGgoKS0+dmFsdWUoKTsKICAgICAgICAg
ZG91YmxlIGggPSBzdmctPm1hcmtlckhlaWdodCgpLT52YWx1ZSgpOwogICAgICAgICBtX3ZpZXdw
b3J0ID0gRmxvYXRSZWN0KDAsIDAsIHcsIGgpOwogICAgIH0KQEAgLTI4Myw2ICsyODMsOCBAQAog
dm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJl
Y3QmIHIsIGJvb2wgZikKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbG9jYWxU
cmFuc2Zvcm0oKTsKKwl0cmFuc2Zvcm0udHJhbnNsYXRlKG1fdmlld3BvcnQueCgpLG1fdmlld3Bv
cnQueSgpKTsKKwkKICAgICByID0gdHJhbnNmb3JtLm1hcFJlY3Qocik7CiAgICAgCiAgICAgLy8g
RklYTUU6IGNvbnNpZGVyIGZpbHRlcgpAQCAtMzgzLDggKzM4NSw0MSBAQAogICAgIHJldHVybiB0
ZW1wOwogfQogCitpbnQgIFJlbmRlclNWR0NvbnRhaW5lcjo6eFBvcygpIGNvbnN0Cit7CisgICAg
QWZmaW5lVHJhbnNmb3JtIHR4ID12aWV3cG9ydFRyYW5zZm9ybSgpICogbG9jYWxUcmFuc2Zvcm0o
KTsKKyAgICByZXR1cm4gKGludCl0eC5keCgpOwogfQogCitpbnQgIFJlbmRlclNWR0NvbnRhaW5l
cjo6eVBvcygpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHR4ID12aWV3cG9ydFRyYW5z
Zm9ybSgpICogbG9jYWxUcmFuc2Zvcm0oKTsKKyAgICByZXR1cm4gKGludCl0eC5keSgpOworfQor
Cit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6c2V0UG9zKGludCB4UG9zLCBpbnQgeVBvcykKK3sK
KyAgICAvL1RoZSBTVkcgY29udGFpbmVyIGlzIG5vdCBtb3ZlZCBieSBibG9jayBsYXlvdXRzCisg
ICAgLy9GSVhNRTogPz8KKyAgICAvL3NlZSBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJl
biBjaGlsZC0+c2V0UG9zKGNoaWxkLT54UG9zKCksIHlQb3NFc3RpbWF0ZSk7Cit9CisKK2Jvb2wg
IFJlbmRlclNWR0NvbnRhaW5lcjo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQb3MsIGludCAmeVBv
cywgYm9vbCBmKQoreworICAgIGYgPSB0cnVlOworICAgIFJlbmRlck9iamVjdCAqbyA9IGNvbnRh
aW5lcigpOworICAgIGlmIChvKQorICAgICAgICBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQ
b3MsIGYpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHR4ID12aWV3cG9ydFRyYW5zZm9ybSgpICog
bG9jYWxUcmFuc2Zvcm0oKTsKKyAgICB4UG9zICs9IChpbnQpdHguZHgoKTsKKyAgICB5UG9zICs9
IChpbnQpdHguZHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit9CisKIC8vIHZpbTp0cz00
Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCShyZXZpc2lvbiAxNzQwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIiAKKyNpbmNsdWRlICJQbGF0
Zm9ybVNjcm9sbGJhci5oIiAKIAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShy
ZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTIgKzEyMSw1NiBAQAogYm9vbCBSZW5kZXJGb3Jl
aWduT2JqZWN0Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiBpbmZvLCBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIHRvdGFsVHJhbnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICB0
b3RhbFRyYW5zZm9ybSAqPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKICAgICBkb3VibGUg
bG9jYWxYLCBsb2NhbFk7CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCkubWFwKHgsIHksICZs
b2NhbFgsICZsb2NhbFkpOwogICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoaW5m
bywgKGludClsb2NhbFgsIChpbnQpbG9jYWxZLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogfQog
CitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyRm9yZWlnbk9iamVjdDo6YWJzb2x1dGVUcmFuc2Zvcm0o
KSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFucz0gUmVuZGVyQ29udGFpbmVyOjph
YnNvbHV0ZVRyYW5zZm9ybSgpOworICAgIFJlbmRlckZvcmVpZ25PYmplY3Qqb2JqID0gY29uc3Rf
Y2FzdDxSZW5kZXJGb3JlaWduT2JqZWN0Kj4odGhpcyk7CisgICAgcmV0dXJuIHRyYW5zKm9iai0+
dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiB9CiAKK2ludCAgUmVuZGVyRm9yZWlnbk9iamVj
dDo6eFBvcygpIGNvbnN0Cit7CisgICAgUmVuZGVyRm9yZWlnbk9iamVjdCpvYmogPSBjb25zdF9j
YXN0PFJlbmRlckZvcmVpZ25PYmplY3QqPih0aGlzKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHgg
PW9iai0+dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkgKiBvYmotPmxvY2FsVHJhbnNmb3JtKCk7
CisgICAgcmV0dXJuIChpbnQpdHguZHgoKTsKK30KKworaW50ICBSZW5kZXJGb3JlaWduT2JqZWN0
Ojp5UG9zKCkgY29uc3QKK3sKKyAgICBSZW5kZXJGb3JlaWduT2JqZWN0Km9iaiA9IGNvbnN0X2Nh
c3Q8UmVuZGVyRm9yZWlnbk9iamVjdCo+KHRoaXMpOworICAgIEFmZmluZVRyYW5zZm9ybSB0eCA9
b2JqLT50cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSAqIG9iai0+bG9jYWxUcmFuc2Zvcm0oKTsK
KyAgICByZXR1cm4gKGludCl0eC5keSgpOworfQorCit2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6
OnNldFBvcyhpbnQgeFBvcywgaW50IHlQb3MpCit7CisgICAgLy90aGlzIHNob3VsZCBuZXZlciBi
ZSBjYWxsZWQKKyAgICBBU1NFUlQoMCk7Cit9CisKK2Jvb2wgIFJlbmRlckZvcmVpZ25PYmplY3Q6
OmFic29sdXRlUG9zaXRpb24oaW50ICZ4UG9zLCBpbnQgJnlQb3MsIGJvb2wgZikKK3sKKyAgICAv
L0ZJWE1FOiBhbHdheXMgZml4ZWQgPworICAgIGYgPSB0cnVlOworICAgIFJlbmRlck9iamVjdCAq
byA9IGNvbnRhaW5lcigpOworICAgIGlmIChvICYmIG8tPmFic29sdXRlUG9zaXRpb24oeFBvcywg
eVBvcywgZikpIHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHR4ID10cmFuc2xhdGlvbkZvckF0
dHJpYnV0ZXMoKSAqIGxvY2FsVHJhbnNmb3JtKCk7CisgICAgICAgIHhQb3MgKz0gKGludCl0eC5k
eCgpOworICAgICAgICB5UG9zICs9IChpbnQpdHguZHkoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgeFBvcz0wOworICAgICAgICB5UG9zPTA7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKworfQorCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiAxNzM5
OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC05Myw3ICs5MywxMiBAQAogICAgIGJvb2wgc2xpY2UoKSBjb25zdDsKICAgICAKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdmlld3BvcnRUcmFuc2Zvcm0oKSBjb25zdDsKLSAgICAKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRQb3MoaW50IHhQb3MsIGludCB5UG9zKTsKKyAgICB2aXJ0dWFsIGlu
dCB4UG9zKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBhYnNvbHV0ZVBvc2l0aW9uKGludCAmeFBvcywgaW50ICZ5UG9zLCBib29sIGYgPSBm
YWxzZSk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBjYWxjVmlld3BvcnQoKTsgCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGdldEFzcGVjdFJhdGlvKGNvbnN0IEZsb2F0UmVjdCYgbG9naWNhbCwgY29uc3Qg
RmxvYXRSZWN0JiBwaHlzaWNhbCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUzMyw4ICsyNTMzLDkgQEAKIHsKICAgICBib29sIGlubGlu
ZUZsb3cgPSBpc0lubGluZUZsb3coKTsKIAotICAgIGludCB0eCA9IF90eCArIG1feDsKLSAgICBp
bnQgdHkgPSBfdHkgKyBtX3kgKyBib3JkZXJUb3BFeHRyYSgpOworICAgIC8vdXNlIHZpcnR1YWwg
bWV0aG9kcyB0byBzdXBwb3J0IHN2ZyBmb3JlaWduT2JqZWN0CisgICAgaW50IHR4ID0gX3R4ICsg
eFBvcygpOworICAgIGludCB0eSA9IF90eSArIHlQb3MoKSArIGJvcmRlclRvcEV4dHJhKCk7CiAg
ICAgCiAgICAgaWYgKCFpbmxpbmVGbG93ICYmICFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAv
LyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAj
aW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU2Ny
b2xsQmFyLmgiIAorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsYmFyLmgiIAogI2luY2x1ZGUgIlJl
bmRlckJSLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oCShyZXZpc2lv
biAxNzM5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsMTMgQEAKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRm9yZWlnbk9iamVjdCI7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRY
LCBpbnQgcGFyZW50WSk7Ci0gICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zKGludCB4UG9z
LCBpbnQgeVBvcyk7CisgICAgdmlydHVhbCBpbnQgeFBvcygpIGNvbnN0OworICAgIHZpcnR1YWwg
aW50IHlQb3MoKSBjb25zdDsKKyAgICBib29sIGFic29sdXRlUG9zaXRpb24oaW50ICZ4UG9zLCBp
bnQgJnlQb3MsIGJvb2wgZj1mYWxzZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJh
bnNmb3JtKCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCB2b2lkIHNl
dExvY2FsVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7IG1fdHJh
bnNmb3JtID0gdHJhbnNmb3JtOyB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNzM5
OSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDYg
KzI1NywxMiBAQAogICAgIHBNb2RlID0gU3RyaWN0OwogICAgIGhNb2RlID0gWEh0bWw7CiAgICAg
bV90ZXh0Q29sb3IgPSBDb2xvcjo6YmxhY2s7CisgICAgbV9kb2NUeXBlID0gMDsKKyAgICBtX2Zv
Y3VzTm9kZSA9IDA7CisgICAgbV9ob3Zlck5vZGUgPSAwOworICAgIG1fYWN0aXZlTm9kZSA9IDA7
CisgICAgbV90aXRsZUVsZW1lbnQgPSAwOworICAgIG1fZG9jdW1lbnRFbGVtZW50ID0gMDsKICAg
ICBtX2xpc3RlbmVyVHlwZXMgPSAwOwogICAgIG1faW5Eb2N1bWVudCA9IHRydWU7CiAgICAgbV9z
dHlsZVNlbGVjdG9yRGlydHkgPSBmYWxzZTsKQEAgLTEzNTIsNyArMTM1OCwxMSBAQAogICAgIGlm
ICghb3duZXJFbGVtZW50KCkpCiAgICAgICAgIHByaW50ZigiUmVjZWl2ZWQgYWxsIGRhdGEgYXQg
JWRcbiIsIGVsYXBzZWRUaW1lKCkpOwogI2VuZGlmCi0gICAgCisgICAgLy9tb3ZlZCBmcm9tIGZy
YW1lIGRlbGV0ZSB0aGUgY29kZSBpbiBGcmFtZS5jcHAgaWYgeW91IGFwcGx5CisgICAgaWYgKG1f
ZGVjb2RlciAmJiBtX3Rva2VuaXplciAmJiAhbV90b2tlbml6ZXItPndhbnRzUmF3RGF0YSgpKSB7
CisgICAgICAgIFN0cmluZyBkZWNvZGVkID0gbV9kZWNvZGVyLT5mbHVzaCgpOworICAgICAgICBt
X3Rva2VuaXplci0+d3JpdGUoZGVjb2RlZCx0cnVlKTsKKyAgICB9CiAgICAgLy8gTGV0IHRoZSB0
b2tlbml6ZXIgZ28gdGhyb3VnaCBhcyBtdWNoIGRhdGEgYXMgaXQgY2FuLiAgVGhlcmUgd2lsbCBi
ZSB0aHJlZSBwb3NzaWJsZSBvdXRjb21lcyBhZnRlcgogICAgIC8vIGZpbmlzaCgpIGlzIGNhbGxl
ZDoKICAgICAvLyAoMSkgQWxsIHJlbWFpbmluZyBkYXRhIGlzIHBhcnNlZCwgZG9jdW1lbnQgaXNu
J3QgbG9hZGVkIHlldApJbmRleDogV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDbGlwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDbGlwcGVyLmgJKHJldmlzaW9uIDE3
Mzk5KQorKysgV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDbGlwcGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDggKzY1LDEyIEBACiAKICAgICB2b2lkIHJlc2V0Q2xpcERhdGEoKTsKICAgICB2b2lk
IGFkZENsaXBEYXRhKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSwgYm9vbCBiYm94VW5pdHMpOwotICAg
IAorICAgCisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgdmlydHVhbCB2b2lkIGFwcGx5Q2xpcChj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKKyNlbHNlCiAgICAgdmlydHVhbCB2
b2lkIGFwcGx5Q2xpcChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdCA9IDA7Cisj
ZW5kaWYKIAogICAgIEtDQ2xpcERhdGFMaXN0IGNsaXBEYXRhKCkgY29uc3Q7CiAKSW5kZXg6IFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAkocmV2aXNp
b24gMTczOTkpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAvLyBBY3R1YWwgcmVu
ZGVyaW5nIGZ1bmN0aW9uCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0ID0gMDsK
IAotICAgIHZpcnR1YWwgYm9vbCBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0
IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0
dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50
VGFyZ2V0VHlwZSkgY29uc3Qge307CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUp
IGNvbnN0IHt9OwogICAgIAogICAgIGJvb2wgaXNQYWludGluZ1RleHQoKSBjb25zdCB7IHJldHVy
biBtX3BhaW50aW5nVGV4dDsgfQogICAgIHZvaWQgc2V0UGFpbnRpbmdUZXh0KGJvb2wgcGFpbnRp
bmdUZXh0KSB7IG1fcGFpbnRpbmdUZXh0ID0gcGFpbnRpbmdUZXh0OyB9CiAKICAgICB2aXJ0dWFs
IFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0ID0g
MDsKIAotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBS
ZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0IHt9OwogcHJpdmF0ZToKICAgICBj
b25zdCBSZW5kZXJQYXRoKiBtX2FjdGl2ZUNsaWVudDsKICAgICBTdHJpbmcgbV9yZWdpc3RyeUlk
OwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9jYWlyby9LUmVuZGVyaW5nRGV2aWNlQ2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRl
cmluZ0RldmljZUNhaXJvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzNDEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCQkJCSAgMjAwNiBNaWNoYWVsIEVtbWVs
IDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlQ2Fp
cm8uaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5k
ZXJQYXRoLmgiCisjaW5jbHVkZSAiS0NhbnZhc1Jlc291cmNlLmgiCisjaW5jbHVkZSAiS0NhbnZh
c01hcmtlci5oIgorI2luY2x1ZGUgIktDYW52YXNDbGlwcGVyLmgiCisjaW5jbHVkZSAiUGF0aC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1
ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworCitLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dENhaXJvKEdyYXBoaWNzQ29udGV4dENhaXJvKiBnYykKK3sKKyAgICBtX2djID0gZ2M7Cit9CisK
K0tSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm86On5LUmVuZGVyaW5nRGV2aWNlQ29udGV4dENh
aXJvKCkKK3sKK30KKworCitBZmZpbmVUcmFuc2Zvcm0gS1JlbmRlcmluZ0RldmljZUNvbnRleHRD
YWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgd29ybGRNYXRyaXgpCit7Cisg
ICAgbV9nYy0+Y29uY2F0Q1RNKHdvcmxkTWF0cml4KTsKKyAgICByZXR1cm4gbV9nYy0+Z2V0Q1RN
KCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjpj
dG0oKSBjb25zdAoreworICAgIHJldHVybiBtX2djLT5nZXRDVE0oKTsKK30KKworSW50UmVjdCBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjptYXBGcm9tVmlzdWFsKGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UmVjdCBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dENhaXJvOjptYXBUb1Zpc3VhbChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRD
YWlybzo6Y2xlYXJQYXRoKCkKK3sKKyAgICBtX2djLT5jbGVhclBhdGgoKTsKK30KKwordm9pZCBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvOjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7
CisgICAgbV9nYy0+YXBwZW5kKHBhdGgpOworfQorCisKK0dyYXBoaWNzQ29udGV4dCogS1JlbmRl
cmluZ0RldmljZUNvbnRleHRDYWlybzo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKK3sKKyAgICBy
ZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dENhaXJvKG1fZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsg
Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6ZHJhd1BhdGgoY29uc3Qg
UmVuZGVyUGF0aCogcGF0aCwgUGF0dGVybkNhaXJvJiBwYXR0ZXJuLCBLQ1BhaW50VGFyZ2V0VHlw
ZSB0eXBlKQoreworICAgIAorICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHBhdGgtPnN0
eWxlKCk7CisKKyAgICBtX2djLT5zYXZlKCk7CisKKyAgICBtX2djLT5hcHBlbmQocGF0aC0+cGF0
aCgpKTsKKyAgICBtX2djLT5zZXRTb3VyY2VQYXR0ZXJuKHBhdHRlcm4pOworCisgICAgaWYgKCh0
eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwo
KSkgeworICAgICAgICBtX2djLT5zZXRGaWxsUnVsZShyZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+
ZmlsbFJ1bGUoKSk7CisgICAgCW1fZ2MtPmZpbGwoKTsKKyAgICB9CisKKyAgICBpZiAoKHR5cGUg
JiBBUFBMWV9UT19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2Uo
KSkgeworCisgICAgCW1fZ2MtPnNldExpbmVXaWR0aChLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1By
aW1pdGl2ZVRvTGVuZ3RoKHBhdGgsCisJCQkJCQkJCXJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5z
dHJva2VXaWR0aCgpLCAxLjApKTsKKyAgICAJbV9nYy0+c2V0TGluZUNhcChyZW5kZXJTdHlsZS0+
c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSk7CisgICAgCW1fZ2MtPnNldExpbmVKb2luKHJlbmRlclN0
eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7CisgICAgCW1fZ2MtPnNldE1pdGVyTGltaXQo
cmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7CisKKyAgICAJY29u
c3QgS0NEYXNoQXJyYXkmIGRhc2hlcyA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZGFzaEFycmF5RnJv
bVJlbmRlcmluZ1N0eWxlKHJlbmRlclN0eWxlKTsKKyAgICAJdW5zaWduZWQgaW50IGRhc2hMZW5n
dGggPSBkYXNoZXMuc2l6ZSgpOworICAgIAlpZihkYXNoTGVuZ3RoKSB7CisgICAgCQlkb3VibGUg
ZGFzaE9mZnNldCA9IEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgocGF0
aCwKKwkJCQkJCQlyZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAw
LjApOworICAgICAgICAJZG91YmxlKiBjZGFzaGVzID0gbmV3IGRvdWJsZVtkYXNoTGVuZ3RoXTsK
KyAgICAgICAgCWZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBkYXNoTGVuZ3RoOyBpKyspCisg
ICAgICAgICAgICAJY2Rhc2hlc1tpXSA9IChkb3VibGUpZGFzaGVzW2Rhc2hMZW5ndGhdOworICAg
ICAgIAkJbV9nYy0+c2V0RGFzaGVzKGNkYXNoZXMsIGRhc2hMZW5ndGgsZGFzaE9mZnNldCk7Cisg
ICAgICAgCQlkZWxldGVbXSBjZGFzaGVzOworICAgIAl9CisgICAgCW1fZ2MtPnN0cm9rZSgpOwor
ICAgIH0KKyAgICBtX2djLT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgS0NhbnZhc0NsaXBwZXI6OmFw
cGx5Q2xpcChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdAoreworICAgIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gcmVuZGVyaW5nRGV2aWNlKCktPmN1cnJlbnRD
b250ZXh0KCk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyAqY2Fpcm9Db250ZXh0
ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyAqPihjb250ZXh0KTsK
KyAgICBpZiAobV9jbGlwRGF0YS5jb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2Fpcm9Db250ZXh0LT5jYWlyb0NvbnRleHQoKS0+Y2xlYXJDbGlwKCk7CisJCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBtX2NsaXBEYXRhLmNvdW50KCk7IHgrKykgeworICAgICAg
ICBLQ0NsaXBEYXRhIGNsaXBEYXRhID0gbV9jbGlwRGF0YVt4XTsKKyAgICAJV2luZFJ1bGUgY2xp
cFJ1bGUgPSBtX2NsaXBEYXRhW3hdLndpbmRSdWxlKCk7CisgICAgICAgCisgICAgICAgIFBhdGgg
cGF0aCA9IGNsaXBEYXRhLnBhdGg7IAorCQlpZiggcGF0aC5pc0VtcHR5KCkgKQorCQkJCWNvbnRp
bnVlOworCQljYWlyb0NvbnRleHQtPmNhaXJvQ29udGV4dCgpLT5zZXRGaWxsUnVsZShjbGlwUnVs
ZSk7CisgICAgCWlmIChjbGlwRGF0YS5iYm94VW5pdHMpIHsKKyAgIAkJCS8vIFJlc3BlY3QgY2xp
cHBpbmcgdW5pdHMuLi4KKyAgICAgICAgCUFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAg
ICAgIAl0cmFuc2Zvcm0udHJhbnNsYXRlKGJvdW5kaW5nQm94LngoKSwgYm91bmRpbmdCb3gueSgp
KTsKKyAgICAgICAgCXRyYW5zZm9ybS5zY2FsZShib3VuZGluZ0JveC53aWR0aCgpLCBib3VuZGlu
Z0JveC5oZWlnaHQoKSk7CisJCQljYWlyb0NvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwor
ICAgCQl9CisgICAgCWNhaXJvQ29udGV4dC0+Y2Fpcm9Db250ZXh0KCktPmNsZWFyUGF0aCgpOwor
ICAgIAljYWlyb0NvbnRleHQtPmNhaXJvQ29udGV4dCgpLT5jbGVhckNsaXAoKTsKKyAgICAJY2Fp
cm9Db250ZXh0LT5jYWlyb0NvbnRleHQoKS0+Y2xpcChwYXRoKTsKKyAgICB9CisKK30KKworLy8g
S1JlbmRlcmluZ0RldmljZUNhaXJvCitLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86OktSZW5kZXJpbmdE
ZXZpY2VDYWlybygpIDogS1JlbmRlcmluZ0RldmljZSgpCit7CisgICAgCit9CisKK0tSZW5kZXJp
bmdEZXZpY2VDYWlybzo6fktSZW5kZXJpbmdEZXZpY2VDYWlybygpCit7Cit9CisKKworS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2VDYWlybzo6cG9wQ29udGV4dCgpCit7
CisgICAgLy8gQW55IHNwZWNpYWwgdGhpbmdzIG5lZWRlZD8KKyAgICByZXR1cm4gS1JlbmRlcmlu
Z0RldmljZTo6cG9wQ29udGV4dCgpOworfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDYWlybzo6
cHVzaENvbnRleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQpCit7CisgICAgLy8g
QW55IHNwZWNpYWwgdGhpbmdzIG5lZWRlZD8KKyAgICBLUmVuZGVyaW5nRGV2aWNlOjpwdXNoQ29u
dGV4dChjb250ZXh0KTsKKworfQorCisvLyBjb250ZXh0IG1hbmFnZW1lbnQuCitLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dENhaXJvKiBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86OmNhaXJvQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
Q2Fpcm8qPihjdXJyZW50Q29udGV4dCgpKTsKK30KKworS1JlbmRlcmluZ0RldmljZUNvbnRleHQq
IEtSZW5kZXJpbmdEZXZpY2VDYWlybzo6Y29udGV4dEZvckltYWdlKEtDYW52YXNJbWFnZSogaW1h
Z2UpIGNvbnN0Cit7CisgICAgSW1hZ2UqIGltZyA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZUNh
aXJvKj4oaW1hZ2UpLT5pbWFnZSgpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjb250ZXh0
ID0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNyZWF0ZUNvbnRleHRGb3JJbWFnZShpbWcpOworICAg
IHJldHVybiAgY29udGV4dC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOworfQorCisK
Ky8vIFJlc291cmNlIGNyZWF0aW9uCitLQ2FudmFzUmVzb3VyY2UqIEtSZW5kZXJpbmdEZXZpY2VD
YWlybzo6Y3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5cGUmIHR5cGUpIGNvbnN0Cit7
CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBSU19DTElQUEVSOgorICAg
ICAgICAgICAgcmV0dXJuIG5ldyBLQ2FudmFzQ2xpcHBlcigpOworICAgICAgICBjYXNlIFJTX01B
UktFUjoKKyAgICAgICAgICAgIHJldHVybiBuZXcgS0NhbnZhc01hcmtlcigpOyAvLyBVc2UgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbi4uLgorICAgICAgICBjYXNlIFJTX0lNQUdFOgorICAgICAgICAg
ICAgLy8gcmV0dXJuIG5ldyBLQ2FudmFzSW1hZ2VDYWlybygpOworICAgICAgICBjYXNlIFJTX0ZJ
TFRFUjoKKyAgICAgICAgICAgIC8vIHJldHVybiBuZXcgS0NhbnZhc0ZpbHRlckNhaXJvKCk7Cisg
ICAgICAgIGNhc2UgUlNfTUFTS0VSOgorICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBLQ2FudmFz
TWFza2VyQ2Fpcm8oKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKworS1JlbmRlcmluZ1BhaW50U2VydmVyKiBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm86
OmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJiB0eXBlKSBjb25zdAor
eworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgUFNfU09MSUQ6CisgICAg
ICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8oKTsKKyAg
ICAgICAgY2FzZSBQU19QQVRURVJOOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8oKTsKKyAgICAgICAgY2FzZSBQU19MSU5FQVJfR1JBRElF
TlQ6CisgICAgICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50Q2Fpcm8oKTsKKyAgICAgICAgY2FzZSBQU19SQURJQUxfR1JBRElFTlQ6CisgICAgICAg
ICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm8o
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
S0NhbnZhc0ZpbHRlckVmZmVjdCogS1JlbmRlcmluZ0RldmljZUNhaXJvOjpjcmVhdGVGaWx0ZXJF
ZmZlY3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlJiB0eXBlKSBjb25zdAoreworICAgIHByaW50
ZigiS1JlbmRlcmluZ0RldmljZUNhaXJvOjpjcmVhdGVGaWx0ZXJFZmZlY3QoKSBUT0RPIVxuIik7
CisgICAgcmV0dXJuIDA7Cit9CisKKworLy8gaXRlbSBjcmVhdGlvbgorUmVuZGVyUGF0aCogS1Jl
bmRlcmluZ0RldmljZUNhaXJvOjpjcmVhdGVJdGVtKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBTVkdTdHlsZWRFbGVtZW50KiBub2RlLCBjb25zdCBQYXRoJiBwYXRoKSBj
b25zdAoreworICAgIFJlbmRlclBhdGgqIG9iamVjdCA9IG5ldyAoYXJlbmEpIFJlbmRlclBhdGgo
c3R5bGUsIG5vZGUpOworICAgIG9iamVjdC0+c2V0UGF0aChwYXRoKTsKKyAgICByZXR1cm4gb2Jq
ZWN0OworfQorCitLUmVuZGVyaW5nRGV2aWNlKiByZW5kZXJpbmdEZXZpY2UoKQoreworICAgIHN0
YXRpYyBLUmVuZGVyaW5nRGV2aWNlICpzaGFyZWRSZW5kZXJpbmdEZXZpY2UgPSBuZXcgS1JlbmRl
cmluZ0RldmljZUNhaXJvKCk7CisgICAgcmV0dXJuIHNoYXJlZFJlbmRlcmluZ0RldmljZTsKK30K
KworCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Q2Fpcm86OmRyYXco
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgs
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgS1JlbmRlcmluZ0RldmljZUNv
bnRleHRDYWlybyogY2Fpcm9Db250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNv
bnRleHRDYWlybyo+KGNvbnRleHQpOworICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHBh
dGgtPnN0eWxlKCk7CisKKyAgICBpZiAobGlzdGVuZXIoKSkKKyAgICAgICAgbGlzdGVuZXIoKS0+
cmVzb3VyY2VOb3RpZmljYXRpb24oKTsKKworCisJRmxvYXRSZWN0IGJib3ggPSBib3VuZGluZ0Jv
eE1vZGUoKSA/IGNhaXJvQ29udGV4dC0+Y2Fpcm9Db250ZXh0KCktPnN0cm9rZUJvdW5kaW5nUmVj
dCgpIDogRmxvYXRSZWN0KCk7CisKKwlGbG9hdFBvaW50IHN0YXJ0ID0gZ3JhZGllbnRTdGFydCgp
OworCUZsb2F0UG9pbnQgZW5kID0gICBncmFkaWVudEVuZCgpOworCUFmZmluZVRyYW5zZm9ybSB0
cmFucyA9ICBncmFkaWVudFRyYW5zZm9ybSgpOworCisJUGF0dGVybkNhaXJvIGxpbmVhclBhdHRl
cm4gPSBQYXR0ZXJuQ2Fpcm8oc3RhcnQKKyAgICAgICAgLCBlbmQgCisgICAgICAgICwgZ3JhZGll
bnRTdG9wcygpIAorICAgICAgICAsIHJlbmRlclN0eWxlLT5vcGFjaXR5KCkgCisgICAgICAgICwg
dHJhbnMgCisgICAgICAgICwgc3ByZWFkTWV0aG9kKCkKKyAgICAgICAgLCBiYm94KTsKKyAKKwlj
YWlyb0NvbnRleHQtPmRyYXdQYXRoKHBhdGgsbGluZWFyUGF0dGVybix0eXBlKTsKK30KKwordm9p
ZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudENhaXJvOjpkcmF3KEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50
VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fp
cm8qIGNhaXJvQ29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fp
cm8qPihjb250ZXh0KTsKKyAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHls
ZSgpOworICAgIGlmIChsaXN0ZW5lcigpKQorICAgICAgICBsaXN0ZW5lcigpLT5yZXNvdXJjZU5v
dGlmaWNhdGlvbigpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RUcmFuc2Zvcm0gPSBjYWly
b0NvbnRleHQtPmN0bSgpOworCisJRmxvYXRSZWN0IGJib3ggPSBib3VuZGluZ0JveE1vZGUoKSA/
IGNhaXJvQ29udGV4dC0+Y2Fpcm9Db250ZXh0KCktPnN0cm9rZUJvdW5kaW5nUmVjdCgpIDogRmxv
YXRSZWN0KCk7CisJCisJRmxvYXRQb2ludCBjdHIgPSBncmFkaWVudENlbnRlcigpOworCUZsb2F0
UG9pbnQgZm9jYWwgPSBncmFkaWVudEZvY2FsKCk7CisJQWZmaW5lVHJhbnNmb3JtIHRyYW5zID0g
IGdyYWRpZW50VHJhbnNmb3JtKCk7CisKKwlQYXR0ZXJuQ2Fpcm8gcmFkaWFsUGF0dGVybiA9IFBh
dHRlcm5DYWlybyhjdHIKKyAgICAgICAgLCBmb2NhbCAKKyAgICAgICAgLCBncmFkaWVudFJhZGl1
cygpIAorICAgICAgICAsIGdyYWRpZW50U3RvcHMoKSAKKyAgICAgICAgLCByZW5kZXJTdHlsZS0+
b3BhY2l0eSgpIAorICAgICAgICAsIHRyYW5zIAorICAgICAgICAsIHNwcmVhZE1ldGhvZCgpCisg
ICAgICAgICwgZGVzdFRyYW5zZm9ybQorICAgICAgICAsIGJib3gpOworIAorCWNhaXJvQ29udGV4
dC0+ZHJhd1BhdGgocGF0aCxyYWRpYWxQYXR0ZXJuLHR5cGUpOworfQorCit2b2lkIEtSZW5kZXJp
bmdQYWludFNlcnZlclBhdHRlcm5DYWlybzo6ZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCog
Y29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkg
Y29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQg
PSAKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8q
Pihjb250ZXh0KTsKKyAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgp
OworCisgICAgaWYgKGxpc3RlbmVyKCkpIHsKKyAgICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VO
b3RpZmljYXRpb24oKTsKKyAgICB9CisKKwlLQ2FudmFzSW1hZ2VDYWlybyogaW1hZ2UgPSBzdGF0
aWNfY2FzdDxLQ2FudmFzSW1hZ2VDYWlybyo+KHRpbGUoKSk7CQkKKworCVBhdHRlcm5DYWlybyBp
bWFnZVBhdHRlcm4gPSBQYXR0ZXJuQ2Fpcm8oaW1hZ2UtPmltYWdlKCkKKyAgICAgICAgLCByZW5k
ZXJTdHlsZS0+b3BhY2l0eSgpIAorICAgICAgICAsIHBhdHRlcm5UcmFuc2Zvcm0oKSAKKyAgICAg
ICAgLCBTUFJFQURNRVRIT0RfUkVQRUFUKTsKKworCWNhaXJvQ29udGV4dC0+ZHJhd1BhdGgocGF0
aCxpbWFnZVBhdHRlcm4sdHlwZSk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29s
aWRDYWlybzo6ZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVu
ZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQgPSAKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihjb250ZXh0KTsKKyAgICBS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworICAgIFBhdHRlcm5DYWly
byBjb2xvclBhdHRlcm4gPSBQYXR0ZXJuQ2Fpcm8oJmNvbG9yKCkscmVuZGVyU3R5bGUtPm9wYWNp
dHkoKSk7CisJY2Fpcm9Db250ZXh0LT5kcmF3UGF0aChwYXRoLGNvbG9yUGF0dGVybix0eXBlKTsK
K30KKworfQorLy8gdmltOnRzPTQ6bm9ldAorCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNl
L2NhaXJvL0tSZW5kZXJpbmdEZXZpY2VDYWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdEZXZpY2VDYWlyby5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisJCQkJ
ICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm9f
SAorI2RlZmluZSBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm9fSAorCisKKyNpbmNsdWRlICJLUmVuZGVy
aW5nRGV2aWNlLmgiCisjaW1wb3J0ICJLQ2FudmFzSW1hZ2UuaCIKKyNpbXBvcnQgIlBhdHRlcm5D
YWlyby5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKKyNpbmNsdWRlICJL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWQuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVuZGVyUGF0aDsKK2NsYXNzIEtSZW5kZXJpbmdTdHJva2VQYWludGVyOwor
Y2xhc3MgS1JlbmRlcmluZ0ZpbGxQYWludGVyOworY2xhc3MgUGF0aDsKK2NsYXNzIENvbG9yOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CitjbGFzcyBLQ2FudmFzUmVzb3VyY2U7CisKKwor
Y2xhc3MgS0NhbnZhc0ltYWdlQ2Fpcm8gOiBwdWJsaWMgS0NhbnZhc0ltYWdlIAoreworcHVibGlj
OgorICAgIEtDYW52YXNJbWFnZUNhaXJvKCk6bV9pbWFnZSgwKSxtX2NyZWF0ZWRJbWFnZShmYWxz
ZSkge30KKyAgICB+S0NhbnZhc0ltYWdlQ2Fpcm8oKQorICAgIHsKKwkgICAgaWYobV9jcmVhdGVk
SW1hZ2UgJiYgbV9pbWFnZSkKKyAgICAJICAgIGRlbGV0ZSBtX2ltYWdlOworICAgIH0KKworICAg
IHZvaWQgaW5pdChjb25zdCBJbWFnZSAmaW1hZ2UpIHsgbV9pbWFnZSA9IChJbWFnZSopJmltYWdl
OyB9CisKKyAgICB2b2lkIGluaXQoSW50U2l6ZSBzaXplKSAKKyAgICB7CisgICAgICAgIG1faW1h
Z2U9IG5ldyBJbWFnZShzaXplKTsKKyAgICAgICAgbV9jcmVhdGVkSW1hZ2UgPSB0cnVlOworICAg
IH0KKworICAgIEludFNpemUgc2l6ZSgpIHsgcmV0dXJuIG1faW1hZ2UtPnNpemUoKTsgfSAKKyAg
ICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgCitwcml2YXRlOgorICAg
IEltYWdlKiBtX2ltYWdlOworICAgIGJvb2wgbV9jcmVhdGVkSW1hZ2U7Cit9OworCitjbGFzcyBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvIDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0Cit7CitwdWJsaWM6CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyhHcmFwaGlj
c0NvbnRleHRDYWlybyopOworICAgIHZpcnR1YWwgfktSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fp
cm8oKTsKKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBjdG0oKSBjb25zdDsK
KworICAgIHZpcnR1YWwgSW50UmVjdCBtYXBGcm9tVmlzdWFsKGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIEludFJlY3QgbWFwVG9WaXN1YWwoY29uc3QgSW50UmVjdCYpOworCisgICAgdmly
dHVhbCB2b2lkIGNsZWFyUGF0aCgpOworICAgIHZpcnR1YWwgdm9pZCBhZGRQYXRoKGNvbnN0IFBh
dGgmKTsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBjcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKKyAgICAKKyAgICAvLyBDYWlybyBzcGVjaWZpYyBzdHVmZgorICAgIHZvaWQgZHJhd1Bh
dGgoY29uc3QgUmVuZGVyUGF0aCosIFBhdHRlcm5DYWlybyYsIEtDUGFpbnRUYXJnZXRUeXBlIHR5
cGUpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQoKXsgcmV0dXJuIG1f
Z2M7fQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBtX2djOworfTsKKwor
Y2xhc3MgS1JlbmRlcmluZ0RldmljZUNhaXJvIDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2UKK3sK
K3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm8oKTsKKyAgICB2aXJ0dWFsIH5LUmVu
ZGVyaW5nRGV2aWNlQ2Fpcm8oKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcmVkKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCogcG9wQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBwdXNoQ29udGV4dChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCopOworCisgICAgLy8gY29udGV4dCBtYW5hZ2VtZW50LgorICAgIHZpcnR1
YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHRGb3JJbWFnZShLQ2FudmFzSW1hZ2Uq
KSBjb25zdDsKKworCisgICAgLy8gUmVzb3VyY2UgY3JlYXRpb24KKyAgICB2aXJ0dWFsIEtDYW52
YXNSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5cGUmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEtSZW5kZXJpbmdQYWludFNlcnZlciogY3JlYXRlUGFpbnRTZXJ2ZXIoY29u
c3QgS0NQYWludFNlcnZlclR5cGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJF
ZmZlY3QqIGNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmKSBjb25z
dDsKKworICAgIC8vIGl0ZW0gY3JlYXRpb24KKyAgICB2aXJ0dWFsIFJlbmRlclBhdGgqIGNyZWF0
ZUl0ZW0oUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSosIFNWR1N0eWxlZEVsZW1lbnQqLCBjb25z
dCBQYXRoJikgY29uc3Q7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyogY2Fpcm9D
b250ZXh0KCkgY29uc3Q7CisgIHByaXZhdGU6CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRD
YWlybyogbV9jb250ZXh0OworCit9OworCitjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudENhaXJvIDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRp
ZW50Cit7CitwdWJsaWM6CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRD
YWlybygpe30KKyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVu
dENhaXJvKCl7fQorICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKK307CisKK2Ns
YXNzIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm8gOiBwdWJsaWMgS1Jl
bmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQKK3sKK3B1YmxpYzoKKyAgICBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudENhaXJvKCl7fQorICAgIHZpcnR1YWwgfktSZW5k
ZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm8oKXt9CisgICAgdmlydHVhbCB2b2lk
IGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWlu
dFRhcmdldFR5cGUpIGNvbnN0OworfTsKKworCitjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQ
YXR0ZXJuQ2Fpcm8gOiBwdWJsaWMgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybgoreworcHVi
bGljOgorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlybygpe30KKyAgICB2aXJ0
dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8oKXt9CisgICAgdmlydHVhbCB2
b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQ
YWludFRhcmdldFR5cGUpIGNvbnN0OworfTsKKworY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVy
U29saWRDYWlybyA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZAoreworcHVibGlj
OgorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8oKXt9CisgICAgdmlydHVhbCB+
S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlybygpe30KKyAgICB2aXJ0dWFsIHZvaWQgZHJh
dyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFy
Z2V0VHlwZSkgY29uc3Q7Cit9OworCit9CisjZW5kaWYKKy8vIHZpbTp0cz00OmV0CkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFRlbXBsYXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRUZW1wbGF0ZS5oCShyZXZpc2lvbiAxNzM5OSkKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVkVGVtcGxhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsNyBAQAogICAgIGNsYXNzIFNWR1RyYW5zZm9ybUxpc3Q7CiAgICAgY2xhc3Mg
U3RyaW5nOwogICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBTVkdQb2ludExpc3Q7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXJlVHlwZT4KICAgICBjbGFzcyBTVkdBbmltYXRlZFRl
bXBsYXRlIDogcHVibGljIFNoYXJlZDxTVkdBbmltYXRlZFRlbXBsYXRlPEJhcmVUeXBlPiA+Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR01hdHJpeC5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHTWF0cml4OjpTVkdNYXRyaXgoKSA6IFNo
YXJlZDxTVkdNYXRyaXg+KCkKK1NWR01hdHJpeDo6U1ZHTWF0cml4KCkgOiBTaGFyZWQ8U1ZHTWF0
cml4PigpLG1fbWF0KCkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0
ZWRQb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlZFBv
aW50cy5oCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVk
UG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEwICsyNCwxMiBAQAogI2RlZmluZSBLU1ZH
X1NWR0FuaW1hdGVkUG9pbnRzSW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAorI2luY2x1ZGUg
IlNoYXJlZC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIFNWR1BvaW50TGlz
dDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFBvaW50cworICAgIGNsYXNzIFNWR0FuaW1hdGVkUG9p
bnRzIDpwdWJsaWMgU2hhcmVkPFNWR0FuaW1hdGVkUG9pbnRzPgogICAgIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIFNWR0FuaW1hdGVkUG9pbnRzKCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9XaW5k
b3dGZWF0dXJlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL1dpbmRvd0ZlYXR1cmVz
LmgJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9icmlkZ2UvV2luZG93RmVhdHVyZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOSBAQAogCiAgICAgYm9vbCBmdWxsc2NyZWVuOwog
ICAgIGJvb2wgZGlhbG9nOworI2lmIFBMQVRGT1JNKEdESykKKyAgICBib29sIGhpZGVGcmFtZURl
Y29yYXRpb25zOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVT
b3VyY2VzLmJrbAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDE0ICsxMDIsMTM1IEBACiAJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvWFBhdGhHcmFtbWFyLmNwcAogCiAJPC9zZXQ+Ci0JPHNldCBhcHBlbmQ9IjEiIHZh
cj0iV0VCQ09SRV9TT1VSQ0VTX0tIVE1MIj4KLQkJCiAKKwk8c2V0IGFwcGVuZD0iMSIgdmFyPSJX
RUJDT1JFX1NPVVJDRVNfU1ZHX0RFUklWRURTT1VSQ0VTIj4KKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9TVkdFbGVtZW50RmFjdG9yeS5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9TVkdO
YW1lcy5jcHAKKworICAgICAgICAgIDwhLS0gaW5jbHVkZWQgc291cmNlcworCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHUG9pbnRUYWJsZS5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR1JlY3RUYWJsZS5jcHAKKyAgICAgICAgICAtLT4KKworCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHQUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdB
bmdsZS5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVDb2xvckVsZW1l
bnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZEFuZ2xlLmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAorCQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkTGVuZ3RoLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTU1ZHQW5pbWF0ZWROdW1iZXIuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdB
bmltYXRlZE51bWJlckxpc3QuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmlt
YXRlZFBvaW50cy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkUHJl
c2VydmVBc3BlY3RSYXRpby5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1h
dGVkUmVjdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVkU3RyaW5n
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAK
KwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdDaXJjbGVFbGVtZW50LmNwcAorCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHQ29sb3IuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR0N1cnNvckVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdE
ZWZzRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0Rlc2NFbGVtZW50
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRG9jdW1lbnQuY3BwCisJCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
VkdGRUJsZW5kRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
VkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
VkdGRUZsb29kRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFRnVu
Y0FFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVGdW5jQkVsZW1l
bnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUZ1bmNHRWxlbWVudC5jcHAK
KwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFRnVuY1JFbGVtZW50LmNwcAorCQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAorCQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNTVkdGRU1lcmdlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NW
R0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
RkVUaWxlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGaWx0ZXJFbGVt
ZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRm9yZWlnbk9iamVjdEVsZW1l
bnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdHRWxlbWVudC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0dyYWRpZW50RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU1NWR0ltYWdlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0xlbmd0aC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0xlbmd0
aExpc3QuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdMaW5lRWxlbWVudC5jcHAK
KwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR01hcmtlckVsZW1lbnQuY3BwCisJCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdNYXNrRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1NWR01hdHJpeC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR01l
dGFkYXRhRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR051bWJlckxp
c3QuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYWludC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHUGF0aFNlZ0FyY0Ficy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR1BhdGhTZWdBcmNSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRo
U2VnQ2xvc2VQYXRoLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZy5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVs
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aEFicy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY0Ficy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMuY3BwCisJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5ldG9BYnMuY3BwCisJCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0xpbmV0b1JlbC5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicy5jcHAKKwkJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5jcHAK
KwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaXN0LmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ01vdmV0b0Ficy5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdNb3ZldG9SZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNTVkdQYXR0ZXJuRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR1BvaW50TGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BvbHlnb25F
bGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUG9seWxpbmVFbGVtZW50
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1JlY3RFbGVtZW50LmNwcAorCQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUmVuZGVyaW5nSW50ZW50LmNwcAorCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHU2NyaXB0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR1NldEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdT
dG9wRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1N0cmluZ0xpc3Qu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTdHlsZUVsZW1lbnQuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTVkdFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHU3dpdGNoRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR1N5bWJvbEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdU
ZXh0Q29udGVudEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUZXh0
RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUaXRsZUVsZW1lbnQu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUcmFuc2Zvcm0uY3BwCisJCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUcmFuc2Zvcm1MaXN0LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHVFJlZkVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdUU3BhbkVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdVbml0
VHlwZXMuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdVc2VFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHVmlld0VsZW1lbnQuY3BwCisJCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNTVkdab29tRXZlbnQuY3BwCisKIAk8L3NldD4KLQk8c2V0IGFwcGVu
ZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfTUlTQyI+Ci0JCQogCi0JPC9zZXQ+CiAJPHNldCBh
cHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BBR0UiPgogCQkKIAkJcGFnZS9ET01XaW5k
b3cuY3BwCkBAIC0xNjcsOSArMjg4LDExIEBACiAJCXBsYXRmb3JtL0ludFJlY3QuY3BwCiAJCXBs
YXRmb3JtL0tVUkwuY3BwCiAJCXBsYXRmb3JtL0xvZ2dpbmcuY3BwCisJCXBsYXRmb3JtL1BhdGgu
Y3BwCiAJCXBsYXRmb3JtL1Blbi5jcHAKIAkJcGxhdGZvcm0vUmVndWxhckV4cHJlc3Npb24uY3Bw
CiAJCXBsYXRmb3JtL1NlZ21lbnRlZFN0cmluZy5jcHAKKwkJcGxhdGZvcm0vU2Nyb2xsQmFyLmNw
cAogCQlwbGF0Zm9ybS9TdHJlYW1pbmdUZXh0RGVjb2Rlci5jcHAKIAkJcGxhdGZvcm0vU3RyZWFt
aW5nVGV4dERlY29kZXJJQ1UuY3BwCiAJCXBsYXRmb3JtL1N0cmluZy5jcHAKQEAgLTMwNSwxMSAr
NDI4LDE1IEBACiAJCXBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIu
Y3BwCiAKIAk8L3NldD4KLQk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfQ0FJ
Uk8iPgorCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19DQUlST19CSU5ESU5H
UyI+CiAJCQorCQlwbGF0Zm9ybS9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5jcHAKIAkJcGxh
dGZvcm0vY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiAJCXBsYXRmb3JtL2NhaXJvL0lt
YWdlQ2Fpcm8uY3BwCiAJCXBsYXRmb3JtL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwCisJCXBs
YXRmb3JtL2NhaXJvL1BhdGhDYWlyby5jcHAKKwkJcGxhdGZvcm0vY2Fpcm8vUGF0dGVybkNhaXJv
LmNwcAorCQlwbGF0Zm9ybS9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwCiAKIAk8L3NldD4KIAk8
c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfUElYTUFOIj4KQEAgLTQyNSwxMSAr
NTUyLDExIEBACiAJCXJlbmRlcmluZy9Db3VudGVyUmVzZXROb2RlLmNwcAogCQlyZW5kZXJpbmcv
RWxsaXBzaXNCb3guY3BwCiAJCXJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAorCQlyZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKIAkJcmVuZGVyaW5nL0lubGluZUJveC5jcHAKIAkJcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCiAJCXJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAog
CQlyZW5kZXJpbmcvTGlzdE1hcmtlckJveC5jcHAKLQkJcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNw
cAogCQlyZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyQXJlbmEu
Y3BwCiAJCXJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTQ0Miw2ICs1NjksNyBAQAogCQly
ZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCisJCXJlbmRlcmluZy9S
ZW5kZXJGb3JlaWduT2JqZWN0LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyRm9ybUVsZW1lbnQuY3Bw
CiAJCXJlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0
LmNwcApAQCAtNDU5LDEwICs1ODcsMTcgQEAKIAkJcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
IAkJcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0
LmNwcAotCQlyZW5kZXJpbmcvUmVuZGVyUG9wdXBNZW51LmNwcAorCQlyZW5kZXJpbmcvUmVuZGVy
UGF0aC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAorCQlyZW5kZXJpbmcvUmVu
ZGVyU3R5bGUuY3BwCiAJCXJlbmRlcmluZy9EZXByZWNhdGVkUmVuZGVyU2VsZWN0LmNwcAogCQly
ZW5kZXJpbmcvRGVwcmVjYXRlZFNsaWRlci5jcHAKKwkJcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRh
aW5lci5jcHAKKwkJcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAorCQlyZW5kZXJpbmcvUmVu
ZGVyU1ZHSW5saW5lLmNwcAorCSAJcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisJ
CXJlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAorCQlyZW5kZXJpbmcvUmVuZGVyU1ZHVFNwYW4u
Y3BwCiAJCXJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcApAQCAtNDcyLDExICs2MDcs
MTIgQEAKIAkJcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAogCQlyZW5kZXJpbmcvUmVu
ZGVyVGV4dEZyYWdtZW50LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCi0JCQogCQly
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
CiAJCXJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCiAJCXJlbmRlcmluZy9Sb290SW5saW5lQm94
LmNwcAorCQlyZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKKwkJcmVuZGVyaW5nL1NWR1Jv
b3RJbmxpbmVCb3guY3BwCiAKIAk8L3NldD4KIApAQCAtNTU3LDExICs2OTMsMTIgQEAKIAk8L3Nl
dD4KIAogCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19JQ09OIj4KLQkJaWNv
bi9JY29uRGF0YWJhc2UuY3BwCi0JCWljb24vSWNvbkxvYWRlci5jcHAKLQkJaWNvbi9TUUxEYXRh
YmFzZS5jcHAKLQkJaWNvbi9TUUxTdGF0ZW1lbnQuY3BwCi0JCWljb24vU2l0ZUljb24uY3BwCisJ
CWxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKwkJbG9hZGVyL2ljb24vSWNvbkRhdGFDYWNo
ZS5jcHAKKwkJbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKKwkJbG9hZGVyL2ljb24vU1FMRGF0
YWJhc2UuY3BwCisJCWxvYWRlci9pY29uL1NRTFN0YXRlbWVudC5jcHAKKwkJbG9hZGVyL2ljb24v
U1FMVHJhbnNhY3Rpb24uY3BwCiAJPC9zZXQ+CiAKIAk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJD
T1JFX1NPVVJDRVNfQlJJREdFIj4KQEAgLTU4Miw5ICs3MTksMTIgQEAKIAkJZWRpdGluZy9Db21t
YW5kQnlOYW1lLmNwcAogCQllZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAogCQllZGl0
aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNwcAorCQllZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXIuY3BwCisJCWVkaXRpbmcvRGVsZXRlQnV0dG9uLmNwcAogCQllZGl0aW5nL0RlbGV0ZUZyb21U
ZXh0Tm9kZUNvbW1hbmQuY3BwCiAJCWVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
IAkJZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKKwkJZWRpdGluZy9FZGl0b3IuY3BwCiAJCWVkaXRp
bmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAogCQllZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAogCQll
ZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAKQEAgLTYwNyw4ICs3NDcsOCBAQAogCQllZGl0aW5n
L1JlbW92ZU5vZGVDb21tYW5kLmNwcAogCQllZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW5Db21tYW5kLmNwcAogCQllZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAor
CQllZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCiAJCWVkaXRpbmcvU2VsZWN0aW9uLmNw
cAotCQllZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCiAJCWVkaXRpbmcvU2V0Tm9kZUF0
dHJpYnV0ZUNvbW1hbmQuY3BwCiAJCWVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKIAkJ
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKQEAgLTYxNiwxMCArNzU2LDkgQEAKIAkJ
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCiAJCWVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKIAkJ
ZWRpdGluZy9VbmxpbmtDb21tYW5kLmNwcAorCQllZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAK
IAkJZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAotCQllZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5j
cHAKIAkJZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCi0KIAk8L3Nl
dD4KIAk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSFRNTCI+CiAKQEAgLTY1
MSw2ICs3OTAsNyBAQAogCQlodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKIAkJaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCiAJCWh0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAKKwkJaHRtbC9IVE1M
RnJhbWVFbGVtZW50QmFzZS5jcHAKIAkJaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAogCQlo
dG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuY3BwCiAJCWh0bWwvSFRNTEhlYWRFbGVtZW50LmNw
cApAQCAtNzAyLDEyICs4NDIsMTggQEAKIAkgICAgaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50
LmNwcAkKIAogCTwvc2V0PgotCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19C
SU5ESU5HUyI+Ci0JCQogCisJPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NV
UkwiPgorCisJCXBsYXRmb3JtL25ldHdvcmsvZ2RrL0xvYWRlckZ1bmN0aW9uc0N1cmwuY3BwCisJ
CXBsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlTG9hZGVyQ3VybC5jcHAKKwkJcGxhdGZvcm0v
bmV0d29yay9nZGsvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmNwcAorCiAJPC9zZXQ+CisKIAk8c2V0
IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSlMiPgogCQkKKwogCQliaW5kaW5ncy9q
cy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKIAkJYmluZGluZ3MvanMvSlNI
VE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAogCQliaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxl
bWVudEN1c3RvbS5jcHAKQEAgLTcxNSw2ICs4NjEsMTAgQEAKIAkJYmluZGluZ3MvanMvSlNIVE1M
T3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcAogCQliaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25z
Q29sbGVjdGlvbkN1c3RvbS5jcHAKIAkJYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwCisJCWJpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAorCQliaW5k
aW5ncy9qcy9KU1NWR051bWJlci5jcHAKKwkJYmluZGluZ3MvanMvSlNTVkdQb2ludC5jcHAKKwkJ
YmluZGluZ3MvanMvSlNTVkdSZWN0LmNwcAogCQliaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0
b20uY3BwCiAJCWJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCiAJCWJpbmRpbmdzL2pz
L0pTWFNMVFByb2Nlc3Nvci5jcHAKQEAgLTczMCw0ICs4ODAsMTU0IEBACiAKIAk8L3NldD4KIAor
CTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19LQ0FOVkFTIj4KKworCQlrY2Fu
dmFzL0tDYW52YXNDbGlwcGVyLmNwcAorCQlrY2FudmFzL0tDYW52YXNDcmVhdG9yLmNwcAorCQlr
Y2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAorCQlrY2FudmFzL0tDYW52YXNNYXJrZXIuY3BwCisJ
CWtjYW52YXMvS0NhbnZhc01hc2tlci5jcHAKKwkJa2NhbnZhcy9LQ2FudmFzUmVzb3VyY2UuY3Bw
CisJCWtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAKKwkJa2NhbnZhcy9kZXZpY2UvS1JlbmRl
cmluZ0RldmljZS5jcHAKKwkJa2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnQuY3BwCisJCWtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4u
Y3BwCisJCWtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmNwcAorCisJ
PC9zZXQ+CisKKwk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfS1NWRzIiPgor
CisKKwkJa3N2ZzIvY3NzL1NWR0NTU1BhcnNlci5jcHAKKwkJa3N2ZzIvY3NzL1NWR0NTU1N0eWxl
U2VsZWN0b3IuY3BwCisJCWtzdmcyL2Nzcy9TVkdSZW5kZXJTdHlsZS5jcHAKKwkJa3N2ZzIvY3Nz
L1NWR1JlbmRlclN0eWxlRGVmcy5jcHAKKyAgICAgICAgICA8IS0tCisJCWtzdmcyL2VjbWEvR2xv
YmFsT2JqZWN0LmNwcAorICAgICAgICAgIC0tPgorCQlrc3ZnMi9ldmVudHMvSlNTVkdMYXp5RXZl
bnRMaXN0ZW5lci5jcHAKKwkJa3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5jcHAKKwkJa3N2ZzIv
bWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCisJCWtzdmcyL21pc2MvS1NWR1RpbWVTY2hl
ZHVsZXIuY3BwCisJCWtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAorCQlrc3Zn
Mi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAorCQlrc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCisJ
CWtzdmcyL3N2Zy9TVkdBbmdsZS5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1l
bnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdBbmltYXRlZFBhdGhEYXRhLmNwcAorCQlrc3ZnMi9zdmcv
U1ZHQW5pbWF0ZWRQb2ludHMuY3BwCisJCWtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3Bw
CisJCWtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdDb2xv
ci5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNw
cAorCQlrc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0RlZnNF
bGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRGVzY0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9T
VkdEb2N1bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0RPTUltcGxlbWVudGF0aW9uLmNwcAorCQlr
c3ZnMi9zdmcvU1ZHRWxlbWVudC5jcHAKKyAgICAgICAgICA8IS0tCisJCWtzdmcyL3N2Zy9TVkdF
bGVtZW50SW5zdGFuY2UuY3BwCisJCWtzdmcyL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmNw
cAorICAgICAgICAgIC0tPgorCQlrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCisJCWtz
dmcyL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAorCQlrc3ZnMi9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUZ1bmNBRWxlbWVu
dC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFRnVuY0JFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZH
RkVGdW5jR0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUZ1bmNSRWxlbWVudC5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZF
SW1hZ2VFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCisJCWtz
dmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2Rl
RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNw
cAorCQlrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAorCQlr
c3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdHRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0dy
YWRpZW50RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0hlbHBlci5jcHAKKwkJa3N2ZzIvc3Zn
L1NWR0ltYWdlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0xhbmdTcGFjZS5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR0xlbmd0aC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0xlbmd0aExpc3QuY3BwCisJCWtz
dmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdMaW5l
RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R01hcmtlckVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR01hdHJpeC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR01ldGFkYXRhRWxlbWVudC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR051bWJlckxpc3QuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYWludC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvc3ZncGF0aHBhcnNl
ci5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdBcmMuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRo
U2VnQ2xvc2VQYXRoLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZy5jcHAKKwkJa3N2ZzIvc3Zn
L1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMu
Y3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG8uY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNl
Z01vdmV0by5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAorCQlrc3ZnMi9z
dmcvU1ZHUG9pbnRMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCisJCWtz
dmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCisJCWtzdmcy
L3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdSZWN0RWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9T
VkdTZXRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCisJCWtzdmcy
L3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3R5bGFibGUuY3BwCisJCWtz
dmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3R5bGVkTG9jYXRh
YmxlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2
Zy9TVkdTeW1ib2xFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVGVzdHMuY3BwCisJCWtzdmcy
L3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVu
dC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCisJCWtzdmcy
L3N2Zy9TVkdUaXRsZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNw
cAorCQlrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmNwcAorCQlrc3ZnMi9zdmcvU1ZHVHJhbnNmb3Jt
TGlzdC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZH
VFNwYW5FbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1ZpZXdFbGVtZW50LmNwcAor
CQlrc3ZnMi9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAKKworCTwvc2V0PgorCiA8L21ha2VmaWxlPgpJ
bmRleDogV2ViQ29yZS93ZWJjb3JlLWJhc2UuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2Vi
Y29yZS1iYXNlLmJrbAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3dlYmNvcmUtYmFzZS5i
a2wJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw5IEBACiAgICAgPGluY2x1ZGUgZmlsZT0i
V2ViQ29yZVNvdXJjZXMuYmtsIi8+CiAgICAgCiAJPHNldCB2YXI9IldFQkNPUkVfQkFTRV9TT1VS
Q0VTIj4JCi0JCSQoV0VCQ09SRV9TT1VSQ0VTX0RFUklWRURTT1VSQ0VTKQotCQkkKFdFQkNPUkVf
U09VUkNFU19LSFRNTCkKLQkJJChXRUJDT1JFX1NPVVJDRVNfTUlTQykKIAkJJChXRUJDT1JFX1NP
VVJDRVNfUEFHRSkKIAkJJChXRUJDT1JFX1NPVVJDRVNfTE9BREVSKQorCQkkKFdFQkNPUkVfU09V
UkNFU19JQ09OKQogCQkkKFdFQkNPUkVfU09VUkNFU19QTEFURk9STSkKIAkJJChXRUJDT1JFX1NP
VVJDRVNfSU1BR0UtREVDT0RFUlMpCiAJCSQoV0VCQ09SRV9TT1VSQ0VTX0JNUCkKQEAgLTYwLDgg
KzU4LDggQEAKIAkJJChXRUJDT1JFX1NPVVJDRVNfQlJJREdFKQogCQkkKFdFQkNPUkVfU09VUkNF
U19FRElUSU5HKQogCQkkKFdFQkNPUkVfU09VUkNFU19IVE1MKQotCQkkKFdFQkNPUkVfU09VUkNF
U19CSU5ESU5HUykKIAkJJChXRUJDT1JFX1NPVVJDRVNfSlMpCisJCSQoV0VCQ09SRV9TT1VSQ0VT
X0RFUklWRURTT1VSQ0VTKQogCTwvc2V0PgogCiAgICAgPHNldCB2YXI9IkJVSUxERElSIj5vYmot
JChGT1JNQVQpPC9zZXQ+CkBAIC03MCwxMiArNjgsMTIgQEAKICAgICAgICAgPGluY2x1ZGU+JChT
UkNESVIpL3BsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYzwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1
ZGU+JChTUkNESVIpL3BsYXRmb3JtL2NhaXJvL3BpeG1hbi9zcmM8L2luY2x1ZGU+CiAgICAgICAg
IDxzb3VyY2VzPgotICAgICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfQ0FJUk8pIAotCQkgICAg
JChXRUJDT1JFX1NPVVJDRVNfUElYTUFOKSAKKwkJCSQoV0VCQ09SRV9TT1VSQ0VTX0NBSVJPKSAK
KwkJCSQoV0VCQ09SRV9TT1VSQ0VTX1BJWE1BTikgCiAgICAgICAgIDwvc291cmNlcz4KICAgICA8
L3RlbXBsYXRlPgogICAgIAotICAgIDx0ZW1wbGF0ZSBpZD0id2ViY29yZV9iYXNlIiB0ZW1wbGF0
ZT0ieG1sMixpY29udix4c2x0LGljdSxqc2NvcmUiPgorICAgIDx0ZW1wbGF0ZSBpZD0id2ViY29y
ZV9iYXNlIiB0ZW1wbGF0ZT0ieG1sMixpY29udix4c2x0LGljdSI+CiAgICAgICAgIDxpbmNsdWRl
PiQoU1JDRElSKS8uPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvaW5jbHVk
ZTwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmU8L2luY2x1ZGU+CkBAIC05NywxNSArOTUsMjAgQEAKICAgICAgICAgPGluY2x1ZGU+JChT
UkNESVIpL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibTwvaW5jbHVkZT4KICAgICAgICAgPGlu
Y2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZzwvaW5jbHVkZT4KICAg
ICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWI8L2lu
Y2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9uZXRvd3JrPC9pbmNs
dWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vbmV0d29yazwvaW5jbHVk
ZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3JlbmRlcmluZzwvaW5jbHVkZT4KICAgICAg
ICAgPGluY2x1ZGU+JChTUkNESVIpL3htbDwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChT
UkNESVIpL2tjYW52YXM8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2Fu
dmFzL2RldmljZTwvaW5jbHVkZT4KLSAgICAgICAgCi0gICAgICAgIDxzb3VyY2VzPiQoV0VCQ09S
RV9CQVNFX1NPVVJDRVMpPC9zb3VyY2VzPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikva3N2
ZzI8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rc3ZnMi9iaW5kaW5ncy9q
czwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyL2NzczwvaW5jbHVk
ZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyL2VjbWE8L2luY2x1ZGU+CisgICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rc3ZnMi9ldmVudHM8L2luY2x1ZGU+CisgICAgICAgIDxp
bmNsdWRlPiQoU1JDRElSKS9rc3ZnMi9taXNjPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4k
KFNSQ0RJUikva3N2ZzIvc3ZnPC9pbmNsdWRlPgorICAgCiAKLQogPCEtLSBIQUNLIEFMRVJUISBG
SVggVEhFU0UgTEFURVIhISAtLT4KICAgICAgIDxpZiBjb25kPSJQTEFURk9STV9NQUNPU1g9PScx
JyI+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9tYWM8L2luY2x1ZGU+IDwh
LS0gd2hlbiBidWlsZGluZyBvbiBNYWMsIEV4dHJhQ0ZFbmNvZGluZ3MuaCBpcyBuZWVkZWQgLS0+
ICAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAx
NzM5OSkKKysrIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsOSBAQAogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDx3aW5k
b3dzLmg+CiAjaW5jbHVkZSA8d2luYmFzZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvc3RhdC5o
PgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
SW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1Bh
Z2UuaAkocmV2aXNpb24gMTczOTkpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw2ICs4NywxMCBAQAogICAgICAgICBzdGF0aWMgSElOU1RBTkNFIGluc3RhbmNl
SGFuZGxlKCkgeyByZXR1cm4gc19pbnN0YW5jZUhhbmRsZTsgfQogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShHREspCisgICAgICAgIFBhZ2UoKTsKKyNlbmRpZgorCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBpbml0KCk7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxNzM5OSkKKysr
IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bVNjcm9sbEJhci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRl
ICJSZW5kZXJQYXJ0LmgiCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQAogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Ny
b2xsYmFyLmgiCiAjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
LmgiCiAjaW5jbHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKSW5kZXg6IFdlYktpdFRvb2xzL0dka0xh
dW5jaGVyL21haW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL21h
aW4uY3BwCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL21haW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDE3ICsyLDI0IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4K
ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUg
PGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5
bXMuaD4KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFtZUdkay5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5o
IgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgor
Ly8jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKKy8vI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWYgU1ZHX1NV
UFBPUlQKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtMjAsMTggKzI3LDI3IEBACiAjaW5jbHVk
ZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjZW5kaWYKIAorLy9wYWludGluZwogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIldpbmRvd0dkay5oIgorI2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiRWRpdG9y
Q2xpZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgR01haW5Mb29w
ICpsb29wOworCiBjbGFzcyBMYXVuY2hlckZyYW1lR2RrIDogcHVibGljIEZyYW1lR2RrCiB7CiBw
dWJsaWM6Ci0gICAgTGF1bmNoZXJGcmFtZUdkayhQYWdlKiBwYWdlLCBFbGVtZW50KiBlbGVtZW50
KSA6IEZyYW1lR2RrKHBhZ2UsIGVsZW1lbnQpLCBtX2V4aXRBZnRlckxvYWRpbmcoZmFsc2UpIHt9
Ci0gICAgTGF1bmNoZXJGcmFtZUdkayhHZGtEcmF3YWJsZSogZHJhd2FibGUpIDogRnJhbWVHZGso
ZHJhd2FibGUpLCBtX2V4aXRBZnRlckxvYWRpbmcoZmFsc2UpIHt9CisgICAgTGF1bmNoZXJGcmFt
ZUdkayhQYWdlKiBwYWdlLCBFbGVtZW50KiBlbGVtZW50LFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50
PiBlZGl0b3IsV2luZG93R2RrKiB3aW5kb3cpIDogRnJhbWVHZGsocGFnZSxlbGVtZW50LGVkaXRv
cix3aW5kb3cpLCBtX2V4aXRBZnRlckxvYWRpbmcoZmFsc2UpCisgICAge30KICAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlZE9ubG9hZEV2ZW50cygpOwotICAgIHZvaWQgc2V0RXhpdEFmdGVyTG9hZGlu
Zyhib29sIGV4aXRBZnRlckxvYWRpbmcpIHsgbV9leGl0QWZ0ZXJMb2FkaW5nID0gZXhpdEFmdGVy
TG9hZGluZzsgfQorICAgIHZvaWQgc2V0RXhpdEFmdGVyTG9hZGluZyhib29sIGV4aXRBZnRlckxv
YWRpbmcpCisgICAgeworICAgICAgICBtX2V4aXRBZnRlckxvYWRpbmcgPSBleGl0QWZ0ZXJMb2Fk
aW5nOworICAgIH0KIHByaXZhdGU6CiAgICAgYm9vbCBtX2V4aXRBZnRlckxvYWRpbmc7CiB9OwpA
QCAtMzksNjAgKzU1LDk2IEBACiB2b2lkIExhdW5jaGVyRnJhbWVHZGs6OmhhbmRsZWRPbmxvYWRF
dmVudHMoKQogewogICAgIGlmIChtX2V4aXRBZnRlckxvYWRpbmcpCi0gICAgICAgIGd0a19tYWlu
X3F1aXQoKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKIH0KIAotc3RhdGljICBM
YXVuY2hlckZyYW1lR2RrICpmcmFtZTsKLXN0YXRpYyAgR2RrV2luZG93ICp3aW47CitzdGF0aWMg
TGF1bmNoZXJGcmFtZUdkayAqZnJhbWU7CitzdGF0aWMgR2RrV2luZG93ICp3aW47CitzdGF0aWMg
V2luZG93R2RrICp3aW5kb3c7CitzdGF0aWMgYm9vbCBkZWJ1ZzsKIAogc3RhdGljIHZvaWQgaGFu
ZGxlX2V2ZW50KEdka0V2ZW50ICpldmVudCkKIHsKKyAgICBnZGtfdGhyZWFkc19sZWF2ZSgpOwor
ICAgIFdpbmRvd0dkayogZWZyYW1lID0gV2luZG93R2RrOjpmaW5kV2luZG93KGV2ZW50LT5hbnku
d2luZG93KTsKKyAgICBpZiAoZWZyYW1lKSB7CisgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAg
ICAgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBHREtfRVhQT1NF
OgorICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSBjbGlwOworICAgICAgICAgICAgICAgIGdk
a19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdpb24sICZjbGlwKTsKKyAgICAg
ICAgICAgICAgICAvL3ByaW50ZigiIFBBSU5UIEZSQU1FICVwIHg9JWQgeT0lZCB3PSVkIGg9JWQg
XG4iLGVmcmFtZSwKKyAgICAgICAgICAgICAgICAvLyAgICBjbGlwLngsIGNsaXAueSwgY2xpcC53
aWR0aCwgY2xpcC5oZWlnaHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBHREtfS0VZX1BSRVNTOgorICAgICAgICAgICAgICAgIGlmIChldmVudC0+a2V5LmtleXZh
bCA9PSBHREtfRjkpIHsKKyAgICAgICAgICAgICAgICAgICAgRnJhbWVHZGsqIGVmcmFtZSA9IHdp
bmRvdy0+ZnJhbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdCA9
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oZWZyYW1lLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzOworICAgICAgICAgICAgICAgICAgICBwcmludGYo
IkZSQU1FR0RLIERPQ1VNRU5UOiAlcyBcbiIsc3QuYXNjaWkoKSk7CisgICAgICAgICAgICAgICAg
ICAgIFRleHRTdHJlYW0gc3RyZWFtKCZzKTsKKyAgICAgICAgICAgICAgICAgICAgZWZyYW1lLT5k
b2N1bWVudCgpLT5kdW1wKCZzdHJlYW0sRGVwcmVjYXRlZFN0cmluZygiICIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJpbnRmKCJGUkFNRUdESyBOT0RFUzogJXMgXG4iLHMuYXNjaWkoKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVmcmFtZS0+aGFuZGxlR2RrRXZlbnQoZXZlbnQpOworICAgIH0K
ICAgICBpZiAoR0RLX0RFTEVURSA9PSBldmVudC0+dHlwZSkgewotICAgICAgICBndGtfbWFpbl9x
dWl0KCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgZnJhbWUtPmhhbmRsZUdka0V2ZW50KGV2ZW50KTsKKyAgICBnZGtfdGhyZWFk
c19lbnRlcigpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSAKK2ludCBt
YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisgICAgZGVidWcgPSB0cnVlOwogICAgIEdk
a1dpbmRvd0F0dHIgYXR0cjsKLSAgICBjaGFyICp1cmw7CisgICAgZ190aHJlYWRfaW5pdCgwKTsK
KyAgICBnZGtfdGhyZWFkc19pbml0KCk7CiAgICAgZ2RrX2luaXQoJmFyZ2MsJmFyZ3YpOwogICAg
IGdka19ldmVudF9oYW5kbGVyX3NldCAoKEdka0V2ZW50RnVuYyloYW5kbGVfZXZlbnQsIE5VTEws
IE5VTEwpOwotCi0gICAgYXR0ci53aWR0aCA9IDgwMDsKLSAgICBhdHRyLmhlaWdodCA9IDYwMDsK
KyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLFRSVUUpOworICAgIFN0cmluZyBzID0g
Z2V0ZW52KCJQV0QiKTsKKyAgICBzID0gImZpbGU6Ly8iK3MrIi9jb21wb25lbnRzIjsKKyAgICBG
cmFtZUdkazo6c2V0SW5zdGFsbExvY2F0aW9uKHMuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCkp
OworICAgIGF0dHIud2lkdGggPSA0MDA7CisgICAgYXR0ci5oZWlnaHQgPSAzMDA7CiAgICAgYXR0
ci53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfVE9QTEVWRUw7CiAgICAgYXR0ci53Y2xhc3MgPSBH
REtfSU5QVVRfT1VUUFVUOwogICAgIC8vc2VlIGhvdyB3aGVyZSB3ZSBoYW5kbGUgbW90aW9uIGhl
cmUgbmVlZCB0byBkbyB0aGUgaGludCBzdHVmZgotICAgIGF0dHIuZXZlbnRfbWFzayA9ICgoR0RL
X0FMTF9FVkVOVFNfTUFTS15HREtfUE9JTlRFUl9NT1RJT05fSElOVF9NQVNLKSk7IAorICAgIGF0
dHIuZXZlbnRfbWFzayA9ICgoR0RLX0FMTF9FVkVOVFNfTUFTS15HREtfUE9JTlRFUl9NT1RJT05f
SElOVF9NQVNLKSk7CiAgICAgd2luID0gZ2RrX3dpbmRvd19uZXcoTlVMTCwmYXR0ciwwKTsKLSAg
ICBmcmFtZSA9IG5ldyBMYXVuY2hlckZyYW1lR2RrKHdpbik7CisgICAgd2luZG93ID0gbmV3IFdp
bmRvd0dkayh3aW4pOworICAgIFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3I7CisgICAg
ZnJhbWUgPSBuZXcgTGF1bmNoZXJGcmFtZUdkayhuZXcgUGFnZSwwLGVkaXRvcix3aW5kb3cpOwog
ICAgIGdka193aW5kb3dfc2hvdyh3aW4pOwotICAgIHVybCA9ICJodHRwOi8vd3d3Lmdvb2dsZS5j
b20iOworCisgICAgY2hhciAqdXJsID0iY29tcG9uZW50cy9icm93c2VyLnN2ZyI7CiAgICAgYm9v
bCBleGl0QWZ0ZXJMb2FkaW5nID0gZmFsc2U7CisKICAgICBmb3IgKGludCBhcmdQb3MgPSAxOyBh
cmdQb3MgPCBhcmdjOyArK2FyZ1BvcykgewogICAgICAgICBpZiAoMCA9PSBzdHJjbXAoYXJndlth
cmdQb3NdLCAiLWV4aXQtYWZ0ZXItbG9hZGluZyIpKQogICAgICAgICAgICAgZXhpdEFmdGVyTG9h
ZGluZyA9IHRydWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHVybCA9IGFyZ3ZbYXJnUG9z
XTsKICAgICB9Ci0gICAgZnJhbWUtPnNldEV4aXRBZnRlckxvYWRpbmcoZXhpdEFmdGVyTG9hZGlu
Zyk7Ci0gICAgaWYgKHVybCkgewotICAgICAgICBwcmludGYoIk9QRU5JTkcgVVJMID09ICVzIFxu
IiwgdXJsKTsKLSAgICAgICAgZnJhbWUtPm9wZW5VUkwodXJsKTsKLSAgICB9IGVsc2UgewotI2lm
IDAKLSAgICAgICAgY2hhciAqcGcgPSAiIDxodG1sPjxoZWFkPjx0aXRsZT5Hb29nbGU8L3RpdGxl
PiA8Ym9keSBiZ2NvbG9yPSNmZmZmZmYgdGV4dD0jMDAwMDAwPiA8cD48Zm9udCBzaXplPS0yLz4y
MDA2IEdvb2dsZSBIZWxsbyBiaWd3b3JsZCBmcm9tIG1pa2U8L3A+PC9ib2R5PjwvaHRtbD4gIjsK
LSAgICAgICAgZnJhbWUtPmNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsKLSAgICAgICAgZnJhbWUtPmRv
Y3VtZW50KCktPm9wZW4oKTsKLSAgICAgICAgZnJhbWUtPndyaXRlKHBnLHN0cmxlbihwZykpOwot
ICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2xvc2UoKTsKLSNlbmRpZgorCisgICAgU3RyaW5n
IHN1cmw9dXJsOworCisgICAgaWYgKHN0cm5jbXAoImZpbGU6Ly8iLHVybCw3KSAmJiBzdHJuY21w
KCJodHRwOi8vIix1cmwsNykpIHsKKyAgICAgICAgaWYgKCp1cmwgIT0gJy8nKSB7CisgICAgICAg
ICAgICBTdHJpbmcgcHdkID0gZ2V0ZW52KCJQV0QiKTsKKyAgICAgICAgICAgIHN1cmwgPSAiZmls
ZTovLyIrcHdkKyIvIitzdXJsOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN1cmwgPSAi
ZmlsZTovLyIrc3VybDsKICAgICB9Ci0gICAgCi0gICAgZ3RrX21haW4oKTsKKworICAgIHByaW50
ZigiT1BFTklORyBVUkwgPT0gJXMgXG4iLCBzdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgp
KTsKKyAgICBmcmFtZS0+b3BlblVSTChzdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgZ19t
YWluX2xvb3BfcnVuIChsb29wKTsKICAgICBkZWxldGUgZnJhbWU7CiAgICAgZ2RrX3dpbmRvd19k
ZXN0cm95KHdpbik7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hl
ci9jb21wb25lbnRzL2Jyb3dzZXIuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dka0xh
dW5jaGVyL2NvbXBvbmVudHMvYnJvd3Nlci5zdmcJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29s
cy9HZGtMYXVuY2hlci9jb21wb25lbnRzL2Jyb3dzZXIuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJ5ZXMiPz4KKzxzdmcg
eG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgCisgeG1sbnMg
PSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgeG1sbnM6eGxpbmsgPSAiaHR0cDovL3d3
dy53My5vcmcvMTk5OS94bGluayIKKyB4bWxuczpodG1sID0gImh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiCisgaWQ9Im1haW4iCisgb25sb2FkPSJpbml0KGV2dCkiID4KKworPHNjcmlwdCB0
eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPgorPCFbQ0RBVEFbCisgICAgdmFyIGV2dFRleHQxOworICAg
IHZhciBiZ1JlY3Q7CisgICAgdmFyIHR5cGVJbml0aWFsaXplZCA9IGZhbHNlOworICAgIHZhciB0
ZXh0ID0gIiI7CisgICAgdmFyIGJyb3dzZXI7CisgICAgdmFyIHN2Z3Jvb3Q7CisgICAgdmFyIGJh
Y2tncm91bmQ7CisgICAgdmFyIGJvcmRlcjsKKyAgICBmdW5jdGlvbiBpbml0KGV2dCkgeworICAg
ICAgICAvL2dldHRpbmcgcmVmZXJlbmNlcyB0byBkeW5hbWljIHRleHQgZWxlbWVudHMKKyAgICAg
ICAgc3Zncm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIik7CisgICAgICAgIGV2
dFRleHQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV2dFRleHQxIik7CisgICAgICAgIGJn
UmVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiZ1JlY3QiKTsKKyAgICAgICAgYnJvd3Nl
ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJicm93c2VyIik7CisgICAgICAgIGJhY2tncm91
bmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmFja2dyb3VuZCIpOworICAgICAgICBib3Jk
ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9yZGVyIik7CisgICAgICAgIHZhciB1cmwg
PSBicm93c2VyLmdldEF0dHJpYnV0ZSgic3JjIik7CisgICAgICAgIGlmKCAhdXJsICkgdXJsPSJh
Ym91dDpibGFuayI7CisgICAgICAgIGlmKCAhZXZ0VGV4dDEuZmlyc3RDaGlsZCkKKyAgICAgICAg
ICAgIGV2dFRleHQxLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHVybCkpOyAg
ICAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZ0VGV4dDEuZmlyc3RDaGlsZC5ub2RlVmFs
dWUgPXVybDsgCisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHR5
cGVUZXh0LGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJl
c3MiLHR5cGVUZXh0LGZhbHNlKTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJl
c2l6ZSIscmVzaXplLGZhbHNlKTsKKyAgICAgICAgcmVzaXplKCk7CisgICAgfQorCitmdW5jdGlv
biByZXNpemUoZXZ0KSB7CisgICAgaWYgKCF3aW5kb3cuaW5uZXJXaWR0aCkgeworICAgICAgICB3
aWR0aCA9IHBhcnNlRmxvYXQoc3Zncm9vdC52aWV3cG9ydC53aWR0aCkgLTIwOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHdpZHRoID0gd2luZG93LmlubmVyV2lkdGggLTIwOworICAgIH0gICAgICAg
ICAgICAgICAgCisgICAgaWYgKCF3aW5kb3cuaW5uZXJIZWlnaHQpIHsKKyAgICAgICAgaGVpZ2h0
ID0gcGFyc2VGbG9hdChzdmdyb290LnZpZXdwb3J0LmhlaWdodCkgLSA3MDsKKyAgICB9IGVsc2Ug
eworICAgICAgICBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLTcwOworICAgIH0gICAgICAg
ICAgICAgICAgIAorCWJhY2tncm91bmQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsd2lkdGgpOworCWJh
Y2tncm91bmQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGhlaWdodCk7CisJYm9yZGVyLnNldEF0dHJp
YnV0ZSgid2lkdGgiLHdpZHRoKzIpOworCWJvcmRlci5zZXRBdHRyaWJ1dGUoImhlaWdodCIsaGVp
Z2h0KzIpOworCWJyb3dzZXIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsd2lkdGgpOworCWJyb3dzZXIu
c2V0QXR0cmlidXRlKCJoZWlnaHQiLGhlaWdodCk7CisgICAgLy9kZWJ1ZworICAgIC8vZXZ0VGV4
dDEuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSAidz0iK3dpZHRoKyJoPSIraGVpZ2h0KyIgZm9yPSIr
YmFja2dyb3VuZC5nZXRBdHRyaWJ1dGUoImhlaWdodCIpOyAKK30KKy8vdGhpcyBmdW5jdGlvbiBo
YW5kbGVzIHRoZSBrZXlib2FyZCBldmVudHMKK2Z1bmN0aW9uIHR5cGVUZXh0KGV2dCkgeworICAg
ICAgICAvL2hhbmRsZSAia2V5cHJlc3MiIGZvciBhbGwgInJlYWwgY2hhcmFjdGVycyIKKworICAg
ICAgICB2YXIgY2hhckNvZGU7CisgICAgICAgIGlmIChldnQuY2hhckNvZGUpIHsKKyAgICAgICAg
ICAgIGNoYXJDb2RlID0gZXZ0LmNoYXJDb2RlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KCBldnQua2V5Q29kZSApeworICAgICAgICAgICAgY2hhckNvZGUgPSBldnQua2V5Q29kZTsKKyAg
ICAgICAgfWVsc2UgeworICAgICAgICAgICAgIGNoYXJDb2RlID0gZXZ0LmtleUlkZW50aWZpZXI7
CisgICAgICAgIH0KKyAgICAgICAgLy9pZighZXZ0VGV4dC5maXJzdENoaWxkKTsgICAgCisgICAg
ICAgIC8vICAgIGV2dFRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIp
KTsgICAgCisgICAgICAgIC8vfQorICAgICAgICB0ZXh0ID0gZXZ0VGV4dDEuZmlyc3RDaGlsZC5u
b2RlVmFsdWU7CisKKyAgICAgICAgaWYgKGV2dC50eXBlID09ICJrZXlwcmVzcyIgKSB7CisgICAg
ICAgICAgICAvL3NvbWUgYnJvd3NlcnMgc3VwcG9ydCBldnQuY2hhckNvZGUsIHNvbWUgb25seSBl
dnQua2V5Q29kZQorCisgICAgICAgICAgICAvL2FsbCByZWFsIGNoYXJhY3RlcnMKKyAgICAgICAg
ICAgIGlmIChjaGFyQ29kZSA+IDMxICYmIGNoYXJDb2RlICE9IDEyNyAmJiBjaGFyQ29kZSA8IDY1
NTM1KSB7CisgICAgICAgICAgICAgICAgdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJD
b2RlKTsKKyAgICAgICAgICAgICAgICBiZ1JlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgInN0cm9r
ZSIsICJyZ2IoMCwwLDI1NSkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfWVsc2UgaWYgKGV2
dC50eXBlID09ICJrZXlkb3duIikgeworICAgICAgICAgICAgLy9iYWNrc3BhY2Uga2V5CisgICAg
ICAgICAgICBpZiAoY2hhckNvZGUgPT0gOCkgeworICAgICAgICAgICAgICAgIC8vc2hvcnRlbiB0
ZXh0CisgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsdGV4dC5sZW5ndGgt
MSk7CisgICAgICAgICAgICAgICAgYmdSZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICJzdHJva2Ui
LCAicmdiKDAsMCwyNTUpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL2VudGVyIGtl
eQorICAgICAgICAgICAgZWxzZSBpZiAoY2hhckNvZGUgPT0gMTAgfHwgY2hhckNvZGUgPT0gMTMp
IHsKKyAgICAgICAgICAgICAgICBzdG9wVHlwaW5nKGV2dCk7CisgICAgICAgICAgICAgICAgYmdS
ZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICJzdHJva2UiLCAicmdiKDAsMCwwKSIpOworICAgICAg
ICAgICAgICAgIHRleHQgPSBldnRUZXh0MS5maXJzdENoaWxkLm5vZGVWYWx1ZTsKKyAgICAgICAg
ICAgICAgICBicm93c2VyLnNldEF0dHJpYnV0ZU5TKG51bGwsICJzcmMiLHRleHQpOworICAgICAg
ICAgICAgICAgIHdpbmRvdy5mcmFtZXNbImNvbnRlbnQiXS5sb2NhdGlvbiA9IHRleHQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy91cGRhdGUgZHluYW1pYyB0ZXh0CisgICAg
ICAgIGV2dFRleHQxLmZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDsgCisgICAgICAgIC8vc3Vw
cHJlc3MgdW53YW50ZWQgYnJvd3NlciBzaG9ydGN1dHMuIGUuZy4gaW4gT3BlcmEgb3IgTW96aWxs
YQorICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKK30KKworLy90aGlzIGZ1bmN0aW9uIGFk
ZHMgdGhlIGV2ZW50IGxpc3RlbmVycworZnVuY3Rpb24gaW5pdFR5cGluZyhldnQpIHsKKyAgICBp
ZiAoIXR5cGVJbml0aWFsaXplZCkgeworICAgICAgICAvL2RvY3VtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoImNsaWNrIixzdG9wVHlwaW5nLGZhbHNlKTsKKyAgICAgICAgYmdSZWN0LnNldEF0dHJpYnV0
ZU5TKG51bGwsICJzdHJva2UiLCAicmdiKDAsMCwyNTUpIik7CisgICAgICAgIHR5cGVJbml0aWFs
aXplZCA9IHRydWU7CisgICAgfQorICAgIC8vd2UgZG9uJ3Qgd2FudCB0aGUgY2xpY2sgZXZlbnQg
b24gdGhlIGRvY3VtZW50IGxldmVsIHRvCisgICAgLy9pbW1lZGlhdGVseSBzdG9wIHRoZSB0eXBp
bmcgbW9kZQorICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTsKK30KK2Z1bmN0aW9uIHN0b3BUeXBp
bmcoZXZ0KSB7CisgICAgICAgIC8vZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJl
c3MiLHR5cGVUZXh0LGZhbHNlKTsKKyAgICAgICAgLy9kb2N1bWVudC5yZW1vdmVFdmVudExpc3Rl
bmVyKCJjbGljayIsc3RvcFR5cGluZyxmYWxzZSk7CisgICAgICAgIC8vYmdSZWN0LnNldEF0dHJp
YnV0ZU5TKG51bGwsICJzdHJva2UiLCAicmdiKDAsMCwwKSIpOworICAgICAgICAvL3R5cGVJbml0
aWFsaXplZCA9IGZhbHNlOworfQorXV0+Cis8L3NjcmlwdD4KKworPHN2ZyB4PSI3NXB4IiB5PSIx
MHB4IiB3aWR0aD0iMzAxcHgiIGhlaWdodD0iMjJweCI+IAorICAgIDxnIGZvbnQtc2l6ZT0iMTJw
eCIgb25tb3VzZWRvd249ImluaXRUeXBpbmcoZXZ0KSI+CisgICAgICAgIDxyZWN0IHg9IjAiIHk9
IjAiIHdpZHRoPSIzMDAiIGhlaWdodD0iMjIiIGZpbGw9IndoaXRlIiAgb25tb3VzZWRvd249Imlu
aXRUeXBpbmcoZXZ0KSIgLz4KKyAgICAgICAgPHJlY3QgaWQ9ImJnUmVjdCIgeD0iMiIgeT0iMiIg
d2lkdGg9IjI5NyIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgCisgICAgICAgICAgICAgc3Ryb2tl
PSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiAgb25tb3VzZWRvd249ImluaXRUeXBpbmcoZXZ0KSIv
PgorICAgICAgICA8dGV4dCB4PSI0IiB5PSIxNiIgaWQ9ImV2dFRleHQxIiBzdHJva2U9ImJsYWNr
Ii8+CisgICAgPC9nPgorPC9zdmc+CisgIDxyZWN0IGlkPSJib3JkZXIiIHg9IjhweCIgeT0iNThw
eCIgd2lkdGg9IjI1NCIgaGVpZ2h0PSIyNTQiIGZpbGw9Im5vbmUiIAorICAgICAgICBzdHJva2U9
ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiLz4gCisgIDxzd2l0Y2g+CisgICAgPGZvcmVpZ25PYmpl
Y3QgaWQ9ImJhY2tncm91bmQiIHg9IjEwcHgiIHk9IjYwcHgiIHdpZHRoPSIyNTAiIGhlaWdodD0i
MjUwIj4KKyAgICA8IS0taHRtbCAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
Ij4KKyAgICA8Ym9keSAgYmdjb2xvcj0iIzAwMDBmZiItLT4KKyAgICAgICAgPGlmcmFtZSAgCisg
ICAgICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgCisgICAgICAg
ICAgICBpZD0iYnJvd3NlciIgIAorICAgICAgICAgICAgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5j
b20iICAKKyAgICAgICAgICAgIHdpZHRoPSIyNTAiCisgICAgICAgICAgICBoZWlnaHQ9IjI1MCIK
KyAgICAgICAgICAgIHNjcm9sbGluZz0ieWVzIiBuYW1lPSJjb250ZW50Ij4KKyAgICAgICAgPC9p
ZnJhbWU+CisgICAgPCEtLS9ib2R5PgorICAgIDwvaHRtbC0tPgorICAgIDwvZm9yZWlnbk9iamVj
dD4KKyAgPC9zd2l0Y2g+Cis8L3N2Zz4KSW5kZXg6IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2Nv
bXBvbmVudHMvU2Nyb2xsYmFyL1Njcm9sbGJhci5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvR2RrTGF1bmNoZXIvY29tcG9uZW50cy9TY3JvbGxiYXIvU2Nyb2xsYmFyLnN2ZwkocmV2aXNp
b24gMCkKKysrIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2NvbXBvbmVudHMvU2Nyb2xsYmFyL1Nj
cm9sbGJhci5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IURPQ1RZUEUg
c3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDEvUkVDLVNWRy0yMDAxMDkwNC9EVEQvc3ZnMTAuZHRkIj4KKzxzdmcgaWQ9Im1h
aW4iIAorICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgCisgICAgeG1sbnM6
eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAorICAgIHdpZHRoPSIxMDAlIiBo
ZWlnaHQ9IjEwMCUiIHhtbDpzcGFjZT0icHJlc2VydmUiCisgICAgb25sb2FkPSJpbml0KGV2dCki
PgorPHNjcmlwdD4gICAgIAorPCFbQ0RBVEFbCit2YXIgYmFja2dyb3VuZDsKK3ZhciBzdmdyb290
OwordmFyIGhvcml6b250YWw7Cit2YXIgd2lkdGggPSAwOwordmFyIGhlaWdodCA9IDA7Cit2YXIg
ZXZlbnRDb3VudGVyID0gMDsKK3ZhciBrbm9iOworZnVuY3Rpb24gaW5pdChldnQpCit7CisJdmFy
IHN2Z2RvYyA9IGV2dC50YXJnZXQub3duZXJEb2N1bWVudDsKKyAgICBzdmdyb290ID0gc3ZnZG9j
LmdldEVsZW1lbnRCeUlkKCJtYWluIik7CisgICAgYmFja2dyb3VuZCA9IHN2Z2RvYy5nZXRFbGVt
ZW50QnlJZCgiYmFja2dyb3VuZCIpOworICAgIGtub2IgPSBzdmdkb2MuZ2V0RWxlbWVudEJ5SWQo
Imtub2IiKTsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixyZXNpemUsZmFs
c2UpOworICAgIGlmKCB3aW5kb3cubG9jYXRpb24uc2VhcmNoID09ICI/aG9yaXpvbnRhbCIgKSAK
KyAgICAgICAgaG9yaXpvbnRhbCA9IHRydWU7CisgICAgcmVzaXplKCk7Cit9CisKK2Z1bmN0aW9u
IHJlc2l6ZShldnQpCit7CisgICAgaWYgKCF3aW5kb3cuaW5uZXJXaWR0aCkgeworICAgICAgICB3
aWR0aCA9IHBhcnNlRmxvYXQoc3Zncm9vdC52aWV3cG9ydC53aWR0aCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKKyAgICB9ICAgICAgICAgICAgICAg
IAorICAgIGlmICghd2luZG93LmlubmVySGVpZ2h0KSB7CisgICAgICAgIGhlaWdodCA9IHBhcnNl
RmxvYXQoc3Zncm9vdC52aWV3cG9ydC5oZWlnaHQpOworICAgIH1lbHNlIHsKKyAgICAgICAgaGVp
Z2h0ID0gd2luZG93LmlubmVySGVpZ2h0OworICAgIH0gICAgICAgICAgICAgICAgIAorCWJhY2tn
cm91bmQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsd2lkdGgtMSk7CisJYmFja2dyb3VuZC5zZXRBdHRy
aWJ1dGUoImhlaWdodCIsaGVpZ2h0LTEpOworICAgIGlmKGhvcml6b250YWwpIHsKKwkgICAga25v
Yi5zZXRBdHRyaWJ1dGUoIndpZHRoIiw1MCk7CisJICAgIGtub2Iuc2V0QXR0cmlidXRlKCJoZWln
aHQiLGhlaWdodC01KTsKKwkgICAga25vYi5zZXRBdHRyaWJ1dGUoInkiLDIpOworICAgIH1lbHNl
IHsKKwkgICBrbm9iLnNldEF0dHJpYnV0ZSgid2lkdGgiLHdpZHRoLTUpOworICAgIH0KKyAgICBi
YWNrZ3JvdW5kLnNldEF0dHJpYnV0ZSgiZmlsbCIsInllbGxvdyIpOworfQorZnVuY3Rpb24ga25v
YkV2ZW50KGV2dCkKK3sKKwkgICAga25vYi5zZXRBdHRyaWJ1dGUoImZpbGwiLCJncmVlbiIpOwor
fQorXV0+Cis8L3NjcmlwdD4KKzxnPiAKKyAgICA8cmVjdCBpZD0iYmFja2dyb3VuZCIgc3Ryb2tl
PSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyLjAiCisgICAgICAgIGZpbGw9IndoaXRlIiB4PSIwIiB5
PSIxIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPgorICAgIDxnIG9ubW91c2Vkb3duPSJrbm9i
RXZlbnQoZXZ0KSIgCisgICAgICAgb25tb3VzZXVwPSJrbm9iRXZlbnQoZXZ0KSIKKyAgICAgICBv
bm1vdXNlb3V0PSJrbm9iRXZlbnQoZXZ0KSI+CisgICAgICAgIDxyZWN0IGlkPSJrbm9iIiBzdHJv
a2U9ImJsdWUiIHN0cm9rZS13aWR0aD0iMS4wIgorICAgICAgICAgICAgZmlsbD0id2hpdGUiIHg9
IjIiIHk9IjEwIiB3aWR0aD0iMTQiIGhlaWdodD0iNTAiLz4KKyAgICA8L2c+ICAgICAgICAgCis8
L2c+ICAgIAorPC9zdmc+CkluZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9jb21wb25lbnRz
L2Jyb3dzZXIuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2NvbXBv
bmVudHMvYnJvd3Nlci5jc3MJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9HZGtMYXVuY2hl
ci9jb21wb25lbnRzL2Jyb3dzZXIuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACisK
K0BuYW1lc3BhY2UgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOworCisvKmh0bWwgeyBt
aW4taGVpZ2h0OiAxMDAlOyBtYXJnaW4tYm90dG9tOiAxcHg7IH0qLworCitodG1sIHsKKyAgICAg
b3ZlcmZsb3c6YXV0bzsKK30KKworaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGJ1dHRvbiwgaXNp
bmRleCB7CisgICAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworaW5wdXQsdGV4dGFyZWEgewor
ICAgIHBhZGRpbmc6IDFweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3Jk
ZXItc3R5bGU6IG91dHNldDsKKyAgICBib3JkZXItd2lkdGg6IDFweDsKKyAgICBib3JkZXItY29s
b3I6IGdyYXk7Cit9CisKK2lucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InBhc3N3b3Jk
Il0saW5wdXRbdHlwZT0ic3VibWl0Il0sYnV0dG9uOmFjdGl2ZTpkaXNhYmxlZCB7CisgICAgYm9y
ZGVyLXN0eWxlOiBvdXRzZXQKKyAgICBwYWRkaW5nOiAycHggNnB4IDNweCA2cHg7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogQnV0dG9uRmFjZTsKKyAgICBib3JkZXItY29sb3I6IGdyYXk7CisgICAg
Ym9yZGVyLXdpZHRoOiAycHg7Cit9CisKKwpJbmRleDogV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIv
c2ltcGxlLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9zaW1wbGUu
c3ZnCShyZXZpc2lvbiAxNzM5OSkKKysrIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL3NpbXBsZS5z
dmcJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBz
dGFuZGFsb25lPSJubyI/PgotPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAy
MDAxMDkwNC8vRU4iCi0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtU1ZHLTIwMDEwOTA0
L0RURC9zdmcxMC5kdGQiPgotPHN2ZyB3aWR0aD0iNWNtIiBoZWlnaHQ9IjRjbSIKLXhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Ci08ZGVzYz5Gb3VyIHNlcGFyYXRlIHJlY3Rhbmds
ZXMKLTwvZGVzYz4KLTxyZWN0IHg9IjAuNWNtIiB5PSIwLjVjbSIgd2lkdGg9IjJjbSIgaGVpZ2h0
PSIxY20iLz4KLTxyZWN0IHg9IjAuNWNtIiB5PSIyY20iIHdpZHRoPSIxY20iIGhlaWdodD0iMS41
Y20iLz4KLTxyZWN0IHg9IjNjbSIgeT0iMC41Y20iIHdpZHRoPSIxLjVjbSIgaGVpZ2h0PSIyY20i
Lz4KLTxyZWN0IHg9IjMuNWNtIiB5PSIzY20iIHdpZHRoPSIxY20iIGhlaWdodD0iMC41Y20iLz4K
LTwhLS0gU2hvdyBvdXRsaW5lIG9mIGNhbnZhcyB1c2luZyAncmVjdCcgZWxlbWVudCAtLT4KLTxy
ZWN0IHg9Ii4wMWNtIiB5PSIuMDFjbSIgd2lkdGg9IjQuOThjbSIgaGVpZ2h0PSIzLjk4Y20iCi1m
aWxsPSJub25lIiBzdHJva2U9ImJsdWUiIHN0cm9rZS13aWR0aD0iLjAyY20iIC8+Ci08L3N2Zz4K
SW5kZXg6IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL0VOVgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9HZGtMYXVuY2hlci9FTlYJKHJldmlzaW9uIDE3Mzk5KQorKysgV2ViS2l0VG9vbHMvR2Rr
TGF1bmNoZXIvRU5WCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogZXhwb3J0IERGQkFS
R1M9c3lzdGVtPXNkbCxtb2RlPTgwMHg2MDAKIGV4cG9ydCBERkJBUkdTPXN5c3RlbT14MTEsbW9k
ZT04MDB4NjAwCi1leHBvcnQgTERfTElCUkFSWV9QQVRIPSRMRF9MSUJSQVJZX1BBVEg6Li4vLi4v
V2ViQ29yZS9Qcm9qZWN0cy9nZGs6L3Vzci9sb2NhbC9saWIKK2V4cG9ydCBMRF9MSUJSQVJZX1BB
VEg9JExEX0xJQlJBUllfUEFUSDpgcmVhbHBhdGggLXMgLi4vLi4vV2ViQ29yZS9Qcm9qZWN0cy9n
ZGtgOmByZWFscGF0aCAtcyAuLi8uLi9KYXZhU2NyaXB0Q29yZWA6L3Vzci9sb2NhbC9saWIKIApJ
bmRleDogV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvZ2RrbGF1bmNoZXIuYmtsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2dka2xhdW5jaGVyLmJrbAkocmV2aXNpb24gMTcz
OTkpCisrKyBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9nZGtsYXVuY2hlci5ia2wJKHdvcmtpbmcg
Y29weSkKQEAgLTgsNyArOCw3IEBACiA8bWFrZWZpbGU+CiAJPGluY2x1ZGUgZmlsZT0iLi4vLi4v
QmFrZWZpbGVzL3ByZXNldHMuYmtsIi8+CiAKLSAgIDx0ZW1wbGF0ZSBpZD0id2ViY29yZV9nZGtf
bGluayIgdGVtcGxhdGU9Imd0ayxmcmVldHlwZSI+CisgICA8dGVtcGxhdGUgaWQ9IndlYmNvcmVf
Z2RrX2xpbmsiIHRlbXBsYXRlPSJnZGssZnJlZXR5cGUiPgogICAgCQkKICAgICAgICAgPGRlZmlu
ZT5BUFBMRV9DSEFOR0VTPTE8L2RlZmluZT4KICAgICAgICAgPCEtLSB0aGlzIEdDIHZlcnNpb24g
cmVxdWlyZXMgTWFjaCdzIHRocmVhZCBzdXNwZW5kL3Jlc3VtZTogLS0+CkBAIC00OSw2ICs0OSw4
IEBACiAgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL2xvYWRlcjwvaW5jbHVkZT4K
ICAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGFnZTwvaW5jbHVkZT4KICAgICAg
ICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxhdGZvcm08L2luY2x1ZGU+CisgICAgICAg
IDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcms8L2luY2x1ZGU+Cisg
ICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrPC9p
bmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVyczwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4k
KFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnPC9pbmNsdWRlPgpA
QCAtNzEsNyArNzMsMTEgQEAKIAogCTxzZXQgdmFyPSJUT1BESVIiPi4uLy4uPC9zZXQ+CiAgICAg
PGV4ZSBpZD0iZ2RrbGF1bmNoZXIiIHRlbXBsYXRlPSJ3ZWJjb3JlX2dka19saW5rIj4gICAgICAg
IAotCQk8bGRmbGFncz4tTCQoVE9QRElSKS9XZWJDb3JlL1Byb2plY3RzL2dkayAtbHdlYmNvcmUt
Z2RrPC9sZGZsYWdzPgorCQk8bGRmbGFncz4tTCQoVE9QRElSKS9XZWJDb3JlL1Byb2plY3RzL2dk
ayAgLWx3ZWJjb3JlLWdkazwvbGRmbGFncz4KKwkJPGxkZmxhZ3M+LUwkKFRPUERJUikvV2ViQ29y
ZS9Qcm9qZWN0cy9nZGsgLWx3ZWJjb3JlLXN2ZzwvbGRmbGFncz4KKyAgICAgICAgPGxkZmxhZ3M+
YHBrZy1jb25maWcgLS1saWJzIGd0aHJlYWQtMi4wYDwvbGRmbGFncz4KKyAgICAgICAgPGN4eGZs
YWdzPmBwa2ctY29uZmlnIC0tY2ZsYWdzIGd0aHJlYWQtMi4wYDwvY3h4ZmxhZ3M+CisKICAgICAg
ICAgPHdhcm5pbmdzPmRlZmF1bHQ8L3dhcm5pbmdzPgogICAgICAgICA8Y3h4LXJ0dGk+b2ZmPC9j
eHgtcnR0aT4KICAgICAgICAgPGN4eC1leGNlcHRpb25zPm9mZjwvY3h4LWV4Y2VwdGlvbnM+Cg==
</data>
<flag name="review"
          id="3887"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11413</attachid>
            <date>2006-11-07 00:45:17 -0800</date>
            <delta_ts>2006-11-13 13:46:04 -0800</delta_ts>
            <desc>Patch to build the gdk port</desc>
            <filename>gdk.patch</filename>
            <type>text/plain</type>
            <size>265308</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IEJha2VmaWxlcy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQmFrZWZpbGVzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTc2MzApCisrKyBCYWtlZmlsZXMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDYtMTEtMDcgIE1pY2hhZWwgRW1tZWwgIDxtaWtlLmVt
bWVsQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkKKworCQlBZGRlZCBp
bmZvIG9uIGdkayBidWlsZCBpbnN0cnVjdG9ucworICAgICAgICAqIEJha2VmaWxlcy9SZWFkbWUu
dHh0CisJCUFkZGVkIGdkayB0ZW1wbGF0ZSAgCisJCSogQmFrZWZpbGVzL3ByZXNldHMuYmtsCisK
IDIwMDYtMTAtMDkgIEtyenlzenRvZiBLb3dhbGN6eWsgIDxra293YWxjenlrQGdtYWlsLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZi4KSW5kZXg6IEJha2VmaWxlcy9SZWFkbWUudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEJha2VmaWxlcy9SZWFkbWUudHh0CShyZXZpc2lvbiAxNzYzMCkKKysr
IEJha2VmaWxlcy9SZWFkbWUudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NywzICs5Nyw3IEBACiAK
IGh0dHA6Ly9iYWtlZmlsZS5zb3VyY2Vmb3JnZS5uZXQvZG9jL2h0bWwvcm4wMXJlMDEuaHRtbAog
CitHZGsgYnVpbGQgaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzZWUgdGhl
IFJlYWRtZS50eHQgaW4gV2ViQ29yZS9Qcm9qZWN0cy9nZGsKKwpJbmRleDogQmFrZWZpbGVzL3By
ZXNldHMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEJha2VmaWxlcy9wcmVzZXRzLmJrbAkocmV2aXNpb24g
MTc2MzApCisrKyBCYWtlZmlsZXMvcHJlc2V0cy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3
ICsxMjcsMjQgQEAKICAgICAgICAgPCEtLSAgICBUT0RPOiBub24tQ3lnd2luIFdpbmRvd3Mgc3Vw
cG9ydCBmb3IgdGhpcz8gOikgLS0+IAogICAgIDwvdGVtcGxhdGU+CiAKKyAgICA8b3B0aW9uIG5h
bWU9IkdES19MSUJTIj4KKyAgICAgICAgPGRlZmF1bHQtdmFsdWU+JChvcy5wb3BlbigicGtnLWNv
bmZpZyAtLWxpYnMgZ2RrLTIuMCIpLnJlYWQoKSk8L2RlZmF1bHQtdmFsdWU+CisgICAgPC9vcHRp
b24+CiAKKyAgICA8b3B0aW9uIG5hbWU9IkdES19DRkxBR1MiPgorICAgICAgICA8ZGVmYXVsdC12
YWx1ZT4kKG9zLnBvcGVuKCJwa2ctY29uZmlnIC0tY2ZsYWdzIGdkay0yLjAiKS5yZWFkKCkpPC9k
ZWZhdWx0LXZhbHVlPgorICAgIDwvb3B0aW9uPgorCisgICAgPCEtLSBHREsgc2V0dGluZ3MsIGZv
ciBHREsgcG9ydHMgLSB3eCBkb2Vzbid0IHVzZSB0aGVzZSAtLT4KKyAgICA8dGVtcGxhdGUgaWQ9
ImdkayI+CisgICAgICAgIDxpZiBjb25kPSJGT1JNQVQ9PSdnbnUnIj4KKyAgICAgICAgICAgIDxs
ZGZsYWdzPiQoR0RLX0xJQlMpPC9sZGZsYWdzPgorICAgICAgICAgICAgPGN4eGZsYWdzPiQoR0RL
X0NGTEFHUyk8L2N4eGZsYWdzPgorICAgICAgICA8L2lmPgorCisgICAgICAgIDwhLS0gICAgVE9E
Tzogbm9uLUN5Z3dpbiBXaW5kb3dzIHN1cHBvcnQgZm9yIHRoaXM/IDopIC0tPgorICAgIDwvdGVt
cGxhdGU+CisKICAgICA8b3B0aW9uIG5hbWU9IlhNTDJfTElCUyI+CiAgICAgICAgIDxkZWZhdWx0
LXZhbHVlPiQob3MucG9wZW4oInhtbDItY29uZmlnIC0tbGlicyIpLnJlYWQoKSk8L2RlZmF1bHQt
dmFsdWU+CiAgICAgPC9vcHRpb24+CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2Rr
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNzYzMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIsMTQgKzIyLDE2
IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCIKLQogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRpbWVyLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMTUgKzM5LDE4IEBACiBj
b25zdCBkb3VibGUgcG9sbFRpbWVTZWNvbmRzID0gMC4wNTsKIAogUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKQotICAgIDogbV91c2VTaW1wbGUoZmFsc2UpCi0g
ICAgLCBqb2JzKG5ldyBIYXNoU2V0PFJlc291cmNlSGFuZGxlKj4pCi0gICAgLCBtX2Rvd25sb2Fk
VGltZXIodGhpcywgJlJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNr
KQorICAgICAgICA6IGpvYnMoKQorICAgICAgICAsIG1fZG93bmxvYWRUaW1lcih0aGlzLCAmUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2spCiB7CisgICAgRkRfWkVS
TygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2Vw
KTsKKyAgICBtYXhmZCA9IDA7CiAgICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwp
OwogICAgIGN1cmxNdWx0aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOwogfQogCi1SZXNvdXJj
ZUhhbmRsZU1hbmFnZXIqIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6Z2V0KCkKK1Jlc291cmNlSGFu
ZGxlTWFuYWdlciogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzZWxmKCkKIHsKICAgICBzdGF0aWMg
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBzaW5nbGV0b247CiAgICAgaWYgKCFzaW5nbGV0b24pCkBA
IC01MywxNzAgKzU4LDg4IEBACiAgICAgcmV0dXJuIHNpbmdsZXRvbjsKIH0KIAotdm9pZCBSZXNv
dXJjZUhhbmRsZU1hbmFnZXI6OnVzZVNpbXBsZVRyYW5zZmVyKGJvb2wgdXNlU2ltcGxlKQordm9p
ZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNv
dXJjZUhhbmRsZU1hbmFnZXI+KiB0aW1lcikKIHsKLSAgICBtX3VzZVNpbXBsZSA9IHVzZVNpbXBs
ZTsKLX0KKyAgICBpZiAoam9icy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotc3RhdGlj
IHNpemVfdCB3cml0ZUNhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVt
Yiwgdm9pZCogb2JqKQotewotICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxS
ZXNvdXJjZUhhbmRsZSo+KG9iaik7Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpv
Yi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBpbnQgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOwotICAg
IGQtPmNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoam9iLCBzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwg
dG90YWxTaXplKTsKLSAgICByZXR1cm4gdG90YWxTaXplOwotfQorICAgIEZEX1pFUk8oJmZkcmVh
ZCk7CisgICAgRkRfWkVSTygmZmR3cml0ZSk7CisgICAgRkRfWkVSTygmZmRleGNlcCk7CisgICAg
Y3VybF9tdWx0aV9mZHNldChjdXJsTXVsdGlIYW5kbGUsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRl
eGNlcCwgJm1heGZkKTsKKyAgICBpbnQgbnJ1bm5pbmc7CisgICAgc3RydWN0IHRpbWV2YWwgdGlt
ZW91dDsKKyAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgdGltZW91dC50dl91c2VjID0gc2Vs
ZWN0VGltZW91dE1TICogMTAwMDsgICAgICAgLy8gc2VsZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcwor
ICAgIDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGlt
ZW91dCk7CiAKLXN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qg
c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQotewotICAgIGludCB0b3RhbFNpemUgPSBz
aXplICogbm1lbWI7Ci0gICAgcmV0dXJuIHRvdGFsU2l6ZTsKLX0KKyAgICB3aGlsZSAoQ1VSTE1f
Q0FMTF9NVUxUSV9QRVJGT1JNID09IGN1cmxfbXVsdGlfcGVyZm9ybShjdXJsTXVsdGlIYW5kbGUs
ICZucnVubmluZykpIHsgfQogCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRU
aW1lckNhbGxiYWNrKFRpbWVyPFJlc291cmNlSGFuZGxlTWFuYWdlcj4qIHRpbWVyKQotewotICAg
IGlmIChqb2JzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0b3AoKTsK
LSAgICAgICAgcmV0dXJuOworICAgIC8vIGNoZWNrIHRoZSBjdXJsIG1lc3NhZ2VzIGluZGljYXRp
bmcgY29tcGxldGVkIHRyYW5zZmVycworICAgIC8vIGFuZCBmcmVlIHRoZWlyIHJlc291cmNlcwor
ICAgIGludCBubXNnczsKKyAgICB3aGlsZSAoQ1VSTE1zZyogbXNnID0gY3VybF9tdWx0aV9pbmZv
X3JlYWQoY3VybE11bHRpSGFuZGxlLCAmbm1zZ3MpKSB7CisgICAgICAgIENVUkwqIGhhbmRsZSA9
IG1zZy0+ZWFzeV9oYW5kbGU7CisgICAgICAgIGFzc2VydChoYW5kbGUpOworICAgICAgICBSZXNv
dXJjZUhhbmRsZSAqam9iOworICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJ
TkZPX1BSSVZBVEUsICZqb2IpOworICAgICAgICBqb2ItPnByb2Nlc3NNZXNzYWdlKG1zZyk7CiAg
ICAgfQotICAgIGlmIChtX3VzZVNpbXBsZSkgewotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVzb3Vy
Y2VIYW5kbGUqPjo6aXRlcmF0b3IgaXQgPSBqb2JzLT5iZWdpbigpOyBpdCAhPSBqb2JzLT5lbmQo
KTsgKytpdCkgewotICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9ICppdDsKLSAgICAg
ICAgICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0g
ICAgICAgICAgICBDVVJMY29kZSByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShkLT5tX2hhbmRsZSk7
Ci0gICAgICAgICAgICBpZiAocmVzICE9IENVUkxFX09LKQotICAgICAgICAgICAgICAgIHByaW50
ZigiRXJyb3IgV0lUSCBKT0IgJWRcbiIsIHJlcyk7Ci0gICAgICAgICAgICBkLT5jbGllbnQtPnJl
Y2VpdmVkQWxsRGF0YShqb2IsIDApOwotICAgICAgICAgICAgZC0+Y2xpZW50LT5kaWRGaW5pc2hM
b2FkaW5nKGpvYik7Ci0gICAgICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChkLT5tX2hhbmRsZSk7
Ci0gICAgICAgICAgICBkLT5tX2hhbmRsZSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgam9icy0+
Y2xlYXIoKTsKLSAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0b3AoKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBGRF9aRVJPKCZmZHJlYWQpOwotICAgICAgICBGRF9aRVJPKCZmZHdyaXRlKTsKLSAg
ICAgICAgRkRfWkVSTygmZmRleGNlcCk7Ci0gICAgICAgIGN1cmxfbXVsdGlfZmRzZXQoY3VybE11
bHRpSGFuZGxlLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7Ci0gICAgICAg
IGludCBucnVubmluZzsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKLSAgICAgICAg
aW50IHJldHZhbDsKLSAgICAgICAgdGltZW91dC50dl9zZWMgPSAwOwotICAgICAgICB0aW1lb3V0
LnR2X3VzZWMgPSBzZWxlY3RUaW1lb3V0TVMgKiAxMDAwOyAgICAgICAvLyBzZWxlY3Qgd2FpdHMg
bWljcm9zZWNvbmRzCi0gICAgICAgIHJldHZhbCA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVh
ZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91dCk7Ci0gICAgICAgIHN3aXRjaCAocmV0dmFs
KSB7Ci0gICAgICAgICAgICBjYXNlIC0xOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVj
dCBlcnJvcgotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzLCBzZWxl
Y3QgZXJyb3IoJWQpXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLHJldHZhbCk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCovCi0gICAgICAgICAgICBjYXNlIDA6ICAgICAg
ICAgICAgICAgICAvLyBzZWxlY3QgdGltZW91dAotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAg
ICAgICBwcmludGYoIiVzLCBzZWxlY3QgdGltZW91dCAlZFxuIiwgX19QUkVUVFlfRlVOQ1RJT05f
XyxyZXR2YWwpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2guIHRoaXMg
Y2FuIGJlIHRoZSBmaXJzdCBwZXJmb3JtIHRvIGJlIG1hZGUgKi8KLSAgICAgICAgICAgIGRlZmF1
bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSsgZGVzY3JpcHRvcnMgaGF2ZSBkYXRhCi0g
ICAgICAgICAgICAgICAgd2hpbGUgKENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9PSBjdXJsX211
bHRpX3BlcmZvcm0oY3VybE11bHRpSGFuZGxlLCAmbnJ1bm5pbmcpKQotICAgICAgICAgICAgICAg
ICAgICB7IH0KLSAgICAgICAgfQorICAgIGlmKCFtX2Rvd25sb2FkVGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0YXJ0T25lU2hvdChwb2xsVGltZVNlY29uZHMpOwor
fQogCi0gICAgICAgIC8vIGNoZWNrIHRoZSBjdXJsIG1lc3NhZ2VzIGluZGljYXRpbmcgY29tcGxl
dGVkIHRyYW5zZmVycwotICAgICAgICAvLyBhbmQgZnJlZSB0aGVpciByZXNvdXJjZXMKLSAgICAg
ICAgaW50IG5tc2dzOwotICAgICAgICB3aGlsZSAoQ1VSTE1zZyogbXNnID0gY3VybF9tdWx0aV9p
bmZvX3JlYWQoY3VybE11bHRpSGFuZGxlLCAmbm1zZ3MpKSB7Ci0gICAgICAgICAgICBpZiAobXNn
LT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7Ci0gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbm9k
ZSB3aGljaCBoYXMgc2FtZSBkLT5tX2hhbmRsZSBhcyBjb21wbGV0ZWQgdHJhbnNmZXIKLSAgICAg
ICAgICAgICAgICBDVVJMKiBjaGFuZGxlID0gbXNnLT5lYXN5X2hhbmRsZTsKLSAgICAgICAgICAg
ICAgICBhc3NlcnQoY2hhbmRsZSk7Ci0gICAgICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGUgKmpv
YjsKLSAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjaGFuZGxlLCBDVVJMSU5GT19Q
UklWQVRFLCAmam9iKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoam9iKTsgLy9maXhtZTogYXNz
ZXJ0LT5pZiA/Ci0gICAgICAgICAgICAgICAgLy8gaWYgZm91bmQsIGRlbGV0ZSBpdAotICAgICAg
ICAgICAgICAgIGlmIChqb2IpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCAqZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChtc2ctPmRhdGEucmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENV
UkxFX09LOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoaXMgdG8gYXV0
aGVudGljYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3BDb2RlID0gLTE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9oYW5k
bGUsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZyZXNwQ29kZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVtb3ZlKGpvYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ3VybCBFUlJPUiAl
c1xuIiwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqb2ItPnNldEVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZShqb2IpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDdXJsUmVxdWVzdCBub3QgZm91bmQs
IGV2ZW50aG91Z2ggY3VybCBkLT5tX2hhbmRsZSBmaW5pc2hlZFxuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIGFzc2VydCgwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAKLSAg
ICAgICAgfQorQ1VSTGNvZGUgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpydW5JbW1lZGlhdGVseShS
ZXNvdXJjZUhhbmRsZSogam9iKQoreworICAgIC8vY2F1c2UgZGF0YSB0byBiZSBjYWNoZWQgaW4g
bV9yZXN1bHREYXRhCisgICAgQ1VSTCogaGFuZGxlID0gam9iLT5wbGF0Zm9ybUhhbmRsZSgpOwor
ICAgIENVUkxjb2RlIHJlczsKKyAgICBpZihoYW5kbGUpIHsKKyAgICAgICAgY3VybF9tdWx0aV9y
ZW1vdmVfaGFuZGxlKGN1cmxNdWx0aUhhbmRsZSxoYW5kbGUpOworICAgICAgICBpZiAoam9icy5j
b250YWlucyhqb2IpKQorICAgICAgICAgICAgam9icy5yZW1vdmUoam9iKTsKKyAgICAgICAgcmVz
ID0gY3VybF9lYXN5X3BlcmZvcm0oaGFuZGxlKTsKICAgICB9Ci0gICAgaWYgKCFqb2JzLT5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNv
bmRzKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6
cmVtb3ZlKFJlc291cmNlSGFuZGxlKiBqb2IpCiB7Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoIWQtPm1faGFuZGxlKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGpvYnMtPmNvbnRhaW5zKGpvYikpCi0gICAgICAgIGpvYnMtPnJl
bW92ZShqb2IpOwotICAgIGlmIChqb2JzLT5pc0VtcHR5KCkpCi0gICAgICAgIG1fZG93bmxvYWRU
aW1lci5zdG9wKCk7Ci0gICAgZC0+Y2xpZW50LT5yZWNlaXZlZEFsbERhdGEoam9iLCAwKTsKLSAg
ICBkLT5jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoam9iKTsKLSAgICBpZiAoZC0+bV9oYW5kbGUp
IHsKLSAgICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxNdWx0aUhhbmRsZSwgZC0+
bV9oYW5kbGUpOwotICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChkLT5tX2hhbmRsZSk7Ci0gICAg
ICAgIGQtPm1faGFuZGxlID0gTlVMTDsKLSAgICB9CisgICAgLy90YWtlIG91dCBvZiBjdXJsIG11
bHRpIGZpcnN0ICEKKyAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoY3VybE11bHRpSGFuZGxl
LCBqb2ItPnBsYXRmb3JtSGFuZGxlKCkpOworCisgICAgaWYgKGpvYnMuY29udGFpbnMoam9iKSkK
KyAgICAgICAgam9icy5yZW1vdmUoam9iKTsKKyAgICBqb2ItPmZpbmlzaCgpOwogfQogCiB2b2lk
IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6YWRkKFJlc291cmNlSGFuZGxlKiBqb2IpCiB7Ci0gICAg
Ym9vbCBzdGFydFRpbWVyID0gam9icy0+aXNFbXB0eSgpOwotICAgIFJlc291cmNlSGFuZGxlSW50
ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyB1cmwg
PSBkLT5VUkwudXJsKCk7Ci0gICAgZC0+bV9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwotICAg
IGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJJVkFURSwgam9iKTsKLSAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBlcnJv
cl9idWZmZXIpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfV1JJ
VEVGVU5DVElPTiwgd3JpdGVDYWxsYmFjayk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSwgQ1VSTE9QVF9XUklURURBVEEsIGpvYik7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9IRUFERVJGVU5DVElPTiwgaGVhZGVyQ2FsbGJhY2spOwotICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfV1JJVEVIRUFERVIsIGpvYik7Ci0g
ICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwg
MSk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9NQVhSRURJUlMs
IDEwKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hUVFBBVVRI
LCBDVVJMQVVUSF9BTlkpOwotICAgIC8vIHVybCBwdHIgbXVzdCByZW1haW4gdmFsaWQgdGhyb3Vn
aCB0aGUgcmVxdWVzdAotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRf
VVJMLCB1cmwuYXNjaWkoKSk7Ci0KLSAgICBpZiAobV91c2VTaW1wbGUpCi0gICAgICAgIGpvYnMt
PmFkZChqb2IpOwotICAgIGVsc2UgewotICAgICAgICBDVVJMTWNvZGUgcmV0ID0gY3VybF9tdWx0
aV9hZGRfaGFuZGxlKGN1cmxNdWx0aUhhbmRsZSwgZC0+bV9oYW5kbGUpOwotICAgICAgICAvLyBk
b24ndCBjYWxsIHBlcmZvcm0sIGJlY2F1c2UgZXZlbnRzIG11c3QgYmUgYXN5bmMKLSAgICAgICAg
Ly8gdGltZW91dCB3aWxsIG9jY3VyIGFuZCBkbyBjdXJsX211bHRpX3BlcmZvcm0KLSAgICAgICAg
aWYgKHJldCAmJiByZXQgIT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7Ci0gICAgICAgICAg
ICBwcmludGYoIkVycm9yICVkIHN0YXJ0aW5nIGpvYiAlc1xuIiwgcmV0LCBkLT5VUkwudXJsKCku
YXNjaWkoKSk7Ci0gICAgICAgICAgICBqb2ItPnNldEVycm9yKDEpOwotICAgICAgICAgICAgc3Rh
cnRUaW1lciA9ZmFsc2U7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgam9icy0+YWRkKGpv
Yik7CisgICAgam9icy5hZGQoam9iKTsKKyAgICBDVVJMTWNvZGUgcmV0ID0gY3VybF9tdWx0aV9h
ZGRfaGFuZGxlKGN1cmxNdWx0aUhhbmRsZSxqb2ItPnBsYXRmb3JtSGFuZGxlKCkpOworICAgIGlm
IChyZXQgJiYgcmV0ICE9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeworICAgICAgICBwcmlu
dGYoIkVycm9yICVkIHN0YXJ0aW5nIGpvYiAlc1xuIiwgcmV0LCBqb2ItPnVybCgpLnVybCgpLmFz
Y2lpKCkpOworICAgICAgIGpvYi0+Y2FuY2VsKCk7CisgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoc3RhcnRUaW1lcikKKyAgICBpZiAoIW1fZG93bmxvYWRUaW1lci5pc0FjdGl2ZSgpKQog
ICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RhcnRPbmVTaG90KHBvbGxUaW1lU2Vjb25kcyk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGpv
YikKKworY2hhciogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpnZXRNaW1lVHlwZShTdHJpbmcmIGlu
UGF0aCkKIHsKLSAgICByZW1vdmUoam9iKTsKLSAgICBqb2ItPnNldEVycm9yKDEpOworICAgIERl
cHJlY2F0ZWRTdHJpbmcgcGF0aCA9IGluUGF0aC5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgaWYg
KHBhdGguZW5kc1dpdGgoIi5zdmciKSkKKyAgICAgICAgcmV0dXJuICJpbWFnZS9zdmcreG1sIjsK
KyAgICBpZiAocGF0aC5lbmRzV2l0aCgiLnhtbCIpKQorICAgICAgICByZXR1cm4gInRleHQveG1s
IjsKKyAgICBpZiAocGF0aC5lbmRzV2l0aCgiLnhzbCIpKQorICAgICAgICByZXR1cm4gInRleHQv
eHNsIjsKKyAgICBpZiAocGF0aC5lbmRzV2l0aCgiLmpzIikpCisgICAgICAgIHJldHVybiAiYXBw
bGljYXRpb24veC1qYXZhc2NyaXB0IjsKKyAgICByZXR1cm4gInRleHQvaHRtbCI7CiB9CiAKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9n
ZGsvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaAkocmV2aXNpb24gMTc2MzApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3ICsyMiw3IEBACiAgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKICNpZm5kZWYgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyX0hfCkBAIC0zMSwy
NiArMzEsMjYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyIHsKKworY2xhc3MgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyCit7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlc291cmNlSGFuZGxlTWFuYWdlciogZ2V0KCk7CisgICAgc3Rh
dGljIGNoYXIqIGdldE1pbWVUeXBlKFN0cmluZyYpOworICAgIHN0YXRpYyBSZXNvdXJjZUhhbmRs
ZU1hbmFnZXIqIHNlbGYoKTsKICAgICB2b2lkIGFkZChSZXNvdXJjZUhhbmRsZSopOwotICAgIHZv
aWQgY2FuY2VsKFJlc291cmNlSGFuZGxlKik7CisgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VIYW5k
bGUqKTsKKyAgICBDVVJMY29kZSBydW5JbW1lZGlhdGVseShSZXNvdXJjZUhhbmRsZSogam9iKTsK
IAotICAgIC8vIElmIHRydWUsIGRvbid0IG11bHRpcGxleCBkb3dubG9hZHM6IGRvd25sb2FkIGNv
bXBsZXRlbHkgb25lIGF0IGEgdGltZS4KLSAgICB2b2lkIHVzZVNpbXBsZVRyYW5zZmVyKGJvb2wg
dXNlU2ltcGxlKTsKLQogcHJpdmF0ZToKICAgICBSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKTsKICAg
ICB2b2lkIGRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUhhbmRsZU1hbmFnZXI+
Kik7Ci0gICAgdm9pZCByZW1vdmUoUmVzb3VyY2VIYW5kbGUqKTsKLQotICAgIGJvb2wgbV91c2VT
aW1wbGU7Ci0gICAgSGFzaFNldDxSZXNvdXJjZUhhbmRsZSo+KiBqb2JzOworICAgIEhhc2hTZXQ8
UmVzb3VyY2VIYW5kbGUqPiBqb2JzOworICAgIEhhc2hTZXQ8UmVzb3VyY2VIYW5kbGUqPiBzaW1w
bGVKb2JzOwogICAgIFRpbWVyPFJlc291cmNlSGFuZGxlTWFuYWdlcj4gbV9kb3dubG9hZFRpbWVy
OwogICAgIENVUkxNKiBjdXJsTXVsdGlIYW5kbGU7IC8vIG5vdCBmcmVlZAogCkBAIC02MCw3ICs2
MCw2IEBACiAgICAgZmRfc2V0IGZkZXhjZXA7CiAKICAgICBpbnQgbWF4ZmQ7Ci0gICAgY2hhciBl
cnJvcl9idWZmZXJbQ1VSTF9FUlJPUl9TSVpFXTsKIAogICAgIC8vIE5VTEwtdGVybWluYXRlZCBs
aXN0IG9mIHN1cHBvcnRlZCBwcm90b2NvbHMKICAgICBjb25zdCBjaGFyKiBjb25zdCogY3VybF9w
cm90b2NvbHM7IC8vIG5vdCBmcmVlZApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dk
ay9Mb2FkZXJGdW5jdGlvbnNDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvZ2RrL0xvYWRlckZ1bmN0aW9uc0N1cmwuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9Mb2FkZXJGdW5jdGlvbnNDdXJsLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAi
RG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJEZXBy
ZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWZWN0b3I8Y2hhcj4g
U2VydmVTeW5jaHJvbm91c1JlcXVlc3QoTG9hZGVyKiBsb2FkZXIsIERvY0xvYWRlciogZG9jTG9h
ZGVyLGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBqb2IgPSBSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlKHJlcXVlc3QsMCxkb2NMb2FkZXIpOworICAgIFZlY3RvcjxjaGFyPiByZXN1bHRC
dWZmZXIgPSBqb2ItPnJ1bkltbWVkaWF0ZWx5KHJlc3BvbnNlKTsKKyAgICByZXR1cm4gcmVzdWx0
QnVmZmVyOworfQorCitpbnQgTnVtYmVyT2ZQZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMoRG9jTG9h
ZGVyKiBkb2NMb2FkZXIpCit7CisgICAgcmV0dXJuIGNhY2hlKCktPmxvYWRlcigpLT5udW1SZXF1
ZXN0cyhkb2NMb2FkZXIpOworfQorCitib29sIENoZWNrSWZSZWxvYWRpbmcoV2ViQ29yZTo6RG9j
TG9hZGVyKiBkb2NMb2FkZXIpCit7CisgICAgLy8gRklYTUU6IE5lZWRzIGEgcmVhbCBpbXBsZW1l
bnRhdGlvbiEKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hlY2tDYWNoZU9iamVjdFN0
YXR1cyhEb2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZE9iamVjdCkK
K3sKKyAgICAvLyBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gZm9yIG9iamVjdHMgdGhhdCB3ZSBk
aWRuJ3QgbG9hZCBmcm9tIHRoZSBjYWNoZS4KKyAgICBpZiAoIWNhY2hlZE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc3dpdGNoIChjYWNoZWRPYmplY3QtPnN0YXR1cygpKSB7CisgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpOb3RDYWNoZWQ6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VW5rbm93
bjoKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpOZXc6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6UGVuZGluZzoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBOb3Rp
ZnkgdGhlIGNhbGxlciB0aGF0IHdlICJsb2FkZWQiLgorfQorCitib29sIElzUmVzcG9uc2VVUkxF
cXVhbFRvVVJMKFBsYXRmb3JtUmVzcG9uc2UgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgdXJsKQor
eworICAgIGlmICghcmVzcG9uc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biByZXNwb25zZS0+dXJsKCkudXJsKCkgPT0gdXJsOworfQorCitEZXByZWNhdGVkU3RyaW5nIFJl
c3BvbnNlVVJMKFBsYXRmb3JtUmVzcG9uc2UgcmVzcG9uc2UpCit7CisgICAgaWYgKCFyZXNwb25z
ZSkKKyAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKworICAgIHJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nKHJlc3BvbnNlLT51cmwoKS51cmwoKSk7Cit9CisKK0RlcHJlY2F0ZWRTdHJp
bmcgUmVzcG9uc2VNSU1FVHlwZShQbGF0Zm9ybVJlc3BvbnNlIHJlc3BvbnNlKQoreworICAgIGlm
ICghcmVzcG9uc2UpCisgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCJ0ZXh0L2h0bWwi
KTsKKyAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyhyZXNwb25zZS0+bWltZVR5cGUoKS5kZXBy
ZWNhdGVkU3RyaW5nKCkpOworfQorCitib29sIFJlc3BvbnNlSXNNdWx0aXBhcnQoUGxhdGZvcm1S
ZXNwb25zZSByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzcG9uc2VNSU1FVHlwZShyZXNwb25z
ZSkgPT0gIm11bHRpcGFydC94LW1peGVkLXJlcGxhY2UiOworfQorCit0aW1lX3QgQ2FjaGVPYmpl
Y3RFeHBpcmVzVGltZShEb2NMb2FkZXIqLCBQbGF0Zm9ybVJlc3BvbnNlKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgbWUhCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OnNldFBsYXRmb3JtUmVzcG9uc2UoUGxhdGZvcm1SZXNwb25zZSByZXNwb25zZSkKK3sKKyAg
ICBtX3BsYXRmb3JtUmVzcG9uc2UgPSByZXNwb25zZTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJj
ZTo6c2V0QWxsRGF0YShQbGF0Zm9ybURhdGEgYWxsRGF0YSkKK3sKKyAgICBtX2FsbERhdGEgPSBh
bGxEYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvZ2RrL0ZyYW1lTG9hZGVyQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9GcmFtZUxvYWRlckN1cmwuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9GcmFtZUxvYWRlckN1cmwuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworI2RlZmluZSBu
b3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRF
RDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRUWV9GVU5DVElPTl9fKTsg
fSB3aGlsZSgwKQorCisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRnJhbWVMb2FkZXJQcml2YXRlIDogUmVzb3VyY2VIYW5kbGVDbGllbnQgCit7
CitwdWJsaWM6CisgICAgRnJhbWVMb2FkZXJQcml2YXRlKEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRl
cikKKyAgICA6IG1fZnJhbWVMb2FkZXIoZnJhbWVMb2FkZXIpCisgICAgeworICAgIH0KKyAgICBG
cmFtZSogZnJhbWUoKSB7IHJldHVybiBtX2ZyYW1lTG9hZGVyLT5mcmFtZSgpOyB9CisgICAgdm9p
ZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7Citwcml2YXRlOgorICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNl
SGFuZGxlKiwgY29uc3QgY2hhciosIGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICAvL29sZCBzdHlsZQorICAgIHZpcnR1YWwgdm9p
ZCByZWNlaXZlZFJlZGlyZWN0KFJlc291cmNlSGFuZGxlKiwgY29uc3QgS1VSTCYpOworICAgIEZy
YW1lTG9hZGVyKiBtX2ZyYW1lTG9hZGVyOworfTsKKwordm9pZCBGcmFtZUxvYWRlcjo6bG9hZChj
b25zdCBLVVJMJiB1cmwsIEV2ZW50KiBldmVudCkKK3sKKyAgICBsb2FkKFJlc291cmNlUmVxdWVz
dCh1cmwpLCB0cnVlLCBldmVudCwgMCwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKSk7Cit9CisK
K3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgbG9hZFJlcXVl
c3QsIGJvb2wgdXNlckdlc3R1cmUsCisgICAgICAgICAgICBFdmVudCosIEVsZW1lbnQqIGZvcm0s
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmb3JtVmFsdWVzKQoreworICAgIGlmKCFt
X3BsYXRmb3JtUHJpdmF0ZSkKKyAgICAgICAgbV9wbGF0Zm9ybVByaXZhdGUgPSBuZXcgRnJhbWVM
b2FkZXJQcml2YXRlKHRoaXMpOworICAgIGlmKCFmcmFtZSgpLT5kb2N1bWVudCgpKQorICAgICAg
ICBmcmFtZSgpLT5jcmVhdGVFbXB0eURvY3VtZW50KCk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QgPSBsb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKTsKKyAgICBmcmFtZSgpLT5kaWRP
cGVuVVJMKHJlcXVlc3QudXJsKCkpOworICAgIG1fcGxhdGZvcm1Qcml2YXRlLT5sb2FkKHJlcXVl
c3QpOworfQorCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiByZWZlcnJlciwgRnJhbWVMb2FkVHlwZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsCisg
ICAgICAgICAgICBFdmVudCosIEVsZW1lbnQqIGZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+JiBmb3JtVmFsdWVzKQoreworICAgIGxvYWQoUmVzb3VyY2VSZXF1ZXN0KHVybCksZmFs
c2UsIDAsIGZvcm0sIGZvcm1WYWx1ZXMpOworfQorCit2b2lkIEZyYW1lTG9hZGVyOjpwb3N0KGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiB0YXJn
ZXQsCisgICAgICAgICAgICBjb25zdCBGb3JtRGF0YSYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5
cGUsCisgICAgICAgICAgICBFdmVudCosIEVsZW1lbnQqIGZvcm0sIGNvbnN0IEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JiBmb3JtVmFsdWVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
Kwordm9pZCBGcmFtZUxvYWRlclByaXZhdGU6OmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KQoreworICAgIERvY0xvYWRlciogZG9jTG9hZGVyID0gMDsKKyAgICBpZihmcmFtZSgp
LT5kb2N1bWVudCgpKQorICAgICAgICBkb2NMb2FkZXIgPSBmcmFtZSgpLT5kb2N1bWVudCgpLT5k
b2NMb2FkZXIoKTsKKyAgICBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKHJlcXVlc3QsdGhpcyxkb2NM
b2FkZXIpOworfQorCit2b2lkIEZyYW1lTG9hZGVyUHJpdmF0ZTo6cmVjZWl2ZWRSZWRpcmVjdChS
ZXNvdXJjZUhhbmRsZSogam9iLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgLy9GSVhNRToKKyAg
ICBqb2ItPmNhbmNlbCgpOworICAgIFN0cmluZyByZWZlcnJlcjsKKyAgICBmcmFtZSgpLT5jaGFu
Z2VMb2NhdGlvbih1cmwudXJsKCkscmVmZXJyZXIsZmFsc2UsZmFsc2UpOworfQorCisvKgorICog
RGF0YSBpcyB0aGUgZnVsbCBzZXQgb2YgaGVhZGVycworICogQ2FsbGVkIHRoZSBmaXJzdCB0aW1l
IHdlIGdldCByZWNpZXZlZCBkYXRhIG9yIGFsbCBkYXRhCisgKi8KK3ZvaWQgRnJhbWVMb2FkZXJQ
cml2YXRlOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqIGpvYiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgU3RyaW5nIG1pbWVUeXBlID0gcmVzcG9u
c2UubWltZVR5cGUoKTsKKworICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
U3RyaW5nIHBhdGggPSAgU3RyaW5nKGpvYi0+dXJsKCkucGF0aCgpKTsKKyAgICAgICAgbWltZVR5
cGUgPSBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmdldE1pbWVUeXBlKHBhdGgpOworICAgIH0KKwor
ICAgIGZyYW1lKCktPnNldFJlc3BvbnNlTUlNRVR5cGUobWltZVR5cGUpOworICAgIFN0cmluZyBj
aGFyc2V0ID0gcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgLy8gc2V0RW5jb2Rp
bmcgY2FsbHMgYmVnaW4oKSBmb3IgdXMsIGRlc3BpdGUgdGhlIG1pc2xlYWRpbmcgbmFtZQorICAg
IGlmICghY2hhcnNldC5pc0VtcHR5KCkpCisgICAgICAgIGZyYW1lKCktPnNldEVuY29kaW5nKGNo
YXJzZXQsdHJ1ZSk7CisgICAgZWxzZQorICAgICAgICBmcmFtZSgpLT5zZXRFbmNvZGluZyhmcmFt
ZSgpLT5lbmNvZGluZygpLGZhbHNlKTsKK30KKwordm9pZCBGcmFtZUxvYWRlclByaXZhdGU6OmRp
ZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiBqb2IsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCit7CisgICAgZnJhbWUoKS0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworfQorCit2b2lk
IEZyYW1lTG9hZGVyUHJpdmF0ZTo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogam9i
KQoreworICAgIC8vRklYTUU6IGpvYi0+aXNFcnJvclBhZ2UoKTsKKyAgICBmcmFtZSgpLT5lbmQo
KTsKK30KKworCit9CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkocmV2aXNpb24g
MTc2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlQ3Vy
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIy
LDcgKzIyLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpA
QCAtMzEsMjggKzMxLDI5NiBAQAogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZU1hbmFnZXIu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPGN1cmwvY3VybC5oPgogCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZw
cmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVf
XywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitzdGF0aWMgY2hhciBlcnJvcl9idWZmZXJbQ1VSTF9FUlJPUl9TSVpFXTsK
Kworc3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNp
emVfdCBubWVtYiwgdm9pZCogb2JqKQoreworICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0
aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KG9iaik7CisgICAgcmV0dXJuIGpvYi0+d3JpdGUocHRy
LHNpemUsbm1lbWIpOworfQorCitzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0
ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogb2JqKQoreworICAgIFJlc291cmNl
SGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KG9iaik7CisgICAgcmV0
dXJuIGpvYi0+aGVhZGVyKHB0cixzaXplLG5tZW1iKTsKK30KKwogUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogeworICAgIGlmIChtX2hhbmRsZSkKKyAg
ICAgICAgY3VybF9lYXN5X2NsZWFudXAobV9oYW5kbGUpOworICAgIGlmIChtX3VybCkKKyAgICAg
ICAgZnJlZShtX3VybCk7CisKKyAgICBpZiAobV9jdXN0b21IZWFkZXIpCisgICAgICAgIGN1cmxf
c2xpc3RfZnJlZV9hbGwobV9jdXN0b21IZWFkZXIpOworCisgICAgaWYgKG1fY3VzdG9tUG9zdEhl
YWRlcikKKyAgICAgICAgY3VybF9zbGlzdF9mcmVlX2FsbChtX2N1c3RvbVBvc3RIZWFkZXIpOwor
CisgICAgaWYgKG1fZmlsZVBvc3QpCisgICAgICAgIGN1cmxfZm9ybWZyZWUobV9maWxlUG9zdCk7
CisgICAgLy9kb24ndCBkZWxldGUgd2UgcGFzcyB0aGlzIG9mZiBpbiB0aGUgZW5kCisgICAgaWYg
KG1fcmVzcG9uc2UpCisgICAgICAgIG1fcmVzcG9uc2UgPSAwOwogfQogCiBSZXNvdXJjZUhhbmRs
ZTo6flJlc291cmNlSGFuZGxlKCkKIHsKLSAgICBjYW5jZWwoKTsKKyAgICBkZWxldGUgZDsKIH0K
IAorQ1VSTCogUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtSGFuZGxlKCkKK3sKKyAgICByZXR1cm4g
ZC0+bV9oYW5kbGU7Cit9CisKK3ZvaWQgIFJlc291cmNlSGFuZGxlOjpzZXR1cFB1dCgpCit7Cisg
ICAgaWYgKG1ldGhvZCgpICE9ICJQVVQiKQorICAgICAgICByZXR1cm47CisgICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VUExPQUQsIFRSVUUpIDsKKyAgICBzdHJ1Y3Qg
Y3VybF9zbGlzdCAqc2xpc3Q9TlVMTDsKKyAgIC8vRklYTUU6IGhtbW0gZGlzYWJsZSBFeHBlY3Q6
IDEwMC1jb250aW51ZQorICAgLy9zbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKHNsaXN0LCJFeHBl
Y3Q6Iik7CisgICAvL2p1c3Qgc3VwcHJvdCBIdHRwIDEuMSBjaHVuY2tlZCBlbmNvZGluZyBub3cK
KyAgIHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QsIlRyYW5zZmVyLUVuY29kaW5nOiBj
aHVua2VkIik7CisgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLENVUkxPUFRfSFRUUEhF
QURFUiwgc2xpc3QpOworICAgZC0+bV9jdXN0b21Qb3N0SGVhZGVyID0gc2xpc3Q7Cit9CisKK3Zv
aWQgIFJlc291cmNlSGFuZGxlOjpzZXR1cFBvc3QoKQoreworICAgIGlmIChtZXRob2QoKSAhPSAi
UE9TVCIpCisgICAgICAgIHJldHVybjsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX1BPU1QsdHJ1ZSk7CisgICAgLy9kaXNhYmxlIEV4cGVjdDogMTAwLWNvbnRpbnVl
CisgICAgeworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3Q9TlVMTDsKKyAgICAgICAg
c2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwiRXhwZWN0OiIpOworICAgICAgICBjdXJs
X2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAg
ICAgICBkLT5tX2N1c3RvbVBvc3RIZWFkZXIgPSBzbGlzdDsKKyAgICB9CisKKyAgICAvL2ZpcnN0
IGFkZCBhbnkgZGF0YQorICAgIHBvc3REYXRhKCkuZmxhdHRlbihkLT5tX3Bvc3RCeXRlcyk7Cisg
ICAgaWYgKGQtPm1fcG9zdEJ5dGVzLnNpemUoKSAhPSAwKSB7CisgICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUE9TVEZJRUxEUyxkLT5tX3Bvc3RCeXRlcy5kYXRh
KCkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1RG
SUVMRFNJWkUsZC0+bV9wb3N0Qnl0ZXMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Rm9y
bURhdGFFbGVtZW50PiBlbGVtZW50cyA9IHBvc3REYXRhKCkuZWxlbWVudHMoKTsKKyAgICBpbnQg
c2l6ZSA9IGVsZW1lbnRzLnNpemUoKTsKKyAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqbGFzdHB0
cj1OVUxMOworCisgICAgZm9yIChpbnQgaSA9MDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBp
ZiAoZWxlbWVudHNbaV0ubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGUpIHsK
KyAgICAgICAgICAgIENTdHJpbmcgY3N0cmluZyA9ICBlbGVtZW50c1tpXS5tX2ZpbGVuYW1lLnV0
ZjgoKTsKKyAgICAgICAgICAgIC8va2VlcCByZWYgaGVyZSBzbyBpdHMgbm90IGZyZWVkCisgICAg
ICAgICAgICBkLT5tX2NzdHJpbmdzLmFwcGVuZChjc3RyaW5nKTsKKyAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmZpbGVuYW1lID0gY3N0cmluZy5kYXRhKCk7CisKKyAgICAgICAgICAgIC8qIEZpbGwg
aW4gdGhlIGZpbGUgdXBsb2FkIGZpZWxkICovCisgICAgICAgICAgICBjdXJsX2Zvcm1hZGQoJmQt
Pm1fZmlsZVBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmxhc3RwdHIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJzZW5kZmlsZSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRSwgZmlsZW5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKworICAgICAgICAgICAgLyogRmlsbCBpbiB0aGUg
ZmlsZW5hbWUgZmllbGQgKi8KKyAgICAgICAgICAgIGN1cmxfZm9ybWFkZCgmZC0+bV9maWxlUG9z
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmbGFzdHB0ciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgImZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIENVUkxGT1JNX0VORCk7CisKKyAgICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIHN1
Ym1pdCBmaWVsZCB0b28sIGV2ZW4gaWYgdGhpcyBpcyByYXJlbHkgbmVlZGVkICovCisgICAgICAg
ICAgICBjdXJsX2Zvcm1hZGQoJmQtPm1fZmlsZVBvc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgJmxhc3RwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUs
ICJzdWJtaXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5U
UywgInNlbmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmluaXRKb2IoKQoreworICAg
IHJlZigpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgc3VybCA9IHVybCgpLnVybCgpOworICAgIGQt
Pm1fbG9hZGluZyA9IHRydWU7CisgICAgZC0+bV9yZXNwb25zZSA9IG5ldyBSZXNvdXJjZVJlc3Bv
bnNlKCk7CisgICAgZC0+bV9yZXNwb25zZS0+c2V0VXJsKHVybCgpKTsKKworLy9wcmludGYoIlJl
c291cmNlSGFuZGxlTWFuYWdlcjo6YWRkIFN0YXJ0aW5nIGpvYiAlc1xuIixqb2ItPnVybCgpLmFz
Y2lpKCkpOworICAgIC8vcmVtb3ZlIGFueSBxdWVyeSBwYXJ0IHNlbnQgdG8gYSBsb2NhbCBmaWxl
CisgICAgLy9hbGxvd3MgaHR0cCBzdHlsZSBnZXQgb3B0aW9ucyB0byBiZSBoYW5kbGVkIGJ5IGEg
bG9jYWwgZmlsZQorICAgIGlmICh1cmwoKS5pc0xvY2FsRmlsZSgpKSB7CisgICAgICAgIERlcHJl
Y2F0ZWRTdHJpbmcgcXVlcnkgPSB1cmwoKS5xdWVyeSgpOworICAgICAgICBpZiAoIXF1ZXJ5Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkeCA9IHN1cmwuZmluZChxdWVy
eSk7CisgICAgICAgICAgICBzdXJsID0gc3VybC5sZWZ0KGlkeCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZC0+bV9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworICAgIC8vIHVybCBwdHIgbXVz
dCByZW1haW4gdmFsaWQgdGhyb3VnaCB0aGUgcmVxdWVzdAorICAgIGQtPm1fdXJsID0gIHN0cmR1
cChzdXJsLmFzY2lpKCkpOworCisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VS
TE9QVF9QUklWQVRFLCB0aGlzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX0VSUk9SQlVGRkVSLCBlcnJvcl9idWZmZXIpOworICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZC0+bV9oYW5kbGUsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVDYWxsYmFjayk7CisgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9XUklURURBVEEsIHRoaXMpOwor
ICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSEVBREVSRlVOQ1RJT04s
IGhlYWRlckNhbGxiYWNrKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX1dSSVRFSEVBREVSLCB0aGlzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX01BWFJFRElSUywgMTApOworICAgIC8vY3VybF9lYXN5X3NldG9wdChk
LT5tX2hhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKyAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9CQVNJQyk7
CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VU0VSUFdELCAiZW1l
MDE4OkFzYzkwcGx1dG53aW4xIik7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwg
Q1VSTE9QVF9QUk9YWSwgInd3d2dhdGUwLm1vdC5jb206MTA4MCIpOworICAgIGN1cmxfZWFzeV9z
ZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVJMLGQtPm1fdXJsKTsKKworICAgIC8veG1sSHR0
cFJlcXVlc3Qgc2VlIHhtbC94bWxodHRwcmVxdWVzdC5jcHAKKyAgICBIVFRQSGVhZGVyTWFwICBj
dXN0b21IZWFkZXJzID0gIGQtPm1fcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CisgICAgaWYg
KCFjdXN0b21IZWFkZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAq
c2xpc3Q9TlVMTDsKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Y3VzdG9tSGVhZGVycy5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisK
KyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcg
dmFsdWUgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgU3RyaW5nIHBhaXIgPSBrZXkrIjogIit2
YWx1ZTsKKyAgICAgICAgICAgIENTdHJpbmcgY3N0cmluZyA9IHBhaXIudXRmOCgpOworICAgICAg
ICAgICAgLy9zYXZlIGZvciBsYXRlciBjbGVhbnVwCisgICAgICAgICAgICBkLT5tX2NzdHJpbmdz
LmFwcGVuZChjc3RyaW5nKTsKKyAgICAgICAgICAgIHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQo
c2xpc3QsY3N0cmluZy5kYXRhKCkpOworICAgICAgICB9CisgICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAgICAgICBkLT5t
X2N1c3RvbUhlYWRlciA9IHNsaXN0OworICAgIH0KKyAgICAvL2RlZmF1bHQgdG8gZ2V0CisgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IVFRQR0VULCBUUlVFKTsKKwor
ICAgIGlmIChtZXRob2QoKSA9PSAiUE9TVCIpCisgICAgICAgIHNldHVwUG9zdCgpOworICAgIGVs
c2UgaWYgKG1ldGhvZCgpID09ICJQVVQiKQorICAgICAgICBzZXR1cFB1dCgpOworICAgIGVsc2Ug
aWYgKG1ldGhvZCgpID09ICJIRUFEIikKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSwgQ1VSTE9QVF9OT0JPRFksIFRSVUUpOworfQorCiBib29sIFJlc291cmNlSGFuZGxlOjpz
dGFydChEb2NMb2FkZXIqIGRvY0xvYWRlcikKIHsKLSAgICByZWYoKTsKLSAgICBSZXNvdXJjZUhh
bmRsZU1hbmFnZXI6OmdldCgpLT5hZGQodGhpcyk7CisgICAgaW5pdEpvYigpOworICAgIFJlc291
cmNlSGFuZGxlTWFuYWdlcjo6c2VsZigpLT5hZGQodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK1ZlY3RvcjxjaGFyPiBSZXNvdXJjZUhhbmRsZTo6cnVuSW1tZWRpYXRlbHkoUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgZC0+bV91c2VTaW1wbGUgPSB0cnVlOworICAgIENV
Ukxjb2RlIHJlcyA9IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2VsZigpLT5ydW5JbW1lZGlhdGVs
eSh0aGlzKTsKKyAgICBpZihyZXMgIT0gQ1VSTEVfT0sgKQorICAgICAgICBzZXRFcnJvcigxKTsK
KyAgICByZXNwb25zZSA9ICpkLT5tX3Jlc3BvbnNlOworICAgIFZlY3RvcjxjaGFyPiByZXN1bHRz
ID0gVmVjdG9yPGNoYXI+KGQtPm1fcmVzdWx0RGF0YSk7CisgICAgZC0+bV9yZXN1bHREYXRhLmNs
ZWFyKCk7CisgICAgZmluaXNoKCk7CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKKwogdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKIHsKLSAgICBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6Omdl
dCgpLT5jYW5jZWwodGhpcyk7CisgICAgc2V0RXJyb3IoMSk7CisgICAgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjpzZWxmKCktPnJlbW92ZSh0aGlzKTsKIH0KIAordm9pZCBSZXNvdXJjZUhhbmRsZTo6
cmVjZWl2ZWRSZXNwb25zZShQbGF0Zm9ybVJlc3BvbnNlIHJlc3BvbnNlKQoreworfQorCisKK3Np
emVfdCBSZXNvdXJjZUhhbmRsZTo6d3JpdGUodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90
IG5tZW1iKQoreworICAgIGlmIChpc0Vycm9yUGFnZSgpKQorICAgICAgICByZXR1cm4gLTE7Cisg
ICAgaWYgKCFkLT5tX3NlbnRSZXNwb25zZSkgeworICAgICAgICBkLT5tX3NlbnRSZXNwb25zZSA9
IHRydWU7CisgICAgICAgIGQtPm1fY2xpZW50LT5yZWNlaXZlZFJlc3BvbnNlKHRoaXMsZC0+bV9y
ZXNwb25zZSk7CisgICAgICAgIGQtPm1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywq
ZC0+bV9yZXNwb25zZSk7CisgICAgfQorICAgIGludCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7
CisgICAgZC0+bV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKHRoaXMsIHN0YXRpY19jYXN0PGNoYXIq
PihwdHIpLCB0b3RhbFNpemUpOworICAgIGlmIChkLT5tX3VzZVNpbXBsZSkgeworICAgICAgICBk
LT5tX3Jlc3VsdERhdGEuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXIqPihwdHIpLCB0b3RhbFNpemUp
OworICAgIH0KKyAgICByZXR1cm4gdG90YWxTaXplOworfQorCitzaXplX3QgUmVzb3VyY2VIYW5k
bGU6OmhlYWRlcihjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIpCit7CisgICAg
aWYgKGlzRXJyb3JQYWdlKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpbnQgdG90YWxTaXpl
ID0gc2l6ZSAqIG5tZW1iOworICAgIFN0cmluZyByZXNwb25zZSA9IFN0cmluZyhwdHIsdG90YWxT
aXplKTsKKyAgICBpbnQgaW5kZXggPSByZXNwb25zZS5maW5kKCc6Jyk7CisgICAgU3RyaW5nIG5h
bWUgPSByZXNwb25zZS5zdWJzdHJpbmcoMCxpbmRleCsxKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICBTdHJpbmcgdmFsdWUgPSByZXNwb25zZS5zdWJzdHJpbmcoaW5kZXgrMSkuc3RyaXBXaGl0ZVNw
YWNlKCk7CisKKyAgICBpZiAobmFtZSA9PSAiQ29udGVudC1UeXBlOiIpIHsKKyAgICAgICAgU3Ry
aW5nIG1pbWVUeXBlID0gdmFsdWU7CisgICAgICAgIFN0cmluZyBjaGFyc2V0OworICAgICAgICAv
L3RoZSBtaW1lIHN0cmluZyBjYW4gaGF2ZSB0eXBlOyBjaGFyc2V0CisgICAgICAgIGluZGV4ID0g
dmFsdWUuZmluZCgiOyIpOworICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAg
IG1pbWVUeXBlID0gdmFsdWUubGVmdChpbmRleCk7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNl
dCA9IHZhbHVlLnJpZ2h0KGluZGV4KzEpOworICAgICAgICAgICAgZC0+bV9yZXNwb25zZS0+c2V0
VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKKyAgICAgICAgfQorICAgICAgICBkLT5tX3Jlc3Bv
bnNlLT5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CisgICAgfQorICAgIGQtPm1fcmVzcG9uc2UtPmh0
dHBIZWFkZXJGaWVsZHMoKS5hZGQobmFtZSx2YWx1ZSk7CisgICAgcmV0dXJuIHRvdGFsU2l6ZTsK
K30KKwordm9pZCAgUmVzb3VyY2VIYW5kbGU6OnByb2Nlc3NNZXNzYWdlKENVUkxNc2cqIG1zZykK
K3sKKyAgICBpZiAobXNnLT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7CisgICAgICAgIC8vIGZpbmQg
dGhlIG5vZGUgd2hpY2ggaGFzIHNhbWUgZC0+bV9oYW5kbGUgYXMgY29tcGxldGVkIHRyYW5zZmVy
CisgICAgICAgIGlmIChtc2ctPmRhdGEucmVzdWx0ICE9IENVUkxFX09LKSB7CisgICAgICAgICAg
ICBjaGFyICpoYW5kbGVfdXJsPTA7CisgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5t
X2hhbmRsZSxDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmaGFuZGxlX3VybCk7CisgICAgICAgICAg
ICBwcmludGYoIkN1cmwgRVJST1IgdXJsPSVzIGVycm9yOiVzXG4iLGhhbmRsZV91cmwsIGN1cmxf
ZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7CisgICAgICAgICAgICBmcmVlKGhhbmRs
ZV91cmwpOworICAgICAgICAgICAgc2V0RXJyb3IobXNnLT5kYXRhLnJlc3VsdCk7CisgICAgICAg
IH0KKyAgICAgICAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzZWxmKCktPnJlbW92ZSh0aGlzKTsK
KyAgICB9Cit9CisKK3ZvaWQgIFJlc291cmNlSGFuZGxlOjpmaW5pc2goKQoreworICAgIGlmIChk
LT5tX2NsaWVudCkgeworICAgICAgICAvL2VtcHR5IHBhZ2UgaWYgdHJ1ZQorICAgICAgICBpZiAo
IWQtPm1fc2VudFJlc3BvbnNlKSB7CisgICAgICAgICAgICBkLT5tX3NlbnRSZXNwb25zZSA9IHRy
dWU7CisgICAgICAgICAgICBkLT5tX2NsaWVudC0+cmVjZWl2ZWRSZXNwb25zZSh0aGlzLGQtPm1f
cmVzcG9uc2UpOworICAgICAgICB9CisgICAgICAgIGQtPm1fY2xpZW50LT5kaWRGaW5pc2hMb2Fk
aW5nKHRoaXMpOworICAgICAgICBkLT5tX2NsaWVudC0+cmVjZWl2ZWRBbGxEYXRhKHRoaXMsMCk7
CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHJldmlzaW9uIDE3
NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAogI2VuZGlmCiAKICNpZiBVU0UoQ1VS
TCkKLXR5cGVkZWYgdm9pZCBDVVJMOworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDxDU3RyaW5nLmg+CiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKFFUKQpAQCAtODQsNiArODYsMTQgQEAKICNlbmRpZgogI2lmIFVTRShDVVJMKQogICAgICAg
ICAgICAgLCBtX2hhbmRsZSgwKQorICAgICAgICAgICAgLCBtX3VybCgwKQorICAgICAgICAgICAg
LCBtX3VzZVNpbXBsZShmYWxzZSkKKyAgICAgICAgICAgICwgbV9jdXN0b21IZWFkZXIoMCkKKyAg
ICAgICAgICAgICwgbV9jdXN0b21Qb3N0SGVhZGVyKDApCisgICAgICAgICAgICAsIG1fZmlsZVBv
c3QoMCkKKyAgICAgICAgICAgICwgbV9yZXNwb25zZSgwKQorICAgICAgICAgICAgLCBtX3NlbnRS
ZXNwb25zZShmYWxzZSkKKwogI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtMTIxLDYg
KzEzMSwyMyBAQAogI2VuZGlmCiAjaWYgVVNFKENVUkwpCiAgICAgICAgIENVUkwqIG1faGFuZGxl
OworICAgICAgICBjaGFyICptX3VybDsKKyAgICAgICAgLyoKKyAgICAgICAgICogZXhlY3V0ZSB0
aGUgZnVsbCByZXF1ZXN0IG9uIGNhbGxiYWNrCisgICAgICAgICAqIGRvbid0IG11bHRpcGxleAor
ICAgICAgICAgKi8KKyAgICAgICAgYm9vbCBtX3VzZVNpbXBsZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFN0b3JlcyBlbnRpcmUgcmVzcG9uc2UgaWYgam9iIGlzIG1fdXNlU2ltcGxlCisgICAg
ICAgICAqLworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9yZXN1bHREYXRhOworICAgICAgICBzdHJ1
Y3QgY3VybF9zbGlzdCogbV9jdXN0b21IZWFkZXI7CisgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0
KiBtX2N1c3RvbVBvc3RIZWFkZXI7CisgICAgICAgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICptX2Zp
bGVQb3N0OworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9wb3N0Qnl0ZXM7CisgICAgICAgIFZlY3Rv
cjxDU3RyaW5nPiBtX2NzdHJpbmdzOworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlKiBtX3Jlc3Bv
bnNlOworICAgICAgICBib29sIG1fc2VudFJlc3BvbnNlOwogI2VuZGlmCiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgICAgIFFTdHJpbmcgbV9jaGFyc2V0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgJKHJldmlzaW9uIDE3NjMwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDE0IEBACiAjaW5jbHVkZSA8UVN0cmluZz4KICNlbmRpZgogCisj
aWYgVVNFKENVUkwpCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2VuZGlmCisKKyNpbmNs
dWRlICJTaGFyZWQuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKENGTkVUV09S
SykKQEAgLTY2LDYgKzc0LDkgQEAKIAogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1EYXRhOwog
ICAgIHR5cGVkZWYgUmVmUHRyPFBsYXRmb3JtUmVzcG9uc2VRdD4gUGxhdGZvcm1SZXNwb25zZTsK
KyNlbGlmIFVTRShDVVJMKQorICAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtRGF0YTsKKyAgICAg
dHlwZWRlZiBSZXNvdXJjZVJlc3BvbnNlKiBQbGF0Zm9ybVJlc3BvbnNlOwogI2Vsc2UKICAgICAv
LyBOb3Qgc3VyZSB3aGF0IHRoZSBzdHJhdGVneSBmb3IgdGhpcyB3aWxsIGJlIG9uIG90aGVyIHBs
YXRmb3Jtcy4KICAgICB0eXBlZGVmIHN0cnVjdCBQbGF0Zm9ybURhdGFTdHJ1Y3QqIFBsYXRmb3Jt
RGF0YTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCShy
ZXZpc2lvbiAxNzYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw5IEBACiAjZW5kaWYKICNlbmRpZgogCisj
aWYgVVNFKENVUkwpCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjZW5kaWYKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRG9jTG9hZGVyOwpAQCAtOTcsNyArMTAwLDE5IEBACiAgICAgZnJp
ZW5kIExSRVNVTFQgX19zdGRjYWxsIFJlc291cmNlSGFuZGxlV25kUHJvYyhIV05ELCB1bnNpZ25l
ZCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdESykg
fHwgUExBVEZPUk0oUVQpCisjaWYgVVNFKENVUkwpCit2b2lkICBzZXR1cFB1dCgpOwordm9pZCAg
c2V0dXBQb3N0KCk7Cit2b2lkICBpbml0Sm9iKCk7Cit2b2lkICBwcm9jZXNzTWVzc2FnZShDVVJM
TXNnKiBtc2cpOwordm9pZCAgZmluaXNoKCk7CitzaXplX3Qgd3JpdGUodm9pZCogcHRyLCBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IG5tZW1iKTsKK3NpemVfdCBoZWFkZXIoY2hhciogcHRyLCBzaXplX3Qg
c2l6ZSwgc2l6ZV90IG5tZW1iKTsKK1ZlY3RvcjxjaGFyPiBydW5JbW1lZGlhdGVseShSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSk7CitDVVJMICpwbGF0Zm9ybUhhbmRsZSgpOworI2VuZGlmCisK
KyNpZiBQTEFURk9STShRVCkKICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBnZXRJbnRlcm5h
bCgpIHsgcmV0dXJuIGQ7IH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlc3BvbnNlLmgJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTIg
KzU0LDE3IEBACiAgICAgfQogIAogICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsOyB9CisgICAgdm9pZCBzZXRVcmwoIGNvbnN0IEtVUkwmIHVybCl7IG1fdXJsID0gdXJs
OyB9CiAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5
cGU7IH0KKyAgICB2b2lkIHNldE1pbWVUeXBlKFN0cmluZyYgbWltZVR5cGUpIHsgbV9taW1lVHlw
ZSA9IG1pbWVUeXBlOyB9CiAgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoOyB9CisgICAgdm9pZCBzZXRFeHBl
Y3RlZENvbnRlbnRMZW5ndGgobG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoKSB7IG1fZXhwZWN0ZWRD
b250ZW50TGVuZ3RoID0gZXhwZWN0ZWRMZW5ndGg7IH0KICAgICBjb25zdCBTdHJpbmcmIHRleHRF
bmNvZGluZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RleHRFbmNvZGluZ05hbWU7IH0KKyAgICB2
b2lkIHNldFRleHRFbmNvZGluZ05hbWUoU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lICkgeyBtX3Rl
eHRFbmNvZGluZ05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lOyB9CiAKICAgICAvLyBGSVhNRSBzaG91
bGQgY29tcHV0ZSB0aGlzIG9uIHRoZSBmbHkKICAgICBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsgfQorICAgIHZvaWQg
c2V0U3VnZ2VzdGVkRmlsZW5hbWUoU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkgeyBtX3N1Z2dl
c3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7IH0KIAogICAgIGludCBodHRwU3RhdHVz
Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7IH0KICAgICB2b2lkIHNldEhU
VFBTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKSB7IG1faHR0cFN0YXR1c0NvZGUgPSBzdGF0dXND
b2RlOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHJl
dmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTAgKzQzLDYgQEAKIHR5cGVkZWYgbG9uZyBMUEFSQU07
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdk
a0V2ZW50OwotI2VuZGlmCi0KICNpZiBQTEFURk9STShRVCkKIGNsYXNzIFFLZXlFdmVudDsKICNl
bmRpZgpAQCAtNTUsNiArNTEsMjMgQEAKIAogICAgIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCB7CiAgICAgcHVibGljOgorICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoU3RyaW5nIHRl
eHQsIFN0cmluZyB1bm1vZGlmaWVkVGV4dCwgU3RyaW5nIGtleUlkZW50aWZpZXIsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNLZXlVcCwgYm9vbCBhdXRvUmVwZWF0LCBp
bnQgd2luZG93c0tleUNvZGUsIGJvb2wgaXNLZXlwYWQsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2hpZnRLZXksIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wg
bWV0YUtleSkKKyAgICAgICAgICAgIDogbV90ZXh0KHRleHQpCisgICAgICAgICAgICAsIG1fdW5t
b2RpZmllZFRleHQodW5tb2RpZmllZFRleHQpCisgICAgICAgICAgICAsIG1fa2V5SWRlbnRpZmll
cihrZXlJZGVudGlmaWVyKQorICAgICAgICAgICAgLCBtX2lzS2V5VXAoaXNLZXlVcCkKKyAgICAg
ICAgICAgICwgbV9hdXRvUmVwZWF0KGF1dG9SZXBlYXQpCisgICAgICAgICAgICAsIG1fV2luZG93
c0tleUNvZGUod2luZG93c0tleUNvZGUpCisgICAgICAgICAgICAsIG1faXNLZXlwYWQoaXNLZXlw
YWQpCisgICAgICAgICAgICAsIG1fc2hpZnRLZXkoc2hpZnRLZXkpCisgICAgICAgICAgICAsIG1f
Y3RybEtleShjdHJsS2V5KQorICAgICAgICAgICAgLCBtX2FsdEtleShhbHRLZXkpCisgICAgICAg
ICAgICAsIG1fbWV0YUtleShtZXRhS2V5KQorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAg
ICBTdHJpbmcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQogICAgICAgICBTdHJpbmcg
dW5tb2RpZmllZFRleHQoKSBjb25zdCB7IHJldHVybiBtX3VubW9kaWZpZWRUZXh0OyB9CiAgICAg
ICAgIFN0cmluZyBrZXlJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9rZXlJZGVudGlmaWVy
OyB9CkBAIC03NSwxMCArODgsNiBAQAogICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoSFdO
RCwgV1BBUkFNLCBMUEFSQU0pOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHREspCi0gICAgICAg
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudCopOwotI2VuZGlmCi0KICNpZiBQTEFURk9S
TShRVCkKICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KFFLZXlFdmVudCosIGJvb2wgaXNL
ZXlVcCk7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BhZ2VHZGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BhZ2VHZGsuY3BwCShyZXZpc2lvbiAx
NzYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BhZ2VHZGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiw3ICsyMiw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTMxLDUxICszMSwzMCBAQAogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0j
aW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiV2lu
ZG93R2RrLmgiCiAKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJy
LCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18s
X19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgR2RrRHJhd2FibGUqIHJvb3RXaW5kb3dGb3JGcmFtZShGcmFtZSogZnJhbWUpCi17
Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBmcmFtZS0+dmlldygpOwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1
cm4gMDsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBmcmFtZVZpZXctPmRyYXdhYmxlKCk7
Ci0gICAgaWYgKCFkcmF3YWJsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFHREtfV0lO
RE9XKGRyYXdhYmxlKSkKLSAgICAgICAgcmV0dXJuIGRyYXdhYmxlOwotICAgIEdka1dpbmRvdyog
d2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgcmV0dXJuIGdka193aW5kb3dfZ2V0
X3RvcGxldmVsKHdpbmRvdyk7Ci19CiAKIEZsb2F0UmVjdCBQYWdlOjp3aW5kb3dSZWN0KCkgY29u
c3QKIHsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSByb290V2luZG93Rm9yRnJhbWUobWFp
bkZyYW1lKCkpOwotICAgIGlmICghZHJhd2FibGUpCisgICAgRnJhbWVHZGsqIGZyYW1lID0gc3Rh
dGljX2Nhc3Q8RnJhbWVHZGsqPihtYWluRnJhbWUoKSk7CisgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgZ2ludCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aDsKLQotICAgIGlmICghR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpIHsKLSAgICAgICAgZ2Rr
X2RyYXdhYmxlX2dldF9zaXplKGRyYXdhYmxlLCAmd2lkdGgsICZoZWlnaHQpOwotICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLQotICAgIEdka1dp
bmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19nZXRf
Z2VvbWV0cnkod2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgJmRlcHRoKTsKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEludFJlY3QgcmVjdCA9
IGZyYW1lLT52aWV3KCktPmZyYW1lR2VvbWV0cnkoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KHJl
Y3QpOwogfQogCiB2b2lkIFBhZ2U6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByKQog
ewotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IHJvb3RXaW5kb3dGb3JGcmFtZShtYWluRnJh
bWUoKSk7Ci0gICAgaWYgKCFkcmF3YWJsZSB8fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCisg
ICAgRnJhbWVHZGsqIGZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWVHZGsqPihtYWluRnJhbWUoKSk7
CisgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93
ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19tb3ZlX3Jlc2l6ZSh3aW5k
b3csIChpbnQpci54KCksIChpbnQpci55KCksIChpbnQpci53aWR0aCgpLCAoaW50KXIuaGVpZ2h0
KCkpOworICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qocik7CisgICAgZnJhbWUt
PnZpZXcoKS0+c2V0RnJhbWVHZW9tZXRyeShyZWN0KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9DdXJzb3JHZGsuY3BwCShyZXZpc2lvbiAxNzYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0N1cnNvckdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIy
LDcgKzIyLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpA
QCAtMzIsMTUgKzMyLDE4IEBACiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3Rk
ZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5F
X18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQotICAgIDogbV9pbXBsKG90
aGVyLm1faW1wbCkKKyAgICAgICAgOiBtX2ltcGwob3RoZXIubV9pbXBsKQogewogICAgIGlmICht
X2ltcGwpCiAgICAgICAgIGdka19jdXJzb3JfcmVmKG1faW1wbCk7CiB9CiAKKwogQ3Vyc29yOjp+
Q3Vyc29yKCkKIHsKICAgICBpZiAobV9pbXBsKQpAQCAtNTYsNyArNTksNyBAQAogfQogCiBDdXJz
b3I6OkN1cnNvcihHZGtDdXJzb3IqIGMpCi0gICAgOiBtX2ltcGwoYykKKyAgICAgICAgOiBtX2lt
cGwoYykKIHsKICAgICBtX2ltcGwgPSBjOwogICAgIEFTU0VSVChjKTsKQEAgLTE3Nyw0ICsxODAs
MTAgQEAKICAgICByZXR1cm4gYzsKIH0KIAorY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkK
K3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfQVJST1cpOworICAg
IHJldHVybiBjOwogfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaE1hcEdk
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3Bw
CShyZXZpc2lvbiAxNzYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOCwxMyArOCwxMyBAQAogICog
YXJlIG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ltYWdlR2RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9JbWFnZUdkay5jcHAJKHJldmlzaW9uIDE3
NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMCwxMSArMjAsMTIgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
IAogI2lmIFBMQVRGT1JNKENBSVJPKQogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC0zMiwzMSArMzMs
MzIgQEAKICNlcnJvciAiR0RLIHBvcnQgcmVxdWlyZXMgUExBVEZPUk0oQ0FJUk8pIgogI2VuZGlm
CiAKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6
IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlf
RlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKwogLy8gVGhpcyBmdW5jdGlvbiBsb2FkcyByZXNvdXJj
ZXMgZnJvbSBXZWJLaXQKIFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3Qg
Y2hhciopOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICB2b2lkIEltYWdlOjppbml0UGxh
dGZvcm1EYXRhKCkKLSAgICB7Ci0gICAgfQordm9pZCBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgp
Cit7fQogCi0gICAgdm9pZCBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCi0gICAgewot
ICAgIH0KK3ZvaWQgSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQore30KIAotICAgIElt
YWdlKiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciAqbmFtZSkKLSAgICB7
Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBhcnIgPSBsb2FkUmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7
Ci0gICAgICAgIEltYWdlKiBpbWcgPSBuZXcgSW1hZ2U7Ci0gICAgICAgIGltZy0+c2V0TmF0aXZl
RGF0YSgmYXJyLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIGltZzsKLSAgICB9CitJbWFnZSogSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgVmVjdG9y
PGNoYXI+IGFyciA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKKyAgICBJbWFnZSogaW1n
ID0gbmV3IEltYWdlOworICAgIGltZy0+c2V0TmF0aXZlRGF0YSgmYXJyLCB0cnVlKTsKKyAgICBy
ZXR1cm4gaW1nOworfQogCi0gICAgYm9vbCBJbWFnZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmlu
ZyYgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Citib29sIEltYWdlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQoreworICAgIGlmICh0eXBlID09ICJpbWFnZS9qcGVnIiB8fCB0eXBlID09ICJpbWFn
ZS9wbmciKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdldFByaXZhdGVHZGsuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRQcml2YXRlR2RrLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRQcml2YXRlR2RrLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQu
aCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBX
aWRnZXQ7CisgICAgY2xhc3MgV2luZG93R2RrOworICAgIGNsYXNzIFdpZGdldENsaWVudDsKKyAg
ICBjbGFzcyBGcmFtZVZpZXc7CisKKworY2xhc3MgV2lkZ2V0UHJpdmF0ZSAKK3sKK3B1YmxpYzoK
KyAgICBXaWRnZXRQcml2YXRlKFdpZGdldCopOworICAgIHZpcnR1YWwgfldpZGdldFByaXZhdGUo
KTsKKyAgICB2b2lkIGNyZWF0ZVZpZXcoS1VSTCB1cmwpOworCisjaWZuZGVmIE5ERUJVRworICAg
IHZvaWQgZHVtcERvY3VtZW50KCk7CisjZW5kaWYKK3B1YmxpYzoKKyAgICBLVVJMIHVybDsKKyAg
ICBib29sIHZpc2libGU7CisgICAgYm9vbCBlbmFibGVkOworICAgIGJvb2wgc2VsZWN0ZWQ7Cisg
ICAgYm9vbCBoYXNGb2N1czsKKyAgICBJbnRSZWN0IGdlb21ldHJ5OworICAgIEZvbnQgZm9udDsK
KyAgICBXaW5kb3dHZGsqIHdpbmRvdzsKKyAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKKyAgICBX
aWRnZXQqIHdpZGdldDsKKyAgICBXaWRnZXQqIHBhcmVudDsKKyAgICBSZWZQdHI8RnJhbWVWaWV3
PiB2aWV3OworICAgIGJvb2wgaGFzU2Nyb2xsYmFyczsKKyAgICBTdHJpbmcgZXZlbnRUeXBlOwor
fTsKKworfQorLy8gdmltOiB0cz00IHN3PTQgZXQKKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMTc2MzApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAg
KiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgogICoKICAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0zNCwxMiArMzQsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGEKK3sK
IHB1YmxpYzoKLSAgICBjbGFzcyBEZWxldGVkIHt9OwotICAgIEZvbnRQbGF0Zm9ybURhdGEoRGVs
ZXRlZCkgOiBtX3BhdHRlcm4oKEZjUGF0dGVybiopLTEpIHsgfQorICAgIGNsYXNzIERlbGV0ZWQK
KyAgICAgICAge307CisgICAgRm9udFBsYXRmb3JtRGF0YShEZWxldGVkKSA6IG1fcGF0dGVybigo
RmNQYXR0ZXJuKiktMSkKKyAgICB7IH0KIAotICAgIEZvbnRQbGF0Zm9ybURhdGEoKSA6IG1fcGF0
dGVybigwKSB7IH0KKyAgICBGb250UGxhdGZvcm1EYXRhKCkgOiBtX3BhdHRlcm4oMCkKKyAgICB7
IH0KIAogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHkpOwogICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZVZpZXdHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0ZyYW1lVmlld0dkay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9GcmFtZVZpZXdHZGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDky
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU2Nyb2xsQmFyLmgiCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmlu
dGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywg
X19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisKK3N0YXRpYyBGcmFtZVZpZXcqIGZvY3VzVmlldzsKKwordm9pZCBGcmFtZVZp
ZXc6OnVwZGF0ZUJvcmRlcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBG
cmFtZVZpZXc6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1Njcm9sbGJhcihNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJiBoaXQsIFBsYXRmb3JtU2Nyb2xsYmFyKiBiYXIpCit7CisgICAgRnJhbWUq
IGZyYW1lID0gYmFyLT5mcmFtZVZpZXcoKS0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpIHsKKyAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGhpdC5ldmVudCgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBGcmFtZVZpZXc6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmIGhpdCwgRnJhbWUqIGZyYW1lKQoreworI2lmIDAKKyAgICBpZiAoZm9j
dXNGcmFtZSAmJiBmb2N1c0ZyYW1lICE9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAgICAgZm9jdXNG
cmFtZS0+aW52YWxpZGF0ZVNlbGVjdGlvbigpOworICAgICAgICBmb2N1c0ZyYW1lLT5zZXRJc0Fj
dGl2ZShmYWxzZSk7CisgICAgICAgIGZvY3VzRnJhbWUtPnNldFdpbmRvd0hhc0ZvY3VzKGZhbHNl
KTsKKyAgICB9CisgICAgZm9jdXNGcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lR2RrKj4oZnJhbWUp
OworICAgIGZvY3VzRnJhbWUtPnNldElzQWN0aXZlKHRydWUpOworICAgIGZvY3VzRnJhbWUtPnNl
dFdpbmRvd0hhc0ZvY3VzKHRydWUpOworICAgIGZvY3VzRnJhbWUtPnZpZXcoKS0+aGFuZGxlTW91
c2VQcmVzc0V2ZW50KGhpdC5ldmVudCgpKTsKKyAgICBmb2N1c0ZyYW1lLT5pbnZhbGlkYXRlU2Vs
ZWN0aW9uKCk7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmFtZVZpZXc6
OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyYgaGl0LCBGcmFtZSogZnJhbWUpCit7CisgICAgZnJhbWUtPnZpZXcoKS0+aGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQoaGl0LmV2ZW50KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEZyYW1lVmlldzo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJiBoaXQsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBmcmFtZS0+dmlldygpLT5o
YW5kbGVNb3VzZU1vdmVFdmVudChoaXQuZXZlbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgRnJhbWVWaWV3OjpwYXNzV2hlZWxFdmVudFRvU3ViZnJhbWUoUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50LCBGcmFtZSogZnJhbWUpCit7CisgICAgZnJhbWUtPnZpZXcoKS0+aGFu
ZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorLy8g
dmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwCShy
ZXZpc2lvbiAxNzYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBKdXN0aW4gSGF5Z29vZCA8amhh
eWdvb2RAc3BzdS5lZHU+LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiw5
MyArMjEsMTEzIEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVNjcm9sbEJhci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiV2lkZ2V0UHJpdmF0ZUdkay5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiVHlw
aW5nQ29tbWFuZC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgImFzc2VydC5oIgorI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgImNhaXJvLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGdkay9nZGsu
aD4KIAorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhN
RTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRU
WV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCisjZGVmaW5lIElOQ1JFTUVOVCAyMAorCiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vaGFjayB0byBzaW11
bGF0ZSBzY3JvbGwgYmFycwotY29uc3QgaW50IHNjcm9sbGJhclNpemUgPSAxMDsKLQotY2xhc3Mg
U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUKK2NsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZp
ZXdQcml2YXRlIDogcHVibGljIFNjcm9sbGJhckNsaWVudAogewogcHVibGljOgogICAgIFNjcm9s
bFZpZXdQcml2YXRlKCkKLSAgICAgICAgOiBoYXNTdGF0aWNCYWNrZ3JvdW5kKGZhbHNlKSwgc3Vw
cHJlc3NTY3JvbGxiYXJzKGZhbHNlKQotICAgICAgICAsIHZTY3JvbGxiYXJNb2RlKFNjcm9sbGJh
ckF1dG8pLCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQotICAgIHsgfQorICAgICAgICAg
ICAgOiBoYXNTdGF0aWNCYWNrZ3JvdW5kKGZhbHNlKQorICAgICAgICAgICAgLCBzdXBwcmVzc1Nj
cm9sbGJhcnMoZmFsc2UpCisgICAgICAgICAgICAsIHZTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1
dG8pCisgICAgICAgICAgICAsIGhTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCisgICAgICAg
ICAgICAsIHZTY3JvbGxiYXIoMCkKKyAgICAgICAgICAgICwgaFNjcm9sbGJhcigwKQorICAgICAg
ICAgICAgLCB2aWV3KDApCisgICAge30KKyAgICB2aXJ0dWFsIH5TY3JvbGxWaWV3UHJpdmF0ZSgp
CisgICAge30KKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCisgICAg
e30KIAorICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIH0KKwogICAgIEludFNpemUgc2Nyb2xsT2Zm
c2V0OwogICAgIEludFNpemUgY29udGVudHNTaXplOwogICAgIGJvb2wgaGFzU3RhdGljQmFja2dy
b3VuZDsKICAgICBib29sIHN1cHByZXNzU2Nyb2xsYmFyczsKICAgICBTY3JvbGxiYXJNb2RlIHZT
Y3JvbGxiYXJNb2RlOwogICAgIFNjcm9sbGJhck1vZGUgaFNjcm9sbGJhck1vZGU7Ci0gICAgSW50
UmVjdCB2aXNpYmxlQ29udGVudEFyZWE7Ci0gICAgSW50UmVjdCB2aWV3cG9ydEFyZWE7Ci0gICAg
SW50UmVjdCBzY3JvbGxWaWV3QXJlYTsKKyAgICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+IGhT
Y3JvbGxiYXI7CisgICAgUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiB2U2Nyb2xsYmFyOworICAg
IFNjcm9sbFZpZXcqIHZpZXc7CiB9OwogCi0KIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKQotICAg
IDogbV9kYXRhKG5ldyBTY3JvbGxWaWV3UHJpdmF0ZSkKLXt9CisgICAgICAgIDogbV9kYXRhKG5l
dyBTY3JvbGxWaWV3UHJpdmF0ZSgpKQoreworICAgIG1fZGF0YS0+dmlldyA9IHRoaXM7Cit9CiAK
IFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi12
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9v
bCBub3cpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHVwZGF0ZVJlY3QueCgpLCB1cGRh
dGVSZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpIH07Ci0g
ICAgR2RrRHJhd2FibGUqIGdka2RyYXdhYmxlID0gV2lkZ2V0OjpkcmF3YWJsZSgpOwotICAgIGlm
IChHREtfSVNfV0lORE9XKGdka2RyYXdhYmxlKSkgewotICAgICAgICBHZGtXaW5kb3cqIHdpbmRv
dyA9IEdES19XSU5ET1coZ2RrZHJhd2FibGUpOwotICAgICAgICBnZGtfd2luZG93X2ludmFsaWRh
dGVfcmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKG5vdykKLSAgICAgICAg
ICAgIGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7Ci0gICAgfQotfQot
CiB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QsIGJvb2wgbm93KQogewogICAgIEludFJlY3QgYWRqdXN0ZWREaXJ0eVJlY3QodXBkYXRlUmVj
dCk7CiAgICAgYWRqdXN0ZWREaXJ0eVJlY3QubW92ZSgtbV9kYXRhLT5zY3JvbGxPZmZzZXQpOwot
ICAgIHVwZGF0ZVZpZXcoYWRqdXN0ZWREaXJ0eVJlY3QsIG5vdyk7CisgICAgcmVwYWludChhZGp1
c3RlZERpcnR5UmVjdCxub3cpOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6dmlzaWJsZVdpZHRoKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT52aWV3cG9ydEFyZWEud2lkdGgoKTsKKyAgICBJ
bnRSZWN0IHIgPSBlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKTsKKyAgICBy
ZXR1cm4gci53aWR0aCgpOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6dmlzaWJsZUhlaWdodCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+dmlld3BvcnRBcmVhLmhlaWdodCgpOworICAgIElu
dFJlY3QgciA9IGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOworICAgIHJl
dHVybiByLmhlaWdodCgpOwogfQogCi0vLyBSZWdpb24gb2YgdGhlIGNvbnRlbnQgY3VycmVudGx5
IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0IGluIHRoZSBjb250ZW50IHZpZXcncyBjb29yZGluYXRl
IHN5c3RlbS4KIEZsb2F0UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoKSBjb25z
dAogewotICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdCA9IEZsb2F0UmVjdChtX2RhdGEtPnZpZXdw
b3J0QXJlYSk7Ci0gICAgY29udGVudFJlY3QubW92ZShtX2RhdGEtPnNjcm9sbE9mZnNldCk7Ci0g
ICAgcmV0dXJuIGNvbnRlbnRSZWN0OworICAgIEludFJlY3QgdmlzUmVjdCA9IEludFJlY3QoMCww
LHdpZHRoKCksaGVpZ2h0KCkpOworICAgIGlmIChtX2RhdGEtPnZTY3JvbGxiYXIpCisgICAgICAg
IHZpc1JlY3Quc2V0V2lkdGgodmlzUmVjdC53aWR0aCgpIC0gbV9kYXRhLT52U2Nyb2xsYmFyLT53
aWR0aCgpKTsKKyAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKQorICAgICAgICB2aXNSZWN0LnNl
dEhlaWdodCh2aXNSZWN0LmhlaWdodCgpIC0gbV9kYXRhLT5oU2Nyb2xsYmFyLT5oZWlnaHQoKSk7
CisgICAgdmlzUmVjdC5tb3ZlKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKKworICAgIHJldHVybiBG
bG9hdFJlY3QodmlzUmVjdCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0Q29udGVudHNQb3Mo
aW50IG5ld1gsIGludCBuZXdZKQpAQCAtMTE4LDkgKzEzNyw5IEBACiAgICAgc2Nyb2xsQnkoZHgs
IGR5KTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpyZXNpemVDb250ZW50cyhpbnQgdywgaW50IGgp
Cit2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGludCB3LGludCBoKQogewotICAgIElu
dFNpemUgbmV3U2l6ZSh3LCBoKTsKKyAgICBJbnRTaXplIG5ld1NpemUodyxoKTsKICAgICBpZiAo
bV9kYXRhLT5jb250ZW50c1NpemUgIT0gbmV3U2l6ZSkgewogICAgICAgICBtX2RhdGEtPmNvbnRl
bnRzU2l6ZSA9IG5ld1NpemU7CiAgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKQEAgLTE0Nywy
MiArMTY2LDMzIEBACiAgICAgcmV0dXJuIG1fZGF0YS0+Y29udGVudHNTaXplLmhlaWdodCgpOwog
fQogCitJbnRQb2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCByZXN1bHQgPSBwb2ludDsKKyAgICBJbnRQ
b2ludCBnbG9iYWwgPSBsb2NhdGlvbkluV2luZG93KCk7CisgICAgcmVzdWx0Lm1vdmUoZ2xvYmFs
LngoKSxnbG9iYWwueSgpKTsKKyAgICByZXR1cm4gcmVzdWx0ICsgc2Nyb2xsT2Zmc2V0KCk7Cit9
CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHJlc3VsdCA9IHBvaW50OworICAgIEludFBv
aW50IGdsb2JhbCA9IGxvY2F0aW9uSW5XaW5kb3coKTsKKyAgICByZXN1bHQubW92ZSgtZ2xvYmFs
LngoKSwtZ2xvYmFsLnkoKSk7CisgICAgcmV0dXJuIHJlc3VsdCAtIHNjcm9sbE9mZnNldCgpOwor
fQorCiBJbnRTaXplIFNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OwogfQogCi1JbnRTaXplIFNjcm9sbFZpZXc6Om1heGlt
dW1TY3JvbGwoKSBjb25zdAotewotICAgIEludFNpemUgZGVsdGEgPSBtX2RhdGEtPmNvbnRlbnRz
U2l6ZSAtIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OwotICAgIGRlbHRhLmNsYW1wTmVnYXRpdmVUb1pl
cm8oKTsKLSAgICByZXR1cm4gZGVsdGE7CiAKLX0KIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQnko
aW50IGR4LCBpbnQgZHkpCiB7CiAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQgPSBtX2RhdGEtPnNj
cm9sbE9mZnNldDsKLSAgICBJbnRTaXplIG1heFNjcm9sbCA9IG1heGltdW1TY3JvbGwoKTsKKyAg
ICBJbnRTaXplIG1heFNjcm9sbCA9IG1fZGF0YS0+Y29udGVudHNTaXplIC0gSW50U2l6ZSh2aXNp
YmxlV2lkdGgoKSx2aXNpYmxlSGVpZ2h0KCkpOworICAgIG1heFNjcm9sbC5jbGFtcE5lZ2F0aXZl
VG9aZXJvKCk7CiAgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQgKyBJ
bnRTaXplKGR4LCBkeSk7CiAgICAgbmV3U2Nyb2xsT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8o
KTsKICAgICBuZXdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQuc2hydW5rVG8obWF4U2Ny
b2xsKTsKQEAgLTE3MCwyNyArMjAwLDIzIEBACiAgICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQpIHsKICAgICAgICAgbV9kYXRhLT5zY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxP
ZmZzZXQ7CiAgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLSAgICAgICAgLy8gU2Nyb2xsYmFy
IHVwZGF0ZXMgY2FuIGZhaWwsIHNvIHdlIGNoZWNrIHRoZSBmaW5hbCBkZWx0YSBiZWZvcmUgc2Ny
b2xsaW5nCi0gICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBtX2RhdGEtPnNjcm9sbE9mZnNl
dCAtIHNjcm9sbE9mZnNldDsKLSAgICAgICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGlzRnJhbWVWaWV3KCkpIHsKLSAgICAg
ICAgICAgIEZyYW1lVmlldyogZiA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpOwotICAg
ICAgICAgICAgZi0+ZnJhbWUoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQK
LSAgICAgICAgICAgICAgICAobmV3U2Nyb2xsT2Zmc2V0LndpZHRoKCksIG5ld1Njcm9sbE9mZnNl
dC5oZWlnaHQoKSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw
cmludGYoIkZJWE1FIFNjcm9sbFZpZXdHZGsgVW5zdXBwb3J0ZWQgU2Nyb2xsIG9wZXJhdGlvbiAh
ISFcbiIpOwotICAgICAgICAgICAgdXBkYXRlVmlldyhtX2RhdGEtPnZpZXdwb3J0QXJlYSwgdHJ1
ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgZnJhbWVWaWV3KCktPmZyYW1lKCktPnNlbmRTY3JvbGxF
dmVudCgpOworICAgICAgICByZXBhaW50KGZhbHNlKTsKICAgICB9CiB9CiAKLVNjcm9sbGJhck1v
ZGUgU2Nyb2xsVmlldzo6aFNjcm9sbGJhck1vZGUoKSBjb25zdAordm9pZCBTY3JvbGxWaWV3Ojpz
Y3JvbGxQb2ludFJlY3Vyc2l2ZWx5KGludCBkeCwgaW50IGR5KQogeworICAgIGlmIChwYXJlbnQo
KSkKKyAgICAgICAgcGFyZW50KCktPmZyYW1lVmlldygpLT5zY3JvbGxCeShkeCxkeSk7Cit9CisK
K1dlYkNvcmU6OlNjcm9sbGJhck1vZGUgU2Nyb2xsVmlldzo6aFNjcm9sbGJhck1vZGUoKSBjb25z
dAorewogICAgIHJldHVybiBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlOwogfQogCi1TY3JvbGxiYXJN
b2RlIFNjcm9sbFZpZXc6OnZTY3JvbGxiYXJNb2RlKCkgY29uc3QKK1dlYkNvcmU6OlNjcm9sbGJh
ck1vZGUgU2Nyb2xsVmlldzo6dlNjcm9sbGJhck1vZGUoKSBjb25zdAogewogICAgIHJldHVybiBt
X2RhdGEtPnZTY3JvbGxiYXJNb2RlOwogfQpAQCAtMjI5LDI1ICsyNTUsMjcxIEBACiAgICAgbV9k
YXRhLT5oYXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAordm9pZCBTY3JvbGxWaWV3Ojph
ZGRDaGlsZChXaWRnZXQqIGNoaWxkKQoreworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7Cit9
CisKKwordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQoreworICAg
IGNoaWxkLT5zZXRQYXJlbnQoMCk7CisgICAgcmVwYWludChmYWxzZSk7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit7CisgICAgYm9vbCBoYXNWZXJ0aWNhbCA9IGZh
bHNlOworICAgIGJvb2wgaGFzSG9yaXpvbnRhbCA9IGZhbHNlOworICAgIGludCBwYXNzID0wOwor
CisgICAgLy9sYXlvdXQgZmlyc3QgaWYgYXV0byBzY3JvbGxiYXJzIHNjcm9sbCBiYXJzCisgICAg
aWYgKCFtX2RhdGEtPnN1cHByZXNzU2Nyb2xsYmFycyAmJgorICAgICAgICAgICAgKG1fZGF0YS0+
aFNjcm9sbGJhck1vZGUgPT0gU2Nyb2xsYmFyQXV0byB8fG1fZGF0YS0+dlNjcm9sbGJhck1vZGUg
PT0gU2Nyb2xsYmFyQXV0bykpIHsKKyAgICAgICAgZnJhbWVWaWV3KCktPmxheW91dCgpOworICAg
IH0KKworICAgIC8vTWFrZSB0d28gcGFzc2VzIHRvIGRlYWwgd2l0aCBpbnRlciBiYXIgZGVwZW5k
ZW5jaWVzCisgICAgZm9yIChpbnQgcGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKKworICAg
ICAgICBpZiAobV9kYXRhLT5zdXBwcmVzc1Njcm9sbGJhcnMgfHwgbV9kYXRhLT52U2Nyb2xsYmFy
TW9kZSA9PSBTY3JvbGxiYXJBbHdheXNPZmYpCisgICAgICAgICAgICBoYXNWZXJ0aWNhbCA9IGZh
bHNlOworICAgICAgICBlbHNlIGlmIChtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID09IFNjcm9sbGJh
ckFsd2F5c09uKQorICAgICAgICAgICAgaGFzVmVydGljYWwgPSB0cnVlOworICAgICAgICBlbHNl
IGlmIChtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID09IFNjcm9sbGJhckF1dG8pIHsKKyAgICAgICAg
ICAgIGludCBoID0gaGFzSG9yaXpvbnRhbCA/IGhlaWdodCgpIC0gUGxhdGZvcm1TY3JvbGxiYXI6
Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTogaGVpZ2h0KCk7CisgICAgICAgICAgICBoYXNW
ZXJ0aWNhbCA9ICAoY29udGVudHNIZWlnaHQoKSA+IGgpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzIHx8IG1fZGF0YS0+aFNjcm9sbGJhck1vZGUg
PT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQorICAgICAgICAgICAgaGFzSG9yaXpvbnRhbCA9IGZhbHNl
OworICAgICAgICBlbHNlIGlmIChtX2RhdGEtPmhTY3JvbGxiYXJNb2RlID09IFNjcm9sbGJhckFs
d2F5c09uKQorICAgICAgICAgICAgaGFzSG9yaXpvbnRhbCA9IHRydWU7CisgICAgICAgIGVsc2Ug
aWYgKG1fZGF0YS0+aFNjcm9sbGJhck1vZGUgPT0gU2Nyb2xsYmFyQXV0bykgeworICAgICAgICAg
ICAgaW50IHcgPSBoYXNWZXJ0aWNhbCA/IHdpZHRoKCkgLSBQbGF0Zm9ybVNjcm9sbGJhcjo6dmVy
dGljYWxTY3JvbGxiYXJXaWR0aCgpOiB3aWR0aCgpOworICAgICAgICAgICAgaGFzSG9yaXpvbnRh
bD0gKGNvbnRlbnRzV2lkdGgoKSA+IHcpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGhh
c1ZlcnRpY2FsICYmICFtX2RhdGEtPnZTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9kYXRhLT52U2Ny
b2xsYmFyID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKG1fZGF0YSxWZXJ0aWNhbFNjcm9sbGJhcixS
ZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAgICAgYWRkQ2hpbGQobV9kYXRhLT52U2Nyb2xsYmFyLmdl
dCgpKTsKKyAgICB9IGVsc2UgaWYgKCFoYXNWZXJ0aWNhbCAmJiBtX2RhdGEtPnZTY3JvbGxiYXIp
IHsKKyAgICAgICAgcmVtb3ZlQ2hpbGQobV9kYXRhLT52U2Nyb2xsYmFyLmdldCgpKTsKKyAgICAg
ICAgbV9kYXRhLT52U2Nyb2xsYmFyID0gMDsKKyAgICB9CisKKyAgICBpZiAoaGFzSG9yaXpvbnRh
bCAmJiAhbV9kYXRhLT5oU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fZGF0YS0+aFNjcm9sbGJhciA9
IG5ldyBQbGF0Zm9ybVNjcm9sbGJhcihtX2RhdGEsSG9yaXpvbnRhbFNjcm9sbGJhcixSZWd1bGFy
U2Nyb2xsYmFyKTsKKyAgICAgICAgYWRkQ2hpbGQobV9kYXRhLT5oU2Nyb2xsYmFyLmdldCgpKTsK
KyAgICB9IGVsc2UgaWYgKCFoYXNIb3Jpem9udGFsICYmIG1fZGF0YS0+aFNjcm9sbGJhcikgewor
ICAgICAgICByZW1vdmVDaGlsZChtX2RhdGEtPmhTY3JvbGxiYXIuZ2V0KCkpOworICAgICAgICBt
X2RhdGEtPmhTY3JvbGxiYXIgPSAwOworICAgIH0KKworICAgIC8vbGF5b3V0IHNjcm9sbGJhcnMK
KyAgICBpZiAobV9kYXRhLT52U2Nyb2xsYmFyKSB7CisgICAgICAgIGludCBoID0gaGVpZ2h0KCk7
CisgICAgICAgIGlmIChtX2RhdGEtPmhTY3JvbGxiYXIpCisgICAgICAgICAgICBoIC09IG1fZGF0
YS0+dlNjcm9sbGJhci0+d2lkdGgoKTsKKyAgICAgICAgbV9kYXRhLT52U2Nyb2xsYmFyLT5zZXRG
cmFtZUdlb21ldHJ5KEludFJlY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGgoKS1tX2RhdGEtPnZTY3JvbGxiYXItPndpZHRoKCksMAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxtX2RhdGEtPnZT
Y3JvbGxiYXItPndpZHRoKCksaCkpOworICAgIH0KKworICAgIGlmIChtX2RhdGEtPmhTY3JvbGxi
YXIpIHsKKyAgICAgICAgaW50IHcgPSB3aWR0aCgpOworICAgICAgICBpZiAobV9kYXRhLT52U2Ny
b2xsYmFyKQorICAgICAgICAgICAgdyAtPSBtX2RhdGEtPnZTY3JvbGxiYXItPndpZHRoKCk7Cisg
ICAgICAgIG1fZGF0YS0+aFNjcm9sbGJhci0+c2V0RnJhbWVHZW9tZXRyeShJbnRSZWN0KDAsaGVp
Z2h0KCkgLSBtX2RhdGEtPmhTY3JvbGxiYXItPmhlaWdodCgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsdyxtX2RhdGEtPmhTY3JvbGxiYXItPmhlaWdodCgp
KSk7CisgICAgfQorfQorCitQbGF0Zm9ybVNjcm9sbGJhciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFy
VW5kZXJNb3VzZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCit7CisgICAg
UGxhdGZvcm1TY3JvbGxiYXIqIGJhciA9IG1fZGF0YS0+aFNjcm9sbGJhci5nZXQoKTsKKyAgICBp
ZiAoYmFyKSB7CisgICAgICAgIEludFBvaW50IHAgPSBiYXItPmxvY2F0aW9uSW5XaW5kb3coKTsK
KyAgICAgICAgSW50UmVjdCBnZW9tID0gSW50UmVjdChwLngoKSxwLnkoKSxiYXItPndpZHRoKCks
YmFyLT5oZWlnaHQoKSk7CisgICAgICAgIGlmIChnZW9tLmNvbnRhaW5zKG1vdXNlRXZlbnQucG9z
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGJhcjsKKworICAgIH0KKyAgICBiYXIgPSBtX2RhdGEt
PnZTY3JvbGxiYXIuZ2V0KCk7CisgICAgaWYgKGJhcikgeworICAgICAgICBJbnRQb2ludCBwID0g
YmFyLT5sb2NhdGlvbkluV2luZG93KCk7CisgICAgICAgIEludFJlY3QgZ2VvbSA9IEludFJlY3Qo
cC54KCkscC55KCksYmFyLT53aWR0aCgpLGJhci0+aGVpZ2h0KCkpOworICAgICAgICBpZiAoZ2Vv
bS5jb250YWlucyhtb3VzZUV2ZW50LnBvcygpKSkKKyAgICAgICAgICAgIHJldHVybiBiYXI7CisK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6aW5XaW5kb3coKSBj
b25zdAoreworICAgIC8vYXJlIHdlIHZpc2libGUgPworICAgIC8vYmFkIG1ldGhvZCBuYW1lCisg
ICAgLy9oaWRkZW4gdGFiIG1pbmltaXplZCBldGMgPz8KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBrZXlFdmVudCkKK3sK
KworICAgIGlmIChrZXlFdmVudC5pc0tleVVwKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+c2Vs
ZWN0aW9uQ29udHJvbGxlcigpOworICAgIE5vZGUqIHN0YXJ0ID0gY29udHJvbGxlci0+c3RhcnQo
KS5ub2RlKCk7CisgICAgaWYgKHN0YXJ0ICYmIHN0YXJ0LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7
CisKKyAgICAgICAgc3dpdGNoIChrZXlFdmVudC5XaW5kb3dzS2V5Q29kZSgpKSB7CisgICAgICAg
IGNhc2UgVktfQkFDSzoKKyAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQoZnJhbWVWaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVktfREVMRVRFOgorICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQoZnJhbWVWaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfTEVGVDoKKyAgICAgICAgICAgIGNv
bnRyb2xsZXItPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkxFRlQsIENoYXJhY3Rlckdy
YW51bGFyaXR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZLX1JJR0hUOgor
ICAgICAgICAgICAgY29udHJvbGxlci0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklH
SFQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFZLX1VQOgorICAgICAgICAgICAgY29udHJvbGxlci0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6QkFDS1dBUkQsIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFZLX0RPV046CisgICAgICAgICAgICBjb250cm9sbGVyLT5tb2Rp
ZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFR5cGlu
Z0NvbW1hbmQ6Omluc2VydFRleHQoZnJhbWVWaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCksIGtl
eUV2ZW50LnRleHQoKSwgZmFsc2UpOworICAgICAgICAgICAgY29udHJvbGxlci0+bW9kaWZ5KFNl
bGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2VsZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKworICAgIHN3aXRjaCAoa2V5RXZlbnQu
V2luZG93c0tleUNvZGUoKSkgeworICAgIGNhc2UgVktfTEVGVDoKKyAgICAgICAgc2Nyb2xsQnko
LUlOQ1JFTUVOVCwwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19SSUdIVDoKKyAgICAg
ICAgc2Nyb2xsQnkoSU5DUkVNRU5ULDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX1VQ
OgorICAgICAgICBzY3JvbGxCeSgwLC1JTkNSRU1FTlQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFZLX0RPV046CisgICAgICAgIHNjcm9sbEJ5KDAsSU5DUkVNRU5UKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBWS19QUklPUjoKKyAgICAgICAgLy9yZXR1cm4gU0JfUEFHRVVQOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFZLX05FWFQ6CisgICAgICAgIC8vcmV0dXJuIFNCX1BBR0VE
T1dOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX0hPTUU6CisgICAgICAgIGlmIChpc0Zy
YW1lVmlldygpKSB7CisgICAgICAgICAgICBzZXRDb250ZW50c1BvcygwLDApOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfRU5EOgorICAgICAgICBpZiAoaXNGcmFtZVZp
ZXcoKSkgeworICAgICAgICAgICAgc2V0Q29udGVudHNQb3MoMCxjb250ZW50c0hlaWdodCgpKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX1NQQUNFOgorICAgICAgICBp
ZiAoa2V5RXZlbnQuc2hpZnRLZXkoKSkKKyAgICAgICAgICAgIHNjcm9sbEJ5KDAsLUlOQ1JFTUVO
VCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcm9sbEJ5KDAsSU5DUkVNRU5UKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCit9CisKIHZvaWQgU2Nyb2xsVmlldzo6c2V0RnJhbWVHZW9t
ZXRyeShjb25zdCBJbnRSZWN0JiByKQogewogICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShy
KTsKLSAgICBtX2RhdGEtPnNjcm9sbFZpZXdBcmVhID0gSW50UmVjdCgwLCAwLCByLndpZHRoKCks
IHIuaGVpZ2h0KCkpOwotICAgIG1fZGF0YS0+dmlld3BvcnRBcmVhID0gSW50UmVjdCgwLCAwLCBy
LndpZHRoKCkgLSBzY3JvbGxiYXJTaXplLCByLmhlaWdodCgpIC0gc2Nyb2xsYmFyU2l6ZSk7Cisg
ICAgdXBkYXRlU2Nyb2xsYmFycygpOworICAgIERvY3VtZW50KiBkb2MgPSBmcmFtZVZpZXcoKS0+
ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoZG9jKSB7CisgICAgICAgIFJlbmRlclZpZXcg
KnJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4oZG9jLT5yZW5kZXJlcigpKTsKKyAgICAg
ICAgaWYgKHJvb3QpCisgICAgICAgICAgICByb290LT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJl
Y2FsYygpOworICAgIH0KKyAgICBmcmFtZVZpZXcoKS0+bGF5b3V0KGZhbHNlKTsKKyAgICBmcmFt
ZVZpZXcoKS0+bGF5b3V0KHRydWUpOworICAgIGZyYW1lVmlldygpLT5mcmFtZSgpLT5zZW5kUmVz
aXplRXZlbnQoKTsKKyAgICBmcmFtZVZpZXcoKS0+ZnJhbWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7
CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6c2V0RHJhd2FibGUoR2RrRHJhd2FibGUqIGdka2RyYXdh
YmxlKQordm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKLSAgICBXaWRnZXQ6OnNldERyYXdhYmxlKGdka2RyYXdhYmxlKTsK
LSAgICBpZiAoIUdES19JU19XSU5ET1coZ2RrZHJhd2FibGUpKSB7Ci0gICAgICAgIExPR19FUlJP
UigiaW1hZ2Ugc2Nyb2xsdmlldyBub3Qgc3VwcG9ydGVkIik7CisjaWYgMAorICAgIC8vc3Vid2lk
Z2V0cyBjYW4gY2F1c2UgYSBwYWludCBiZWZvcmUgd2UgYXJlIGxvYWRlZAorICAgIGlmICghZnJh
bWVWaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCkgfHwgIWZyYW1lVmlldygpLT5mcmFtZSgpLT5k
b2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CisgICAgSW50UmVjdCBnZW9t
ID0gZnJhbWVHZW9tZXRyeSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gbV9kYXRhLT5zY3JvbGxP
ZmZzZXQ7CisKKworICAgIC8vZm9yIG5vdyBubyBvdGhlciBzdWJjbGFzc2VzCisgICAgYXNzZXJ0
KGZyYW1lVmlldygpID09IHRoaXMpOworICAgIGN0eC0+c2F2ZSgpOworICAgIEludFJlY3QgZGly
dHk9IHJlY3Q7CisgICAgSW50UG9pbnQgcCA9IGxvY2F0aW9uSW5XaW5kb3coKTsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnMgPSBjdHgtPmdldENUTSgpOworICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QgPSBJbnRSZWN0KDAsMCx3aWR0aCgpLGhlaWdodCgpKTsKKyAgICBJbnRSZWN0IHZDUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOworCisgICAgY3R4LT50cmFu
c2xhdGUoLW9mZnNldC53aWR0aCgpLC1vZmZzZXQuaGVpZ2h0KCkpOworICAgIEludFJlY3QgY2xp
cCA9IGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpOworICAgIC8vY3R4LT5j
bGVhckNsaXAoKTsKKyAgICBjdHgtPmNsaXAoY2xpcCk7CisgICAgY2Fpcm9fdCogY3IgPSBjdHgt
PnBsYXRmb3JtQ29udGV4dCgpOworICAgIGZyYW1lVmlldygpLT5mcmFtZSgpLT5wYWludChjdHgs
Y2xpcCk7CisgICAgY3R4LT5yZXN0b3JlKCk7CisKKyAgICBpZiAobV9kYXRhLT5zdXBwcmVzc1Nj
cm9sbGJhcnMpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyKSB7
CisgICAgICAgIEludFJlY3QgciA9IG1fZGF0YS0+aFNjcm9sbGJhci0+ZnJhbWVHZW9tZXRyeSgp
OworICAgICAgICBjdHgtPnNhdmUoKTsKKyAgICAgICAgY3R4LT5jbGVhckNsaXAoKTsKKyAgICAg
ICAgY3R4LT50cmFuc2xhdGUoci54KCksci55KCkpOworICAgICAgICBjbGlwID0gSW50UmVjdCgw
LDAsci53aWR0aCgpLHIuaGVpZ2h0KCkpOworICAgICAgICBjdHgtPmNsaXAoY2xpcCk7CisgICAg
ICAgIHRyYW5zID0gY3R4LT5nZXRDVE0oKTsKKyAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyLT5w
YWludChjdHgsY2xpcCk7CisgICAgICAgIGN0eC0+cmVzdG9yZSgpOwogICAgIH0KLSAgICBHZGtX
aW5kb3cqIGZyYW1lID0gR0RLX1dJTkRPVyhnZGtkcmF3YWJsZSk7Ci0gICAgZ2ludCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aDsKLSAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShmcmFtZSwg
JngsICZ5LCAmd2lkdGgsICZoZWlnaHQsICZkZXB0aCk7Ci0gICAgbV9kYXRhLT5zY3JvbGxWaWV3
QXJlYSA9IEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbV9kYXRhLT52aWV3cG9y
dEFyZWEgPSBJbnRSZWN0KDAsIDAsIHdpZHRoIC0gc2Nyb2xsYmFyU2l6ZSwgaGVpZ2h0IC0gc2Ny
b2xsYmFyU2l6ZSk7CisgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhcikgeworICAgICAgICBJbnRS
ZWN0IHIgPSBtX2RhdGEtPnZTY3JvbGxiYXItPmZyYW1lR2VvbWV0cnkoKTsKKyAgICAgICAgY3R4
LT5zYXZlKCk7CisgICAgICAgIGN0eC0+Y2xlYXJDbGlwKCk7CisgICAgICAgIGN0eC0+dHJhbnNs
YXRlKHIueCgpLHIueSgpKTsKKyAgICAgICAgY2xpcCA9IEludFJlY3QoMCwwLHIud2lkdGgoKSxy
LmhlaWdodCgpKTsKKyAgICAgICAgY3R4LT5jbGlwKGNsaXApOworICAgICAgICB0cmFucyA9IGN0
eC0+Z2V0Q1RNKCk7CisgICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhci0+cGFpbnQoY3R4LGNsaXAp
OworICAgICAgICBjdHgtPnJlc3RvcmUoKTsKKyAgICB9CisjZW5kaWYKIH0KIAogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHJldmlzaW9uIDE3NjMwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsODUgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20gCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVk
ZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudDo6Q3VycmVudEV2ZW50VGFnIFBsYXRmb3JtTW91c2VFdmVudDo6Y3VycmVudEV2ZW50
ID0ge307Ci0KLS8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBmaWd1cmUgb3V0IHdo
aWNoIG1vZGlmaWVyIGlzIEFsdCBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyBHREtfTU9EMV9NQVNL
LgotCi1QbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudCogZXZl
bnQpCi17Ci0gICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotICAgICAgICBjYXNlIEdES19NT1RJ
T05fTk9USUZZOgotICAgICAgICAgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQt
Pm1vdGlvbi54LCAoaW50KWV2ZW50LT5tb3Rpb24ueSk7Ci0gICAgICAgICAgICBtX2dsb2JhbFBv
c2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLnhfcm9vdCwgKGludClldmVudC0+
bW90aW9uLnlfcm9vdCk7Ci0gICAgICAgICAgICBtX2J1dHRvbiA9IChNb3VzZUJ1dHRvbikoLTEp
OwotICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKLSAgICAgICAgICAgIG1fc2hpZnRLZXkg
PSAgZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19TSElGVF9NQVNLICE9IDA7Ci0gICAgICAgICAg
ICBtX2N0cmxLZXkgPSBldmVudC0+bW90aW9uLnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAw
OwotICAgICAgICAgICAgbV9hbHRLZXkgPSAgZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19NT0Qx
X01BU0sgIT0gMDsKLSAgICAgICAgICAgIG1fbWV0YUtleSA9IGV2ZW50LT5tb3Rpb24uc3RhdGUg
JiBHREtfTU9EMl9NQVNLICE9IDA7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEdES19CVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6Ci0gICAg
ICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxF
QVNFOgotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MpCi0g
ICAgICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2
ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKQotICAgICAgICAgICAgICAgIG1fY2xpY2tD
b3VudCA9IDI7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRP
Tl9QUkVTUykKLSAgICAgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAzOwotCi0gICAgICAgICAg
ICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMSkKLSAgICAgICAgICAgICAgICBtX2J1dHRv
biA9IExlZnRCdXR0b247Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRv
biA9PSAyKQotICAgICAgICAgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgICAg
ICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMykKLSAgICAgICAgICAgICAg
ICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOwotCi0gICAgICAgICAgICBtX3Bvc2l0aW9uID0gSW50
UG9pbnQoKGludClldmVudC0+YnV0dG9uLngsIChpbnQpZXZlbnQtPmJ1dHRvbi55KTsKLSAgICAg
ICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT5idXR0b24ueF9y
b290LCAoaW50KWV2ZW50LT5idXR0b24ueV9yb290KTsKLSAgICAgICAgICAgIG1fc2hpZnRLZXkg
PSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX1NISUZUX01BU0sgIT0gMDsKLSAgICAgICAgICAg
IG1fY3RybEtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLICE9IDA7
Ci0gICAgICAgICAgICBtX2FsdEtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUgJiBHREtfTU9EMV9N
QVNLICE9IDA7Ci0gICAgICAgICAgICBtX21ldGFLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYg
R0RLX01PRDJfTUFTSyAhPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBtb3VzZSBldmVudFxuIik7
Ci0gICAgICAgICAgICBhc3NlcnQoMCk7Ci0gICAgfQotfQotCi19CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9Gb250Q2FjaGVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtOCwxMyArOCwxMyBAQAogICogYXJlIG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTMzLDYgKzMzLDggQEAKIAog
I2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3BwCShyZXZpc2lvbiAxNzYz
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw0NzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIgotCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIktl
eWJvYXJkQ29kZXMuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka2tl
eXN5bXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogVGhpcyBpcyBpbmNv
bXBsZXRlLiAgV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIHRvIG1pcnJvcgotLy8gbW9yZSBsaWtlIHdo
YXQgRmlyZWZveCBkb2VzLCBhbmQgZ2VuZXJhdGUgdGhlc2Ugc3dpdGNoIHN0YXRlbWVudHMKLS8v
IGF0IGJ1aWxkIHRpbWUuCi1zdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2Rl
KGd1aW50IGtleUNvZGUpCi17Ci0gICAgc3dpdGNoIChrZXlDb2RlKSB7Ci0gICAgICAgIGNhc2Ug
R0RLX01lbnU6Ci0gICAgICAgIGNhc2UgR0RLX0FsdF9MOgotICAgICAgICBjYXNlIEdES19BbHRf
UjoKLSAgICAgICAgICAgIHJldHVybiAiQWx0IjsKLSAgICAgICAgY2FzZSBHREtfQ2xlYXI6Ci0g
ICAgICAgICAgICByZXR1cm4gIkNsZWFyIjsKLSAgICAgICAgY2FzZSBHREtfRG93bjoKLSAgICAg
ICAgICAgIHJldHVybiAiRG93biI7Ci0gICAgICAgICAgICAvLyAiRW5kIgotICAgICAgICBjYXNl
IEdES19FbmQ6Ci0gICAgICAgICAgICByZXR1cm4gIkVuZCI7Ci0gICAgICAgICAgICAvLyAiRW50
ZXIiCi0gICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfS1BfRW50
ZXI6Ci0gICAgICAgICAgICByZXR1cm4gIkVudGVyIjsKLSAgICAgICAgY2FzZSBHREtfRXhlY3V0
ZToKLSAgICAgICAgICAgIHJldHVybiAiRXhlY3V0ZSI7Ci0gICAgICAgIGNhc2UgR0RLX0YxOgot
ICAgICAgICAgICAgcmV0dXJuICJGMSI7Ci0gICAgICAgIGNhc2UgR0RLX0YyOgotICAgICAgICAg
ICAgcmV0dXJuICJGMiI7Ci0gICAgICAgIGNhc2UgR0RLX0YzOgotICAgICAgICAgICAgcmV0dXJu
ICJGMyI7Ci0gICAgICAgIGNhc2UgR0RLX0Y0OgotICAgICAgICAgICAgcmV0dXJuICJGNCI7Ci0g
ICAgICAgIGNhc2UgR0RLX0Y1OgotICAgICAgICAgICAgcmV0dXJuICJGNSI7Ci0gICAgICAgIGNh
c2UgR0RLX0Y2OgotICAgICAgICAgICAgcmV0dXJuICJGNiI7Ci0gICAgICAgIGNhc2UgR0RLX0Y3
OgotICAgICAgICAgICAgcmV0dXJuICJGNyI7Ci0gICAgICAgIGNhc2UgR0RLX0Y4OgotICAgICAg
ICAgICAgcmV0dXJuICJGOCI7Ci0gICAgICAgIGNhc2UgR0RLX0Y5OgotICAgICAgICAgICAgcmV0
dXJuICJGOSI7Ci0gICAgICAgIGNhc2UgR0RLX0YxMDoKLSAgICAgICAgICAgIHJldHVybiAiRjEw
IjsKLSAgICAgICAgY2FzZSBHREtfRjExOgotICAgICAgICAgICAgcmV0dXJuICJGMTEiOwotICAg
ICAgICBjYXNlIEdES19GMTI6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMiI7Ci0gICAgICAgIGNh
c2UgR0RLX0YxMzoKLSAgICAgICAgICAgIHJldHVybiAiRjEzIjsKLSAgICAgICAgY2FzZSBHREtf
RjE0OgotICAgICAgICAgICAgcmV0dXJuICJGMTQiOwotICAgICAgICBjYXNlIEdES19GMTU6Ci0g
ICAgICAgICAgICByZXR1cm4gIkYxNSI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNjoKLSAgICAgICAg
ICAgIHJldHVybiAiRjE2IjsKLSAgICAgICAgY2FzZSBHREtfRjE3OgotICAgICAgICAgICAgcmV0
dXJuICJGMTciOwotICAgICAgICBjYXNlIEdES19GMTg6Ci0gICAgICAgICAgICByZXR1cm4gIkYx
OCI7Ci0gICAgICAgIGNhc2UgR0RLX0YxOToKLSAgICAgICAgICAgIHJldHVybiAiRjE5IjsKLSAg
ICAgICAgY2FzZSBHREtfRjIwOgotICAgICAgICAgICAgcmV0dXJuICJGMjAiOwotICAgICAgICBj
YXNlIEdES19GMjE6Ci0gICAgICAgICAgICByZXR1cm4gIkYyMSI7Ci0gICAgICAgIGNhc2UgR0RL
X0YyMjoKLSAgICAgICAgICAgIHJldHVybiAiRjIyIjsKLSAgICAgICAgY2FzZSBHREtfRjIzOgot
ICAgICAgICAgICAgcmV0dXJuICJGMjMiOwotICAgICAgICBjYXNlIEdES19GMjQ6Ci0gICAgICAg
ICAgICByZXR1cm4gIkYyNCI7Ci0gICAgICAgIGNhc2UgR0RLX0hlbHA6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkhlbHAiOwotICAgICAgICBjYXNlIEdES19Ib21lOgotICAgICAgICAgICAgcmV0dXJu
ICJIb21lIjsKLSAgICAgICAgY2FzZSBHREtfSW5zZXJ0OgotICAgICAgICAgICAgcmV0dXJuICJJ
bnNlcnQiOwotICAgICAgICBjYXNlIEdES19MZWZ0OgotICAgICAgICAgICAgcmV0dXJuICJMZWZ0
IjsKLSAgICAgICAgY2FzZSBHREtfUGFnZV9Eb3duOgotICAgICAgICAgICAgcmV0dXJuICJQYWdl
RG93biI7Ci0gICAgICAgIGNhc2UgR0RLX1BhZ2VfVXA6Ci0gICAgICAgICAgICByZXR1cm4gIlBh
Z2VVcCI7Ci0gICAgICAgIGNhc2UgR0RLX1BhdXNlOgotICAgICAgICAgICAgcmV0dXJuICJQYXVz
ZSI7Ci0gICAgICAgIGNhc2UgR0RLXzMyNzBfUHJpbnRTY3JlZW46Ci0gICAgICAgICAgICByZXR1
cm4gIlByaW50U2NyZWVuIjsKLSAgICAgICAgY2FzZSBHREtfUmlnaHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gIlJpZ2h0IjsKLSAgICAgICAgY2FzZSBHREtfU2VsZWN0OgotICAgICAgICAgICAgcmV0
dXJuICJTZWxlY3QiOwotICAgICAgICBjYXNlIEdES19VcDoKLSAgICAgICAgICAgIHJldHVybiAi
VXAiOwotICAgICAgICAgICAgLy8gU3RhbmRhcmQgc2F5cyB0aGF0IERFTCBiZWNvbWVzIFUrMDAw
MDdGLgotICAgICAgICBjYXNlIEdES19EZWxldGU6Ci0gICAgICAgICAgICByZXR1cm4gIlUrMDAw
MDdGIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OnNwcmlu
dGYoIlUrJTA2WCIsIHRvdXBwZXIoa2V5Q29kZSkpOwotICAgIH0KLX0KLQotc3RhdGljIGludCB3
aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVkIGludCBrZXljb2RlKQotewotICAgIHN3
aXRjaCAoa2V5Y29kZSkgewotICAgICAgICBjYXNlIEdES19LUF8wOgotICAgICAgICAgICAgcmV0
dXJuIFZLX05VTVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQotICAgICAgICBjYXNl
IEdES19LUF8xOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmlj
IGtleXBhZCAxIGtleQotICAgICAgICBjYXNlIEdES19LUF8yOgotICAgICAgICAgICAgcmV0dXJu
ICBWS19OVU1QQUQyOyAvLyAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5Ci0gICAgICAgIGNhc2Ug
R0RLX0tQXzM6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmlj
IGtleXBhZCAzIGtleQotICAgICAgICBjYXNlIEdES19LUF80OgotICAgICAgICAgICAgcmV0dXJu
IFZLX05VTVBBRDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKLSAgICAgICAgY2FzZSBH
REtfS1BfNToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBr
ZXlwYWQgNSBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNjoKLSAgICAgICAgICAgIHJldHVybiBW
S19OVU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5Ci0gICAgICAgIGNhc2UgR0RL
X0tQXzc6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtl
eXBhZCA3IGtleQotICAgICAgICBjYXNlIEdES19LUF84OgotICAgICAgICAgICAgcmV0dXJuIFZL
X05VTVBBRDg7IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKLSAgICAgICAgY2FzZSBHREtf
S1BfOToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5
cGFkIDkga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX011bHRpcGx5OgotICAgICAgICAgICAgcmV0
dXJuIFZLX01VTFRJUExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQotICAgICAgICBjYXNlIEdES19L
UF9BZGQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKLSAgICAg
ICAgY2FzZSBHREtfS1BfU3VidHJhY3Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7
IC8vICg2RCkgU3VidHJhY3Qga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQotICAgICAgICBj
YXNlIEdES19LUF9EaXZpZGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYp
IERpdmlkZSBrZXkKLQotICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNLU1BBQ0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX1Rh
YjoKLSAgICAgICAgICAgIHJldHVybiBWS19UQUI7IC8vICgwOSkgVEFCIGtleQotICAgICAgICBj
YXNlIEdES19DbGVhcjoKLSAgICAgICAgICAgIHJldHVybiBWS19DTEVBUjsgLy8gKDBDKSBDTEVB
UiBrZXkKLSAgICAgICAgY2FzZSBHREtfUmV0dXJuOgotICAgICAgICAgICAgcmV0dXJuIFZLX1JF
VFVSTjsgLy8oMEQpIFJldHVybiBrZXkKLSAgICAgICAgY2FzZSBHREtfU2hpZnRfTDoKLSAgICAg
ICAgY2FzZSBHREtfU2hpZnRfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19TSElGVDsgLy8gKDEw
KSBTSElGVCBrZXkKLSAgICAgICAgY2FzZSBHREtfQ29udHJvbF9MOgotICAgICAgICBjYXNlIEdE
S19Db250cm9sX1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfQ09OVFJPTDsgLy8gKDExKSBDVFJM
IGtleQotICAgICAgICBjYXNlIEdES19NZW51OgotICAgICAgICBjYXNlIEdES19BbHRfTDoKLSAg
ICAgICAgY2FzZSBHREtfQWx0X1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfTUVOVTsgLy8gKDEy
KSBBTFQga2V5Ci0KLSAgICAgICAgY2FzZSBHREtfUGF1c2U6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX0NhcHNfTG9jazoK
LSAgICAgICAgICAgIHJldHVybiBWS19DQVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKLSAg
ICAgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgotICAgICAgICBjYXNlIEdES19LYW5hX1NoaWZ0Ogot
ICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAo
SU1FKSBLYW5hIG1vZGUKLSAgICAgICAgY2FzZSBHREtfSGFuZ3VsOgotICAgICAgICAgICAgcmV0
dXJuIFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCi0gICAgICAg
ICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCi0gICAgICAgICAgICAvLyBWS19G
SU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCi0gICAgICAgIGNhc2UgR0RLX0hhbmd1bF9IYW5qYToK
LSAgICAgICAgICAgIHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9kZQotICAg
ICAgICBjYXNlIEdES19LYW5qaToKLSAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5
KSBJTUUgS2FuamkgbW9kZQotICAgICAgICBjYXNlIEdES19Fc2NhcGU6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkKLSAgICAgICAgICAgIC8vIFZLX0NPTlZF
UlQgKDFDKSBJTUUgY29udmVydAotICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElN
RSBub25jb252ZXJ0Ci0gICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0Ci0g
ICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QK
LSAgICAgICAgY2FzZSBHREtfc3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8v
ICgyMCkgU1BBQ0VCQVIKLSAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKLSAgICAgICAgICAgIHJl
dHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQotICAgICAgICBjYXNlIEdES19QYWdl
X0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5
Ci0gICAgICAgIGNhc2UgR0RLX0VuZDoKLSAgICAgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgy
MykgRU5EIGtleQotICAgICAgICBjYXNlIEdES19Ib21lOgotICAgICAgICAgICAgcmV0dXJuIFZL
X0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKLSAgICAgICAgY2FzZSBHREtfTGVmdDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5Ci0gICAgICAgIGNhc2Ug
R0RLX1VwOgotICAgICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQot
ICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8g
KDI3KSBSSUdIVCBBUlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfRG93bjoKLSAgICAgICAgICAg
IHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RL
X1NlbGVjdDoKLSAgICAgICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtl
eQotICAgICAgICBjYXNlIEdES19QcmludDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUklOVDsg
Ly8gKDJBKSBQUklOVCBrZXkKLSAgICAgICAgY2FzZSBHREtfRXhlY3V0ZToKLSAgICAgICAgICAg
IHJldHVybiBWS19FWEVDVVRFOy8vICgyQikgRVhFQ1VURSBrZXkKLSAgICAgICAgICAgIC8vZHVu
bm8gb24gdGhpcwotICAgICAgICAgICAgLy9jYXNlIEdES19QcmludFNjcmVlbjoKLSAgICAgICAg
ICAgIC8vICAgICAgcmV0dXJuIFZLX1NOQVBTSE9UOyAvLyAoMkMpIFBSSU5UIFNDUkVFTiBrZXkK
LSAgICAgICAgY2FzZSBHREtfSW5zZXJ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsg
Ly8gKDJEKSBJTlMga2V5Ci0gICAgICAgIGNhc2UgR0RLX0RlbGV0ZToKLSAgICAgICAgICAgIHJl
dHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVMIGtleQotICAgICAgICBjYXNlIEdES19IZWxwOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX0hFTFA7IC8vICgyRikgSEVMUCBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfMDoKLSAgICAgICAgY2FzZSBHREtfcGFyZW5sZWZ0OgotICAgICAgICAgICAgcmV0dXJu
IFZLXzA7ICAgIC8vICAoMzApIDApIGtleQotICAgICAgICBjYXNlIEdES18xOgotICAgICAgICAg
ICAgcmV0dXJuIFZLXzE7IC8vICAoMzEpIDEgISBrZXkKLSAgICAgICAgY2FzZSBHREtfMjoKLSAg
ICAgICAgY2FzZSBHREtfYXQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfMjsgLy8gICgzMikgMiAm
IGtleQotICAgICAgICBjYXNlIEdES18zOgotICAgICAgICBjYXNlIEdES19udW1iZXJzaWduOgot
ICAgICAgICAgICAgcmV0dXJuIFZLXzM7IC8vY2FzZSAnMyc6IGNhc2UgJyMnOwotICAgICAgICBj
YXNlIEdES180OgotICAgICAgICBjYXNlIEdES19kb2xsYXI6IC8vICAoMzQpIDQga2V5ICckJzsK
LSAgICAgICAgICAgIHJldHVybiBWS180OwotICAgICAgICBjYXNlIEdES181OgotICAgICAgICBj
YXNlIEdES19wZXJjZW50OgotICAgICAgICAgICAgcmV0dXJuIFZLXzU7IC8vICAoMzUpIDUga2V5
ICAnJScKLSAgICAgICAgY2FzZSBHREtfNjoKLSAgICAgICAgY2FzZSBHREtfYXNjaWljaXJjdW06
Ci0gICAgICAgICAgICByZXR1cm4gVktfNjsgLy8gICgzNikgNiBrZXkgICdeJwotICAgICAgICBj
YXNlIEdES183OgotICAgICAgICBjYXNlIEdES19hbXBlcnNhbmQ6Ci0gICAgICAgICAgICByZXR1
cm4gVktfNzsgLy8gICgzNykgNyBrZXkgIGNhc2UgJyYnCi0gICAgICAgIGNhc2UgR0RLXzg6Ci0g
ICAgICAgIGNhc2UgR0RLX2FzdGVyaXNrOgotICAgICAgICAgICAgcmV0dXJuIFZLXzg7IC8vICAo
MzgpIDgga2V5ICAnKicKLSAgICAgICAgY2FzZSBHREtfOToKLSAgICAgICAgY2FzZSBHREtfcGFy
ZW5yaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS185OyAvLyAgKDM5KSA5IGtleSAnKCcKLSAg
ICAgICAgY2FzZSBHREtfYToKLSAgICAgICAgY2FzZSBHREtfQToKLSAgICAgICAgICAgIHJldHVy
biBWS19BOyAvLyAgKDQxKSBBIGtleSBjYXNlICdhJzogY2FzZSAnQSc6IHJldHVybiAweDQxOwot
ICAgICAgICBjYXNlIEdES19iOgotICAgICAgICBjYXNlIEdES19COgotICAgICAgICAgICAgcmV0
dXJuIFZLX0I7IC8vICAoNDIpIEIga2V5IGNhc2UgJ2InOiBjYXNlICdCJzogcmV0dXJuIDB4NDI7
Ci0gICAgICAgIGNhc2UgR0RLX2M6Ci0gICAgICAgIGNhc2UgR0RLX0M6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfQzsgLy8gICg0MykgQyBrZXkgY2FzZSAnYyc6IGNhc2UgJ0MnOiByZXR1cm4gMHg0
MzsKLSAgICAgICAgY2FzZSBHREtfZDoKLSAgICAgICAgY2FzZSBHREtfRDoKLSAgICAgICAgICAg
IHJldHVybiBWS19EOyAvLyAgKDQ0KSBEIGtleSBjYXNlICdkJzogY2FzZSAnRCc6IHJldHVybiAw
eDQ0OwotICAgICAgICBjYXNlIEdES19lOgotICAgICAgICBjYXNlIEdES19FOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX0U7IC8vICAoNDUpIEUga2V5IGNhc2UgJ2UnOiBjYXNlICdFJzogcmV0dXJu
IDB4NDU7Ci0gICAgICAgIGNhc2UgR0RLX2Y6Ci0gICAgICAgIGNhc2UgR0RLX0Y6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfRjsgLy8gICg0NikgRiBrZXkgY2FzZSAnZic6IGNhc2UgJ0YnOiByZXR1
cm4gMHg0NjsKLSAgICAgICAgY2FzZSBHREtfZzoKLSAgICAgICAgY2FzZSBHREtfRzoKLSAgICAg
ICAgICAgIHJldHVybiBWS19HOyAvLyAgKDQ3KSBHIGtleSBjYXNlICdnJzogY2FzZSAnRyc6IHJl
dHVybiAweDQ3OwotICAgICAgICBjYXNlIEdES19oOgotICAgICAgICBjYXNlIEdES19IOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX0g7IC8vICAoNDgpIEgga2V5IGNhc2UgJ2gnOiBjYXNlICdIJzog
cmV0dXJuIDB4NDg7Ci0gICAgICAgIGNhc2UgR0RLX2k6Ci0gICAgICAgIGNhc2UgR0RLX0k6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfSTsgLy8gICg0OSkgSSBrZXkgY2FzZSAnaSc6IGNhc2UgJ0kn
OiByZXR1cm4gMHg0OTsKLSAgICAgICAgY2FzZSBHREtfajoKLSAgICAgICAgY2FzZSBHREtfSjoK
LSAgICAgICAgICAgIHJldHVybiBWS19KOyAvLyAgKDRBKSBKIGtleSBjYXNlICdqJzogY2FzZSAn
Sic6IHJldHVybiAweDRBOwotICAgICAgICBjYXNlIEdES19rOgotICAgICAgICBjYXNlIEdES19L
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0s7IC8vICAoNEIpIEsga2V5IGNhc2UgJ2snOiBjYXNl
ICdLJzogcmV0dXJuIDB4NEI7Ci0gICAgICAgIGNhc2UgR0RLX2w6Ci0gICAgICAgIGNhc2UgR0RL
X0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTDsgLy8gICg0QykgTCBrZXkgY2FzZSAnbCc6IGNh
c2UgJ0wnOiByZXR1cm4gMHg0QzsKLSAgICAgICAgY2FzZSBHREtfbToKLSAgICAgICAgY2FzZSBH
REtfTToKLSAgICAgICAgICAgIHJldHVybiBWS19NOyAvLyAgKDREKSBNIGtleSBjYXNlICdtJzog
Y2FzZSAnTSc6IHJldHVybiAweDREOwotICAgICAgICBjYXNlIEdES19uOgotICAgICAgICBjYXNl
IEdES19OOgotICAgICAgICAgICAgcmV0dXJuIFZLX047IC8vICAoNEUpIE4ga2V5IGNhc2UgJ24n
OiBjYXNlICdOJzogcmV0dXJuIDB4NEU7Ci0gICAgICAgIGNhc2UgR0RLX286Ci0gICAgICAgIGNh
c2UgR0RLX086Ci0gICAgICAgICAgICByZXR1cm4gVktfTzsgLy8gICg0RikgTyBrZXkgY2FzZSAn
byc6IGNhc2UgJ08nOiByZXR1cm4gMHg0RjsKLSAgICAgICAgY2FzZSBHREtfcDoKLSAgICAgICAg
Y2FzZSBHREtfUDoKLSAgICAgICAgICAgIHJldHVybiBWS19QOyAvLyAgKDUwKSBQIGtleSBjYXNl
ICdwJzogY2FzZSAnUCc6IHJldHVybiAweDUwOwotICAgICAgICBjYXNlIEdES19xOgotICAgICAg
ICBjYXNlIEdES19ROgotICAgICAgICAgICAgcmV0dXJuIFZLX1E7IC8vICAoNTEpIFEga2V5IGNh
c2UgJ3EnOiBjYXNlICdRJzogcmV0dXJuIDB4NTE7Ci0gICAgICAgIGNhc2UgR0RLX3I6Ci0gICAg
ICAgIGNhc2UgR0RLX1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfUjsgLy8gICg1MikgUiBrZXkg
Y2FzZSAncic6IGNhc2UgJ1InOiByZXR1cm4gMHg1MjsKLSAgICAgICAgY2FzZSBHREtfczoKLSAg
ICAgICAgY2FzZSBHREtfUzoKLSAgICAgICAgICAgIHJldHVybiBWS19TOyAvLyAgKDUzKSBTIGtl
eSBjYXNlICdzJzogY2FzZSAnUyc6IHJldHVybiAweDUzOwotICAgICAgICBjYXNlIEdES190Ogot
ICAgICAgICBjYXNlIEdES19UOgotICAgICAgICAgICAgcmV0dXJuIFZLX1Q7IC8vICAoNTQpIFQg
a2V5IGNhc2UgJ3QnOiBjYXNlICdUJzogcmV0dXJuIDB4NTQ7Ci0gICAgICAgIGNhc2UgR0RLX3U6
Ci0gICAgICAgIGNhc2UgR0RLX1U6Ci0gICAgICAgICAgICByZXR1cm4gVktfVTsgLy8gICg1NSkg
VSBrZXkgY2FzZSAndSc6IGNhc2UgJ1UnOiByZXR1cm4gMHg1NTsKLSAgICAgICAgY2FzZSBHREtf
djoKLSAgICAgICAgY2FzZSBHREtfVjoKLSAgICAgICAgICAgIHJldHVybiBWS19WOyAvLyAgKDU2
KSBWIGtleSBjYXNlICd2JzogY2FzZSAnVic6IHJldHVybiAweDU2OwotICAgICAgICBjYXNlIEdE
S193OgotICAgICAgICBjYXNlIEdES19XOgotICAgICAgICAgICAgcmV0dXJuIFZLX1c7IC8vICAo
NTcpIFcga2V5IGNhc2UgJ3cnOiBjYXNlICdXJzogcmV0dXJuIDB4NTc7Ci0gICAgICAgIGNhc2Ug
R0RLX3g6Ci0gICAgICAgIGNhc2UgR0RLX1g6Ci0gICAgICAgICAgICByZXR1cm4gVktfWDsgLy8g
ICg1OCkgWCBrZXkgY2FzZSAneCc6IGNhc2UgJ1gnOiByZXR1cm4gMHg1ODsKLSAgICAgICAgY2Fz
ZSBHREtfeToKLSAgICAgICAgY2FzZSBHREtfWToKLSAgICAgICAgICAgIHJldHVybiBWS19ZOyAv
LyAgKDU5KSBZIGtleSBjYXNlICd5JzogY2FzZSAnWSc6IHJldHVybiAweDU5OwotICAgICAgICBj
YXNlIEdES196OgotICAgICAgICBjYXNlIEdES19aOgotICAgICAgICAgICAgcmV0dXJuIFZLX1o7
IC8vICAoNUEpIFoga2V5IGNhc2UgJ3onOiBjYXNlICdaJzogcmV0dXJuIDB4NUE7Ci0gICAgICAg
IGNhc2UgR0RLX01ldGFfTDoKLSAgICAgICAgICAgIHJldHVybiBWS19MV0lOOyAvLyAoNUIpIExl
ZnQgV2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFsIGtleWJvYXJkKQotICAgICAgICBjYXNl
IEdES19NZXRhX1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfUldJTjsgLy8gKDVDKSBSaWdodCBX
aW5kb3dzIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKLSAgICAgICAgICAgIC8vIFZLX0FQUFMgKDVE
KSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQotICAgICAgICAgICAgLy8gVktf
U0xFRVAgKDVGKSBDb21wdXRlciBTbGVlcCBrZXkKLSAgICAgICAgICAgIC8vIFZLX1NFUEFSQVRP
UiAoNkMpIFNlcGFyYXRvciBrZXkKLSAgICAgICAgICAgIC8vIFZLX1NVQlRSQUNUICg2RCkgU3Vi
dHJhY3Qga2V5Ci0gICAgICAgICAgICAvLyBWS19ERUNJTUFMICg2RSkgRGVjaW1hbCBrZXkKLSAg
ICAgICAgICAgIC8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKLSAgICAgICAgICAgIC8vIGhh
bmRsZWQgYnkga2V5IGNvZGUgYWJvdmUKLQotICAgICAgICBjYXNlIEdES19OdW1fTG9jazoKLSAg
ICAgICAgICAgIHJldHVybiBWS19OVU1MT0NLOyAvLyAoOTApIE5VTSBMT0NLIGtleQotCi0gICAg
ICAgIGNhc2UgR0RLX1Njcm9sbF9Mb2NrOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NDUk9MTDsg
Ly8gKDkxKSBTQ1JPTEwgTE9DSyBrZXkKLQotICAgICAgICAgICAgLy8gVktfTFNISUZUIChBMCkg
TGVmdCBTSElGVCBrZXkKLSAgICAgICAgICAgIC8vIFZLX1JTSElGVCAoQTEpIFJpZ2h0IFNISUZU
IGtleQotICAgICAgICAgICAgLy8gVktfTENPTlRST0wgKEEyKSBMZWZ0IENPTlRST0wga2V5Ci0g
ICAgICAgICAgICAvLyBWS19SQ09OVFJPTCAoQTMpIFJpZ2h0IENPTlRST0wga2V5Ci0gICAgICAg
ICAgICAvLyBWS19MTUVOVSAoQTQpIExlZnQgTUVOVSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1JN
RU5VIChBNSkgUmlnaHQgTUVOVSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfQkFDSyAo
QTYpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBCYWNrIGtleQotICAgICAgICAgICAgLy8gVktf
QlJPV1NFUl9GT1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZvcndhcmQga2V5
Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX1JFRlJFU0ggKEE4KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgUmVmcmVzaCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfU1RPUCAoQTkp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdG9wIGtleQotICAgICAgICAgICAgLy8gVktfQlJP
V1NFUl9TRUFSQ0ggKEFBKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU2VhcmNoIGtleQotICAg
ICAgICAgICAgLy8gVktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJy
b3dzZXIgRmF2b3JpdGVzIGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9IT01FIChBQykg
V2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtleQotICAgICAgICAgICAg
Ly8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQot
ICAgICAgICAgICAgLy8gVktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVt
ZSBEb3duIGtleQotICAgICAgICAgICAgLy8gVktfVk9MVU1FX1VQIChBRikgV2luZG93cyAyMDAw
L1hQOiBWb2x1bWUgVXAga2V5Ci0gICAgICAgICAgICAvLyBWS19NRURJQV9ORVhUX1RSQUNLIChC
MCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQotICAgICAgICAgICAgLy8gVktfTUVE
SUFfUFJFVl9UUkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9YUDogUHJldmlvdXMgVHJhY2sga2V5Ci0g
ICAgICAgICAgICAvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1l
ZGlhIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFfUExBWV9QQVVTRSAoQjMpIFdpbmRvd3Mg
MjAwMC9YUDogUGxheS9QYXVzZSBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9N
QUlMIChCNCkgV2luZG93cyAyMDAwL1hQOiBTdGFydCBNYWlsIGtleQotICAgICAgICAgICAgLy8g
VktfTEFVTkNIX01FRElBX1NFTEVDVCAoQjUpIFdpbmRvd3MgMjAwMC9YUDogU2VsZWN0IE1lZGlh
IGtleQotICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5kb3dzIDIwMDAvWFA6
IFN0YXJ0IEFwcGxpY2F0aW9uIDEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfQVBQMiAo
QjcpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBrZXkKLQotICAgICAgICAg
ICAgLy8gVktfT0VNXzEgKEJBKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0
IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRh
cmQga2V5Ym9hcmQsIHRoZSAnOzonIGtleQotICAgICAgICBjYXNlIEdES19zZW1pY29sb246Ci0g
ICAgICAgIGNhc2UgR0RLX2NvbG9uOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8xOyAvL2Nh
c2UgJzsnOiBjYXNlICc6JzogcmV0dXJuIDB4QkE7Ci0gICAgICAgICAgICAvLyBWS19PRU1fUExV
UyAoQkIpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcrJyBr
ZXkKLSAgICAgICAgY2FzZSBHREtfcGx1czoKLSAgICAgICAgY2FzZSBHREtfZXF1YWw6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfT0VNX1BMVVM7IC8vY2FzZSAnPSc6IGNhc2UgJysnOiByZXR1cm4g
MHhCQjsKLSAgICAgICAgICAgIC8vIFZLX09FTV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDog
Rm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKLSAgICAgICAgY2FzZSBHREtfY29t
bWE6Ci0gICAgICAgIGNhc2UgR0RLX2xlc3M6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNX0NP
TU1BOyAvL2Nhc2UgJywnOiBjYXNlICc8JzogcmV0dXJuIDB4QkM7Ci0gICAgICAgICAgICAvLyBW
S19PRU1fTUlOVVMgKEJEKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24s
IHRoZSAnLScga2V5Ci0gICAgICAgIGNhc2UgR0RLX21pbnVzOgotICAgICAgICBjYXNlIEdES191
bmRlcnNjb3JlOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9NSU5VUzsgLy9jYXNlICctJzog
Y2FzZSAnXyc6IHJldHVybiAweEJEOwotICAgICAgICAgICAgLy8gVktfT0VNX1BFUklPRCAoQkUp
IFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcuJyBrZXkKLSAg
ICAgICAgY2FzZSBHREtfcGVyaW9kOgotICAgICAgICBjYXNlIEdES19ncmVhdGVyOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX09FTV9QRVJJT0Q7IC8vY2FzZSAnLic6IGNhc2UgJz4nOiByZXR1cm4g
MHhCRTsKLSAgICAgICAgICAgIC8vIFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlzY2VsbGFuZW91
cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBG
b3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKLSAgICAgICAgY2FzZSBH
REtfc2xhc2g6Ci0gICAgICAgIGNhc2UgR0RLX3F1ZXN0aW9uOgotICAgICAgICAgICAgcmV0dXJu
IFZLX09FTV8yOyAvL2Nhc2UgJy8nOiBjYXNlICc/JzogcmV0dXJuIDB4QkY7Ci0gICAgICAgICAg
ICAvLyBWS19PRU1fMyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQg
Y2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFy
ZCBrZXlib2FyZCwgdGhlICdgficga2V5Ci0gICAgICAgIGNhc2UgR0RLX2FzY2lpdGlsZGU6Ci0g
ICAgICAgIGNhc2UgR0RLX3F1b3RlbGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMzsg
Ly9jYXNlICdgJzogY2FzZSAnfic6IHJldHVybiAweEMwOwotICAgICAgICAgICAgLy8gVktfT0VN
XzQgKERCKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5
IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQs
IHRoZSAnW3snIGtleQotICAgICAgICBjYXNlIEdES19icmFja2V0bGVmdDoKLSAgICAgICAgY2Fz
ZSBHREtfYnJhY2VsZWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV80OyAvL2Nhc2UgJ1sn
OiBjYXNlICd7JzogcmV0dXJuIDB4REI7Ci0gICAgICAgICAgICAvLyBWS19PRU1fNSAoREMpIFVz
ZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQu
IFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX2JhY2tzbGFzaDoKLSAgICAgICAgY2FzZSBHREtfYmFyOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX09FTV81OyAvL2Nhc2UgJ1xcJzogY2FzZSAnfCc6IHJldHVy
biAweERDOwotICAgICAgICAgICAgLy8gVktfT0VNXzYgKEREKSBVc2VkIGZvciBtaXNjZWxsYW5l
b3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6
IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXX0nIGtleQotICAgICAgICBjYXNl
IEdES19icmFja2V0cmlnaHQ6Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNlcmlnaHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfT0VNXzY7IC8vIGNhc2UgJ10nOiBjYXNlICd9JzogcmV0dXJuIDB4REQ7
Ci0gICAgICAgICAgICAvLyBWS19PRU1fNyAoREUpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hh
cmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRo
ZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdzaW5nbGUtcXVvdGUvZG91YmxlLXF1b3RlJyBr
ZXkKLSAgICAgICAgY2FzZSBHREtfcXVvdGVyaWdodDoKLSAgICAgICAgY2FzZSBHREtfcXVvdGVk
Ymw6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzc7IC8vIGNhc2UgJ1wnJzogY2FzZSAnIic6
IHJldHVybiAweERFOwotICAgICAgICAgICAgLy8gVktfT0VNXzggKERGKSBVc2VkIGZvciBtaXNj
ZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLgotICAgICAgICAg
ICAgLy8gVktfT0VNXzEwMiAoRTIpIFdpbmRvd3MgMjAwMC9YUDogRWl0aGVyIHRoZSBhbmdsZSBi
cmFja2V0IGtleSBvciB0aGUgYmFja3NsYXNoIGtleSBvbiB0aGUgUlQgMTAyLWtleSBrZXlib2Fy
ZAotICAgICAgICAgICAgLy8gVktfUFJPQ0VTU0tFWSAoRTUpIFdpbmRvd3MgOTUvOTgvTWUsIFdp
bmRvd3MgTlQgNC4wLCBXaW5kb3dzIDIwMDAvWFA6IElNRSBQUk9DRVNTIGtleQotICAgICAgICAg
ICAgLy8gVktfUEFDS0VUIChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29k
ZSBjaGFyYWN0ZXJzIGFzIGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtl
eSBpcyB0aGUgbG93IHdvcmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Ig
bm9uLWtleWJvYXJkIGlucHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVt
YXJrIGluIEtFWUJESU5QVVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKLSAg
ICAgICAgICAgIC8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQotICAgICAgICAgICAgLy8gVktfQ1JT
RUwgKEY3KSBDclNlbCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0VYU0VMIChGOCkgRXhTZWwga2V5
Ci0gICAgICAgICAgICAvLyBWS19FUkVPRiAoRjkpIEVyYXNlIEVPRiBrZXkKLSAgICAgICAgICAg
IC8vIFZLX1BMQVkgKEZBKSBQbGF5IGtleQotICAgICAgICAgICAgLy8gVktfWk9PTSAoRkIpIFpv
b20ga2V5Ci0gICAgICAgICAgICAvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJl
IHVzZQotICAgICAgICAgICAgLy8gVktfUEExIChGRCkgUEExIGtleQotICAgICAgICAgICAgLy8g
VktfT0VNX0NMRUFSIChGRSkgQ2xlYXIga2V5Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLX0KLQotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQotewotICAgIG1faXNLZXlVcCA9IGV2ZW50
LT50eXBlID09IEdES19LRVlfUkVMRUFTRTsKLSAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPmtleS5z
dGF0ZSAmIEdES19TSElGVF9NQVNLICE9IDA7Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPmtleS5z
dGF0ZSAmIEdES19DT05UUk9MX01BU0sgIT0gMDsKLSAgICBtX2FsdEtleSA9IGV2ZW50LT5rZXku
c3RhdGUgJiBHREtfTU9EMV9NQVNLICE9IDA7Ci0gICAgbV9tZXRhS2V5ID0gZXZlbnQtPmtleS5z
dGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKLSAgICBtX3RleHQgPSBldmVudC0+a2V5LnN0cmlu
ZzsKLSAgICBtX3VubW9kaWZpZWRUZXh0ID0gZXZlbnQtPmtleS5zdHJpbmc7Ci0gICAgbV9rZXlJ
ZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZXZlbnQtPmtleS5rZXl2YWwp
OwotICAgIG1fV2luZG93c0tleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50
LT5rZXkua2V5dmFsKTsKLSAgICBtX2F1dG9SZXBlYXQgPSBmYWxzZTsKLSAgICBtX2lzS2V5cGFk
ID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fc2hpZnRLZXkpIHsKLSAgICAgICAgVUNoYXIgY2hhcmFj
dGVyID0gdG9sb3dlcihtX3RleHRbMF0pOwotICAgICAgICBtX3RleHQgPSBTdHJpbmcoJmNoYXJh
Y3RlciwgMSk7Ci0gICAgfQotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjIsMzAgKzIyLDI2IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKIAorI2RlZmluZSBXSU4zMl9DT01QSUxFX0hBQ0sKKwogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1
ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJUZXh0RmllbGQuaCIKLSNpbmNsdWRlICJGaWxlQ2hvb3Nl
ci5oIgogI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJMaXN0Qm94LmgiCiAjaW5jbHVkZSAi
SW50UG9pbnQuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiU2xpZGVyLmgiCiAjaW5jbHVkZSAi
Q3Vyc29yLmgiCiAjaW5jbHVkZSAibG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCi0jaW5jbHVk
ZSAiU2Nyb2xsQmFyLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIlNjcmVlbi5oIgpA
QCAtNTksMjA3ICs1NSwyNSBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lR2RrLmgiCiAjaW5jbHVk
ZSAiVGV4dEJvdW5kYXJpZXMuaCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCi0jaW5jbHVk
ZSAiRWRpdENvbW1hbmQuaCIKLSNpbmNsdWRlICJJY29uLmgiCi0jaW5jbHVkZSAiSWNvbkxvYWRl
ci5oIgotI2luY2x1ZGUgIkljb25EYXRhYmFzZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
LmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRT
dHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiU1NMS2V5R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiU291
bmQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotc3RydWN0IFBsYXRmb3JtRGF0YVN0cnVjdAot
ewotfTsKIAotc3RydWN0IFBsYXRmb3JtUmVzcG9uc2VTdHJ1Y3QKLXsKLX07Ci19CisjZGVmaW5l
IG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVO
VEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18p
OyB9IHdoaWxlKDApCiAKLSNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3Rk
ZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzIGluICVzOiVkXG4iLCBfX0ZVTkNUSU9OX18s
IF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKK2Jvb2wgUmVzb3VyY2VMb2FkZXI6Omxv
YWRzQmxvY2tlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLXZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVC
b3JkZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VQ
cmVzc0V2ZW50VG9TY3JvbGxiYXIoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIFBsYXRm
b3JtU2Nyb2xsYmFyKikgeyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzTW91
c2VQcmVzc0V2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJh
bWUqKSB7IHJldHVybiB0cnVlOyB9Ci1ib29sIEZyYW1lVmlldzo6cGFzc01vdXNlUmVsZWFzZUV2
ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJhbWUqKSB7IHJl
dHVybiB0cnVlOyB9Ci1ib29sIEZyYW1lVmlldzo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFt
ZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJhbWUqKSB7IHJldHVybiB0cnVlOyB9
Ci1ib29sIEZyYW1lVmlldzo6cGFzc1doZWVsRXZlbnRUb1N1YmZyYW1lKFBsYXRmb3JtV2hlZWxF
dmVudCYsIEZyYW1lKikgeyByZXR1cm4gdHJ1ZTsgfQotCi12b2lkIFdpZGdldDo6ZW5hYmxlRmx1
c2hEcmF3aW5nKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29sIFdpZGdldDo6aXNFbmFibGVk
KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotV2lkZ2V0OjpGb2N1c1Bv
bGljeSBXaWRnZXQ6OmZvY3VzUG9saWN5KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gTm9Gb2N1czsgfQotdm9pZCBXaWRnZXQ6OmRpc2FibGVGbHVzaERyYXdpbmcoKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KLUdyYXBoaWNzQ29udGV4dCogV2lkZ2V0Ojpsb2NrRHJhd2luZ0ZvY3Vz
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBXaWRnZXQ6OnVubG9ja0Ry
YXdpbmdGb2N1cyhHcmFwaGljc0NvbnRleHQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQg
V2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KCkgeyB9Ci0KLXZvaWQgVGV4dEZpZWxkOjpzZWxlY3RB
bGwoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgVGV4dEZpZWxkOjphZGRTZWFyY2hSZXN1
bHQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWludCBUZXh0RmllbGQ6OnNlbGVjdGlvblN0YXJ0
KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBUZXh0RmllbGQ6
Omhhc1NlbGVjdGVkVGV4dCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0K
LVN0cmluZyBUZXh0RmllbGQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIFRleHRGaWVsZDo6c2V0QXV0b1NhdmVOYW1lKFN0
cmluZyBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBUZXh0RmllbGQ6OmNoZWNr
c0Rlc2NlbmRhbnRzRm9yRm9jdXMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBm
YWxzZTsgfQotdm9pZCBUZXh0RmllbGQ6OnNldFNlbGVjdGlvbihpbnQsIGludCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9Ci12b2lkIFRleHRGaWVsZDo6c2V0TWF4UmVzdWx0cyhpbnQpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotYm9vbCBUZXh0RmllbGQ6OmVkaXRlZCgpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIDA7IH0KLQotU2xpZGVyOjpTbGlkZXIoKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLUludFNpemUgU2xpZGVyOjpzaXplSGludCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIEludFNpemUoKTsgfQotdm9pZCBTbGlkZXI6OnNldFZhbHVlKGRvdWJsZSkgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFNsaWRlcjo6c2V0TWF4VmFsdWUoZG91YmxlKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KLXZvaWQgU2xpZGVyOjpzZXRNaW5WYWx1ZShkb3VibGUpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQotU2xpZGVyOjp+U2xpZGVyKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Ci12b2lkIFNsaWRlcjo6c2V0Rm9udChXZWJDb3JlOjpGb250IGNvbnN0JikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci1kb3VibGUgU2xpZGVyOjp2YWx1ZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KLQotdm9pZCBMaXN0Qm94OjpzZXRTZWxlY3RlZChpbnQsIGJvb2wpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQotSW50U2l6ZSBMaXN0Qm94OjpzaXplRm9yTnVtYmVyT2ZMaW5l
cyhpbnQpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFNpemUoKTsgfQotYm9v
bCBMaXN0Qm94Ojppc1NlbGVjdGVkKGludCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQotdm9pZCBMaXN0Qm94OjphcHBlbmRJdGVtKERlcHJlY2F0ZWRTdHJpbmcgY29uc3Qm
LCBMaXN0Qm94SXRlbVR5cGUsIGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBMaXN0
Qm94Ojpkb25lQXBwZW5kaW5nSXRlbXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgTGlz
dEJveDo6c2V0V3JpdGluZ0RpcmVjdGlvbihUZXh0RGlyZWN0aW9uKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLXZvaWQgTGlzdEJveDo6c2V0RW5hYmxlZChib29sKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLXZvaWQgTGlzdEJveDo6Y2xlYXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgTGlz
dEJveDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KLQotV2lkZ2V0OjpGb2N1c1BvbGljeSBTbGlkZXI6OmZvY3VzUG9saWN5
KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9Gb2N1czsgfQotV2lkZ2V0OjpG
b2N1c1BvbGljeSBMaXN0Qm94Ojpmb2N1c1BvbGljeSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIE5vRm9jdXM7IH0KLVdpZGdldDo6Rm9jdXNQb2xpY3kgVGV4dEZpZWxkOjpmb2N1
c1BvbGljeSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5vRm9jdXM7IH0KLQot
Q3Vyc29yOjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotCi1QbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChjb25zdCBDdXJy
ZW50RXZlbnRUYWcmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVN0cmluZyBXZWJDb3JlOjpzZWFy
Y2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJp
bmcoKTsgfQotCi1pbnQgV2ViQ29yZTo6ZmluZE5leHRTZW50ZW5jZUZyb21JbmRleChVQ2hhciBj
b25zdCosIGludCwgaW50LCBib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12
b2lkIFdlYkNvcmU6OmZpbmRTZW50ZW5jZUJvdW5kYXJ5KFVDaGFyIGNvbnN0KiwgaW50LCBpbnQs
IGludCosIGludCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotaW50IFdlYkNvcmU6OmZpbmROZXh0
V29yZEZyb21JbmRleChVQ2hhciBjb25zdCosIGludCwgaW50LCBib29sKSB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVmVjdG9yPGNoYXI+
IFNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KExvYWRlciosRG9jTG9hZGVyKixSZXNvdXJjZUhhbmRs
ZSosS1VSTCYsRGVwcmVjYXRlZFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZl
Y3RvcjxjaGFyPigpOyB9Ci0KK1dpZGdldCogRnJhbWVHZGs6OmNyZWF0ZUphdmFBcHBsZXRXaWRn
ZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKIH0KLQotdm9pZCBG
cmFtZUdkazo6Zm9jdXNXaW5kb3coKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgRnJhbWVH
ZGs6OnVuZm9jdXNXaW5kb3coKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVHZGs6
OmxvY2F0aW9uYmFyVmlzaWJsZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZv
aWQgRnJhbWVHZGs6Omlzc3VlUmVkb0NvbW1hbmQodm9pZCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Ci1LSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWVHZGs6OmdldE9iamVjdEluc3RhbmNlRm9y
V2lkZ2V0KFdpZGdldCAqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1LSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZSogRnJhbWVHZGs6OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoV2lk
Z2V0ICopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLUtKUzo6QmluZGluZ3M6OlJv
b3RPYmplY3QqIEZyYW1lR2RrOjpiaW5kaW5nUm9vdE9iamVjdCgpIHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KLVdpZGdldCogRnJhbWVHZGs6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQo
Y29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6OmNhblJlZG8o
KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIEZyYW1lR2RrOjpj
YW5VbmRvKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFt
ZUdkazo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21t
YW5kPikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29sIEZyYW1lR2RrOjpydW5KYXZhU2NyaXB0
UHJvbXB0KFN0cmluZyBjb25zdCYsIFN0cmluZyBjb25zdCYsIFN0cmluZyAmKSB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIEZyYW1lR2RrOjpzaG91bGRJbnRlcnJ1cHRKYXZh
U2NyaXB0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgRnJhbWVH
ZGs6OnByaW50KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1LSlM6OkJpbmRpbmdzOjpJbnN0YW5j
ZSogRnJhbWVHZGs6OmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6OnBhc3NNb3VzZURvd25FdmVu
dFRvV2lkZ2V0KFdpZGdldCopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQg
RnJhbWVHZGs6Omlzc3VlQ3V0Q29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBG
cmFtZUdkazo6aXNzdWVDb3B5Q29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBG
cmFtZUdkazo6aXNzdWVVbmRvQ29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotU3RyaW5n
IEZyYW1lR2RrOjptaW1lVHlwZUZvckZpbGVOYW1lKFN0cmluZyBjb25zdCYpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIEZyYW1lR2RrOjppc3N1ZVBh
c3RlQ29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUdkazo6c2NoZWR1
bGVDbG9zZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUdkazo6bWFya01pc3Nw
ZWxsaW5ncyhXZWJDb3JlOjpTZWxlY3Rpb24gY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
LWJvb2wgRnJhbWVHZGs6Om1lbnViYXJWaXNpYmxlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6cGVyc29uYWxiYXJWaXNpYmxlKCkgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6c3RhdHVzYmFyVmlzaWJsZSgpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6OnRvb2xiYXJWaXNp
YmxlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFtZUdkazo6aXNz
dWVUcmFuc3Bvc2VDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29sIEZyYW1lR2Rr
OjpjYW5QYXN0ZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWVudW0g
V2ViQ29yZTo6T2JqZWN0Q29udGVudFR5cGUgRnJhbWVHZGs6Om9iamVjdENvbnRlbnRUeXBlKEtV
UkwgY29uc3QmLCBTdHJpbmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAoT2Jq
ZWN0Q29udGVudFR5cGUpMDsgfQotYm9vbCBGcmFtZUdkazo6Y2FuR29CYWNrT3JGb3J3YXJkKGlu
dCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFtZUdkazo6
aXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1i
b29sIEZyYW1lR2RrOjppc0xvYWRUeXBlUmVsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gZmFsc2U7IH0KLUtVUkwgRnJhbWVHZGs6Om9yaWdpbmFsUmVxdWVzdFVSTCgpIGNvbnN0IHsg
cmV0dXJuIEtVUkwoKTsgfQotUGx1Z2luKiBGcmFtZUdkazo6Y3JlYXRlUGx1Z2luKEVsZW1lbnQq
LCBLVVJMIGNvbnN0JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIFN0cmluZyBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLQotaW50
IFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KGNvbnN0IFBhZ2UqKSB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIFdlYkNvcmU6OnNjcmVlbklzTW9ub2Nocm9tZShj
b25zdCBQYWdlKikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLQotLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyog
Q29tcGxldGVseSBlbXB0eSBzdHVicyAobW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAqLwot
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Lwotc3RhdGljIEN1cnNvciBsb2NhbEN1cnNvcjsKLWNvbnN0IEN1cnNvciYgV2ViQ29yZTo6bW92
ZUN1cnNvcigpIHsgcmV0dXJuIGxvY2FsQ3Vyc29yOyB9Ci0KLWJvb2wgQVhPYmplY3RDYWNoZTo6
Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7Ci0KLWJvb2wgV2ViQ29yZTo6aGlzdG9yeUNv
bnRhaW5zKERlcHJlY2F0ZWRTdHJpbmcgY29uc3QmKSB7IHJldHVybiBmYWxzZTsgfQotU3RyaW5n
IFdlYkNvcmU6OnN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpIHsgcmV0dXJuICJTdWJtaXQiOyB9
Ci1TdHJpbmcgV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4dCgpIHsgcmV0dXJuIERlcHJlY2F0
ZWRTdHJpbmcoKTsgfQotU3RyaW5nIFdlYkNvcmU6OnJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkg
eyByZXR1cm4gIlJlc2V0IjsgfQotU3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VGaWxl
TGFiZWwoKSB7IHJldHVybiAiQnJvd3NlLi4uIjsgfQotU3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0
b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KLQotU3RyaW5nIFdl
YkNvcmU6OmRlZmF1bHRMYW5ndWFnZSgpIHsgcmV0dXJuICJlbiI7IH0KLQotdm9pZCBXZWJDb3Jl
OjpmaW5kV29yZEJvdW5kYXJ5KFVDaGFyIGNvbnN0KiBzdHIsIGludCBsZW4sIGludCBwb3NpdGlv
biwgaW50KiBzdGFydCwgaW50KiBlbmQpIHsqc3RhcnQgPSBwb3NpdGlvbjsgKmVuZCA9IHBvc2l0
aW9uOyB9Ci0KLVBsdWdpbkluZm8qUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9y
UGx1Z2luQXRJbmRleCh1bnNpZ25lZCkgeyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVnSW5JbmZv
U3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQotYm9vbCBXZWJDb3JlOjpQ
bHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikg
eyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyB9
Ci0KLXZvaWQgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmFzc2VtYmxlUmVzcG9uc2VIZWFkZXJz
KCkgY29uc3QgeyB9Ci12b2lkIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZXRyaWV2ZUNoYXJz
ZXQoKSBjb25zdCB7IH0KLQotdm9pZCBGcmFtZUdkazo6cmVzdG9yZURvY3VtZW50U3RhdGUoKSB7
IH0KLXZvaWQgRnJhbWVHZGs6OnBhcnRDbGVhcmVkSW5CZWdpbigpIHsgfQotdm9pZCBGcmFtZUdk
azo6Y3JlYXRlRW1wdHlEb2N1bWVudCgpIHsgfQotU3RyaW5nIEZyYW1lR2RrOjpvdmVycmlkZU1l
ZGlhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIEZyYW1lR2RrOjpoYW5k
bGVkT25sb2FkRXZlbnRzKCkgeyB9Ci1SYW5nZSogRnJhbWVHZGs6Om1hcmtlZFRleHRSYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6Omxhc3RFdmVudElzTW91c2VVcCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIEZyYW1lR2RrOjphZGRNZXNzYWdlVG9Db25z
b2xlKFN0cmluZyBjb25zdCYsIHVuc2lnbmVkIGludCwgU3RyaW5nIGNvbnN0JikgeyB9Ci1ib29s
IEZyYW1lR2RrOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiwgY29uc3Qg
U2VsZWN0aW9uJiwgV2ViQ29yZTo6RUFmZmluaXR5LCBib29sKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci1ib29sIEZyYW1lR2RrOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9u
JikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotdm9pZCBGcmFtZUdkazo6cmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbihXZWJDb3JlOjpTZWxlY3Rpb24gY29uc3QmLCBib29sKSB7IH0KLUZyYW1lKiBG
cmFtZUdkazo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikgeyByZXR1cm4g
MDsgfQotCi12b2lkIEZyYW1lR2RrOjpzYXZlRG9jdW1lbnRTdGF0ZSgpIHsgfQotdm9pZCBGcmFt
ZUdkazo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21t
YW5kPikgeyB9Ci12b2lkIEZyYW1lR2RrOjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyh2b2lkKSB7
IH0KLVN0cmluZyBGcmFtZUdkazo6aW5jb21pbmdSZWZlcnJlcigpIGNvbnN0IHsgcmV0dXJuIFN0
cmluZygpOyB9Ci12b2lkIEZyYW1lR2RrOjptYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRz
KFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiBjb25zdCYpIHsgfQotdm9pZCBGcmFtZUdkazo6cmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFNlbGVjdGlvbiYpIHsgfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWJvb2wgQ2hlY2tJZlJlbG9hZGluZyhEb2NMb2FkZXIqKSB7IHJldHVybiBm
YWxzZTsgfQotdGltZV90IENhY2hlT2JqZWN0RXhwaXJlc1RpbWUoRG9jTG9hZGVyKiwgUGxhdGZv
cm1SZXNwb25zZSkgeyByZXR1cm4gMDsgfQotdm9pZCBDaGVja0NhY2hlT2JqZWN0U3RhdHVzKERv
Y0xvYWRlciosIENhY2hlZFJlc291cmNlKikgeyB9Ci1EZXByZWNhdGVkU3RyaW5nIFJlc3BvbnNl
VVJMKFBsYXRmb3JtUmVzcG9uc2UpIHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsgfQotYm9v
bCBJc1Jlc3BvbnNlVVJMRXF1YWxUb1VSTChQbGF0Zm9ybVJlc3BvbnNlICwgY29uc3QgU3RyaW5n
JiBVUkwpIHsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIFJlc3BvbnNlSXNNdWx0aXBhcnQoUGxhdGZv
cm1SZXNwb25zZSkgeyByZXR1cm4gZmFsc2U7IH0KLURlcHJlY2F0ZWRTdHJpbmcgUmVzcG9uc2VN
SU1FVHlwZShQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7IH0K
LXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNlKFBsYXRmb3JtUmVzcG9uc2UpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0QWxsRGF0YShQbGF0Zm9y
bURhdGEpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRFbmFi
bGVkKGJvb2wpIHsgfQotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIEludFJl
Y3QgY29uc3QmKSB7IH0KLXZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpIHsgfQotdm9p
ZCBXaWRnZXQ6OmludmFsaWRhdGUoKSB7IH0KLXZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChj
b25zdCBJbnRSZWN0JiByKSB7IH0KLQotdm9pZCBTY3JvbGxWaWV3OjphZGRDaGlsZChXaWRnZXQq
KSB7IH0KLXZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0KikgeyB9Ci12b2lkIFNj
cm9sbFZpZXc6OnNjcm9sbFBvaW50UmVjdXJzaXZlbHkoaW50IHgsIGludCB5KSB7IH0KLWJvb2wg
U2Nyb2xsVmlldzo6aW5XaW5kb3coKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci12b2lkIFNjcm9s
bFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JikgeyB9Ci12b2lkIFNjcm9sbFZp
ZXc6OnVwZGF0ZVNjcm9sbGJhcnMoKSB7IH0KLWludCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxJ
bmZvKHNob3J0IHR5cGUsIGludCBjdXJyZW50LCBpbnQgbWF4LCBpbnQgcGFnZVNpemUpIHsgcmV0
dXJuIDA7IH0KLUludFBvaW50IFNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50
UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBwb2ludDsgfQotSW50UG9pbnQgU2Nyb2xsVmll
dzo6Y29udGVudHNUb1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJu
IHBvaW50OyB9Ci1QbGF0Zm9ybVNjcm9sbGJhciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFyVW5kZXJN
b3VzZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpIHsgcmV0dXJuIDA7IH0K
LQorIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdo
dCwKICAgICAgICAgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90
dG9tUmlnaHQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFk
ZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCB0aGlja25lc3Mp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQpAQCAtMjc4LDEyICs5MiwxMyBAQAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYpIHsgfQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJv
dGF0ZShmbG9hdCkgeyB9CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJikgeyB9Ci0KKyAKIFBhdGg6OlBhdGgoKXsgfQogUGF0aDo6flBhdGgoKXsgfQogUGF0aDo6
UGF0aChjb25zdCBQYXRoJil7IH0KIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0eyByZXR1cm4gZmFsc2U7IH0KIHZvaWQgUGF0aDo6dHJh
bnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYpeyB9Cit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKXsgfQogRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiBQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0
aCYpeyByZXR1cm4gKiB0aGlzOyB9CiB2b2lkIFBhdGg6OmNsZWFyKCkgeyB9CkBAIC0yOTcsODIg
KzExMiw0ODcgQEAKIHZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmKSB7IH0KIHZv
aWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSB7IH0KIAotVGV4dEZpZWxkOjpU
ZXh0RmllbGQoVGV4dEZpZWxkOjpUeXBlKSB7IH0KLVRleHRGaWVsZDo6flRleHRGaWVsZCgpIHsg
fQotdm9pZCBUZXh0RmllbGQ6OnNldEZvbnQoV2ViQ29yZTo6Rm9udCBjb25zdCYpIHsgfQotdm9p
ZCBUZXh0RmllbGQ6OnNldEFsaWdubWVudChIb3Jpem9udGFsQWxpZ25tZW50KSB7IH0KLXZvaWQg
VGV4dEZpZWxkOjpzZXRXcml0aW5nRGlyZWN0aW9uKFRleHREaXJlY3Rpb24pIHsgfQotaW50IFRl
eHRGaWVsZDo6bWF4TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gMDsgfQotdm9pZCBUZXh0RmllbGQ6
OnNldE1heExlbmd0aChpbnQpIHsgfQotU3RyaW5nIFRleHRGaWVsZDo6dGV4dCgpIGNvbnN0IHsg
cmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIFRleHRGaWVsZDo6c2V0VGV4dChTdHJpbmcgY29uc3Qm
KSB7IH0KLWludCBUZXh0RmllbGQ6OmN1cnNvclBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gMDsg
fQotdm9pZCBUZXh0RmllbGQ6OnNldEN1cnNvclBvc2l0aW9uKGludCkgeyB9Ci12b2lkIFRleHRG
aWVsZDo6c2V0RWRpdGVkKGJvb2wpIHsgfQotdm9pZCBUZXh0RmllbGQ6OnNldFJlYWRPbmx5KGJv
b2wpIHsgfQotdm9pZCBUZXh0RmllbGQ6OnNldFBsYWNlaG9sZGVyU3RyaW5nKFN0cmluZyBjb25z
dCYpIHsgfQotdm9pZCBUZXh0RmllbGQ6OnNldENvbG9ycyhDb2xvciBjb25zdCYsIENvbG9yIGNv
bnN0JikgeyB9Ci1JbnRTaXplIFRleHRGaWVsZDo6c2l6ZUZvckNoYXJhY3RlcldpZHRoKGludCkg
Y29uc3QgeyByZXR1cm4gSW50U2l6ZSgpOyB9Ci1pbnQgVGV4dEZpZWxkOjpiYXNlbGluZVBvc2l0
aW9uKGludCkgY29uc3QgeyByZXR1cm4gMDsgfQotdm9pZCBUZXh0RmllbGQ6OnNldExpdmVTZWFy
Y2goYm9vbCkgeyB9Cit2b2lkIFRleHRGaWVsZDo6c2VsZWN0QWxsKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQordm9pZCBUZXh0RmllbGQ6OmFkZFNlYXJjaFJlc3VsdCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KK2ludCBUZXh0RmllbGQ6OnNlbGVjdGlvblN0YXJ0KCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorYm9vbCBUZXh0
RmllbGQ6Omhhc1NlbGVjdGVkVGV4dCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KK1N0cmluZyBUZXh0RmllbGQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9Cit2b2lk
IFRleHRGaWVsZDo6c2V0QXV0b1NhdmVOYW1lKFN0cmluZyBjb25zdCYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KK2Jvb2wgVGV4dEZpZWxkOjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3Vz
KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
K3ZvaWQgVGV4dEZpZWxkOjpzZXRTZWxlY3Rpb24oaW50LCBpbnQpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KK3ZvaWQgVGV4dEZpZWxkOjpzZXRNYXhSZXN1bHRzKGludCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorYm9vbCBUZXh0RmllbGQ6OmVkaXRlZCgpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAotUGxhdGZvcm1TY3JvbGxi
YXI6OlBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUp
IDogU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIGNvbnRyb2xTaXplKSB7IH0KLVBsYXRm
b3JtU2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIoKSB7IH0KLWludCBQbGF0Zm9ybVNjcm9s
bGJhcjo6d2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9Ci1pbnQgUGxhdGZvcm1TY3JvbGxiYXI6
OmhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNl
dEVuYWJsZWQoYm9vbCkgeyB9Ci12b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpwYWludChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KSB7IH0KLXZvaWQgUGxhdGZvcm1T
Y3JvbGxiYXI6OnVwZGF0ZVRodW1iUG9zaXRpb24oKSB7IH0KLXZvaWQgUGxhdGZvcm1TY3JvbGxi
YXI6OnVwZGF0ZVRodW1iUHJvcG9ydGlvbigpIHsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6
c2V0UmVjdChjb25zdCBJbnRSZWN0JikgeyB9CitTbGlkZXI6OlNsaWRlcigpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KK0ludFNpemUgU2xpZGVyOjpzaXplSGludCgpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50U2l6ZSgpOworfQordm9pZCBTbGlk
ZXI6OnNldFZhbHVlKGRvdWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBT
bGlkZXI6OnNldE1heFZhbHVlKGRvdWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
dm9pZCBTbGlkZXI6OnNldE1pblZhbHVlKGRvdWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorU2xpZGVyOjp+U2xpZGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9p
ZCBTbGlkZXI6OnNldEZvbnQoV2ViQ29yZTo6Rm9udCBjb25zdCYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KK2RvdWJsZSBTbGlkZXI6OnZhbHVlKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQogCi1MaXN0Qm94OjpMaXN0Qm94KCkgeyB9Ci1M
aXN0Qm94Ojp+TGlzdEJveCgpIHsgfQotdm9pZCBMaXN0Qm94OjpzZXRTZWxlY3Rpb25Nb2RlKExp
c3RCb3g6OlNlbGVjdGlvbk1vZGUpIHsgfQotdm9pZCBMaXN0Qm94OjpzZXRGb250KFdlYkNvcmU6
OkZvbnQgY29uc3QmKSB7IH0KK1dpZGdldDo6Rm9jdXNQb2xpY3kgU2xpZGVyOjpmb2N1c1BvbGlj
eSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gQ2xpY2tGb2N1
czsKK30KIAotRmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKERvY3VtZW50KiwgUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUZpbGVDaG9vc2VyOjp+RmlsZUNo
b29zZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVBhc3NSZWZQdHI8RmlsZUNob29zZXI+IEZp
bGVDaG9vc2VyOjpjcmVhdGUoRG9jdW1lbnQqLCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCopIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgRmlsZUNob29zZXI6Om9wZW5GaWxl
Q2hvb3NlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotU3RyaW5nIEZpbGVDaG9vc2VyOjpiYXNl
bmFtZUZvcldpZHRoKGludCB3aWR0aCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
U3RyaW5nKCk7IH0KLXZvaWQgRmlsZUNob29zZXI6OmRpc2Nvbm5lY3RVcGxvYWRDb250cm9sKCkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorV2lkZ2V0OjpGb2N1c1Bv
bGljeSBUZXh0RmllbGQ6OmZvY3VzUG9saWN5KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBDbGlja0ZvY3VzOworfQogCi1Db2xvciBXZWJDb3JlOjpmb2N1c1Jp
bmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KLXZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNS
aW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KK0N1cnNvcjo6Q3Vyc29yKElt
YWdlKiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CiAKLXZv
aWQgRnJhbWU6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpIHsgfQorY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50OjpDdXJyZW50RXZlbnRUYWcgUGxhdGZvcm1Nb3VzZUV2ZW50OjpjdXJyZW50RXZlbnQg
PSB7IH07CiAKLXZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBUaWxlUnVsZSwgVGlsZVJ1bGUsIENvbXBvc2l0
ZU9wZXJhdG9yKSB7IH0KK1BsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNv
bnN0IEN1cnJlbnRFdmVudFRhZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KIAotdm9p
ZCBSZW5kZXJUaGVtZUdkazo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9
Ci1ib29sIFJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiBmYWxzZTsg
fQotdm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Qg
eyB9Ci12b2lkIFJlbmRlclRoZW1lR2RrOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KiBlKSBjb25zdCB7fQotYm9vbCBSZW5kZXJU
aGVtZUdkazo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gZmFsc2U7IH0KK1N0cmluZyBX
ZWJDb3JlOjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQogCi1JY29uOjpJY29uKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9Ci1JY29uOjp+SWNvbigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotUGFzc1Jl
ZlB0cjxJY29uPiBJY29uOjpuZXdJY29uRm9yRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBQYXNzUmVmUHRyPEljb24+KG5ldyBJY29uKCkpOyB9
Ci12b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KK2ludCBXZWJDb3JlOjpmaW5kTmV4dFNlbnRlbmNlRnJvbUluZGV4
KFVDaGFyIGNvbnN0KiwgaW50LCBpbnQsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KK3ZvaWQgV2ViQ29yZTo6ZmluZFNlbnRlbmNlQm91bmRhcnkoVUNo
YXIgY29uc3QqLCBpbnQsIGludCwgaW50KiwgaW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQoraW50IFdlYkNvcmU6OmZpbmROZXh0V29yZEZyb21JbmRleChVQ2hhciBjb25zdCosIGlu
dCwgaW50LCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CiAKLXZvaWQgSWNvbkxvYWRlcjo6c3RvcExvYWRpbmcoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0g
Ci12b2lkIEljb25Mb2FkZXI6OnN0YXJ0TG9hZGluZygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfSAK
LUljb25Mb2FkZXIqIEljb25Mb2FkZXI6OmNyZWF0ZUZvckZyYW1lKEZyYW1lICpmcmFtZSkgeyBy
ZXR1cm4gMDsgfSAKK2Jvb2wgRnJhbWVHZGs6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChF
bGVtZW50KiwgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KikKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CiAKLWJvb2wgSWNvbkRhdGFiYXNlOjppc0ljb25FeHBpcmVkRm9ySWNvblVSTChjb25z
dCBTdHJpbmcmIHVybCkgeyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgSWNvbkRhdGFiYXNlOjpoYXNF
bnRyeUZvckljb25VUkwoY29uc3QgU3RyaW5nJiB1cmwpIHsgcmV0dXJuIGZhbHNlOyB9Ci1JY29u
RGF0YWJhc2UqIEljb25EYXRhYmFzZTo6c2hhcmVkSWNvbkRhdGFiYXNlKCkgeyByZXR1cm4gMDsg
fQotYm9vbCBJY29uRGF0YWJhc2U6OnNldEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYg
aWNvblVSTCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKSB7IHJldHVybiBmYWxzZTsgfQordm9pZCBG
cmFtZUdkazo6Zm9jdXNXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lk
IEZyYW1lR2RrOjp1bmZvY3VzV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Ym9vbCBGcmFtZUdkazo6bG9jYXRpb25iYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQordm9pZCBGcmFtZUdkazo6aXNzdWVSZWRvQ29tbWFuZCh2
b2lkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitLSlM6OkJpbmRpbmdzOjpJbnN0YW5j
ZSogRnJhbWVHZGs6OmdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCAqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CitLSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZSogRnJhbWVHZGs6OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0ICopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK0tKUzo6QmluZGluZ3M6OlJv
b3RPYmplY3QqIEZyYW1lR2RrOjpiaW5kaW5nUm9vdE9iamVjdCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVHZGs6OmNhblJlZG8oKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Citib29sIEZyYW1l
R2RrOjpjYW5VbmRvKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQordm9pZCBGcmFtZUdkazo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRy
PFdlYkNvcmU6OkVkaXRDb21tYW5kPikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorYm9v
bCBGcmFtZUdkazo6cnVuSmF2YVNjcmlwdFByb21wdChTdHJpbmcgY29uc3QmLCBTdHJpbmcgY29u
c3QmLCBTdHJpbmcgJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorYm9vbCBGcmFtZUdkazo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9Cit2b2lkIEZyYW1lR2RrOjpwcmlu
dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK0tKUzo6QmluZGluZ3M6Okluc3RhbmNl
KiBGcmFtZUdkazo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQordm9pZCBGcmFtZUdkazo6aXNzdWVD
dXRDb21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBGcmFtZUdkazo6
aXNzdWVDb3B5Q29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgRnJh
bWVHZGs6Omlzc3VlVW5kb0NvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cit2
b2lkIEZyYW1lR2RrOjppc3N1ZVBhc3RlQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KK3ZvaWQgRnJhbWVHZGs6OnNjaGVkdWxlQ2xvc2UoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9Citib29sIEZyYW1lR2RrOjptZW51YmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVHZGs6OnBlcnNvbmFsYmFy
VmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK2Jv
b2wgRnJhbWVHZGs6OnN0YXR1c2JhclZpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9Citib29sIEZyYW1lR2RrOjp0b29sYmFyVmlzaWJsZSgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK3ZvaWQgRnJhbWVHZGs6Omlz
c3VlVHJhbnNwb3NlQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK2Jvb2wg
RnJhbWVHZGs6OmNhblBhc3RlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBJbnRQb2ludCYsIGlu
dCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1mbG9hdCBGb250
OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHls
ZSYpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5
bGUmLCBpbnQsIGJvb2wpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2Vu
dW0gV2ViQ29yZTo6T2JqZWN0Q29udGVudFR5cGUgRnJhbWVHZGs6Om9iamVjdENvbnRlbnRUeXBl
KEtVUkwgY29uc3QmLCBTdHJpbmcgY29uc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIChPYmplY3RDb250ZW50VHlwZSkwOworfQorYm9vbCBGcmFtZUdkazo6Y2FuR29C
YWNrT3JGb3J3YXJkKGludCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQogCit2b2lkIEZyYW1lR2RrOjpnb0JhY2tPckZvcndhcmQoaW50KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2ludCBGcmFtZUdkazo6Z2V0SGlzdG9yeUxlbmd0aCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworS1VSTCBGcmFt
ZUdkazo6aGlzdG9yeVVSTChpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gS1VSTCgpOworfQorCit2b2lkIEZyYW1lR2RrOjppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNv
bW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CitQbHVnaW4qIEZyYW1lR2RrOjpj
cmVhdGVQbHVnaW4oRWxlbWVudCosIEtVUkwgY29uc3QmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgU3RyaW5nIGNvbnN0JikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgV2ViQ29yZTo6c2NyZWVuRGVwdGhQZXJD
b21wb25lbnQoY29uc3QgUGFnZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KK2Jvb2wgV2ViQ29yZTo6c2NyZWVuSXNNb25vY2hyb21lKGNvbnN0IFBhZ2UqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBD
b21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1bik6ICovCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CitzdGF0aWMgQ3Vyc29yIGxvY2FsQ3Vyc29yOworY29uc3QgQ3Vyc29yJiBXZWJDb3JlOjptb3Zl
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gbG9jYWxDdXJzb3I7Cit9CisKK2Jvb2wgQVhPYmplY3RD
YWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CisKK2Jvb2wgV2ViQ29yZTo6aGlz
dG9yeUNvbnRhaW5zKERlcHJlY2F0ZWRTdHJpbmcgY29uc3QmKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KK1N0cmluZyBXZWJDb3JlOjpzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKQoreworICAg
IHJldHVybiAiU3VibWl0IjsKK30KK1N0cmluZyBXZWJDb3JlOjppbnB1dEVsZW1lbnRBbHRUZXh0
KCkKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworfQorU3RyaW5nIFdlYkNvcmU6
OnJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkKK3sKKyAgICByZXR1cm4gIlJlc2V0IjsKK30KK1N0
cmluZyBXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UoKQoreworICAgIHJldHVybiAiZW4iOworfQor
U3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwoKQoreworICAgIHJldHVy
biAiQ2hvb3NlIEZpbGUiOworfQorCit2b2lkIFdlYkNvcmU6OmZpbmRXb3JkQm91bmRhcnkoVUNo
YXIgY29uc3QqIHN0ciwgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVu
ZCkKK3sKKyAgICAqc3RhcnQgPSBwb3NpdGlvbjsKKyAgICAqZW5kID0gcG9zaXRpb247Cit9CisK
K1BsdWdpbkluZm8qUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJ
bmRleCh1bnNpZ25lZCkKK3sKKyAgICByZXR1cm4gMDsKK30KK3Vuc2lnbmVkIFBsdWdJbkluZm9T
dG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorYm9vbCBXZWJD
b3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9Cit2b2lkIFdlYkNvcmU6OnJlZnJlc2hQbHVn
aW5zKGJvb2wpCit7IH0KKwordm9pZCBGcmFtZUdkazo6cmVzdG9yZURvY3VtZW50U3RhdGUoKQor
eyB9Cit2b2lkIEZyYW1lR2RrOjpwYXJ0Q2xlYXJlZEluQmVnaW4oKQoreyB9Cit2b2lkIEZyYW1l
R2RrOjpjcmVhdGVFbXB0eURvY3VtZW50KCkKK3sgfQorU3RyaW5nIEZyYW1lR2RrOjpvdmVycmlk
ZU1lZGlhVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQordm9pZCBGcmFt
ZUdkazo6aGFuZGxlZE9ubG9hZEV2ZW50cygpCit7IH0KK1JhbmdlKiBGcmFtZUdkazo6bWFya2Vk
VGV4dFJhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVHZGs6Omxh
c3RFdmVudElzTW91c2VVcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQordm9pZCBG
cmFtZUdkazo6YWRkTWVzc2FnZVRvQ29uc29sZShTdHJpbmcgY29uc3QmLCB1bnNpZ25lZCBpbnQs
IFN0cmluZyBjb25zdCYpCit7IH0KKwordm9pZCBGcmFtZUdkazo6c2F2ZURvY3VtZW50U3RhdGUo
KQoreyB9Cit2b2lkIEZyYW1lR2RrOjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8
V2ViQ29yZTo6RWRpdENvbW1hbmQ+KQoreyB9Cit2b2lkIEZyYW1lR2RrOjpjbGVhclVuZG9SZWRv
T3BlcmF0aW9ucyh2b2lkKQoreyB9CitTdHJpbmcgRnJhbWVHZGs6OmluY29taW5nUmVmZXJyZXIo
KSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KK3ZvaWQgRnJhbWVHZGs6Om1hcmtN
aXNzcGVsbGluZ3NJbkFkamFjZW50V29yZHMoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uIGNvbnN0
JikKK3sgfQorCitUZXh0RmllbGQ6OlRleHRGaWVsZChUZXh0RmllbGQ6OlR5cGUpCit7IH0KK1Rl
eHRGaWVsZDo6flRleHRGaWVsZCgpCit7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRGb250KFdlYkNv
cmU6OkZvbnQgY29uc3QmKQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0QWxpZ25tZW50KEhvcml6
b250YWxBbGlnbm1lbnQpCit7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRXcml0aW5nRGlyZWN0aW9u
KFRleHREaXJlY3Rpb24pCit7IH0KK2ludCBUZXh0RmllbGQ6Om1heExlbmd0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIFRleHRGaWVsZDo6c2V0TWF4TGVuZ3RoKGludCkKK3sg
fQorU3RyaW5nIFRleHRGaWVsZDo6dGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQordm9pZCBUZXh0RmllbGQ6OnNldFRleHQoU3RyaW5nIGNvbnN0JikKK3sgfQoraW50IFRl
eHRGaWVsZDo6Y3Vyc29yUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiAwOworfQordm9p
ZCBUZXh0RmllbGQ6OnNldEN1cnNvclBvc2l0aW9uKGludCkKK3sgfQordm9pZCBUZXh0RmllbGQ6
OnNldEVkaXRlZChib29sKQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0UmVhZE9ubHkoYm9vbCkK
K3sgfQordm9pZCBUZXh0RmllbGQ6OnNldFBsYWNlaG9sZGVyU3RyaW5nKFN0cmluZyBjb25zdCYp
Cit7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRDb2xvcnMoQ29sb3IgY29uc3QmLCBDb2xvciBjb25z
dCYpCit7IH0KK0ludFNpemUgVGV4dEZpZWxkOjpzaXplRm9yQ2hhcmFjdGVyV2lkdGgoaW50KSBj
b25zdAoreworICAgIHJldHVybiBJbnRTaXplKCk7Cit9CitpbnQgVGV4dEZpZWxkOjpiYXNlbGlu
ZVBvc2l0aW9uKGludCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KK3ZvaWQgVGV4dEZpZWxk
OjpzZXRMaXZlU2VhcmNoKGJvb2wpCit7IH0KKworQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29s
b3IoKQoreworICAgIHJldHVybiAweEZGMDAwMEZGOworfQordm9pZCBXZWJDb3JlOjpzZXRGb2N1
c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpCit7IH0KKwordm9pZCBGcmFtZTo6
c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkKK3sgfQorCit2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgVGlsZVJ1
bGUsIFRpbGVSdWxlLCBDb21wb3NpdGVPcGVyYXRvcikKK3sgfQorCitGbG9hdFJlY3QgRm9udDo6
c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5
bGUmLCBjb25zdCBJbnRQb2ludCYsIGludCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0
KCk7Cit9Cit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJikgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQoraW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGlu
dCwgYm9vbCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1WZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRLZXlTaXpl
cygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KLVN0cmlu
ZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4
LCBjb25zdCBTdHJpbmcgJmNoYWxsZW5nZVN0cmluZywgY29uc3QgS1VSTCAmdXJsKSB7IHJldHVy
biBTdHJpbmcoKTsgfQorVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CitTdHJp
bmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRl
eCwgY29uc3QgU3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVybCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CiAKK3ZvaWQgc3lzdGVtQmVlcCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyUG9w
dXBNZW51R2RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyUG9w
dXBNZW51R2RrLmgJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVu
ZGVyUG9wdXBNZW51R2RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8
c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgUkVOREVSX1BPUFVQTUVOVV9HREtfSAotI2Rl
ZmluZSBSRU5ERVJfUE9QVVBNRU5VX0dES19ICi0KLSNpbmNsdWRlICJQb3B1cE1lbnUuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBIVE1MT3B0aW9uRWxlbWVudDsKLWNsYXNzIEhU
TUxPcHRHcm91cEVsZW1lbnQ7Ci0KLWNsYXNzIFBvcHVwTWVudUdkayA6IHB1YmxpYyBQb3B1cE1l
bnUgewotcHVibGljOgotICAgIFBvcHVwTWVudUdkayhOb2RlKiwgIFJlbmRlck1lbnVMaXN0Kik7
Ci0gICAgflBvcHVwTWVudUdkaygpOwotCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHBvcHVsYXRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dQb3B1cChjb25z
dCBJbnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50IGluZGV4KTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlk
ZVBvcHVwKCk7Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFkZFNlcGFyYXRv
cigpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRHcm91cExhYmVsKEhUTUxPcHRHcm91cEVsZW1lbnQq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkT3B0aW9uKEhUTUxPcHRpb25FbGVtZW50Kik7Ci0KLX07
Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgJKHJldmlzaW9uIDE3
NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMjIsNzAgKzIyLDQ3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKICNpZm5kZWYgRnJhbWVHZGtfSF8KICNkZWZpbmUgRnJhbWVHZGtfSF8KIAogI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGVDbGllbnQuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAid3RmL1JlZlB0ci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZUdk
azsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87CitjbGFzcyBX
aW5kb3dHZGs7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CitjbGFzcyBQbGF0Zm9ybU1vdXNl
RXZlbnQ7CitjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CitjbGFzcyBQbGF0Zm9ybVNjcm9s
bEJhcjsKK2NsYXNzIEVkaXRvckNsaWVudDsKK2NsYXNzIEV2ZW50OwogCi1jbGFzcyBGcmFtZUdk
a0NsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+RnJhbWVHZGtDbGllbnQoKSB7fTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZShjb25zdCBGcmFtZUdkayopID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCBvcGVuVVJMKGNvbnN0IEtVUkwmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN1
Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBjb25zdCBGb3JtRGF0
YSopID0gMDsKLX07Ci0KLWNsYXNzIEZyYW1lR2RrQ2xpZW50RGVmYXVsdCA6IHB1YmxpYyBGcmFt
ZUdka0NsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyAgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQgCitjbGFzcyBGcmFtZUdkayA6IHB1YmxpYyBGcmFtZQogewogcHVibGlj
OgotCi0gICAgRnJhbWVHZGtDbGllbnREZWZhdWx0KCk7Ci0gICAgdmlydHVhbCB+RnJhbWVHZGtD
bGllbnREZWZhdWx0KCk7Ci0KLSAgICAvLyBGcmFtZUdka0NsaWVudAotICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZShjb25zdCBGcmFtZUdkayopOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuVVJMKGNv
bnN0IEtVUkwmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBTdHJpbmcmIG1l
dGhvZCwgY29uc3QgS1VSTCYsIGNvbnN0IEZvcm1EYXRhKik7Ci0KLSAgICAvLyBSZXNvdXJjZUhh
bmRsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlSGFu
ZGxlKiwgUGxhdGZvcm1SZXNwb25zZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRh
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVkQWxsRGF0YShSZXNvdXJjZUhhbmRsZSosIFBsYXRmb3JtRGF0YSk7Ci0KLXByaXZhdGU6
Ci0gICAgRnJhbWVHZGsqIG1fZnJhbWU7Ci0gICAgYm9vbCBtX2JlZ2luQ2FsbGVkIDogMTsKLQot
fTsKLQotY2xhc3MgRnJhbWVHZGsgOiBwdWJsaWMgRnJhbWUgewotcHVibGljOgotICAgIEZyYW1l
R2RrKFBhZ2UqLCBFbGVtZW50Kik7Ci0gICAgRnJhbWVHZGsoR2RrRHJhd2FibGUqKTsKKyAgICBG
cmFtZUdkayhQYWdlKiwgRWxlbWVudCosIFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PixXaW5kb3dH
ZGsqIHdpbmRvdyk7CiAgICAgdmlydHVhbCB+RnJhbWVHZGsoKTsKLQotICAgIHZvaWQgaGFuZGxl
R2RrRXZlbnQoR2RrRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBG
cmFtZUxvYWRSZXF1ZXN0JiwgRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXJsU2VsZWN0ZWQo
Y29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIEV2ZW50Kik7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgc3Vi
bWl0Rm9ybShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JixFdmVudCopOworICAgIHZpcnR1YWwgdm9p
ZCB1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JixFdmVudCopOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwgT2JqZWN0Q29u
dGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpOwogICAgIHZpcnR1YWwgUGx1Z2luKiBjcmVhdGVQbHVnaW4oRWxlbWVudCosIGNvbnN0
IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgU3RyaW5nJik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkVHlwZVJlbG9hZCgpOworCisg
ICAgdmlydHVhbCBLVVJMIG9yaWdpbmFsUmVxdWVzdFVSTCgpIGNvbnN0OworCiAgICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlQ2xvc2UoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB1bmZvY3VzV2luZG93
KCk7CkBAIC0xMTUsMTIgKzkyLDExIEBACiAgICAgdmlydHVhbCBTdHJpbmcgbWltZVR5cGVGb3JG
aWxlTmFtZShjb25zdCBTdHJpbmcmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJrTWlz
c3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotICAgIHZp
cnR1YWwgdm9pZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlvbiYpOworICAgIHZpcnR1
YWwgdm9pZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlvbiYpCisgICAge30KIAogICAg
IHZpcnR1YWwgYm9vbCBsYXN0RXZlbnRJc01vdXNlVXAoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyAmLCBGcmFtZSogc3ViZnJhbWUgPSAwKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFzc1doZWVs
RXZlbnRUb0NoaWxkV2lkZ2V0KE5vZGUqKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJyaWRl
TWVkaWFUeXBlKCkgY29uc3Q7CiAKQEAgLTEzOSwxMyArMTE1LDIyIEBACiAgICAgdmlydHVhbCB2
b2lkIGlzc3VlUGFzdGVDb21tYW5kKCk7CiAgICAgdmlydHVhbCB2b2lkIGlzc3VlUGFzdGVBbmRN
YXRjaFN0eWxlQ29tbWFuZCgpOwogICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVRyYW5zcG9zZUNvbW1h
bmQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBT
ZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7Ci0gICAgdmlydHVhbCB2
b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBTZWxlY3Rpb24mIGVuZGluZ1NlbGVj
dGlvbik7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxl
Y3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZp
bml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7Ci0gICAgYm9vbCBzaG91
bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBvbGRTZWxlY3Rp
b24sIGJvb2wgY2xvc2VUeXBpbmcpCisgICAge307CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRU
b0NoYW5nZWRDb250ZW50cyhjb25zdCBTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKKyAgICB7
fTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlv
biYgb2xkU2VsZWN0aW9uLCBjb25zdCBTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5
IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisKICAgICB2aXJ0dWFsIHZvaWQgcGFydENsZWFyZWRJbkJlZ2lu
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuR29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIDsK
KyAgICB2aXJ0dWFsIGludCBnZXRIaXN0b3J5TGVuZ3RoKCk7CisgICAgdmlydHVhbCBLVVJMIGhp
c3RvcnlVUkwoaW50IGRpc3RhbmNlKTsKKwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVkT25sb2Fk
RXZlbnRzKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuUGFzdGUoKSBjb25zdDsKQEAgLTE1Mywy
NSArMTM4LDEyIEBACiAgICAgdmlydHVhbCBib29sIGNhblVuZG8oKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcHJpbnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNj
cmlwdCgpOworICAgIHZpcnR1YWwgYm9vbCBkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxl
bWVudCosIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCopOwogCi0gICAgYm9vbCBrZXlQcmVz
cyhjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmKTsKLSAgICB2aXJ0dWFsIEtVUkwgb3JpZ2lu
YWxSZXF1ZXN0VVJMKCkgY29uc3Q7Ci0KLSAgICBJbnRSZWN0IGZyYW1lR2VvbWV0cnkoKSBjb25z
dDsKLSAgICB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVs
ZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiByZWZlcnJlcik7CiAgICAgV2lkZ2V0
KiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wg
aXNMb2FkVHlwZVJlbG9hZCgpOwotICAgIHZpcnR1YWwgYm9vbCBwYXNzTW91c2VEb3duRXZlbnRU
b1dpZGdldChXaWRnZXQqKTsKLQotICAgIEZyYW1lR2RrQ2xpZW50KiBtX2NsaWVudDsKLSAgICBH
ZGtEcmF3YWJsZSogbV9kcmF3YWJsZTsKIH07CiAKLWlubGluZSBGcmFtZUdkayogV2luKEZyYW1l
KiBmcmFtZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVHZGsqPihmcmFtZSk7IH0KLWlubGlu
ZSBjb25zdCBGcmFtZUdkayogV2luKGNvbnN0IEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgRnJhbWVHZGsqPihmcmFtZSk7IH0KIAogfQogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAkocmV2aXNpb24gMTc2MzApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkVGltZXIuaCIKLQotI2lu
Y2x1ZGUgIlN5c3RlbVRpbWUuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgZ3VpbnQgc2hhcmVk
VGltZXI7Ci1zdGF0aWMgdm9pZCAoKnNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbikoKTsKLQotdm9p
ZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpCi17Ci0gICAgc2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uID0gZjsKLX0KLQotc3RhdGljIGdib29sZWFuIHRpbWVvdXRfY2Io
Z3BvaW50ZXIpCi17Ci0gICAgaWYgKHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbikKLSAgICAgICAg
c2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12b2lk
IHNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKQotewotICAgIEFTU0VSVChz
aGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOwotCi0gICAgZG91YmxlIGludGVydmFsID0gZmlyZVRp
bWUgLSBjdXJyZW50VGltZSgpOwotICAgIGd1aW50IGludGVydmFsSW5NUzsKLSAgICBpZiAoaW50
ZXJ2YWwgPCAwKQotICAgICAgICBpbnRlcnZhbEluTVMgPSAwOwotICAgIGVsc2UgewotICAgICAg
ICBpbnRlcnZhbCAqPSAxMDAwOwotICAgICAgICBpbnRlcnZhbEluTVMgPSAoZ3VpbnQpaW50ZXJ2
YWw7Ci0gICAgfQotCi0gICAgc3RvcFNoYXJlZFRpbWVyKCk7Ci0gICAgaWYgKGludGVydmFsSW5N
UyA9PSAwKQotICAgICAgICBzaGFyZWRUaW1lciA9IGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZ
X0RFRkFVTFQsIHRpbWVvdXRfY2IsIE5VTEwsIE5VTEwpOwotICAgIGVsc2UKLSAgICAgICAgc2hh
cmVkVGltZXIgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCBpbnRlcnZh
bEluTVMsIHRpbWVvdXRfY2IsIE5VTEwsIE5VTEwpOwotfQotCi12b2lkIHN0b3BTaGFyZWRUaW1l
cigpCi17Ci0gICAgZ2Jvb2xlYW4gcyA9IEZBTFNFOwotICAgIGlmIChzaGFyZWRUaW1lciA9PSAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzID0gZ19zb3VyY2VfcmVtb3ZlKHNoYXJlZFRpbWVy
KTsKLSAgICBBU1NFUlQocyk7Ci0gICAgc2hhcmVkVGltZXIgPSAwOwotfQotCi19CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0Nvb2tpZUphckdkay5jcHAJKHJldmlzaW9uIDE3NjMwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVt
bWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjIsNyArMjIsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNw
cAkocmV2aXNpb24gMTc2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQo
R2RrRXZlbnQqIGV2ZW50KQotewotICAgIG1fZGVsdGFYID0gMDsKLSAgICBtX2RlbHRhWSA9IDA7
Ci0KLSAgICBpZiAoZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9VUCkKLSAg
ICAgICAgbV9kZWx0YVkgPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0
aW9uID09IEdES19TQ1JPTExfTEVGVCkKLSAgICAgICAgbV9kZWx0YVggPSAtMTIwOwotICAgIGVs
c2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfUklHSFQpCi0gICAg
ICAgIG1fZGVsdGFYID0gMTIwOwotICAgIGVsc2UKLSAgICAgICAgbV9kZWx0YVkgPSAxMjA7Ci0K
LSAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+c2Nyb2xsLngsIChpbnQpZXZl
bnQtPnNjcm9sbC55KTsKLSAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVu
dC0+c2Nyb2xsLnhfcm9vdCwgKGludClldmVudC0+c2Nyb2xsLnlfcm9vdCk7Ci0gICAgbV9pc0Fj
Y2VwdGVkID0gZmFsc2U7Ci0gICAgbV9zaGlmdEtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUgJiBH
REtfU0hJRlRfTUFTSzsKLSAgICBtX2N0cmxLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RL
X0NPTlRST0xfTUFTSzsKLSAgICBtX2FsdEtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUgJiBHREtf
TU9EMV9NQVNLOwotICAgIG1fbWV0YUtleSA9IGV2ZW50LT5idXR0b24uc3RhdGUgJiBHREtfTU9E
Ml9NQVNLOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdk
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmgJ
KHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsu
aAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgcHJvamVjdC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjksMjYgKzI5LDM3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFRoZW1lRGF0
YSB7Ci0gICAgVGhlbWVEYXRhKCkgOiBtX3BhcnQoMCksIG1fc3RhdGUoMCkge30KK3N0cnVjdCBU
aGVtZURhdGEKK3sKKyAgICBUaGVtZURhdGEoKSA6IG1fcGFydCgwKSwgbV9zdGF0ZSgwKQorICAg
IHt9CiAKICAgICB1bnNpZ25lZCBtX3BhcnQ7CiAgICAgdW5zaWduZWQgbV9zdGF0ZTsKIH07CiAK
LWNsYXNzIFJlbmRlclRoZW1lR2RrIDogcHVibGljIFJlbmRlclRoZW1lIHsKK2NsYXNzIFJlbmRl
clRoZW1lR2RrIDogcHVibGljIFJlbmRlclRoZW1lCit7CiBwdWJsaWM6Ci0gICAgUmVuZGVyVGhl
bWVHZGsoKSA6IFJlbmRlclRoZW1lKCkgeyB9CisgICAgUmVuZGVyVGhlbWVHZGsoKSA6IFJlbmRl
clRoZW1lKCkKKyAgICB7IH0KIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUn
cyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0g
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogCiAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLSAg
ICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHBhaW50QnV0dG9uKG8sIGksIHIpOworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2ti
b3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKQotICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOyB9
CisgICAgeworICAgICAgICByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7CisgICAgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9X
aW5kb3dHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaW5kb3dHZGsu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpbmRvd0dkay5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2luZG93R2RrX0hfCisjZGVmaW5lIFdpbmRvd0dka19I
XworI2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCisjaW5j
bHVkZSA8Z2RrL2dkay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7
CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBDdXJzb3I7CitjbGFzcyBJbnRQb2ludDsK
K2NsYXNzIEludFNpemU7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgU3RyaW5nOworY2xhc3MgUGxh
dGZvcm1LZXlib2FyZEV2ZW50OworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworY2xhc3MgUGxh
dGZvcm1XaGVlbEV2ZW50OworY2xhc3MgV2lkZ2V0OworCisKK2NsYXNzIFdpbmRvd0dkayA6ICBw
dWJsaWMgU2hhcmVkPFdpbmRvd0dkaz4KK3sKKworcHVibGljOgorICAgIFdpbmRvd0dkaygpOwor
ICAgIFdpbmRvd0dkayhHZGtXaW5kb3cqKTsKKyAgICBXaW5kb3dHZGsoY29uc3QgV2luZG93RmVh
dHVyZXMmKTsKKyAgICB2aXJ0dWFsIH5XaW5kb3dHZGsoKTsKKworICAgIHN0YXRpYyBXaW5kb3dH
ZGsqIGZpbmRXaW5kb3coR2RrV2luZG93Kik7CisgICAgc3RhdGljIHZvaWQgc2V0UmVzb3VyY2VM
b2NhdGlvbihjb25zdCBjaGFyICpsb2NhdGlvbik7CisgICAgc3RhdGljIFN0cmluZyByZXNvdXJj
ZUxvY2F0aW9uKCk7CisKKyAgICB2b2lkIGhhbmRsZUdka0V2ZW50KEdka0V2ZW50Kik7CisgICAg
UGxhdGZvcm1LZXlib2FyZEV2ZW50IGNyZWF0ZUtleWJvYXJkRXZlbnQoR2RrRXZlbnQqLGJvb2wg
YXV0b1JlcGVhdCk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGNyZWF0ZU1vdXNlRXZlbnQoR2Rr
RXZlbnQqKTsKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgY3JlYXRlV2hlZWxFdmVudChHZGtFdmVu
dCopOworICAgIHZvaWQgc2V0V2lkZ2V0KFdpZGdldCogd2lkZ2V0KQorICAgIHsKKyAgICAgICAg
bV93aWRnZXQgPSB3aWRnZXQ7CisgICAgfQorICAgIFdpZGdldCogd2lkZ2V0KCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3dpZGdldDsKKyAgICB9CisgICAgdm9pZCBzZXRJc0FjdGl2ZShib29s
IGZsYWcpOworICAgIHZvaWQgc2hvdygpOworICAgIHZvaWQgaGlkZSgpOworICAgIHZvaWQgc2V0
Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKTsKKyAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgc2V0RnVsbFNjcmVlbihib29sKTsKKyAgICB2b2lkIHNldE1heGlt
aXplZChib29sKTsKKyAgICBXaW5kb3dHZGsqIGdldFBvaW50ZXJJbmZvKEludFBvaW50JiwgLypw
b3NpdGlvbiByZWxhdGl2ZSB0byB0aGlzIHdpbmRvdyovCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sJiBzaGlmdEtleSxib29sJiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJvb2wm
IG1ldGFLZXkpOworICAgIFdpbmRvd0dkayogd2luZG93QXRQb2ludGVyKCk7CisgICAgSW50UmVj
dCBnZW9tZXRyeSgpIGNvbnN0OworICAgIEludFBvaW50IHBvc2l0aW9uKCkgY29uc3Q7CisgICAg
SW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0
Jik7CisgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBi
b29sIG5vdyk7CisgICAgR2RrV2luZG93KiB3aW5kb3coKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fd2luZG93OworICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29u
dGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogIGJlZ2luUGFpbnRpbmcoY29uc3QgSW50UmVj
dCYpOworICAgIHZvaWQgZW5kUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0Kik7CisgICAgSW50UG9p
bnQgZ2V0QWJzb2x1dGVQb3NpdGlvbigpIGNvbnN0OworICAgIFdpbmRvd0ZlYXR1cmVzIHdpbmRv
d0ZlYXR1cmVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dpbmRvd0ZlYXR1cmVzOworICAg
IH0KK3ByaXZhdGU6CisgICAgYm9vbCBtX2NyZWF0ZWREcmF3YWJsZTsKKyAgICBHZGtXaW5kb3cq
IG1fd2luZG93OworICAgIFdpbmRvd0ZlYXR1cmVzIG1fd2luZG93RmVhdHVyZXM7CisgICAgV2lk
Z2V0KiBtX3dpZGdldDsKK307CisKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1dpZGdldFByaXZhdGVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1dpZGdldFByaXZhdGVHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdldFByaXZhdGVHZGsuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNp
bmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRnJhbWVHZGsuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpZm5k
ZWYgTkRFQlVHCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVB
c1RleHQuaCIKKyNlbmRpZgorCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRm
KHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9f
TElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisKKwordXNpbmcgbmFtZXNw
YWNlIEtKUzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisKK1dpZGdldFByaXZhdGU6OldpZGdl
dFByaXZhdGUoV2lkZ2V0KiB3aWRnZXQpCisgICAgICAgIDogdXJsKCkKKyAgICAgICAgLCB2aXNp
YmxlKGZhbHNlKQorICAgICAgICAsIGVuYWJsZWQoZmFsc2UpCisgICAgICAgICwgc2VsZWN0ZWQo
ZmFsc2UpCisgICAgICAgICwgaGFzRm9jdXMoZmFsc2UpCisgICAgICAgICwgZ2VvbWV0cnkoKQor
ICAgICAgICAsIGZvbnQoKQorICAgICAgICAsIHdpbmRvdygwKQorICAgICAgICAsIGNsaWVudCgw
KQorICAgICAgICAsIHdpZGdldCh3aWRnZXQpCisgICAgICAgICwgcGFyZW50KDApCisgICAgICAg
ICwgdmlldygwKQorICAgICAgICAsIGhhc1Njcm9sbGJhcnModHJ1ZSkKK3t9CisKK1dpZGdldFBy
aXZhdGU6On5XaWRnZXRQcml2YXRlKCkKK3sKKyAgICBwYXJlbnQgPSAwOworICAgIHdpZGdldCA9
IDA7CisgICAgdmlldyA9IDA7CisgICAgY2xpZW50ID0gMDsKK30KKwordm9pZCBXaWRnZXRQcml2
YXRlOjpjcmVhdGVWaWV3KEtVUkwgdXJsKQoreworI2lmIDAKKyAgICB1cmwgPSB1cmw7CisgICAg
bmFtZSA9IFN0cmluZyh1cmwudXJsKCkpOworICAgIC8vYSByZWJpbmQKKyAgICBpZiAodmlldykg
eworICAgICAgICBkZWxldGUgdmlldy0+ZnJhbWUoKTsKKyAgICAgICAgdmlldyA9IDA7CisgICAg
fQorICAgIFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3I7CisgICAgRnJhbWVHZGsqIHRt
cCA9IG5ldyBGcmFtZUdkayhuZXcgUGFnZSgpLDAsZWRpdG9yLDApOworICAgIHRtcC0+dHJlZSgp
LT5zZXROYW1lKHVybC51cmwoKSk7CisgICAgdmlldyA9IHRtcC0+dmlldygpOworCisgICAgLy9p
bXBvcnRhbnQgb3Igd2UgaGF2ZSByZWN1cnNpb24KKyAgICAvL3ZpZXctPnByaXZhdGVEYXRhKCkt
Pmhhc1Njcm9sbGJhcnMgPSBoYXNTY3JvbGxiYXJzOworICAgIHZpZXctPnByaXZhdGVEYXRhKCkt
Pm5hbWUgPSBuYW1lKyJbdmlld10iOworICAgIHZpZXctPnNldE93bmVyKHRoaXMtPndpZGdldCk7
CisKKyAgICBpZiAoIWhhc1Njcm9sbGJhcnMpIHsKKyAgICAgICAgdmlldy0+c3VwcHJlc3NTY3Jv
bGxiYXJzKHRydWUsZmFsc2UpOworICAgICAgICB2aWV3LT5zZXRWU2Nyb2xsYmFyTW9kZShTY3Jv
bGxiYXJBbHdheXNPZmYpOworICAgICAgICB2aWV3LT5zZXRIU2Nyb2xsYmFyTW9kZShTY3JvbGxi
YXJBbHdheXNPZmYpOworICAgIH0KKyAgICB0bXAtPm9wZW5VUkwodXJsKTsKKyNlbmRpZgorfQor
CisKKyNpZm5kZWYgTkRFQlVHCit2b2lkIFdpZGdldFByaXZhdGU6OmR1bXBEb2N1bWVudCgpCit7
CisgICAgRGVwcmVjYXRlZFN0cmluZyBzOworICAgIERvY3VtZW50ICpkb2MgPSB2aWV3LT5mcmFt
ZSgpLT5kb2N1bWVudCgpOworICAgIFRleHRTdHJlYW0gdHMoJnMpOworICAgIGRvYy0+ZHVtcCgm
dHMsRGVwcmVjYXRlZFN0cmluZygiICIpKTsKKyAgICBwcmludGYoIldJREdFVCBOT0RFUzolc1xu
JXNcbiIsdXJsLnVybCgpLmFzY2lpKCkscy5hc2NpaSgpKTsKKyAgICBwcmludGYoIkVORF9OT0RF
U1xuIik7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzdCA9IGV4dGVybmFsUmVwcmVzZW50YXRpb24o
ZG9jLT5yZW5kZXJlcigpKTsKKyAgICBwcmludGYoIldJREdFVCAlcyBSRU5ERVJFUzpcbiVzXG4i
LHVybC51cmwoKS5hc2NpaSgpLHN0LmFzY2lpKCkpOworICAgIHByaW50ZigiRU5EX1JFTkRFUkVT
XG4iKTsKK30KKyNlbmRpZgorCit9CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9TY3JlZW5HZGsuY3BwCShyZXZpc2lvbiAxNzYzMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1NjcmVlbkdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTIyLDMwICsyMiw0MCBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU2NyZWVuLmgiCi0KICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiRnJhbWVHZGsuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSA8Z2RrL2dkay5oPgog
CisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBV
TklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZV
TkNUSU9OX18pOyB9IHdoaWxlKDApCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEdk
a0RyYXdhYmxlKiBkcmF3YWJsZUZvclBhZ2UoY29uc3QgUGFnZSogcGFnZSkKIHsKKyAgICBXaWRn
ZXQgKiB3aWRnZXQ7CiAgICAgRnJhbWUqIGZyYW1lID0gKHBhZ2UgPyBwYWdlLT5tYWluRnJhbWUo
KSA6IDApOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOwogICAgIEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gKGZyYW1lID8gZnJhbWUtPnZpZXcoKSA6IDApOwotICAgIAogICAgIGlm
ICghZnJhbWVWaWV3KQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gZnJhbWVW
aWV3LT5kcmF3YWJsZSgpOworICAgIHdpZGdldCA9IGZyYW1lVmlldzsKKyAgICB3aGlsZSh3aWRn
ZXQpIHsKKyAgICAgICAgV2luZG93R2RrKiB3aW4gPSB3aWRnZXQtPndpbmRvdygpOworICAgICAg
ICBpZih3aW4pCisgICAgICAgICAgICByZXR1cm4gd2luLT53aW5kb3coKTsKKyAgICAgICAgd2lk
Z2V0ID0gd2lkZ2V0LT5wYXJlbnQoKTsgICAgCisgICAgfQorICAgIHJldHVybiAwOwogfQogCiBG
bG9hdFJlY3Qgc2NyZWVuUmVjdChjb25zdCBQYWdlKiBwYWdlKQpAQCAtNjUsMTUgKzc1LDE1IEBA
CiAgICAgcmV0dXJuIGdka19kcmF3YWJsZV9nZXRfZGVwdGgoZHJhd2FibGUpOwogfQogCi1GbG9h
dFJlY3QgdXNhYmxlU2NyZWVuUmVjdChjb25zdCBQYWdlKiBwYWdlKQorZmxvYXQgc2NhbGVGYWN0
b3IoY29uc3QgUGFnZSopCiB7Ci0gICAgcmV0dXJuIHNjcmVlblJlY3QocGFnZSk7CisgICAgcmV0
dXJuIDEuMGY7CiB9CiAKLWZsb2F0IHNjYWxlRmFjdG9yKGNvbnN0IFBhZ2UqKQorRmxvYXRSZWN0
IHVzYWJsZVNjcmVlblJlY3QoY29uc3QgUGFnZSogcGFnZSkKIHsKLSAgICByZXR1cm4gMS4wZjsK
LQorICAgIHJldHVybiBzY3JlZW5SZWN0KHBhZ2UpOwogfQogCiB9CisvLyB2aW06dHM9NDpldApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCShyZXZpc2lvbiAxNzYzMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTIyLDUyICsyMiw3NCBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCi0KKyNpbmNsdWRlICJXaWRnZXRQ
cml2YXRlR2RrLmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRm9u
dC5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSA8bWF0aC5oPgogCisjZGVm
aW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExF
TUVOVEVEOiAlczolZCAlc1xuIixcCisgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRU
WV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IFdpZGdldFByaXZhdGUgewotcHVibGljOgotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZTsKLSAg
ICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBJbnRSZWN0IGdlb21ldHJ5OwotICAgIEZvbnQg
Zm9udDsKLX07CitzdGF0aWMgV2lkZ2V0KiBmb2N1c1dpZGdldDsKIAogV2lkZ2V0OjpXaWRnZXQo
KQotICAgIDogZGF0YShuZXcgV2lkZ2V0UHJpdmF0ZSkKKyAgICAgICAgOiBkYXRhKG5ldyBXaWRn
ZXRQcml2YXRlKHRoaXMpKQore30KKworRnJhbWVWaWV3KiBXaWRnZXQ6OmZyYW1lVmlldygpIGNv
bnN0CiB7Ci0gICAgZGF0YS0+ZHJhd2FibGUgPSAwOworICAgIHJldHVybiBkYXRhLT52aWV3Lmdl
dCgpOwogfQogCi1XaWRnZXQ6OldpZGdldChHZGtEcmF3YWJsZSogZHJhd2FibGUpCi0gICAgOiBk
YXRhKG5ldyBXaWRnZXRQcml2YXRlKQordm9pZCBXaWRnZXQ6OnNldEZyYW1lVmlldyhGcmFtZVZp
ZXcqIHZpZXcpCiB7Ci0gICAgc2V0RHJhd2FibGUoZHJhd2FibGUpOworICAgIGRhdGEtPnZpZXcg
PSB2aWV3OworICAgIHZpZXctPmRhdGEtPmdlb21ldHJ5ID0gZGF0YS0+Z2VvbWV0cnk7CisgICAg
dmlldy0+ZGF0YS0+cGFyZW50ID0gdGhpczsKIH0KIAotR2RrRHJhd2FibGUqIFdpZGdldDo6ZHJh
d2FibGUoKSBjb25zdAorV2lkZ2V0KiBXaWRnZXQ6OnBhcmVudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGRhdGEtPmRyYXdhYmxlOworICAgIHJldHVybiBkYXRhLT5wYXJlbnQ7CiB9CiAKLXZvaWQg
V2lkZ2V0OjpzZXREcmF3YWJsZShHZGtEcmF3YWJsZSogZHJhd2FibGUpCit2b2lkIFdpZGdldDo6
c2V0UGFyZW50KFdpZGdldCogcCkKIHsKLSAgICBkYXRhLT5kcmF3YWJsZSA9IGRyYXdhYmxlOwor
ICAgIGRhdGEtPnBhcmVudCA9IHA7CisgICAgaWYgKHApCisgICAgICAgIHJlcGFpbnQoZmFsc2Up
OwogfQogCit2b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgZGF0YS0+cGFy
ZW50PTA7Cit9CisKIFdpZGdldDo6fldpZGdldCgpCiB7CiAgICAgZGVsZXRlIGRhdGE7CkBAIC04
Myw2ICsxMDUsNTMgQEAKICAgICByZXR1cm4gZGF0YS0+Y2xpZW50OwogfQogCit2b2lkIFdpZGdl
dDo6aW52YWxpZGF0ZSgpCit7CisgICAgSW50UmVjdCByKDAsMCxkYXRhLT5nZW9tZXRyeS53aWR0
aCgpLGRhdGEtPmdlb21ldHJ5LmhlaWdodCgpKTsKKyAgICBpbnZhbGlkYXRlUmVjdChyKTsKK30K
Kwordm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisKKyAg
ICByZXBhaW50KHIsZmFsc2UpOworfQorCit2b2lkIFdpZGdldDo6cmVwYWludChib29sIG5vdykK
K3sKKyAgICBJbnRSZWN0IHIoMCwwLGRhdGEtPmdlb21ldHJ5LndpZHRoKCksZGF0YS0+Z2VvbWV0
cnkuaGVpZ2h0KCkpOworICAgIHJlcGFpbnQocixub3cpOworfQorCit2b2lkIFdpZGdldDo6cmVw
YWludChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKK3sKKyAgICBpZiAodXBk
YXRlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGF0YS0+d2luZG93
KSB7CisgICAgICAgIGRhdGEtPndpbmRvdy0+aW52YWxpZGF0ZVJlY3QodXBkYXRlUmVjdCxub3cp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHBhcmVudCgpICE9IDApIHsKKyAg
ICAgICAgSW50UmVjdCBkaXJ0eSA9IHVwZGF0ZVJlY3Q7CisgICAgICAgIGRpcnR5Lm1vdmUoSW50
U2l6ZShkYXRhLT5nZW9tZXRyeS54KCksZGF0YS0+Z2VvbWV0cnkueSgpKSk7CisgICAgICAgIHBh
cmVudCgpLT5yZXBhaW50KGRpcnR5LG5vdyk7CisgICAgfSAKK30KKworLyoKKyAqIFNpbmNlIHdl
IGNhbGwgcmVwYWludCBvbiB0aGUgcm9vdCBmcmFtZSB0aGUgcmVjdCBjb21lcworICogYmFjayB0
byB1cyBpbiB0aGUgcm9vdCBmcmFtZSBjb29yZGluYXRlIHN5c3RlbQorICogbm90IHRoZSB3aWRn
ZXRzCisgKi8KK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIWZyYW1lVmlldygpKQorICAgICAgICByZXR1cm47
CisgICAgYXNzZXJ0KGZyYW1lVmlldygpICE9IHRoaXMpOworICAgIGZyYW1lVmlldygpLT5wYWlu
dChjdHgscmVjdCk7Cit9CisKIEludFJlY3QgV2lkZ2V0OjpmcmFtZUdlb21ldHJ5KCkgY29uc3QK
IHsKICAgICByZXR1cm4gZGF0YS0+Z2VvbWV0cnk7CkBAIC05MCwyMCArMTU5LDIxIEBACiAKIGJv
b2wgV2lkZ2V0OjpoYXNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBkYXRhLT5oYXNGb2N1czsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEZvY3VzKCkKIHsKLSAg
ICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBkYXRhLT5kcmF3YWJsZTsKLSAgICBpZiAoIWRyYXdh
YmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdk
a1dpbmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19m
b2N1cyh3aW5kb3csIEdES19DVVJSRU5UX1RJTUUpOworICAgIGRhdGEtPmhhc0ZvY3VzPSB0cnVl
OworICAgIGZvY3VzV2lkZ2V0ID0gdGhpczsKKyAgICBpZihkYXRhLT5jbGllbnQpCisgICAgICAg
IGRhdGEtPmNsaWVudC0+Zm9jdXNJbih0aGlzKTsKIH0KIAogdm9pZCBXaWRnZXQ6OmNsZWFyRm9j
dXMoKQogeworICAgIGRhdGEtPmhhc0ZvY3VzPSBmYWxzZTsKKyAgICBGcmFtZTo6Y2xlYXJEb2N1
bWVudEZvY3VzKHRoaXMpOwogfQogCiBjb25zdCBGb250JiBXaWRnZXQ6OmZvbnQoKSBjb25zdApA
QCAtMTE4LDQ0ICsxODgsMjA2IEBACiAKIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJiBjdXJzb3IpCiB7Ci0gICAgR2RrQ3Vyc29yKiBwY3VyID0gY3Vyc29yLmltcGwoKTsKLSAg
ICBpZiAoIXBjdXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiggZGF0YS0+d2luZG93KQorICAg
ICAgICBkYXRhLT53aW5kb3ctPnNldEN1cnNvcihjdXJzb3IpOworICAgIGlmIChwYXJlbnQoKSkK
KyAgICAgICAgcGFyZW50KCktPnNldEN1cnNvcihjdXJzb3IpOworfQogCi0gICAgR2RrRHJhd2Fi
bGUqIGRyYXdhYmxlID0gZGF0YS0+ZHJhd2FibGU7Ci0gICAgaWYgKCFkcmF3YWJsZSB8fCAhR0RL
X0lTX1dJTkRPVyhkcmF3YWJsZSkpCit2b2lkIFdpZGdldDo6c2hvdygpCit7CisgICAgZGF0YS0+
dmlzaWJsZSA9IHRydWU7CisgICAgaWYoZGF0YS0+d2luZG93KQorICAgICAgICBkYXRhLT53aW5k
b3ctPnNob3coKTsKK30KKworCit2b2lkIFdpZGdldDo6aGlkZSgpCit7CisgICAgZGF0YS0+dmlz
aWJsZSA9IGZhbHNlOworICAgIGlmKGRhdGEtPndpbmRvdykKKyAgICAgICAgZGF0YS0+d2luZG93
LT5oaWRlKCk7Cit9CisKK0ludFBvaW50IFdpZGdldDo6bG9jYXRpb25JbldpbmRvdygpIGNvbnN0
Cit7CisgICAgSW50UG9pbnQgcCgwLDApOworICAgIFdpZGdldCogd2lkZ2V0ID0gY29uc3RfY2Fz
dDxXaWRnZXQqPih0aGlzKTsKKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgIFJlbmRlclBhcnQqIHJl
bmRlcmVyID0gIHdpZGdldC0+ZnJhbWVWaWV3KCktPmZyYW1lKCktPm93bmVyUmVuZGVyZXIoKTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gdHggPSByZW5kZXJlci0+YWJzb2x1dGVUcmFuc2Zvcm0oKTsK
KyAgICBwLm1vdmUoKGludCl0eC5keCgpLChpbnQpdHguZHkoKSk7CisjZWxzZQorICAgIGlmKGRh
dGEtPnBhcmVudCkKKyAgICAgICAgcCA9IGRhdGEtPnBhcmVudC0+bG9jYXRpb25JbldpbmRvdygp
OworICAgIHAubW92ZShkYXRhLT5nZW9tZXRyeS54KCksZGF0YS0+Z2VvbWV0cnkueSgpKTsKKyNl
bmRpZgorICAgIHJldHVybiBwOworfQorCisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5
KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKGRhdGEtPmdlb21ldHJ5ID09IHIpCiAgICAg
ICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUp
OwotICAgIGdka193aW5kb3dfc2V0X2N1cnNvcih3aW5kb3csIHBjdXIpOworICAgIGRhdGEtPmdl
b21ldHJ5PXI7CisgICAgaWYgKGZyYW1lVmlldygpICYmIGZyYW1lVmlldygpICE9IHRoaXMpCisg
ICAgICAgIGZyYW1lVmlldygpLT5zZXRGcmFtZUdlb21ldHJ5KHIpOworfQogCit2b2lkIFdpZGdl
dDo6c2V0RW5hYmxlZChib29sIGIpCit7CisgICAgZGF0YS0+ZW5hYmxlZCA9IGI7CiB9CiAKLXZv
aWQgV2lkZ2V0OjpzaG93KCkKK2Jvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdAogewotICAg
IEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IGRhdGEtPmRyYXdhYmxlOwotICAgIGlmICghZHJhd2Fi
bGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQorICAgIHJldHVybiBkYXRhLT5lbmFibGVk
OworfQorCit2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sIGIpCit7CisgICAgZGF0YS0+
c2VsZWN0ZWQgPSBiOworfQorCisKK1dpZGdldDo6Rm9jdXNQb2xpY3kgV2lkZ2V0Ojpmb2N1c1Bv
bGljeSgpIGNvbnN0Cit7CisgICAgaWYoIWNsaWVudCgpKQorICAgICAgICByZXR1cm4gTm9Gb2N1
czsKKyAgICAgaWYgKCFjbGllbnQoKS0+aXNWaXNpYmxlKGNvbnN0X2Nhc3Q8V2lkZ2V0Kj4odGhp
cykpKQorICAgICAgICByZXR1cm4gTm9Gb2N1czsKKyAgICBpZighaXNFbmFibGVkKCkpCisgICAg
ICAgIHJldHVybiBOb0ZvY3VzOworICAgIHJldHVybiBUYWJGb2N1czsKK30KKwordm9pZCBXaWRn
ZXQ6OmRpc2FibGVGbHVzaERyYXdpbmcoKQore30KKwordm9pZCBXaWRnZXQ6OmVuYWJsZUZsdXNo
RHJhd2luZygpCit7fQorCisKK0dyYXBoaWNzQ29udGV4dCogV2lkZ2V0OjpiZWdpblBhaW50aW5n
KEludFJlY3QgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGN0eCA9IDA7CisgICAgaWYg
KGRhdGEtPndpbmRvdykKKyAgICAgICAgY3R4PWRhdGEtPndpbmRvdy0+YmVnaW5QYWludGluZyhy
ZWN0KTsKKyAgICBlbHNlIGlmKHBhcmVudCgpKSB7CisgICAgICAgIHJlY3QubW92ZShkYXRhLT5n
ZW9tZXRyeS54KCksZGF0YS0+Z2VvbWV0cnkueSgpKTsKKyAgICAgICAgY3R4ID0gcGFyZW50KCkt
PmJlZ2luUGFpbnRpbmcocmVjdCk7IAorICAgICAgICBjdHgtPnRyYW5zbGF0ZShkYXRhLT5nZW9t
ZXRyeS54KCksZGF0YS0+Z2VvbWV0cnkueSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGN0eDsKK30K
KworCitHcmFwaGljc0NvbnRleHQqIFdpZGdldDo6bG9ja0RyYXdpbmdGb2N1cygpCit7CisgICAg
SW50UmVjdCByZWN0KDAsMCxkYXRhLT5nZW9tZXRyeS53aWR0aCgpLGRhdGEtPmdlb21ldHJ5Lmhl
aWdodCgpKTsKKyAgICByZXR1cm4gYmVnaW5QYWludGluZyhyZWN0KTsKK30KKwordm9pZCBXaWRn
ZXQ6OnVubG9ja0RyYXdpbmdGb2N1cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
aWYgKGRhdGEtPndpbmRvdykKKyAgICAgICAgcmV0dXJuIGRhdGEtPndpbmRvdy0+ZW5kUGFpbnRp
bmcoY29udGV4dCk7CisgICAgaWYocGFyZW50KCkpCisgICAgICAgIHBhcmVudCgpLT51bmxvY2tE
cmF3aW5nRm9jdXMoY29udGV4dCk7Cit9CisKK1dpbmRvd0dkayogV2lkZ2V0Ojp3aW5kb3coKQor
eworICAgIHJldHVybiBkYXRhLT53aW5kb3c7Cit9CisKK3ZvaWQgV2lkZ2V0OjphdHRhY2hXaW5k
b3coV2luZG93R2RrKiB3aW5kb3cpCit7CisgICAgZGV0YWNoV2luZG93KCk7CisgICAgZGF0YS0+
d2luZG93ID0gd2luZG93OworICAgIGlmICghd2luZG93KQogICAgICAgICByZXR1cm47Ci0gICAg
R2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93
X3Nob3cod2luZG93KTsKKyAgICB3aW5kb3ctPnNldFdpZGdldCh0aGlzKTsKKyAgICBJbnRSZWN0
IHIgPSB3aW5kb3ctPmdlb21ldHJ5KCk7CisgICAgci5zZXRYKDApOworICAgIHIuc2V0WSgwKTsK
KyAgICBzZXRGcmFtZUdlb21ldHJ5KHIpOwogfQogCi12b2lkIFdpZGdldDo6aGlkZSgpCit2b2lk
IFdpZGdldDo6ZGV0YWNoV2luZG93KCkKIHsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBk
YXRhLT5kcmF3YWJsZTsKLSAgICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdh
YmxlKSkKKyAgICBpZiAoIWRhdGEtPndpbmRvdykKICAgICAgICAgcmV0dXJuOwotICAgIEdka1dp
bmRvdyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19oaWRl
KHdpbmRvdyk7CisgICAgZGF0YS0+d2luZG93LT5zZXRXaWRnZXQoMCk7CisgICAgZGF0YS0+d2lu
ZG93ID0gMDsKIH0KIAotdm9pZCBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVj
dCYgcikKK3ZvaWQgV2lkZ2V0Ojpmb2N1c0NoYW5nZUZyb21XaW5kb3coYm9vbCBmb2N1c2VkKQog
ewotICAgIGRhdGEtPmdlb21ldHJ5ID0gcjsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBk
YXRhLT5kcmF3YWJsZTsKLSAgICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdh
YmxlKSkKKyAgICBpZighZGF0YS0+Y2xpZW50KQogICAgICAgICByZXR1cm47Ci0gICAgR2RrV2lu
ZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X21vdmVf
cmVzaXplKHdpbmRvdywgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOworCisg
ICAgaWYoZm9jdXNlZCkKKyAgICAgICAgZGF0YS0+Y2xpZW50LT5mb2N1c0luKHRoaXMpOworICAg
IGVsc2UKKyAgICAgICAgZGF0YS0+Y2xpZW50LT5mb2N1c091dCh0aGlzKTsKIH0KIAordm9pZCBX
aWRnZXQ6OndoZWVsRXZlbnRGcm9tV2luZG93KFBsYXRmb3JtV2hlZWxFdmVudCBldmVudCkKK3sK
KyAgICBkYXRhLT5ldmVudFR5cGUgPSBFdmVudE5hbWVzOjptb3VzZXdoZWVsRXZlbnQ7CisgICAg
ZnJhbWVWaWV3KCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOworCiB9CisKK3ZvaWQgV2lkZ2V0
OjprZXlFdmVudEZyb21XaW5kb3coUGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50LAorICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlKQoreworICAgIC8vaWYgKGZvY3VzRnJhbWUg
IT0gdGhpcykgeworICAgIC8vICAgIGZvY3VzRnJhbWUtPnByb2Nlc3NQbGF0Zm9ybUtleWJvYXJk
RXZlbnQoZXZlbnQsZXZlbnRUeXBlKTsKKyAgICAvLyAgICByZXR1cm47CisgICAgLy99CisKKyAg
ICBkYXRhLT5ldmVudFR5cGUgPSBldmVudFR5cGU7CisKKyAgICBEb2N1bWVudCogZG9jID0gZnJh
bWVWaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJl
dHVybjsKKworICAgIE5vZGUqIG5vZGUgPSBkb2MtPmZvY3VzTm9kZSgpOworICAgIGlmICghbm9k
ZSkgeworICAgICAgICBpZiAoZG9jLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICAgICAgbm9k
ZSA9IGRvYy0+Ym9keSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBub2RlID0gZG9jLT5k
b2N1bWVudEVsZW1lbnQoKTsKKworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFldmVudC5pc0tleVVwKCkpCisgICAgICAgIGZyYW1lVmll
dygpLT5mcmFtZSgpLT5wcmVwYXJlRm9yVXNlckFjdGlvbigpOworCisgICAgYm9vbCBub3RoYW5k
bGVkID0gRXZlbnRUYXJnZXROb2RlQ2FzdChub2RlKS0+ZGlzcGF0Y2hLZXlFdmVudChldmVudCk7
CisKKyAgICBpZiAobm90aGFuZGxlZCkgeworICAgICAgICBmcmFtZVZpZXcoKS0+aGFuZGxlS2V5
Ym9hcmRFdmVudChldmVudCk7CisgICAgfQorfQorCit2b2lkIFdpZGdldDo6bW91c2VFdmVudEZy
b21XaW5kb3coUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50LAorICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcgZXZlbnRUeXBlKQoreworICAgIGRhdGEtPmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsKKwor
ICAgIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6bW91c2Vtb3ZlRXZlbnQpCisgICAgICAg
IGZyYW1lVmlldygpLT5oYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCk7CisgICAgaWYgKGV2ZW50
VHlwZSA9PSBFdmVudE5hbWVzOjptb3VzZWRvd25FdmVudCkgCisgICAgICAgIGZyYW1lVmlldygp
LT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoZXZlbnQpOworICAgIGlmIChldmVudFR5cGUgPT0gRXZl
bnROYW1lczo6bW91c2V1cEV2ZW50KQorICAgICAgICBmcmFtZVZpZXcoKS0+aGFuZGxlTW91c2VS
ZWxlYXNlRXZlbnQoZXZlbnQpOworfQorCit9CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9Qb3B1cE1lbnVHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVu
dGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBvcHVwTWVudS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBub3RJ
bXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDog
JXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQb3B1cE1lbnU6OlBvcHVwTWVudShSZW5kZXJNZW51TGlzdCogbWVudUxpc3Qp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUG9wdXBNZW51Ojp+UG9wdXBNZW51KCkK
K3t9CisKK3ZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBp
bnQgaW5kZXgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQb3B1cE1lbnU6
OmhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51Ojp1
cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQorCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9JY29uR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9JY29uR2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0ljb25HZGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg
Ikljb24uaCIKKyNpbmNsdWRlICJJY29uTG9hZGVyLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNl
LmgiCisKKworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJG
SVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BS
RVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgSWNvbkxvYWRlcjo6bm90aWZ5SWNvbkNoYW5nZWQoY29uc3QgS1VSTCYgaWNvblVSTCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK0ljb246Okljb24oKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK0ljb246On5JY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxJY29uPigwKTsKK30KKwordm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CisKKy8vIHZp
bTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1l
bnVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclBvcHVw
TWVudUdkay5jcHAJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVu
ZGVyUG9wdXBNZW51R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NyArMCwwIEBACi0vKgot
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9y
IDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBv
cHVwTWVudS5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2RlZmluZSBub3RJbXBsZW1lbnRl
ZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWRcbiIs
IF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1Qb3B1cE1lbnU6OlBvcHVwTWVudShSZW5kZXJNZW51TGlzdCogbWVudUxpc3QpCi17Ci19Ci0K
LVBvcHVwTWVudTo6flBvcHVwTWVudSgpCi17Ci19Ci0KLXZvaWQgUG9wdXBNZW51OjpjbGVhcigp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQb3B1cE1lbnU6OnBvcHVsYXRl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBvcHVwTWVudTo6c2hvdyhj
b25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgUG9wdXBNZW51OjpoaWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFBvcHVwTWVudTo6YWRkU2VwYXJhdG9yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFBvcHVwTWVudTo6YWRkR3JvdXBMYWJlbChIVE1MT3B0R3JvdXBFbGVt
ZW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBvcHVwTWVudTo6YWRk
T3B0aW9uKEhUTUxPcHRpb25FbGVtZW50KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci19Ci0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsYmFyR2RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbGJhckdk
ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9s
bGJhckdkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiV2lkZ2V0UHJpdmF0ZUdkay5oIgorI2luY2x1
ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgorLy8jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKy8vI2luY2x1ZGUgIlNWR1NW
R0VsZW1lbnQuaCIKKy8vI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgPGFzc2VydC5o
PgorCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklY
TUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVU
VFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vRklYTUU6IGhhY2sgdGlsbCB3ZSBoYXZlIGEgcmVhbCBw
cml2YXRlIGNvbmZpZyAgcGFnZSBicm93c2VyQ29uZmlnLnhtbAorc3RhdGljIFN0cmluZyBpbXBs
VVJMKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIGlmIChvcmllbnRh
dGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygiL1Njcm9s
bGJhci9TY3JvbGxiYXIuc3ZnP3ZlcnRpY2FsIik7CisKKyAgICByZXR1cm4gU3RyaW5nKCIvU2Ny
b2xsYmFyL1Njcm9sbGJhci5zdmc/aG9yaXpvbnRhbCIpOworfQorCisKK3N0YXRpYyB2b2lkIGRv
U2Nyb2xsKGNvbnN0IFJlbmRlck9iamVjdCogciwgYm9vbCBpc0hvcml6b250YWwsIGludCBtdWx0
aXBsaWVyKQoreworICAgIC8vIEZJWE1FOiBUaGUgc2Nyb2xsaW5nIGRvbmUgaGVyZSBzaG91bGQg
YmUgZG9uZSBpbiB0aGUgZGVmYXVsdCBoYW5kbGVycworICAgIC8vIG9mIHRoZSBlbGVtZW50cyBy
YXRoZXIgdGhhbiBoZXJlIGluIHRoZSBwYXJ0LgorICAgIGlmICghcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy9icm9rZW4gc2luY2UgaXQgY2FsbHMgc2Nyb2xsIG9uIHNjcm9sbGJhcnMKKyAg
ICAvL2FuZCB3ZSBoYXZlIG5vbmUgbm93CisgICAgLy9yLT5zY3JvbGwoZGlyZWN0aW9uLCBTY3Jv
bGxCeVdoZWVsLCBtdWx0aXBsaWVyKTsKKyAgICBpZiAoIXItPmxheWVyKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbnQgeCA9IHItPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKKyAgICBpbnQg
eSA9IHItPmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKTsKKyAgICBpZiAoaXNIb3Jpem9udGFsKQor
ICAgICAgICB4ICs9IG11bHRpcGxpZXI7CisgICAgZWxzZQorICAgICAgICB5ICs9IG11bHRpcGxp
ZXI7CisgICAgci0+bGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQoeCwgeSwgdHJ1ZSwgdHJ1ZSk7Cit9
CisKKworUGxhdGZvcm1TY3JvbGxiYXI6OlBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVu
dCogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLFNjcm9sbGJhckNvbnRyb2xTaXplIGNzaXplKSA6Cisg
ICAgICAgIFNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLGNzaXplKSxXaWRnZXQoKQorewor
ICAgIC8vcHJpdmF0ZURhdGEoKS0+bV9oYXNTY3JvbGxiYXJzID0gZmFsc2U7CisgICAgLy9TdHJp
bmcgdXJsID0gRnJhbWVHZGs6Omluc3RhbGxMb2NhdGlvbigpOworICAgIC8vU3RyaW5nIG5tID0g
aW1wbFVSTChvcmllbnRhdGlvbik7CisgICAgLy91cmwgKz0gbm07CisgICAgLy9wcml2YXRlRGF0
YSgpLT5jcmVhdGVWaWV3KEtVUkwodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSkpOworfQorCitQbGF0
Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKK3t9CisKK0ludFJlY3QgIFBsYXRm
b3JtU2Nyb2xsYmFyOjpmcmFtZUdlb21ldHJ5KCkKK3sKKyAgICBJbnRSZWN0IHIgPSBXaWRnZXQ6
OmZyYW1lR2VvbWV0cnkoKTsKKyAgICBpZiAoci5pc0VtcHR5KCkpCisgICAgICAgIHIgPSBJbnRS
ZWN0KDAsMCxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCksaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCgpKTsKKyAgICByZXR1cm4gcjsKK30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0
aCgpIGNvbnN0Cit7CisgICAgaW50IHdpZHRoID0gV2lkZ2V0Ojp3aWR0aCgpOworICAgIGlmICh3
aWR0aCA9PSAwIHx8IG9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7Ly9GSVhNRTogaGFjayBmb3Igbm93Cisg
ICAgcmV0dXJuIHdpZHRoOworCit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KCkg
Y29uc3QKK3sKKyAgICBpbnQgaGVpZ2h0ID0gV2lkZ2V0OjpoZWlnaHQoKTsKKyAgICBpZiAoaGVp
Z2h0ID09IDAgfHwgb3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAg
ICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOy8vaGFjayBmb3Igbm93CisgICAg
cmV0dXJuIGhlaWdodDsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0RW5hYmxlZChi
b29sIGVuYWJsZWQpCit7CisgICAgV2lkZ2V0OjpzZXRFbmFibGVkKGVuYWJsZWQpOworfQorCit2
b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBXaWRnZXQ6OnBhaW50KGN0eCxkYW1hZ2VSZWN0
KTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGlmIChmcmFtZUdlb21ldHJ5KCkgPT0gcmVjdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBGcmFtZVZpZXcqIHYgPSBmcmFtZVZpZXco
KTsKKyAgICAvKgorICAgIGlmKHYpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHYtPmZyYW1l
KCktPmRvY3VtZW50KCk7CisgICAgICAgIGlmKCFkb2MpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihk
b2MtPmdldEVsZW1lbnRCeUlkKCJtYWluIikpOworICAgICAgICBpZighc3ZnKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBzdmctPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRy
LFN0cmluZzo6bnVtYmVyKHJlY3Qud2lkdGgoKSkpOworICAgICAgICBzdmctPnNldEF0dHJpYnV0
ZShTVkdOYW1lczo6aGVpZ2h0QXR0cixTdHJpbmc6Om51bWJlcihyZWN0LmhlaWdodCgpKSk7Cisg
ICAgICAgIHN2Zy0+d2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWUocmVjdC53aWR0aCgpKTsKKyAg
ICAgICAgc3ZnLT5oZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWUocmVjdC5oZWlnaHQoKSk7Cisg
ICAgfQorICAgICovCisgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOworfQorCit2
b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9uKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBy
b3BvcnRpb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KKwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAkocmV2aXNpb24gMTc2MzApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9GcmFtZUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTIyLDI4ICsyMiwzNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRnJhbWVHZGsuaCIKLQorI2luY2x1ZGUgIldpbmRvd0dkay5oIgorI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkVkaXRvckNsaWVudC5oIgorI2luY2x1ZGUgIldpZGdldFByaXZhdGVHZGsuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyV2lkZ2V0LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRP
TUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgot
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
TWFuYWdlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgpA
QCAtNTIsOSArNjEsMTMgQEAKICNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCiAjaW5jbHVkZSAi
U1NMS2V5R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAiUGF0
aC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0Lmgi
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCisj
ZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklN
UExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZVTkNU
SU9OX18pOyB9IHdoaWxlKDApCiAKIC8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZy
b20gV2ViS2l0CiAvLyBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIGFuZCBJJ20gbm90IHN1cmUg
d2hlcmUKQEAgLTcxLDE1NyArODQsOTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GcmFt
ZUdka0NsaWVudERlZmF1bHQ6OkZyYW1lR2RrQ2xpZW50RGVmYXVsdCgpCi0gICAgOiBSZXNvdXJj
ZUhhbmRsZUNsaWVudCgpCi0gICAgLCBtX2ZyYW1lKDApCi0gICAgLCBtX2JlZ2luQ2FsbGVkKGZh
bHNlKQotewotfQordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotRnJhbWVHZGtDbGllbnRE
ZWZhdWx0Ojp+RnJhbWVHZGtDbGllbnREZWZhdWx0KCkKLXsKLX0KK3N0YXRpYyBjaGFyKiBpbnN0
YWxsUGF0aDsKIAotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OnNldEZyYW1lKGNvbnN0IEZy
YW1lR2RrKiBmcmFtZSkKK0ZyYW1lR2RrOjpGcmFtZUdkayhQYWdlKiBwYWdlLCBFbGVtZW50KiBl
bGVtZW50LCBQYXNzUmVmUHRyPEVkaXRvckNsaWVudD4gY2xpZW50LCBXaW5kb3dHZGsqIHdpbmRv
dykKKyAgICAgICAgOiBGcmFtZShwYWdlLGVsZW1lbnQsY2xpZW50KQogewotICAgIG1fZnJhbWUg
PSBjb25zdF9jYXN0PEZyYW1lR2RrKj4oZnJhbWUpOwotfQotCi12b2lkIEZyYW1lR2RrQ2xpZW50
RGVmYXVsdDo6b3BlblVSTChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgbV9mcmFtZS0+ZGlkT3Bl
blVSTCh1cmwpOwotICAgIG1fYmVnaW5DYWxsZWQgPSBmYWxzZTsKLQotICAgIFJlc291cmNlUmVx
dWVzdCByZXF1ZXN0KHVybCk7Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBsb2FkZXIgPSBS
ZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKHJlcXVlc3QsIHRoaXMsIDApOwotfQotCi12b2lkIEZyYW1l
R2RrQ2xpZW50RGVmYXVsdDo6c3VibWl0Rm9ybShjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBGb3JtRGF0YSogcG9zdERhdGEpCi17Ci0gICAgbV9iZWdpbkNhbGxl
ZCA9IGZhbHNlOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSAgICByZXF1
ZXN0LnNldEhUVFBNZXRob2QobWV0aG9kKTsKLSAgICByZXF1ZXN0LnNldEhUVFBCb2R5KCpwb3N0
RGF0YSk7Ci0KLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGxvYWRlciA9IFJlc291cmNlSGFu
ZGxlOjpjcmVhdGUocmVxdWVzdCwgdGhpcywgMCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGtDbGllbnRE
ZWZhdWx0OjpyZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgUGxhdGZvcm1SZXNwb25z
ZSkKLXsKLSAgICAvLyBuby1vcAotfQotCi12b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6ZGlk
UmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqIGpvYiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKLXsKLSAgICBpZiAoIW1fYmVnaW5DYWxsZWQpIHsKLSAgICAgICAgbV9iZWdpbkNhbGxl
ZCA9IHRydWU7Ci0KLSNpZiAwICAvLyBGSVhNRTogVGhpcyBpcyBmcm9tIFF0IHZlcnNpb24sIG5l
ZWQgdG8gYmUgcmVtb3ZlZCBvciBHZGsgZXF1aXZhbGVudCB3cml0dGVuCi0gICAgICAgIC8vIEFz
c2lnbiBjb3JyZWN0IG1pbWV0eXBlIF9iZWZvcmVfIGNhbGxpbmcgYmVnaW4oKSEKLSAgICAgICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICAgICAg
aWYgKGQpIHsKLSAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fZnJhbWUtPnJl
c291cmNlUmVxdWVzdCgpKTsKLSAgICAgICAgICAgIHJlcXVlc3QubV9yZXNwb25zZU1JTUVUeXBl
ID0gZC0+bV9taW1ldHlwZTsKLSAgICAgICAgICAgIG1fZnJhbWUtPnNldFJlc291cmNlUmVxdWVz
dChyZXF1ZXN0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIG1fZnJhbWUtPmJlZ2luKGpv
Yi0+dXJsKCkpOwotICAgIH0KLQotICAgIG1fZnJhbWUtPndyaXRlKGRhdGEsIGxlbmd0aCk7Ci19
Ci0KLXZvaWQgRnJhbWVHZGtDbGllbnREZWZhdWx0OjpyZWNlaXZlZEFsbERhdGEoUmVzb3VyY2VI
YW5kbGUqIGpvYiwgUGxhdGZvcm1EYXRhIGRhdGEpCi17Ci0gICAgbV9mcmFtZS0+ZW5kKCk7Ci0g
ICAgbV9iZWdpbkNhbGxlZCA9IGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBkb1Njcm9sbChjb25z
dCBSZW5kZXJPYmplY3QqIHIsIGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQotewotICAgIC8v
IEZJWE1FOiBUaGUgc2Nyb2xsaW5nIGRvbmUgaGVyZSBzaG91bGQgYmUgZG9uZSBpbiB0aGUgZGVm
YXVsdCBoYW5kbGVycwotICAgIC8vIG9mIHRoZSBlbGVtZW50cyByYXRoZXIgdGhhbiBoZXJlIGlu
IHRoZSBwYXJ0LgotICAgIGlmICghcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy9icm9rZW4g
c2luY2UgaXQgY2FsbHMgc2Nyb2xsIG9uIHNjcm9sbGJhcnMKLSAgICAvL2FuZCB3ZSBoYXZlIG5v
bmUgbm93Ci0gICAgLy9yLT5zY3JvbGwoZGlyZWN0aW9uLCBTY3JvbGxCeVdoZWVsLCBtdWx0aXBs
aWVyKTsKLSAgICBpZiAoIXItPmxheWVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCB4
ID0gci0+bGF5ZXIoKS0+c2Nyb2xsWE9mZnNldCgpICsgZGVsdGFYOwotICAgIGludCB5ID0gci0+
bGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgpICsgZGVsdGFZOwotICAgIHItPmxheWVyKCktPnNjcm9s
bFRvT2Zmc2V0KHgsIHksIHRydWUsIHRydWUpOwotfQotCi1GcmFtZUdkazo6RnJhbWVHZGsoR2Rr
RHJhd2FibGUqIGdka2RyYXdhYmxlKQotICAgIDogRnJhbWUobmV3IFBhZ2UsIDApLCBtX2RyYXdh
YmxlKGdka2RyYXdhYmxlKQotewogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG5ldyBTZXR0aW5n
czsKICAgICBzZXR0aW5ncy0+c2V0QXV0b0xvYWRJbWFnZXModHJ1ZSk7CiAgICAgc2V0dGluZ3Mt
PnNldE1pbkZvbnRTaXplKDUpOwogICAgIHNldHRpbmdzLT5zZXRNaW5Mb2dpY2FsRm9udFNpemUo
NSk7CiAgICAgc2V0dGluZ3MtPnNldFNob3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7Ci0KICAg
ICBzZXR0aW5ncy0+c2V0TWVkaXVtRml4ZWRGb250U2l6ZSgxNCk7CiAgICAgc2V0dGluZ3MtPnNl
dE1lZGl1bUZvbnRTaXplKDE0KTsKICAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250TmFtZSgiVGlt
ZXMgTmV3IFJvbWFuIik7CiAgICAgc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnROYW1lKCJBcmlh
bCIpOwogICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnROYW1lKCJDb3VyaWVyIik7CiAgICAgc2V0
dGluZ3MtPnNldFN0ZEZvbnROYW1lKCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRJc0phdmFT
Y3JpcHRFbmFibGVkKHRydWUpOworICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3Blbldp
bmRvd3NBdXRvbWF0aWNhbGx5KHRydWUpOworICAgIC8vcGljayB1cCB1c2VyIHN0eWxlIHNoZWV0
CisgICAgU3RyaW5nIGxvY2F0aW9uID0gV2luZG93R2RrOjpyZXNvdXJjZUxvY2F0aW9uKCk7Cisg
ICAgaWYgKCFsb2NhdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RyaW5nIHN0eWxlID0gbG9j
YXRpb24rIi9icm93c2VyLmNzcyI7CisgICAgICAgIEtVUkwgdXNlclN0eWxlU2hlZXQgPSBLVVJM
KHN0eWxlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgIHNldHRpbmdzLT5zZXRVc2VyU3R5
bGVTaGVldExvY2F0aW9uKHVzZXJTdHlsZVNoZWV0KTsKKyAgICB9CiAgICAgc2V0U2V0dGluZ3Mo
c2V0dGluZ3MpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG5ldyBGcmFtZVZpZXcodGhpcyk7Cisg
ICAgdmlldy0+c2V0RnJhbWVWaWV3KHZpZXcpOwogICAgIHNldFZpZXcodmlldyk7Ci0gICAgSW50
UmVjdCBnZW9tID0gZnJhbWVHZW9tZXRyeSgpOwotICAgIHZpZXctPnJlc2l6ZShnZW9tLndpZHRo
KCksIGdlb20uaGVpZ2h0KCkpOwotICAgIHZpZXctPlNjcm9sbFZpZXc6OnNldERyYXdhYmxlKGdk
a2RyYXdhYmxlKTsKLQotICAgIG1fY2xpZW50ID0gbmV3IEZyYW1lR2RrQ2xpZW50RGVmYXVsdCgp
OwotICAgIG1fY2xpZW50LT5zZXRGcmFtZSh0aGlzKTsKKyAgICBpZiAoIWVsZW1lbnQgJiYgIXBh
Z2UtPm1haW5GcmFtZSgpKQorICAgICAgICBwYWdlLT5zZXRNYWluRnJhbWUodGhpcyk7CisgICAg
dmlldy0+YXR0YWNoV2luZG93KHdpbmRvdyk7CiB9CiAKLUZyYW1lR2RrOjpGcmFtZUdkayhQYWdl
KiBwYWdlLCBFbGVtZW50KiBlbGVtZW50KQotICAgIDogRnJhbWUocGFnZSxlbGVtZW50KQorRnJh
bWVHZGs6On5GcmFtZUdkaygpCiB7Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbmV3IFNldHRp
bmdzOwotICAgIHNldHRpbmdzLT5zZXRBdXRvTG9hZEltYWdlcyh0cnVlKTsKLSAgICBzZXRTZXR0
aW5ncyhzZXR0aW5ncyk7Ci0gICAgbV9jbGllbnQgPSBuZXcgRnJhbWVHZGtDbGllbnREZWZhdWx0
KCk7Ci0gICAgbV9jbGllbnQtPnNldEZyYW1lKHRoaXMpOwogfQogCi1GcmFtZUdkazo6fkZyYW1l
R2RrKCkKKworRnJhbWUqIEZyYW1lR2RrOjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSwgRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHJl
ZmVycmVyKQogewotICAgIGNhbmNlbEFuZENsZWFyKCk7CisgICAgUGFnZSogcGFnZTsKKyAgICBS
ZWZQdHI8Q2hyb21lQ2xpZW50PiBjaHJvbWVDbGllbnQ7CisgICAgaWYgKG93bmVyRWxlbWVudCkK
KyAgICAgICAgcGFnZSA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFnZSgp
OworICAgIGVsc2UgCisgICAgICAgIHBhZ2UgPSBuZXcgUGFnZShjaHJvbWVDbGllbnQpOworICAg
IFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3I7CisgICAgRnJhbWVHZGsqIGZjaGlsZCA9
IG5ldyBGcmFtZUdkayhwYWdlLG93bmVyRWxlbWVudCxlZGl0b3IsMCk7CisgICAgZmNoaWxkLT50
cmVlKCktPnNldE5hbWUobmFtZSk7CisgICAgZmNoaWxkLT5jaGFuZ2VMb2NhdGlvbih1cmwudXJs
KCksIiIpOworICAgIHJldHVybiBmY2hpbGQ7CiB9CiAKLXZvaWQgRnJhbWVHZGs6OnN1Ym1pdEZv
cm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgRXZlbnQqKQordm9p
ZCBGcmFtZUdkazo6dXJsU2VsZWN0ZWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgbG9hZFJlcXVl
c3QsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCiB7Ci0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QgPSBmcmFtZUxvYWRSZXF1ZXN0Lm1fcmVxdWVzdDsKKyAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBmb3JtVmFsdWVzOworICAgIGxvYWRlcigpLT5sb2FkKGxvYWRSZXF1ZXN0LHRydWUsdHJp
Z2dlcmluZ0V2ZW50LDAsZm9ybVZhbHVlcyk7Cit9CiAKK3ZvaWQgRnJhbWVHZGs6OnN1Ym1pdEZv
cm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgRXZlbnQqIGV2ZW50
KQoreworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKTsKICAgICAvLyBGSVhNRTogdGhpcyBpcyBhIGhhY2sgaW5oZXJpdGVkIGZy
b20gRnJhbWVNYWMsIGFuZCBzaG91bGQgYmUgcHVzaGVkIGludG8gRnJhbWUKICAgICBpZiAoZC0+
bV9zdWJtaXR0ZWRGb3JtVVJMID09IHJlcXVlc3QudXJsKCkpCiAgICAgICAgIHJldHVybjsKLQog
ICAgIGQtPm1fc3VibWl0dGVkRm9ybVVSTCA9IHJlcXVlc3QudXJsKCk7Ci0KLSAgICBpZiAobV9j
bGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5zdWJtaXRGb3JtKHJlcXVlc3QuZG9Qb3N0KCkgPyAi
UE9TVCIgOiAiR0VUIiwgcmVxdWVzdC51cmwoKSwgJnJlcXVlc3QucG9zdERhdGEpOworICAgIGRp
ZE9wZW5VUkwocmVxdWVzdC51cmwoKSk7CisgICAgbG9hZGVyKCktPmxvYWQocmVxdWVzdCx0cnVl
LGV2ZW50LGQtPm1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZC5nZXQoKSwgZC0+bV9mb3JtVmFsdWVz
QWJvdXRUb0JlU3VibWl0dGVkKTsKICAgICBjbGVhclJlY29yZGVkRm9ybVZhbHVlcygpOwogfQog
Ci12b2lkIEZyYW1lR2RrOjp1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFt
ZUxvYWRSZXF1ZXN0LCBFdmVudCopCitLVVJMIEZyYW1lR2RrOjpvcmlnaW5hbFJlcXVlc3RVUkwo
KSBjb25zdAogewotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gZnJhbWVMb2FkUmVxdWVz
dC5tX3JlcXVlc3Q7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gS1VSTCgpOwor
fQogCi0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQt
Pm9wZW5VUkwocmVxdWVzdC51cmwoKSk7Citib29sIEZyYW1lR2RrOjppc0xvYWRUeXBlUmVsb2Fk
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAorCisK
IFN0cmluZyBGcmFtZUdkazo6dXNlckFnZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gIk1vemls
bGEvNS4wIChQQzsgVTsgSW50ZWw7IExpbnV4OyBlbikgQXBwbGVXZWJLaXQvNDIwKyAoS0hUTUws
IGxpa2UgR2Vja28pIjsKQEAgLTIyOSw2ICsxNzksNyBAQAogCiB2b2lkIEZyYW1lR2RrOjpydW5K
YXZhU2NyaXB0QWxlcnQoU3RyaW5nIGNvbnN0JiBtZXNzYWdlKQogeworICAgIHByaW50ZigiSmF2
YVNjcmlwdEFsZXJ0OiVzXG46IixtZXNzYWdlLmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgpKTsK
IH0KIAogYm9vbCBGcmFtZUdkazo6cnVuSmF2YVNjcmlwdENvbmZpcm0oU3RyaW5nIGNvbnN0JiBt
ZXNzYWdlKQpAQCAtMjM4LDE4MCArMTg5LDE4IEBACiAKIHZvaWQgRnJhbWVHZGs6OnNldFRpdGxl
KGNvbnN0IFN0cmluZyAmdGl0bGUpCiB7CisgICAgV2luZG93R2RrKiB3aW4gPSB2aWV3KCktPndp
bmRvdygpOworICAgIGlmICh3aW4pCisgICAgICAgIHdpbi0+c2V0VGl0bGUodGl0bGUpOwogfQog
Ci12b2lkIEZyYW1lR2RrOjpoYW5kbGVHZGtFdmVudChHZGtFdmVudCogZXZlbnQpCi17Ci0gICAg
c3dpdGNoIChldmVudC0+dHlwZSkgewotICAgICAgICBjYXNlIEdES19FWFBPU0U6IHsKLSAgICAg
ICAgICAgIEdka1JlY3RhbmdsZSBjbGlwOwotICAgICAgICAgICAgZ2RrX3JlZ2lvbl9nZXRfY2xp
cGJveChldmVudC0+ZXhwb3NlLnJlZ2lvbiwgJmNsaXApOwotICAgICAgICAgICAgZ2RrX3dpbmRv
d19iZWdpbl9wYWludF9yZWdpb24gKGV2ZW50LT5hbnkud2luZG93LCBldmVudC0+ZXhwb3NlLnJl
Z2lvbik7Ci0gICAgICAgICAgICBjYWlyb190KiBjciA9IGdka19jYWlyb19jcmVhdGUgKGV2ZW50
LT5hbnkud2luZG93KTsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY3R4ID0gbmV3IEdy
YXBoaWNzQ29udGV4dChjcik7Ci0gICAgICAgICAgICBwYWludChjdHgsIEludFJlY3QoY2xpcC54
LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KSk7Ci0gICAgICAgICAgICBkZWxldGUg
Y3R4OwotICAgICAgICAgICAgY2Fpcm9fZGVzdHJveShjcik7Ci0gICAgICAgICAgICBnZGtfd2lu
ZG93X2VuZF9wYWludCAoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfU0NST0xMOiB7Ci0gICAgICAgICAgICBQbGF0Zm9y
bVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCk7Ci0gICAgICAgICAgICB2aWV3KCktPmhhbmRs
ZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0gICAgICAgICAgICBpZiAod2hlZWxFdmVudC5pc0Fj
Y2VwdGVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvIG5vZGVJbmZvKHRydWUsIHRydWUpOwotICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdChub2RlSW5mbywgd2hlZWxFdmVu
dC5wb3MoKSk7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbm9kZUluZm8uaW5uZXJOb2RlKCk7
Ci0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgLy9EZWZhdWx0IHRvIHNjcm9sbGluZyB0aGUgcGFnZQotICAgICAgICAgICAgLy9ub3Qg
c3VyZSB3aHkgaXRzIG51bGwKLSAgICAgICAgICAgIC8vYnJva2UgYW55d2F5IHdoZW4gaXRzIG5v
dCBudWxsCi0gICAgICAgICAgICBkb1Njcm9sbChyZW5kZXJlcigpLCB3aGVlbEV2ZW50LmRlbHRh
WCgpLCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgR0RLX0RSQUdfRU5URVI6Ci0gICAgICAgIGNhc2UgR0RLX0RSQUdfTEVB
VkU6Ci0gICAgICAgIGNhc2UgR0RLX0RSQUdfTU9USU9OOgotICAgICAgICBjYXNlIEdES19EUkFH
X1NUQVRVUzoKLSAgICAgICAgY2FzZSBHREtfRFJPUF9TVEFSVDoKLSAgICAgICAgY2FzZSBHREtf
RFJPUF9GSU5JU0hFRDogewotICAgICAgICAgICAgLy9ib29sIHVwZGF0ZURyYWdBbmREcm9wKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgICAgICAgICAgLy92b2lk
IGNhbmNlbERyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCop
OwotICAgICAgICAgICAgLy9ib29sIHBlcmZvcm1EcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6Ci0gICAgICAgICAgICB2aWV3KCktPmhhbmRs
ZU1vdXNlTW92ZUV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdES19CVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6Ci0gICAg
ICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgICAgICAgICB2aWV3KCktPmhhbmRsZU1v
dXNlUHJlc3NFdmVudChldmVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
REtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICB2aWV3KCktPmhhbmRsZU1vdXNlUmVsZWFz
ZUV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19LRVlf
UFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLX0tFWV9SRUxFQVNFOiB7Ci0gICAgICAgICAgICBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQga2V2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIGJvb2wgaGFuZGxl
ZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCFrZXZlbnQuaXNLZXlVcCgpKSB7Ci0gICAgICAg
ICAgICAgICAgTm9kZSogc3RhcnQgPSBzZWxlY3Rpb25Db250cm9sbGVyKCktPnN0YXJ0KCkubm9k
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdGFydCAmJiBzdGFydC0+aXNDb250ZW50RWRpdGFi
bGUoKSkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goa2V2ZW50LldpbmRvd3NLZXlDb2Rl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfQkFDSzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKGRvY3VtZW50
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBWS19ERUxFVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoZG9jdW1lbnQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFZLX0xFRlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxl
cigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxl
cjo6TEVGVCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19SSUdIVDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxl
Y3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVCwgQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19VUDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxlY3Rpb25Db250cm9sbGVyKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpN
T1ZFLCBTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwgUGFyYWdyYXBoR3JhbnVsYXJpdHkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBWS19ET1dOOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlv
bkNvbnRyb2xsZXIoKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkZPUldBUkQsIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChk
b2N1bWVudCgpLCBrZXZlbnQudGV4dCgpLCBmYWxzZSk7CiAKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoa2V2ZW50LldpbmRvd3NLZXlDb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgVktfTEVGVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Njcm9sbChyZW5k
ZXJlcigpLCB0cnVlLCAtMTIwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktfUklHSFQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgdHJ1ZSwgMTIwKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVktf
VVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgZmFs
c2UsIC0xMjApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBWS19QUklPUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvL3JldHVybiBTQl9QQUdFVVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX05FWFQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy9yZXR1cm4gU0JfUEFHRURPV047Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZLX0RPV046Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgZmFsc2UsIDEyMCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIFZLX0hPTUU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIo
KS0+bGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQoMCwgMCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG9TY3JvbGwocmVuZGVyZXIoKSwgZmFsc2UsIDEyMCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFZLX0VORDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5sYXll
cigpLT5zY3JvbGxUb09mZnNldCgwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPmhlaWdodCgpLCB0cnVl
LCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVktfU1BBQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGtldmVudC5zaGlmdEtleSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b1Njcm9sbChyZW5kZXJlcigpLCBmYWxzZSwgLTEyMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Njcm9sbChyZW5k
ZXJlcigpLCBmYWxzZSwgMTIwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCAmcikK
K1N0cmluZyBGcmFtZUdkazo6bWltZVR5cGVGb3JGaWxlTmFtZShTdHJpbmcgY29uc3QmIHBhdGgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKG1fZHJhd2Fi
bGUpKQotICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9X
KG1fZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfbW92ZV9yZXNpemUod2luZG93LCByLngoKSwg
ci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgU3RyaW5nIG5wYXRoID0gIFN0cmlu
ZyhwYXRoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpnZXRNaW1lVHlwZShu
cGF0aCk7CiB9CiAKLUludFJlY3QgRnJhbWVHZGs6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAotewot
ICAgIGdpbnQgeCwgeSwgd2lkdGgsIGhlaWdodCwgZGVwdGg7Ci0gICAgaWYgKCFtX2RyYXdhYmxl
KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgaWYgKCFHREtfSVNfV0lORE9XKG1f
ZHJhd2FibGUpKSB7Ci0gICAgICAgIGdka19kcmF3YWJsZV9nZXRfc2l6ZShtX2RyYXdhYmxlLCAm
d2lkdGgsICZoZWlnaHQpOwotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICB9Ci0KLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1cobV9kcmF3
YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkod2luZG93LCAmeCwgJnksICZ3aWR0
aCwgJmhlaWdodCwgJmRlcHRoKTsKLSAgICByZXR1cm4gSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKIH0KLQotYm9vbCBGcmFtZUdkazo6cGFzc1doZWVsRXZlbnRUb0NoaWxkV2lkZ2V0KE5v
ZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5k
ZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBXaWRnZXQqIHdpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHJlbmRlcmVyKS0+
d2lkZ2V0KCk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmFtZUdkazo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZy
YW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqKQotewotICAgIGlm
IChtZXYudGFyZ2V0Tm9kZSgpID09IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfQorLy8gdmltOnRzPTQ6ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0tleWJvYXJkQ29kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9L
ZXlib2FyZENvZGVzLmgJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
S2V5Ym9hcmRDb2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMSw3ICsyMSw3IEBA
CiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgS2V5Ym9hcmRDb2Rlc19ICkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCShyZXZpc2lvbiAxNzYzMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtOCwxMyArOCwxMyBAQAogICogYXJlIG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAg
KgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTQxLDkgKzQxLDEx
IEBACiAjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklY
TUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVU
VFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jZGVm
aW5lIFVTRV9PTERfQ0FJUk8gMQorI2RlZmluZSBVU0VfT0xEX0NBSVJPIDAKIAogdm9pZCBGb250
RGF0YTo6cGxhdGZvcm1Jbml0KCkKIHsKQEAgLTY4LDcgKzcwLDggQEAKIAogdm9pZCBGb250RGF0
YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsK
KyAgICBpZiAobV9zbWFsbENhcHNGb250RGF0YSkKKyAgICAgICAgZGVsZXRlIG1fc21hbGxDYXBz
Rm9udERhdGE7CiB9CiAKIEZvbnREYXRhKiBGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9GaWxlQ2hvb3Nlckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvRmlsZUNob29zZXJHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvRmlsZUNob29zZXJHZGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZUNob29zZXIu
aCIKKworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhN
RTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxfX1BSRVRU
WV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NS
ZWZQdHI8RmlsZUNob29zZXI+IEZpbGVDaG9vc2VyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCogdXBsb2FkQ29udHJvbCkKK3sKKyAgICBQYXNzUmVm
UHRyPEZpbGVDaG9vc2VyPiBmaWxlQ2hvb3NlcihuZXcgRmlsZUNob29zZXIoZG9jdW1lbnQsIHVw
bG9hZENvbnRyb2wpKTsKKyAgICByZXR1cm4gZmlsZUNob29zZXI7Cit9CisKK0ZpbGVDaG9vc2Vy
OjpGaWxlQ2hvb3NlcihEb2N1bWVudCosIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNo
b29zZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBGaWxlQ2hvb3Nl
cjo6YmFzZW5hbWVGb3JXaWR0aChpbnQgd2lkdGgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRmlsZUNob29zZXI6OmRpc2Nv
bm5lY3RVcGxvYWRDb250cm9sKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAkocmV2aXNpb24gMTc2MzApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2pl
Y3QuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDcgKzI0LDYgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lR2RrLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyUG9wdXBNZW51R2RrLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKIAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtNTgsOCArNTcsNyBAQAogfQogCiB2b2lkIFJlbmRl
clRoZW1lR2RrOjpjbG9zZSgpCi17Ci19Cit7fQogCiB2b2lkIFJlbmRlclRoZW1lR2RrOjphZGRJ
bnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKQEAgLTg5LDEyICs4
NywxMiBAQAogYm9vbCBSZW5kZXJUaGVtZUdkazo6c3VwcG9ydHNGb2N1cyhFQXBwZWFyYW5jZSBh
cHBlYXJhbmNlKQogewogICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgICAgICBjYXNlIFB1
c2hCdXR0b25BcHBlYXJhbmNlOgotICAgICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAg
ICAgIGNhc2UgVGV4dEZpZWxkQXBwZWFyYW5jZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgUHVz
aEJ1dHRvbkFwcGVhcmFuY2U6CisgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgorICAgIGNhc2Ug
VGV4dEZpZWxkQXBwZWFyYW5jZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEy
MiwyMyArMTIwLDIzIEBACiB7CiAgICAgVGhlbWVEYXRhIHJlc3VsdDsKICAgICBzd2l0Y2ggKG8t
PnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgewotICAgICAgICBjYXNlIFB1c2hCdXR0b25BcHBlYXJh
bmNlOgotICAgICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXN1bHQu
bV9wYXJ0ID0gQlBfQlVUVE9OOwotICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1p
bmVTdGF0ZShvKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENoZWNrYm94QXBw
ZWFyYW5jZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9DSEVDS0JPWDsKLSAgICAg
ICAgICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBSYWRpb0FwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXN1bHQu
bV9wYXJ0ID0gQlBfUkFESU87Ci0gICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWlu
ZVN0YXRlKG8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGV4dEZpZWxkQXBw
ZWFyYW5jZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBURlBfVEVYVEZJRUxEOwotICAg
ICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUHVzaEJ1dHRvbkFwcGVhcmFuY2U6CisgICAgY2FzZSBCdXR0b25B
cHBlYXJhbmNlOgorICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfQlVUVE9OOworICAgICAgICBy
ZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENoZWNrYm94QXBwZWFyYW5jZToKKyAgICAgICAgcmVzdWx0Lm1fcGFydCA9IEJQX0NIRUNL
Qk9YOworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFJhZGlvQXBwZWFyYW5jZToKKyAgICAgICAgcmVzdWx0Lm1fcGFy
dCA9IEJQX1JBRElPOworICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6CisgICAgICAg
IHJlc3VsdC5tX3BhcnQgPSBURlBfVEVYVEZJRUxEOworICAgICAgICByZXN1bHQubV9zdGF0ZSA9
IGRldGVybWluZVN0YXRlKG8pOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtMTUwLDggKzE0OCwyMSBAQAogfQogCiB2b2lkIFJlbmRlclRoZW1lR2RrOjpz
eXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0CisgICAge30KKwor
dm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3QK
KyAgICB7IH0KK2Jvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCiB7Ci0KKyAg
ICByZXR1cm4gZmFsc2U7CiB9Cit2b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRSYWRpb1NpemUoUmVu
ZGVyU3R5bGUqKSBjb25zdAorICAgIHsgfQordm9pZCBSZW5kZXJUaGVtZUdkazo6YWRqdXN0VGV4
dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCogZSkg
Y29uc3QKKyAgICB7fQorYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCShyZXZpc2lvbiAxNzYzMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
LDcgKzMsNyBAQAogICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KICAq
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzQsMTAgKzM0LDEyIEBACiAjaW5jbHVk
ZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKKyNkZWZp
bmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVN
RU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05f
Xyk7IH0gd2hpbGUoMCkKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCi0gICAgOiBtX2ZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pCisgICAgICAgIDogbV9mb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKSxtX3BhdHRlcm4oMCkKIHsKICAgICBpbml0KCk7CiAKQEAgLTUyLDE2ICs1NCwxNiBA
QAogCiAgICAgaW50IHR5cGUgPSBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOwogICAg
IHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1p
bHk6Ci0gICAgICAgICAgICBmYW1pbHkgPSAoRmNDaGFyOCopInNhbnMtc2VyaWYiOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1p
bHk6Ci0gICAgICAgICAgICBmYW1pbHkgPSAoRmNDaGFyOCopInNhbnMtc2VyaWYiOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToKLSAg
ICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5OgotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgZmFtaWx5ID0gKEZjQ2hhcjgqKSJzYW5zLXNlcmlmIjsKKyAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlseSA9IChGY0No
YXI4Kikic2Fucy1zZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlseSA9IChGY0NoYXI4Kikic2Fucy1z
ZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWls
eToKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6CisgICAgZGVmYXVs
dDoKKyAgICAgICAgZmFtaWx5ID0gKEZjQ2hhcjgqKSJzYW5zLXNlcmlmIjsKICAgICB9CiAgICAg
RmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7CiAgICAgYXNzZXJ0KHBhdHRl
cm4gIT0gMCk7CkBAIC0xNTAsNyArMTUyLDYgQEAKICAgICBjYWlyb19mb250X2ZhY2VfdCoqIHJl
c3VsdCA9IChjYWlyb19mb250X2ZhY2VfdCoqKW1hbGxvYygoZnMtPm5mb250ICsgMSkgKiBzaXpl
b2YoY2Fpcm9fZm9udF9mYWNlX3QqKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcy0+bmZv
bnQ7IGkrKykgewogICAgICAgICBGY0NoYXI4KiBmb250ID0gRmNOYW1lVW5wYXJzZShmcy0+Zm9u
dHNbaV0pOwotICAgICAgICBwcmludGYoIiVzXG4iLCBmb250KTsKICAgICAgICAgcmVzdWx0W2ld
ID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmcy0+Zm9udHNbaV0pOwog
ICAgIH0KICAgICByZXN1bHRbZnMtPm5mb250XSA9IE5VTEw7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dkay9Gb250R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9G
b250R2RrLmNwcAkocmV2aXNpb24gMTc2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250
R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIsNDIgKzIyLDUx
IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKICNpbmNsdWRlICJGb250
RGF0YS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPGNhaXJvLmg+
CiAKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6
IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlf
RlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZv
bnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KSBjb25zdAogewotICAgIGNhaXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwotCisgICAgY2Fpcm9fdCogY3IgPSBncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwogICAgIC8vIFNldCB0aGUgdGV4dCBjb2xvciB0byB1c2UgZm9yIGRy
YXdpbmcuCisgICAgZG91YmxlIHgseTsKICAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBo
YTsKICAgICBDb2xvciBwZW5Db2xvciA9IGdyYXBoaWNzQ29udGV4dC0+cGVuKCkuY29sb3IoKTsK
ICAgICBwZW5Db2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBjYWly
b19zZXRfc291cmNlX3JnYmEoY29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogCi0g
ICAgLy8gU2VsZWN0IHRoZSBzY2FsZWQgZm9udC4KLSAgICBmb250LT5zZXRGb250KGNvbnRleHQp
OworICAgIGNhaXJvX3NhdmUoY3IpOwogCi0gICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0g
KEdseXBoQnVmZmVyR2x5cGgqKSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSk7CisgICAgY2Fpcm9f
bWF0cml4X3QgbWF0cml4OworICAgIGNhaXJvX2dldF9tYXRyaXgoY3IsJm1hdHJpeCk7CisgICAg
Zm9udC0+c2V0Rm9udChjcik7CisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwmbWF0cml4KTsKKyAg
ICBjYWlyb19uZXdfcGF0aChjcik7CisgICAgY2Fpcm9fbW92ZV90byhjcixwb2ludC54KCkscG9p
bnQueSgpKTsKKyAgICBjYWlyb19nZXRfY3VycmVudF9wb2ludChjciwmeCwmeSk7CisgICAgZmxv
YXQgb2Zmc2V0ID0geDsKIAotICAgIGZsb2F0IG9mZnNldCA9IHBvaW50LngoKTsKIAorICAgIEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGNvbnN0X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGds
eXBoQnVmZmVyLmdseXBocyhmcm9tKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtR2x5cGhzOyBpKyspIHsKICAgICAgICAgZ2x5cGhzW2ldLnggPSBvZmZzZXQ7Ci0gICAgICAg
IGdseXBoc1tpXS55ID0gcG9pbnQueSgpOworICAgICAgICBnbHlwaHNbaV0ueSA9IHk7CiAgICAg
ICAgIG9mZnNldCArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGkpOwogICAgIH0KLSAg
ICBjYWlyb19zaG93X2dseXBocyhjb250ZXh0LCBnbHlwaHMsIG51bUdseXBocyk7CisgICAgY2Fp
cm9fc2hvd19nbHlwaHMoY3IsIGdseXBocywgbnVtR2x5cGhzKTsKKyAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxC
YXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJh
ci5oCShyZXZpc2lvbiAxNzYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Ny
b2xsQmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
ICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBQbGF0Zm9ybVNjcm9sbEJhcl9oCkBAIC0zMSwyMiArMzEsMzMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQbGF0Zm9ybVNjcm9sbGJhciA6IHB1Ymxp
YyBXaWRnZXQsIHB1YmxpYyBTY3JvbGxiYXIgeworY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBw
dWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYmFyCit7CiBwdWJsaWM6CiAgICAgUGxhdGZvcm1T
Y3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplKTsKICAgICB2aXJ0dWFsIH5QbGF0Zm9ybVNjcm9sbGJhcigpOwogCi0gICAg
dmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1dpZGdldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CiAKICAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGhl
aWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdmly
dHVhbCBJbnRSZWN0IGZyYW1lR2VvbWV0cnkoKTsKIAogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
Ci0gICAgc3RhdGljIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgeyByZXR1cm4gMTU7
IH0KLSAgICBzdGF0aWMgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSB7IHJldHVybiAxNTsg
fQorICAgIHN0YXRpYyBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpCisgICAgeworICAg
ICAgICByZXR1cm4gMTc7CisgICAgfQorICAgIHN0YXRpYyBpbnQgdmVydGljYWxTY3JvbGxiYXJX
aWR0aCgpCisgICAgeworICAgICAgICByZXR1cm4gMTc7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKQEAgLTU1LDQgKzY2LDQgQEAK
IAogfQogCi0jZW5kaWYgLy8gUGxhdGZvcm1TY3JvbGxCYXJfaAorI2VuZGlmIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvV2luZG93R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9XaW5kb3dHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvV2luZG93R2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVk
ZSAiU2hhcmVkVGltZXIuaCIKKyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNl
RXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2RrL2dk
a2tleXN5bXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitzdGF0aWMgSGFzaE1hcDxHZGtEcmF3YWJsZSos
V2luZG93R2RrKj4gd2luZG93czsKK3N0YXRpYyBXaW5kb3dHZGsqIGN1cnJlbnRBY3RpdmVXaW5k
b3c7CisKK3N0YXRpYyBndWludCBzaGFyZWRUaW1lcjsKK3N0YXRpYyB2b2lkICgqc2hhcmVkVGlt
ZXJGaXJlZEZ1bmN0aW9uKSgpOworCitzdGF0aWMgY2hhciogcmVzb3VyY2VQYXRoOworCisKKwor
V2luZG93R2RrOjpXaW5kb3dHZGsoR2RrV2luZG93KiB3aW5kb3cpCisgICAgICAgIDogbV9jcmVh
dGVkRHJhd2FibGUoZmFsc2UpIAorICAgICAgICAsIG1fd2luZG93KHdpbmRvdykKKyAgICAgICAg
LCBtX3dpbmRvd0ZlYXR1cmVzKCkKKyAgICAgICAgLCBtX3dpZGdldCgwKQoreworICAgIEludFJl
Y3QgciA9IGdlb21ldHJ5KCk7CisgICAgd2luZG93cy5hZGQobV93aW5kb3csdGhpcyk7CisgICAg
c2V0R2VvbWV0cnkocik7Cit9CisKK1dpbmRvd0dkazo6V2luZG93R2RrKGNvbnN0IFdpbmRvd0Zl
YXR1cmVzJiBhcmdzKQorICAgICAgICA6IG1fd2luZG93RmVhdHVyZXMoYXJncykKK3sKKyAgICBH
ZGtXaW5kb3dBdHRyIGF0dHI7CisgICAgaW50IGV4dHJhQXR0cnM7CisKKyAgICBpZiAoYXJncy54
U2V0KSB7CisgICAgICAgIGF0dHIueCA9IChpbnQpYXJncy54OworICAgICAgICBleHRyYUF0dHJz
IHw9R0RLX1dBX1g7CisgICAgfQorICAgIGlmIChhcmdzLnlTZXQpIHsKKyAgICAgICAgYXR0ci55
ID0gKGludClhcmdzLng7CisgICAgICAgIGV4dHJhQXR0cnMgfD1HREtfV0FfWTsKKyAgICB9Cisg
ICAgLy9GSVhNRTogcGF0Y2ggYXJncyBsYXRlcgorICAgIC8vbmVlZGVkIGZvciBwb3B1cCBtZW51
cworICAgIC8vaWYgKGFyZ3MuaGlkZUZyYW1lRGVjb3JhdGlvbnMpIHsKKyAgICAvLyAgICBhdHRy
Lm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAvLyAgICBleHRyYUF0dHJzIHw9R0RLX1dB
X05PUkVESVI7CisgICAgLy99CisgICAgYXR0ci53aWR0aCA9IGFyZ3Mud2lkdGhTZXQgPyBzdGF0
aWNfY2FzdDxnaW50PihhcmdzLndpZHRoKTozMDA7CisgICAgYXR0ci5oZWlnaHQgPSBhcmdzLmhl
aWdodFNldCA/IHN0YXRpY19jYXN0PGdpbnQ+KGFyZ3MuaGVpZ2h0KToxNTA7CisgICAgYXR0ci53
aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfVE9QTEVWRUw7CisgICAgYXR0ci53Y2xhc3MgPSBHREtf
SU5QVVRfT1VUUFVUOworICAgIGF0dHIuZXZlbnRfbWFzayA9ICgoR0RLX0FMTF9FVkVOVFNfTUFT
S15HREtfUE9JTlRFUl9NT1RJT05fSElOVF9NQVNLKSk7CisKKyAgICBtX3dpbmRvdyA9IGdka193
aW5kb3dfbmV3KG1fd2luZG93LCZhdHRyLGV4dHJhQXR0cnMpOworICAgIGdka193aW5kb3dfc2V0
X2FjY2VwdF9mb2N1cyhtX3dpbmRvdyxUUlVFKTsKKyAgICBpZiAoYXJncy5mdWxsc2NyZWVuKSB7
CisgICAgICAgIHNldEZ1bGxTY3JlZW4odHJ1ZSk7CisgICAgfQorfQorCitXaW5kb3dHZGs6On5X
aW5kb3dHZGsoKQoreworICAgIHdpbmRvd3MucmVtb3ZlKG1fd2luZG93KTsKKyAgICBnZGtfd2lu
ZG93X2Rlc3Ryb3kobV93aW5kb3cpOworICAgIG1fd2luZG93ID0gMDsKK30KKworV2luZG93R2Rr
KiBXaW5kb3dHZGs6OmZpbmRXaW5kb3coR2RrV2luZG93KiB3aW5kb3cpCit7CisgICAgcmV0dXJu
IHdpbmRvd3MuZ2V0KHdpbmRvdyk7Cit9CisKK3ZvaWQgV2luZG93R2RrOjpzZXRSZXNvdXJjZUxv
Y2F0aW9uKGNvbnN0IGNoYXIgKmxvY2F0aW9uKQoreworICAgICAgICByZXNvdXJjZVBhdGggPSBz
dHJkdXAobG9jYXRpb24pOworfQorCitTdHJpbmcgV2luZG93R2RrOjpyZXNvdXJjZUxvY2F0aW9u
KCkKK3sKKyAgICAgICAgcmV0dXJuIFN0cmluZyhyZXNvdXJjZVBhdGgpOworfQorCisKK3ZvaWQg
V2luZG93R2RrOjpzZXRGdWxsU2NyZWVuKGJvb2wgZnVsbCkKK3sKKyAgICBpZiAoZnVsbCkKKyAg
ICAgICAgZ2RrX3dpbmRvd19mdWxsc2NyZWVuKG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAg
IGdka193aW5kb3dfdW5mdWxsc2NyZWVuKG1fd2luZG93KTsKK30KKwordm9pZCBXaW5kb3dHZGs6
OnNldE1heGltaXplZChib29sIG1heGltaXplZCkKK3sKKyAgICBpZiAobWF4aW1pemVkKQorICAg
ICAgICBnZGtfd2luZG93X21heGltaXplKG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAgIGdk
a193aW5kb3dfdW5tYXhpbWl6ZShtX3dpbmRvdyk7Cit9CisKK1dpbmRvd0dkayogV2luZG93R2Rr
OjpnZXRQb2ludGVySW5mbyhJbnRQb2ludCYgcG9zaXRpb24sIC8qcG9zaXRpb24gcmVsYXRpdmUg
dG8gdGhpcyB3aW5kb3cqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wmIHNoaWZ0S2V5LGJvb2wmIGN0cmxLZXksIGJvb2wmIGFsdEtleSwgYm9vbCYgbWV0YUtleSkK
K3sKKyAgICBHZGtNb2RpZmllclR5cGUgbWFzazsKKyAgICBpbnQgeCx5OworICAgIEdka1dpbmRv
dyogd2luID0gZ2RrX3dpbmRvd19nZXRfcG9pbnRlcihtX3dpbmRvdywmeCwmeSwmbWFzayk7Cisg
ICAgcG9zaXRpb24uc2V0WCh4KTsKKyAgICBwb3NpdGlvbi5zZXRZKHkpOworICAgIGlmIChtYXNr
ICYgR0RLX1NISUZUX01BU0spCisgICAgICAgIHNoaWZ0S2V5PXRydWU7CisgICAgaWYgKG1hc2sg
JiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICBjdHJsS2V5PXRydWU7CisgICAgaWYgKG1hc2sg
JiBHREtfTU9EMV9NQVNLKQorICAgICAgICBhbHRLZXkgPSB0cnVlOworICAgIGlmIChtYXNrICYg
R0RLX01PRDJfTUFTSykKKyAgICAgICAgbWV0YUtleSA9IHRydWU7CisgICAgcmV0dXJuIGZpbmRX
aW5kb3cod2luKTsKK30KKwordm9pZCBXaW5kb3dHZGs6OnNldFRpdGxlKGNvbnN0IFN0cmluZyAm
dGl0bGUpCit7CisgICAgZ2RrX3dpbmRvd19zZXRfdGl0bGUobV93aW5kb3csdGl0bGUuZGVwcmVj
YXRlZFN0cmluZygpLmFzY2lpKCkpOworfQorCit2b2lkIFdpbmRvd0dkazo6c2V0SXNBY3RpdmUo
Ym9vbCBmbGFnKQoreworICAgIGlmIChmbGFnKSB7CisgICAgICAgIGdka193aW5kb3dfc2hvdyht
X3dpbmRvdyk7CisgICAgICAgIGdka193aW5kb3dfZm9jdXMobV93aW5kb3csR0RLX0NVUlJFTlRf
VElNRSk7CisgICAgfQorfQorCisvKgorICogUG9zaXRpb24gaW4gdGhlIHRvcCBsZXZlbCBvciBw
YWludGluZyBQYXJlbnQKKyAqIHplcm8gZm9yIHRvcCBsZXZlbCBmcmFtZXMKKyAqLworSW50UG9p
bnQgV2luZG93R2RrOjpnZXRBYnNvbHV0ZVBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SW50UG9pbnQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0KiBXaW5kb3dHZGs6OmNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpCit7CisgICAgY2Fpcm9fdCogY3IgPSBnZGtfY2Fpcm9fY3JlYXRlIChtX3dp
bmRvdyk7CisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQoY3IpOworfQorCitHcmFwaGlj
c0NvbnRleHQqIFdpbmRvd0dkazo6YmVnaW5QYWludGluZyhjb25zdCBJbnRSZWN0JiBwYWludFJl
Y3QpCit7CisgICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHBhaW50UmVjdC54KCksIHBhaW50UmVj
dC55KCksIHBhaW50UmVjdC53aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCkgfTsKKyAgICBnZGtf
d2luZG93X2JlZ2luX3BhaW50X3JlY3QgKG1fd2luZG93LCAmcmVjdCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIFdpbmRvd0dkazo6ZW5kUGFpbnRpbmco
R3JhcGhpY3NDb250ZXh0KiBjdHgpCit7CisgICAgaWYgKGN0eCkKKyAgICAgICAgZGVsZXRlIGN0
eDsKKyAgICBnZGtfd2luZG93X2VuZF9wYWludCAobV93aW5kb3cpOworICAgIGdka19mbHVzaCgp
OworfQorCisKK3ZvaWQgV2luZG93R2RrOjpoYW5kbGVHZGtFdmVudChHZGtFdmVudCogZXZlbnQp
Cit7CisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2UgR0RLX0RFTEVURToKKyAg
ICAgICAgLy9GSVhNRTogc2F2ZSBjYWxsYmFjayBoZXJlCisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR0RLX0VYUE9TRTogeworICAgICAgICBHZGtSZWN0YW5nbGUgY2xpcDsKKyAgICAgICAgZ2Rr
X3JlZ2lvbl9nZXRfY2xpcGJveChldmVudC0+ZXhwb3NlLnJlZ2lvbiwgJmNsaXApOworICAgICAg
ICBJbnRSZWN0IGRpcnR5ID0gSW50UmVjdChjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xp
cC5oZWlnaHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHQqIGN0eCA9IGJlZ2luUGFpbnRpbmco
ZGlydHkpOworICAgICAgICBtX3dpZGdldC0+cGFpbnQoY3R4LGRpcnR5KTsKKyAgICAgICAgZW5k
UGFpbnRpbmcoY3R4KTsKKyAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBHREtfRFJBR19FTlRF
UjoKKyAgICBjYXNlIEdES19EUkFHX0xFQVZFOgorICAgIGNhc2UgR0RLX0RSQUdfTU9USU9OOgor
ICAgIGNhc2UgR0RLX0RSQUdfU1RBVFVTOgorICAgIGNhc2UgR0RLX0RST1BfU1RBUlQ6CisgICAg
Y2FzZSBHREtfRFJPUF9GSU5JU0hFRDogeworICAgICAgICAvL2Jvb2wgdXBkYXRlRHJhZ0FuZERy
b3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7CisgICAgICAgIC8vdm9p
ZCBjYW5jZWxEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQq
KTsKKyAgICAgICAgLy9ib29sIHBlcmZvcm1EcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmLCBDbGlwYm9hcmQqKTsKKyAgICAgICAgLy92aWV3KCktPmludmFsaWRhdGVDbGljaygp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHREtfRk9DVVNfQ0hBTkdFOiB7Cisg
ICAgICAgIG1fd2lkZ2V0LT5mb2N1c0NoYW5nZUZyb21XaW5kb3coZXZlbnQtPmZvY3VzX2NoYW5n
ZS5pbik7CisgICAgfQorICAgIGJyZWFrOworICAgIGNhc2UgR0RLX1NDUk9MTDogeworICAgICAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudCA9Y3JlYXRlV2hlZWxFdmVudChldmVudCk7
CisgICAgICAgIG1fd2lkZ2V0LT53aGVlbEV2ZW50RnJvbVdpbmRvdyh3aGVlbEV2ZW50KTsKKyAg
ICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWTogeworICAgICAgICBQ
bGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudCA9IGNyZWF0ZU1vdXNlRXZlbnQoZXZlbnQpOwor
ICAgICAgICBtX3dpZGdldC0+bW91c2VFdmVudEZyb21XaW5kb3cobW91c2VFdmVudCxFdmVudE5h
bWVzOjptb3VzZW1vdmVFdmVudCk7CisgICAgfQorICAgIGJyZWFrOworICAgIGNhc2UgR0RLX0JV
VFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNC
VVRUT05fUFJFU1M6IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNlRXZlbnQgPSBj
cmVhdGVNb3VzZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV93aWRnZXQtPm1vdXNlRXZlbnRGcm9t
V2luZG93KG1vdXNlRXZlbnQsRXZlbnROYW1lczo6bW91c2Vkb3duRXZlbnQpOworICAgIH0KKyAg
ICBicmVhazsKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRTogeworICAgICAgICBQbGF0Zm9y
bU1vdXNlRXZlbnQgbW91c2VFdmVudCA9IGNyZWF0ZU1vdXNlRXZlbnQoZXZlbnQpOworICAgICAg
ICBtX3dpZGdldC0+bW91c2VFdmVudEZyb21XaW5kb3cobW91c2VFdmVudCxFdmVudE5hbWVzOjpt
b3VzZXVwRXZlbnQpOworICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIEdES19LRVlfUFJFU1M6
IHsKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50PWNyZWF0ZUtleWJvYXJk
RXZlbnQoZXZlbnQsZmFsc2UpOworICAgICAgICBtX3dpZGdldC0+a2V5RXZlbnRGcm9tV2luZG93
KGtleUV2ZW50LEV2ZW50TmFtZXM6OmtleWRvd25FdmVudCk7CisgICAgICAgIC8vaGFjayB0byBj
YXVzZSBhIGtleXByZXNzIHNlZSBLZXlib2FyZEV2ZW50LmNwcAorICAgICAgICBrZXlFdmVudD1j
cmVhdGVLZXlib2FyZEV2ZW50KGV2ZW50LHRydWUpOworICAgICAgICBtX3dpZGdldC0+a2V5RXZl
bnRGcm9tV2luZG93KGtleUV2ZW50LEV2ZW50TmFtZXM6OmtleWRvd25FdmVudCk7CisgICAgfQor
ICAgIGJyZWFrOworICAgIGNhc2UgR0RLX0tFWV9SRUxFQVNFOiB7CisgICAgICAgIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCBrZXlFdmVudD1jcmVhdGVLZXlib2FyZEV2ZW50KGV2ZW50LGZhbHNlKTsK
KyAgICAgICAgbV93aWRnZXQtPmtleUV2ZW50RnJvbVdpbmRvdyhrZXlFdmVudCxFdmVudE5hbWVz
OjprZXl1cEV2ZW50KTsKKyAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBHREtfQ09ORklHVVJF
OiB7CisgICAgICAgIEludFJlY3QgbmV3R2VvbSgwLDAsZXZlbnQtPmNvbmZpZ3VyZS53aWR0aCxl
dmVudC0+Y29uZmlndXJlLmhlaWdodCk7CisgICAgICAgIG1fd2lkZ2V0LT5zZXRGcmFtZUdlb21l
dHJ5KG5ld0dlb20pOworICAgIH0KKyAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKKwordm9pZCBXaW5kb3dHZGs6OnNob3coKQoreworICAgIGdka193
aW5kb3dfc2hvdyhtX3dpbmRvdyk7Cit9CisKK3ZvaWQgV2luZG93R2RrOjpoaWRlKCkKK3sKKyAg
ICBnZGtfd2luZG93X2hpZGUobV93aW5kb3cpOworfQorCit2b2lkIFdpbmRvd0dkazo6c2V0R2Vv
bWV0cnkoY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBnZGtfd2luZG93X21vdmVfcmVzaXplKG1f
d2luZG93LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7Cit9CisKK0ludFJl
Y3QgV2luZG93R2RrOjpnZW9tZXRyeSgpIGNvbnN0Cit7CisgICAgZ2ludCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aDsKKyAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShtX3dpbmRvdywgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQsICZkZXB0aCk7CisgICAgcmV0dXJuIEludFJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCk7Cit9CisKKwordm9pZCBXaW5kb3dHZGs6OnNldEN1cnNvcihjb25zdCBD
dXJzb3ImIGN1cnNvcikKK3sKKyAgICBHZGtDdXJzb3IqIHBjdXIgPSBjdXJzb3IuaW1wbCgpOwor
ICAgIGlmICghcGN1cikKKyAgICAgICAgcmV0dXJuOworICAgIGdka193aW5kb3dfc2V0X2N1cnNv
cihtX3dpbmRvdywgcGN1cik7Cit9CisKKworSW50UG9pbnQgV2luZG93R2RrOjpwb3NpdGlvbigp
IGNvbnN0Cit7CisgICAgZ2ludCB4LCB5OworICAgIGdka193aW5kb3dfZ2V0X29yaWdpbihtX3dp
bmRvdywgJngsICZ5KTsKKyAgICByZXR1cm4gSW50UG9pbnQoeCx5KTsKK30KKworSW50U2l6ZSBX
aW5kb3dHZGs6OnNpemUoKSBjb25zdAoreworICAgIGdpbnQgdyxoOworICAgIGdka193aW5kb3df
Z2V0X3NpemUobV93aW5kb3csICZ3LCAmaCk7CisgICAgcmV0dXJuIEludFNpemUodyxoKTsKK30K
Kwordm9pZCBXaW5kb3dHZGs6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QsIGJvb2wgbm93KQoreworICAgIEdka1JlY3RhbmdsZSByZWN0ID0ge3VwZGF0ZVJlY3QueCgp
LCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgp
IH07CisgICAgZ2RrX3dpbmRvd19pbnZhbGlkYXRlX3JlY3QobV93aW5kb3csICZyZWN0LCB0cnVl
KTsKKworICAgIGlmIChub3cpIHsKKyAgICAgICAgZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMo
bV93aW5kb3csIHRydWUpOworICAgIH0KKyAgICBnZGtfZmx1c2goKTsKK30KKworLy8gRklYTUU6
IFRoaXMgaXMgaW5jb21wbGV0ZS4gIFdlIHNob3VsZCBjaGFuZ2UgdGhpcyB0byBtaXJyb3IKKy8v
IG1vcmUgbGlrZSB3aGF0IEZpcmVmb3ggZG9lcywgYW5kIGdlbmVyYXRlIHRoZXNlIHN3aXRjaCBz
dGF0ZW1lbnRzCisvLyBhdCBidWlsZCB0aW1lLgorc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVy
Rm9yR2RrS2V5Q29kZShndWludCBrZXlDb2RlKQoreworICAgIHN3aXRjaCAoa2V5Q29kZSkgewor
ICAgIGNhc2UgR0RLX01lbnU6CisgICAgY2FzZSBHREtfQWx0X0w6CisgICAgY2FzZSBHREtfQWx0
X1I6CisgICAgICAgIHJldHVybiAiQWx0IjsKKyAgICBjYXNlIEdES19DbGVhcjoKKyAgICAgICAg
cmV0dXJuICJDbGVhciI7CisgICAgY2FzZSBHREtfRG93bjoKKyAgICAgICAgcmV0dXJuICJEb3du
IjsKKyAgICAgICAgLy8gIkVuZCIKKyAgICBjYXNlIEdES19FbmQ6CisgICAgICAgIHJldHVybiAi
RW5kIjsKKyAgICAgICAgLy8gIkVudGVyIgorICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKKyAgICBj
YXNlIEdES19LUF9FbnRlcjoKKyAgICAgICAgcmV0dXJuICJFbnRlciI7CisgICAgY2FzZSBHREtf
RXhlY3V0ZToKKyAgICAgICAgcmV0dXJuICJFeGVjdXRlIjsKKyAgICBjYXNlIEdES19GMToKKyAg
ICAgICAgcmV0dXJuICJGMSI7CisgICAgY2FzZSBHREtfRjI6CisgICAgICAgIHJldHVybiAiRjIi
OworICAgIGNhc2UgR0RLX0YzOgorICAgICAgICByZXR1cm4gIkYzIjsKKyAgICBjYXNlIEdES19G
NDoKKyAgICAgICAgcmV0dXJuICJGNCI7CisgICAgY2FzZSBHREtfRjU6CisgICAgICAgIHJldHVy
biAiRjUiOworICAgIGNhc2UgR0RLX0Y2OgorICAgICAgICByZXR1cm4gIkY2IjsKKyAgICBjYXNl
IEdES19GNzoKKyAgICAgICAgcmV0dXJuICJGNyI7CisgICAgY2FzZSBHREtfRjg6CisgICAgICAg
IHJldHVybiAiRjgiOworICAgIGNhc2UgR0RLX0Y5OgorICAgICAgICByZXR1cm4gIkY5IjsKKyAg
ICBjYXNlIEdES19GMTA6CisgICAgICAgIHJldHVybiAiRjEwIjsKKyAgICBjYXNlIEdES19GMTE6
CisgICAgICAgIHJldHVybiAiRjExIjsKKyAgICBjYXNlIEdES19GMTI6CisgICAgICAgIHJldHVy
biAiRjEyIjsKKyAgICBjYXNlIEdES19GMTM6CisgICAgICAgIHJldHVybiAiRjEzIjsKKyAgICBj
YXNlIEdES19GMTQ6CisgICAgICAgIHJldHVybiAiRjE0IjsKKyAgICBjYXNlIEdES19GMTU6Cisg
ICAgICAgIHJldHVybiAiRjE1IjsKKyAgICBjYXNlIEdES19GMTY6CisgICAgICAgIHJldHVybiAi
RjE2IjsKKyAgICBjYXNlIEdES19GMTc6CisgICAgICAgIHJldHVybiAiRjE3IjsKKyAgICBjYXNl
IEdES19GMTg6CisgICAgICAgIHJldHVybiAiRjE4IjsKKyAgICBjYXNlIEdES19GMTk6CisgICAg
ICAgIHJldHVybiAiRjE5IjsKKyAgICBjYXNlIEdES19GMjA6CisgICAgICAgIHJldHVybiAiRjIw
IjsKKyAgICBjYXNlIEdES19GMjE6CisgICAgICAgIHJldHVybiAiRjIxIjsKKyAgICBjYXNlIEdE
S19GMjI6CisgICAgICAgIHJldHVybiAiRjIyIjsKKyAgICBjYXNlIEdES19GMjM6CisgICAgICAg
IHJldHVybiAiRjIzIjsKKyAgICBjYXNlIEdES19GMjQ6CisgICAgICAgIHJldHVybiAiRjI0IjsK
KyAgICBjYXNlIEdES19IZWxwOgorICAgICAgICByZXR1cm4gIkhlbHAiOworICAgIGNhc2UgR0RL
X0hvbWU6CisgICAgICAgIHJldHVybiAiSG9tZSI7CisgICAgY2FzZSBHREtfSW5zZXJ0OgorICAg
ICAgICByZXR1cm4gIkluc2VydCI7CisgICAgY2FzZSBHREtfTGVmdDoKKyAgICAgICAgcmV0dXJu
ICJMZWZ0IjsKKyAgICBjYXNlIEdES19QYWdlX0Rvd246CisgICAgICAgIHJldHVybiAiUGFnZURv
d24iOworICAgIGNhc2UgR0RLX1BhZ2VfVXA6CisgICAgICAgIHJldHVybiAiUGFnZVVwIjsKKyAg
ICBjYXNlIEdES19QYXVzZToKKyAgICAgICAgcmV0dXJuICJQYXVzZSI7CisgICAgY2FzZSBHREtf
MzI3MF9QcmludFNjcmVlbjoKKyAgICAgICAgcmV0dXJuICJQcmludFNjcmVlbiI7CisgICAgY2Fz
ZSBHREtfUmlnaHQ6CisgICAgICAgIHJldHVybiAiUmlnaHQiOworICAgIGNhc2UgR0RLX1NlbGVj
dDoKKyAgICAgICAgcmV0dXJuICJTZWxlY3QiOworICAgIGNhc2UgR0RLX1VwOgorICAgICAgICBy
ZXR1cm4gIlVwIjsKKyAgICAgICAgLy8gU3RhbmRhcmQgc2F5cyB0aGF0IERFTCBiZWNvbWVzIFUr
MDAwMDdGLgorICAgIGNhc2UgR0RLX0RlbGV0ZToKKyAgICAgICAgcmV0dXJuICJVKzAwMDA3RiI7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6c3ByaW50ZigiVSslMDZYIiwg
dG91cHBlcihrZXlDb2RlKSk7CisgICAgfQorfQorCitzdGF0aWMgaW50IHdpbmRvd3NLZXlDb2Rl
Rm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleWNvZGUpCit7CisgICAgc3dpdGNoIChrZXljb2Rl
KSB7CisgICAgY2FzZSBHREtfS1BfMDoKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDA7Ly8gKDYw
KSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgIGNhc2UgR0RLX0tQXzE6CisgICAgICAgIHJldHVy
biBWS19OVU1QQUQxOy8vICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkKKyAgICBjYXNlIEdES19L
UF8yOgorICAgICAgICByZXR1cm4gIFZLX05VTVBBRDI7IC8vICg2MikgTnVtZXJpYyBrZXlwYWQg
MiBrZXkKKyAgICBjYXNlIEdES19LUF8zOgorICAgICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8g
KDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgIGNhc2UgR0RLX0tQXzQ6CisgICAgICAgIHJl
dHVybiBWS19OVU1QQUQ0OyAvLyAoNjQpIE51bWVyaWMga2V5cGFkIDQga2V5CisgICAgY2FzZSBH
REtfS1BfNToKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDU7IC8vKDY1KSBOdW1lcmljIGtleXBh
ZCA1IGtleQorICAgIGNhc2UgR0RLX0tQXzY6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQ2OyAv
LyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5CisgICAgY2FzZSBHREtfS1BfNzoKKyAgICAgICAg
cmV0dXJuIFZLX05VTVBBRDc7IC8vICg2NykgTnVtZXJpYyBrZXlwYWQgNyBrZXkKKyAgICBjYXNl
IEdES19LUF84OgorICAgICAgICByZXR1cm4gVktfTlVNUEFEODsgLy8gKDY4KSBOdW1lcmljIGtl
eXBhZCA4IGtleQorICAgIGNhc2UgR0RLX0tQXzk6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQ5
OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5CisgICAgY2FzZSBHREtfS1BfTXVsdGlwbHk6
CisgICAgICAgIHJldHVybiBWS19NVUxUSVBMWTsgLy8gKDZBKSBNdWx0aXBseSBrZXkKKyAgICBj
YXNlIEdES19LUF9BZGQ6CisgICAgICAgIHJldHVybiBWS19BREQ7IC8vICg2QikgQWRkIGtleQor
ICAgIGNhc2UgR0RLX0tQX1N1YnRyYWN0OgorICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8v
ICg2RCkgU3VidHJhY3Qga2V5CisgICAgY2FzZSBHREtfS1BfRGVjaW1hbDoKKyAgICAgICAgcmV0
dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1hbCBrZXkKKyAgICBjYXNlIEdES19LUF9EaXZp
ZGU6CisgICAgICAgIHJldHVybiBWS19ESVZJREU7IC8vICg2RikgRGl2aWRlIGtleQorCisgICAg
Y2FzZSBHREtfQmFja1NwYWNlOgorICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNL
U1BBQ0Uga2V5CisgICAgY2FzZSBHREtfVGFiOgorICAgICAgICByZXR1cm4gVktfVEFCOyAvLyAo
MDkpIFRBQiBrZXkKKyAgICBjYXNlIEdES19DbGVhcjoKKyAgICAgICAgcmV0dXJuIFZLX0NMRUFS
OyAvLyAoMEMpIENMRUFSIGtleQorICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgcmV0dXJu
IFZLX1JFVFVSTjsgLy8oMEQpIFJldHVybiBrZXkKKyAgICBjYXNlIEdES19TaGlmdF9MOgorICAg
IGNhc2UgR0RLX1NoaWZ0X1I6CisgICAgICAgIHJldHVybiBWS19TSElGVDsgLy8gKDEwKSBTSElG
VCBrZXkKKyAgICBjYXNlIEdES19Db250cm9sX0w6CisgICAgY2FzZSBHREtfQ29udHJvbF9SOgor
ICAgICAgICByZXR1cm4gVktfQ09OVFJPTDsgLy8gKDExKSBDVFJMIGtleQorICAgIGNhc2UgR0RL
X01lbnU6CisgICAgY2FzZSBHREtfQWx0X0w6CisgICAgY2FzZSBHREtfQWx0X1I6CisgICAgICAg
IHJldHVybiBWS19NRU5VOyAvLyAoMTIpIEFMVCBrZXkKKworICAgIGNhc2UgR0RLX1BhdXNlOgor
ICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5CisgICAgY2FzZSBHREtf
Q2Fwc19Mb2NrOgorICAgICAgICByZXR1cm4gVktfQ0FQSVRBTDsgLy8gKDE0KSBDQVBTIExPQ0sg
a2V5CisgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgorICAgIGNhc2UgR0RLX0thbmFfU2hpZnQ6Cisg
ICAgICAgIHJldHVybiBWS19LQU5BOyAvLyAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElNRSkg
S2FuYSBtb2RlCisgICAgY2FzZSBHREtfSGFuZ3VsOgorICAgICAgICByZXR1cm4gVktfSEFOR1VM
OyAvLyBWS19IQU5HVUwgKDE1KSBJTUUgSGFuZ3VsIG1vZGUKKyAgICAgICAgLy8gVktfSlVOSkEg
KDE3KSBJTUUgSnVuamEgbW9kZQorICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElNRSBmaW5hbCBt
b2RlCisgICAgY2FzZSBHREtfSGFuZ3VsX0hhbmphOgorICAgICAgICByZXR1cm4gVktfSEFOSkE7
IC8vICgxOSkgSU1FIEhhbmphIG1vZGUKKyAgICBjYXNlIEdES19LYW5qaToKKyAgICAgICAgcmV0
dXJuIFZLX0tBTkpJOyAvLyAoMTkpIElNRSBLYW5qaSBtb2RlCisgICAgY2FzZSBHREtfRXNjYXBl
OgorICAgICAgICByZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkKKyAgICAgICAgLy8g
VktfQ09OVkVSVCAoMUMpIElNRSBjb252ZXJ0CisgICAgICAgIC8vIFZLX05PTkNPTlZFUlQgKDFE
KSBJTUUgbm9uY29udmVydAorICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0Cisg
ICAgICAgIC8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAorICAg
IGNhc2UgR0RLX3NwYWNlOgorICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VC
QVIKKyAgICBjYXNlIEdES19QYWdlX1VwOgorICAgICAgICByZXR1cm4gVktfUFJJT1I7IC8vICgy
MSkgUEFHRSBVUCBrZXkKKyAgICBjYXNlIEdES19QYWdlX0Rvd246CisgICAgICAgIHJldHVybiBW
S19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKKyAgICBjYXNlIEdES19FbmQ6CisgICAgICAg
IHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQorICAgIGNhc2UgR0RLX0hvbWU6CisgICAg
ICAgIHJldHVybiBWS19IT01FOyAvLyAoMjQpIEhPTUUga2V5CisgICAgY2FzZSBHREtfTGVmdDoK
KyAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAgICBjYXNl
IEdES19VcDoKKyAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQorICAg
IGNhc2UgR0RLX1JpZ2h0OgorICAgICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQg
QVJST1cga2V5CisgICAgY2FzZSBHREtfRG93bjoKKyAgICAgICAgcmV0dXJuIFZLX0RPV047IC8v
ICgyOCkgRE9XTiBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19TZWxlY3Q6CisgICAgICAgIHJldHVy
biBWS19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQorICAgIGNhc2UgR0RLX1ByaW50OgorICAg
ICAgICByZXR1cm4gVktfUFJJTlQ7IC8vICgyQSkgUFJJTlQga2V5CisgICAgY2FzZSBHREtfRXhl
Y3V0ZToKKyAgICAgICAgcmV0dXJuIFZLX0VYRUNVVEU7Ly8gKDJCKSBFWEVDVVRFIGtleQorICAg
ICAgICAvL2R1bm5vIG9uIHRoaXMKKyAgICAgICAgLy9jYXNlIEdES19QcmludFNjcmVlbjoKKyAg
ICAgICAgLy8gICAgICByZXR1cm4gVktfU05BUFNIT1Q7IC8vICgyQykgUFJJTlQgU0NSRUVOIGtl
eQorICAgIGNhc2UgR0RLX0luc2VydDoKKyAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJE
KSBJTlMga2V5CisgICAgY2FzZSBHREtfRGVsZXRlOgorICAgICAgICByZXR1cm4gVktfREVMRVRF
OyAvLyAoMkUpIERFTCBrZXkKKyAgICBjYXNlIEdES19IZWxwOgorICAgICAgICByZXR1cm4gVktf
SEVMUDsgLy8gKDJGKSBIRUxQIGtleQorICAgIGNhc2UgR0RLXzA6CisgICAgY2FzZSBHREtfcGFy
ZW5sZWZ0OgorICAgICAgICByZXR1cm4gVktfMDsgICAgLy8gICgzMCkgMCkga2V5CisgICAgY2Fz
ZSBHREtfMToKKyAgICAgICAgcmV0dXJuIFZLXzE7IC8vICAoMzEpIDEgISBrZXkKKyAgICBjYXNl
IEdES18yOgorICAgIGNhc2UgR0RLX2F0OgorICAgICAgICByZXR1cm4gVktfMjsgLy8gICgzMikg
MiAmIGtleQorICAgIGNhc2UgR0RLXzM6CisgICAgY2FzZSBHREtfbnVtYmVyc2lnbjoKKyAgICAg
ICAgcmV0dXJuIFZLXzM7IC8vY2FzZSAnMyc6IGNhc2UgJyMnOworICAgIGNhc2UgR0RLXzQ6Cisg
ICAgY2FzZSBHREtfZG9sbGFyOiAvLyAgKDM0KSA0IGtleSAnJCc7CisgICAgICAgIHJldHVybiBW
S180OworICAgIGNhc2UgR0RLXzU6CisgICAgY2FzZSBHREtfcGVyY2VudDoKKyAgICAgICAgcmV0
dXJuIFZLXzU7IC8vICAoMzUpIDUga2V5ICAnJScKKyAgICBjYXNlIEdES182OgorICAgIGNhc2Ug
R0RLX2FzY2lpY2lyY3VtOgorICAgICAgICByZXR1cm4gVktfNjsgLy8gICgzNikgNiBrZXkgICde
JworICAgIGNhc2UgR0RLXzc6CisgICAgY2FzZSBHREtfYW1wZXJzYW5kOgorICAgICAgICByZXR1
cm4gVktfNzsgLy8gICgzNykgNyBrZXkgIGNhc2UgJyYnCisgICAgY2FzZSBHREtfODoKKyAgICBj
YXNlIEdES19hc3RlcmlzazoKKyAgICAgICAgcmV0dXJuIFZLXzg7IC8vICAoMzgpIDgga2V5ICAn
KicKKyAgICBjYXNlIEdES185OgorICAgIGNhc2UgR0RLX3BhcmVucmlnaHQ6CisgICAgICAgIHJl
dHVybiBWS185OyAvLyAgKDM5KSA5IGtleSAnKCcKKyAgICBjYXNlIEdES19hOgorICAgIGNhc2Ug
R0RLX0E6CisgICAgICAgIHJldHVybiBWS19BOyAvLyAgKDQxKSBBIGtleSBjYXNlICdhJzogY2Fz
ZSAnQSc6IHJldHVybiAweDQxOworICAgIGNhc2UgR0RLX2I6CisgICAgY2FzZSBHREtfQjoKKyAg
ICAgICAgcmV0dXJuIFZLX0I7IC8vICAoNDIpIEIga2V5IGNhc2UgJ2InOiBjYXNlICdCJzogcmV0
dXJuIDB4NDI7CisgICAgY2FzZSBHREtfYzoKKyAgICBjYXNlIEdES19DOgorICAgICAgICByZXR1
cm4gVktfQzsgLy8gICg0MykgQyBrZXkgY2FzZSAnYyc6IGNhc2UgJ0MnOiByZXR1cm4gMHg0MzsK
KyAgICBjYXNlIEdES19kOgorICAgIGNhc2UgR0RLX0Q6CisgICAgICAgIHJldHVybiBWS19EOyAv
LyAgKDQ0KSBEIGtleSBjYXNlICdkJzogY2FzZSAnRCc6IHJldHVybiAweDQ0OworICAgIGNhc2Ug
R0RLX2U6CisgICAgY2FzZSBHREtfRToKKyAgICAgICAgcmV0dXJuIFZLX0U7IC8vICAoNDUpIEUg
a2V5IGNhc2UgJ2UnOiBjYXNlICdFJzogcmV0dXJuIDB4NDU7CisgICAgY2FzZSBHREtfZjoKKyAg
ICBjYXNlIEdES19GOgorICAgICAgICByZXR1cm4gVktfRjsgLy8gICg0NikgRiBrZXkgY2FzZSAn
Zic6IGNhc2UgJ0YnOiByZXR1cm4gMHg0NjsKKyAgICBjYXNlIEdES19nOgorICAgIGNhc2UgR0RL
X0c6CisgICAgICAgIHJldHVybiBWS19HOyAvLyAgKDQ3KSBHIGtleSBjYXNlICdnJzogY2FzZSAn
Ryc6IHJldHVybiAweDQ3OworICAgIGNhc2UgR0RLX2g6CisgICAgY2FzZSBHREtfSDoKKyAgICAg
ICAgcmV0dXJuIFZLX0g7IC8vICAoNDgpIEgga2V5IGNhc2UgJ2gnOiBjYXNlICdIJzogcmV0dXJu
IDB4NDg7CisgICAgY2FzZSBHREtfaToKKyAgICBjYXNlIEdES19JOgorICAgICAgICByZXR1cm4g
VktfSTsgLy8gICg0OSkgSSBrZXkgY2FzZSAnaSc6IGNhc2UgJ0knOiByZXR1cm4gMHg0OTsKKyAg
ICBjYXNlIEdES19qOgorICAgIGNhc2UgR0RLX0o6CisgICAgICAgIHJldHVybiBWS19KOyAvLyAg
KDRBKSBKIGtleSBjYXNlICdqJzogY2FzZSAnSic6IHJldHVybiAweDRBOworICAgIGNhc2UgR0RL
X2s6CisgICAgY2FzZSBHREtfSzoKKyAgICAgICAgcmV0dXJuIFZLX0s7IC8vICAoNEIpIEsga2V5
IGNhc2UgJ2snOiBjYXNlICdLJzogcmV0dXJuIDB4NEI7CisgICAgY2FzZSBHREtfbDoKKyAgICBj
YXNlIEdES19MOgorICAgICAgICByZXR1cm4gVktfTDsgLy8gICg0QykgTCBrZXkgY2FzZSAnbCc6
IGNhc2UgJ0wnOiByZXR1cm4gMHg0QzsKKyAgICBjYXNlIEdES19tOgorICAgIGNhc2UgR0RLX006
CisgICAgICAgIHJldHVybiBWS19NOyAvLyAgKDREKSBNIGtleSBjYXNlICdtJzogY2FzZSAnTSc6
IHJldHVybiAweDREOworICAgIGNhc2UgR0RLX246CisgICAgY2FzZSBHREtfTjoKKyAgICAgICAg
cmV0dXJuIFZLX047IC8vICAoNEUpIE4ga2V5IGNhc2UgJ24nOiBjYXNlICdOJzogcmV0dXJuIDB4
NEU7CisgICAgY2FzZSBHREtfbzoKKyAgICBjYXNlIEdES19POgorICAgICAgICByZXR1cm4gVktf
TzsgLy8gICg0RikgTyBrZXkgY2FzZSAnbyc6IGNhc2UgJ08nOiByZXR1cm4gMHg0RjsKKyAgICBj
YXNlIEdES19wOgorICAgIGNhc2UgR0RLX1A6CisgICAgICAgIHJldHVybiBWS19QOyAvLyAgKDUw
KSBQIGtleSBjYXNlICdwJzogY2FzZSAnUCc6IHJldHVybiAweDUwOworICAgIGNhc2UgR0RLX3E6
CisgICAgY2FzZSBHREtfUToKKyAgICAgICAgcmV0dXJuIFZLX1E7IC8vICAoNTEpIFEga2V5IGNh
c2UgJ3EnOiBjYXNlICdRJzogcmV0dXJuIDB4NTE7CisgICAgY2FzZSBHREtfcjoKKyAgICBjYXNl
IEdES19SOgorICAgICAgICByZXR1cm4gVktfUjsgLy8gICg1MikgUiBrZXkgY2FzZSAncic6IGNh
c2UgJ1InOiByZXR1cm4gMHg1MjsKKyAgICBjYXNlIEdES19zOgorICAgIGNhc2UgR0RLX1M6Cisg
ICAgICAgIHJldHVybiBWS19TOyAvLyAgKDUzKSBTIGtleSBjYXNlICdzJzogY2FzZSAnUyc6IHJl
dHVybiAweDUzOworICAgIGNhc2UgR0RLX3Q6CisgICAgY2FzZSBHREtfVDoKKyAgICAgICAgcmV0
dXJuIFZLX1Q7IC8vICAoNTQpIFQga2V5IGNhc2UgJ3QnOiBjYXNlICdUJzogcmV0dXJuIDB4NTQ7
CisgICAgY2FzZSBHREtfdToKKyAgICBjYXNlIEdES19VOgorICAgICAgICByZXR1cm4gVktfVTsg
Ly8gICg1NSkgVSBrZXkgY2FzZSAndSc6IGNhc2UgJ1UnOiByZXR1cm4gMHg1NTsKKyAgICBjYXNl
IEdES192OgorICAgIGNhc2UgR0RLX1Y6CisgICAgICAgIHJldHVybiBWS19WOyAvLyAgKDU2KSBW
IGtleSBjYXNlICd2JzogY2FzZSAnVic6IHJldHVybiAweDU2OworICAgIGNhc2UgR0RLX3c6Cisg
ICAgY2FzZSBHREtfVzoKKyAgICAgICAgcmV0dXJuIFZLX1c7IC8vICAoNTcpIFcga2V5IGNhc2Ug
J3cnOiBjYXNlICdXJzogcmV0dXJuIDB4NTc7CisgICAgY2FzZSBHREtfeDoKKyAgICBjYXNlIEdE
S19YOgorICAgICAgICByZXR1cm4gVktfWDsgLy8gICg1OCkgWCBrZXkgY2FzZSAneCc6IGNhc2Ug
J1gnOiByZXR1cm4gMHg1ODsKKyAgICBjYXNlIEdES195OgorICAgIGNhc2UgR0RLX1k6CisgICAg
ICAgIHJldHVybiBWS19ZOyAvLyAgKDU5KSBZIGtleSBjYXNlICd5JzogY2FzZSAnWSc6IHJldHVy
biAweDU5OworICAgIGNhc2UgR0RLX3o6CisgICAgY2FzZSBHREtfWjoKKyAgICAgICAgcmV0dXJu
IFZLX1o7IC8vICAoNUEpIFoga2V5IGNhc2UgJ3onOiBjYXNlICdaJzogcmV0dXJuIDB4NUE7Cisg
ICAgY2FzZSBHREtfRjE6CisgICAgICAgIHJldHVybiBWS19GMTsKKyAgICBjYXNlIEdES19GMjoK
KyAgICAgICAgcmV0dXJuIFZLX0YyOworICAgIGNhc2UgR0RLX0YzOgorICAgICAgICByZXR1cm4g
VktfRjM7CisgICAgY2FzZSBHREtfRjQ6CisgICAgICAgIHJldHVybiBWS19GNDsKKyAgICBjYXNl
IEdES19GNToKKyAgICAgICAgcmV0dXJuIFZLX0Y1OworICAgIGNhc2UgR0RLX0Y2OgorICAgICAg
ICByZXR1cm4gVktfRjY7CisgICAgY2FzZSBHREtfRjc6CisgICAgICAgIHJldHVybiBWS19GNzsK
KyAgICBjYXNlIEdES19GODoKKyAgICAgICAgcmV0dXJuIFZLX0Y4OworICAgIGNhc2UgR0RLX0Y5
OgorICAgICAgICByZXR1cm4gVktfRjk7CisgICAgY2FzZSBHREtfRjEwOgorICAgICAgICByZXR1
cm4gVktfRjEwOworICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgcmV0dXJuIFZLX0YxMTsKKyAg
ICBjYXNlIEdES19GMTI6CisgICAgICAgIHJldHVybiBWS19GMTI7CisgICAgY2FzZSBHREtfRjEz
OgorICAgICAgICByZXR1cm4gVktfRjEzOworICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgcmV0
dXJuIFZLX0YxNDsKKyAgICBjYXNlIEdES19GMTU6CisgICAgICAgIHJldHVybiBWS19GMTU7Cisg
ICAgY2FzZSBHREtfRjE2OgorICAgICAgICByZXR1cm4gVktfRjE2OworICAgIGNhc2UgR0RLX0Yx
NzoKKyAgICAgICAgcmV0dXJuIFZLX0YxNzsKKyAgICBjYXNlIEdES19GMTg6CisgICAgICAgIHJl
dHVybiBWS19GMTg7CisgICAgY2FzZSBHREtfRjE5OgorICAgICAgICByZXR1cm4gVktfRjE5Owor
ICAgIGNhc2UgR0RLX0YyMDoKKyAgICAgICAgcmV0dXJuIFZLX0YyMDsKKyAgICBjYXNlIEdES19G
MjE6CisgICAgICAgIHJldHVybiBWS19GMjE7CisgICAgY2FzZSBHREtfRjIyOgorICAgICAgICBy
ZXR1cm4gVktfRjIyOworICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgcmV0dXJuIFZLX0YyMzsK
KyAgICBjYXNlIEdES19GMjQ6CisgICAgICAgIHJldHVybiBWS19GMjQ7CisgICAgY2FzZSBHREtf
TWV0YV9MOgorICAgICAgICByZXR1cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5
IChNaWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKKyAgICBjYXNlIEdES19NZXRhX1I6CisgICAg
ICAgIHJldHVybiBWS19SV0lOOyAvLyAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1cmFsIGtl
eWJvYXJkKQorICAgICAgICAvLyBWS19BUFBTICg1RCkgQXBwbGljYXRpb25zIGtleSAoTmF0dXJh
bCBrZXlib2FyZCkKKyAgICAgICAgLy8gVktfU0xFRVAgKDVGKSBDb21wdXRlciBTbGVlcCBrZXkK
KyAgICAgICAgLy8gVktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtleQorICAgICAgICAvLyBW
S19TVUJUUkFDVCAoNkQpIFN1YnRyYWN0IGtleQorICAgICAgICAvLyBWS19ERUNJTUFMICg2RSkg
RGVjaW1hbCBrZXkKKyAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQorICAgICAg
ICAvLyBoYW5kbGVkIGJ5IGtleSBjb2RlIGFib3ZlCisKKyAgICBjYXNlIEdES19OdW1fTG9jazoK
KyAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVNIExPQ0sga2V5CisKKyAgICBj
YXNlIEdES19TY3JvbGxfTG9jazoKKyAgICAgICAgcmV0dXJuIFZLX1NDUk9MTDsgLy8gKDkxKSBT
Q1JPTEwgTE9DSyBrZXkKKworICAgICAgICAvLyBWS19MU0hJRlQgKEEwKSBMZWZ0IFNISUZUIGtl
eQorICAgICAgICAvLyBWS19SU0hJRlQgKEExKSBSaWdodCBTSElGVCBrZXkKKyAgICAgICAgLy8g
VktfTENPTlRST0wgKEEyKSBMZWZ0IENPTlRST0wga2V5CisgICAgICAgIC8vIFZLX1JDT05UUk9M
IChBMykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICAgICAgLy8gVktfTE1FTlUgKEE0KSBMZWZ0IE1F
TlUga2V5CisgICAgICAgIC8vIFZLX1JNRU5VIChBNSkgUmlnaHQgTUVOVSBrZXkKKyAgICAgICAg
Ly8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sga2V5
CisgICAgICAgIC8vIFZLX0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBGb3J3YXJkIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX1JFRlJFU0ggKEE4KSBXaW5k
b3dzIDIwMDAvWFA6IEJyb3dzZXIgUmVmcmVzaCBrZXkKKyAgICAgICAgLy8gVktfQlJPV1NFUl9T
VE9QIChBOSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5CisgICAgICAgIC8vIFZL
X0JST1dTRVJfU0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkK
KyAgICAgICAgLy8gVktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJy
b3dzZXIgRmF2b3JpdGVzIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX0hPTUUgKEFDKSBXaW5k
b3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhvbWUga2V5CisgICAgICAgIC8vIFZLX1ZP
TFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkKKyAgICAgICAg
Ly8gVktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBEb3duIGtleQor
ICAgICAgICAvLyBWS19WT0xVTUVfVVAgKEFGKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBVcCBr
ZXkKKyAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9YUDog
TmV4dCBUcmFjayBrZXkKKyAgICAgICAgLy8gVktfTUVESUFfUFJFVl9UUkFDSyAoQjEpIFdpbmRv
d3MgMjAwMC9YUDogUHJldmlvdXMgVHJhY2sga2V5CisgICAgICAgIC8vIFZLX01FRElBX1NUT1Ag
KEIyKSBXaW5kb3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEga2V5CisgICAgICAgIC8vIFZLX01FRElB
X1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5Cisg
ICAgICAgIC8vIFZLX0xBVU5DSF9NQUlMIChCNCkgV2luZG93cyAyMDAwL1hQOiBTdGFydCBNYWls
IGtleQorICAgICAgICAvLyBWS19MQVVOQ0hfTUVESUFfU0VMRUNUIChCNSkgV2luZG93cyAyMDAw
L1hQOiBTZWxlY3QgTWVkaWEga2V5CisgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2lu
ZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQorICAgICAgICAvLyBWS19MQVVO
Q0hfQVBQMiAoQjcpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBrZXkKKwor
ICAgICAgICAvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVy
czsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBz
dGFuZGFyZCBrZXlib2FyZCwgdGhlICc7Oicga2V5CisgICAgY2FzZSBHREtfc2VtaWNvbG9uOgor
ICAgIGNhc2UgR0RLX2NvbG9uOgorICAgICAgICByZXR1cm4gVktfT0VNXzE7IC8vY2FzZSAnOyc6
IGNhc2UgJzonOiByZXR1cm4gMHhCQTsKKyAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5CisgICAgY2Fz
ZSBHREtfcGx1czoKKyAgICBjYXNlIEdES19lcXVhbDoKKyAgICAgICAgcmV0dXJuIFZLX09FTV9Q
TFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7CisgICAgICAgIC8vIFZLX09F
TV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhl
ICcsJyBrZXkKKyAgICBjYXNlIEdES19jb21tYToKKyAgICBjYXNlIEdES19sZXNzOgorICAgICAg
ICByZXR1cm4gVktfT0VNX0NPTU1BOyAvL2Nhc2UgJywnOiBjYXNlICc8JzogcmV0dXJuIDB4QkM7
CisgICAgICAgIC8vIFZLX09FTV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBj
b3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKKyAgICBjYXNlIEdES19taW51czoKKyAgICBjYXNl
IEdES191bmRlcnNjb3JlOgorICAgICAgICByZXR1cm4gVktfT0VNX01JTlVTOyAvL2Nhc2UgJy0n
OiBjYXNlICdfJzogcmV0dXJuIDB4QkQ7CisgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBX
aW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5CisgICAg
Y2FzZSBHREtfcGVyaW9kOgorICAgIGNhc2UgR0RLX2dyZWF0ZXI6CisgICAgICAgIHJldHVybiBW
S19PRU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7CisgICAgICAg
IC8vIFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBj
YW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJk
IGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKKyAgICBjYXNlIEdES19zbGFzaDoKKyAgICBjYXNlIEdE
S19xdWVzdGlvbjoKKyAgICAgICAgcmV0dXJuIFZLX09FTV8yOyAvL2Nhc2UgJy8nOiBjYXNlICc/
JzogcmV0dXJuIDB4QkY7CisgICAgICAgIC8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2Vs
bGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAw
L1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKKyAgICBjYXNl
IEdES19hc2NpaXRpbGRlOgorICAgIGNhc2UgR0RLX3F1b3RlbGVmdDoKKyAgICAgICAgcmV0dXJu
IFZLX09FTV8zOyAvL2Nhc2UgJ2AnOiBjYXNlICd+JzogcmV0dXJuIDB4QzA7CisgICAgICAgIC8v
IFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4g
dmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtl
eWJvYXJkLCB0aGUgJ1t7JyBrZXkKKyAgICBjYXNlIEdES19icmFja2V0bGVmdDoKKyAgICBjYXNl
IEdES19icmFjZWxlZnQ6CisgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdbJzogY2Fz
ZSAneyc6IHJldHVybiAweERCOworICAgICAgICAvLyBWS19PRU1fNSAoREMpIFVzZWQgZm9yIG1p
c2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3Mg
MjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5CisgICAg
Y2FzZSBHREtfYmFja3NsYXNoOgorICAgIGNhc2UgR0RLX2JhcjoKKyAgICAgICAgcmV0dXJuIFZL
X09FTV81OyAvL2Nhc2UgJ1xcJzogY2FzZSAnfCc6IHJldHVybiAweERDOworICAgICAgICAvLyBW
S19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZh
cnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXli
b2FyZCwgdGhlICddfScga2V5CisgICAgY2FzZSBHREtfYnJhY2tldHJpZ2h0OgorICAgIGNhc2Ug
R0RLX2JyYWNlcmlnaHQ6CisgICAgICAgIHJldHVybiBWS19PRU1fNjsgLy8gY2FzZSAnXSc6IGNh
c2UgJ30nOiByZXR1cm4gMHhERDsKKyAgICAgICAgLy8gVktfT0VNXzcgKERFKSBVc2VkIGZvciBt
aXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dz
IDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3Rl
L2RvdWJsZS1xdW90ZScga2V5CisgICAgY2FzZSBHREtfcXVvdGVyaWdodDoKKyAgICBjYXNlIEdE
S19xdW90ZWRibDoKKyAgICAgICAgcmV0dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2Ug
JyInOiByZXR1cm4gMHhERTsKKyAgICAgICAgLy8gVktfT0VNXzggKERGKSBVc2VkIGZvciBtaXNj
ZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLgorICAgICAgICAv
LyBWS19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQOiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNr
ZXQga2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBSVCAxMDIta2V5IGtleWJvYXJkCisg
ICAgICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5U
IDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKKyAgICAgICAgLy8gVktfUEFD
S0VUIChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJz
IGFzIGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0aGUgbG93
IHdvcmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtleWJvYXJk
IGlucHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJE
SU5QVVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKKyAgICAgICAgLy8gVktf
QVRUTiAoRjYpIEF0dG4ga2V5CisgICAgICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5Cisg
ICAgICAgIC8vIFZLX0VYU0VMIChGOCkgRXhTZWwga2V5CisgICAgICAgIC8vIFZLX0VSRU9GIChG
OSkgRXJhc2UgRU9GIGtleQorICAgICAgICAvLyBWS19QTEFZIChGQSkgUGxheSBrZXkKKyAgICAg
ICAgLy8gVktfWk9PTSAoRkIpIFpvb20ga2V5CisgICAgICAgIC8vIFZLX05PTkFNRSAoRkMpIFJl
c2VydmVkIGZvciBmdXR1cmUgdXNlCisgICAgICAgIC8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKKyAg
ICAgICAgLy8gVktfT0VNX0NMRUFSIChGRSkgQ2xlYXIga2V5CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCit9CisKKworUGxhdGZvcm1LZXlib2FyZEV2ZW50IFdpbmRv
d0dkazo6Y3JlYXRlS2V5Ym9hcmRFdmVudChHZGtFdmVudCogZXZlbnQsYm9vbCBhdXRvUmVwZWF0
KQoreworICAgIGJvb2wgaXNLZXlVcCA9IChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0Up
OworICAgIGJvb2wgc2hpZnRLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX1NISUZUX01BU0sg
IT0gMDsKKyAgICBib29sIGN0cmxLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX0NPTlRST0xf
TUFTSyAhPSAwOworICAgIGJvb2wgYWx0S2V5ID0gZXZlbnQtPmtleS5zdGF0ZSAmIEdES19NT0Qx
X01BU0sgIT0gMDsKKyAgICBib29sIG1ldGFLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX01P
RDJfTUFTSyAhPSAwOworICAgIFN0cmluZyB0ZXh0ID0gZXZlbnQtPmtleS5zdHJpbmc7CisgICAg
U3RyaW5nIHVubW9kaWZpZWRUZXh0ID0gZXZlbnQtPmtleS5zdHJpbmc7CisgICAgU3RyaW5nIGtl
eUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5LmtleXZh
bCk7CisgICAgaW50IHdpbmRvd3NLZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChl
dmVudC0+a2V5LmtleXZhbCk7CisgICAgaWYgKHdpbmRvd3NLZXlDb2RlID09IDApCisgICAgICAg
IHByaW50ZigiIEJBRCBLRVkgUFJFU1MgJWQgXG4iLGV2ZW50LT5rZXkua2V5dmFsKTsKKyAgICBh
c3NlcnQod2luZG93c0tleUNvZGUgIT0gMCk7CisgICAgYm9vbCBpc0tleXBhZCA9IGZhbHNlOwor
CisgICAgaWYgKCFzaGlmdEtleSkgeworICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0b2xvd2Vy
KHRleHRbMF0pOworICAgICAgICB0ZXh0ID0gU3RyaW5nKCZjaGFyYWN0ZXIsIDEpOworICAgIH0K
KyAgICByZXR1cm4gUGxhdGZvcm1LZXlib2FyZEV2ZW50KHRleHQsdW5tb2RpZmllZFRleHQsa2V5
SWRlbnRpZmllciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNLZXlVcCxhdXRv
UmVwZWF0LHdpbmRvd3NLZXlDb2RlLGlzS2V5cGFkLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5KTsKK30KKworUGxhdGZv
cm1Nb3VzZUV2ZW50IFdpbmRvd0dkazo6Y3JlYXRlTW91c2VFdmVudChHZGtFdmVudCogZXZlbnQp
Cit7CisgICAgSW50UG9pbnQgcG9zaXRpb247CisgICAgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb247
CisgICAgTW91c2VCdXR0b24gYnV0dG9uOworICAgIGludCAgY2xpY2tDb3VudCA9IDA7CisgICAg
Ym9vbCBzaGlmdEtleTsKKyAgICBib29sIGN0cmxLZXk7CisgICAgYm9vbCBhbHRLZXk7CisgICAg
Ym9vbCBtZXRhS2V5OworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKyAgICBjYXNlIEdES19N
T1RJT05fTk9USUZZOgorICAgICAgICBwb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPm1v
dGlvbi54LCAoaW50KWV2ZW50LT5tb3Rpb24ueSk7CisgICAgICAgIGdsb2JhbFBvc2l0aW9uID0g
SW50UG9pbnQoKGludClldmVudC0+bW90aW9uLnhfcm9vdCwgKGludClldmVudC0+bW90aW9uLnlf
cm9vdCk7CisgICAgICAgIGJ1dHRvbiA9IChNb3VzZUJ1dHRvbikoLTEpOworICAgICAgICBjbGlj
a0NvdW50ID0gMDsKKyAgICAgICAgc2hpZnRLZXkgPSAgZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdE
S19TSElGVF9NQVNLICE9IDA7CisgICAgICAgIGN0cmxLZXkgPSBldmVudC0+bW90aW9uLnN0YXRl
ICYgR0RLX0NPTlRST0xfTUFTSyAhPSAwOworICAgICAgICBhbHRLZXkgPSAgZXZlbnQtPm1vdGlv
bi5zdGF0ZSAmIEdES19NT0QxX01BU0sgIT0gMDsKKyAgICAgICAgbWV0YUtleSA9IGV2ZW50LT5t
b3Rpb24uc3RhdGUgJiBHREtfTU9EMl9NQVNLICE9IDA7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6CisgICAg
Y2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKKyAg
ICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MpCisgICAgICAgICAgICBj
bGlja0NvdW50ID0gMTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRU
T05fUFJFU1MpCisgICAgICAgICAgICBjbGlja0NvdW50ID0gMjsKKyAgICAgICAgZWxzZSBpZiAo
ZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCisgICAgICAgICAgICBjbGlja0NvdW50
ID0gMzsKKworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMSkKKyAgICAgICAg
ICAgIGJ1dHRvbiA9IExlZnRCdXR0b247CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24u
YnV0dG9uID09IDIpCisgICAgICAgICAgICBidXR0b24gPSBNaWRkbGVCdXR0b247CisgICAgICAg
IGVsc2UgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9uID09IDMpCisgICAgICAgICAgICBidXR0b24g
PSBSaWdodEJ1dHRvbjsKKworICAgICAgICBwb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQt
PmJ1dHRvbi54LCAoaW50KWV2ZW50LT5idXR0b24ueSk7CisgICAgICAgIGdsb2JhbFBvc2l0aW9u
ID0gSW50UG9pbnQoKGludClldmVudC0+YnV0dG9uLnhfcm9vdCwgKGludClldmVudC0+YnV0dG9u
Lnlfcm9vdCk7CisgICAgICAgIHNoaWZ0S2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19T
SElGVF9NQVNLICE9IDA7CisgICAgICAgIGN0cmxLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYg
R0RLX0NPTlRST0xfTUFTSyAhPSAwOworICAgICAgICBhbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0
YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOworICAgICAgICBtZXRhS2V5ID0gZXZlbnQtPmJ1dHRv
bi5zdGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gbW91c2UgZXZlbnRcbiIpOwor
ICAgICAgICBhc3NlcnQoMCk7CisgICAgfQorICAgIHJldHVybiBQbGF0Zm9ybU1vdXNlRXZlbnQo
cG9zaXRpb24sZ2xvYmFsUG9zaXRpb24sYnV0dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xpY2tDb3VudCwgc2hpZnRLZXksY3RybEtleSwgYWx0S2V5LCBtZXRhS2V5KTsKK30KKwor
UGxhdGZvcm1XaGVlbEV2ZW50IFdpbmRvd0dkazo6Y3JlYXRlV2hlZWxFdmVudChHZGtFdmVudCog
ZXZlbnQpCit7CisgICAgZmxvYXQgZGVsdGFYID0gMDsKKyAgICBmbG9hdCBkZWx0YVkgPSAwOwor
CisgICAgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfVVApCisgICAg
ICAgIGRlbHRhWSA9IC0xMjA7CisgICAgZWxzZSBpZiAoZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24g
PT0gR0RLX1NDUk9MTF9MRUZUKQorICAgICAgICBkZWx0YVggPSAtMTIwOworICAgIGVsc2UgaWYg
KGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfUklHSFQpCisgICAgICAgIGRl
bHRhWCA9IDEyMDsKKyAgICBlbHNlCisgICAgICAgIGRlbHRhWSA9IDEyMDsKKworICAgIEludFBv
aW50IHBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+c2Nyb2xsLngsIChpbnQpZXZlbnQt
PnNjcm9sbC55KTsKKyAgICBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQp
ZXZlbnQtPnNjcm9sbC54X3Jvb3QsIChpbnQpZXZlbnQtPnNjcm9sbC55X3Jvb3QpOworICAgIGJv
b2wgc2hpZnRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAg
Ym9vbCBjdHJsS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7Cisg
ICAgYm9vbCBhbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDFfTUFTSzsKKyAg
ICBib29sIG1ldGFLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDJfTUFTSzsKKwor
ICAgIHJldHVybiBQbGF0Zm9ybVdoZWVsRXZlbnQocG9zaXRpb24sZ2xvYmFsUG9zaXRpb24sZGVs
dGFYLGRlbHRhWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0S2V5LGN0cmxL
ZXksYWx0S2V5LG1ldGFLZXkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihncG9p
bnRlcikKK3sKKyAgICBpZiAoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKQorICAgICAgICBzaGFy
ZWRUaW1lckZpcmVkRnVuY3Rpb24oKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgc2V0
U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmKSgpKQoreworICAgIHNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbiA9IGY7Cit9CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlVGltZShkb3Vi
bGUgZmlyZVRpbWUpCit7CisgICAgQVNTRVJUKHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik7CisK
KyAgICBkb3VibGUgaW50ZXJ2YWwgPSBmaXJlVGltZSAtIGN1cnJlbnRUaW1lKCk7CisgICAgZ3Vp
bnQgaW50ZXJ2YWxJbk1TOworICAgIGlmIChpbnRlcnZhbCA8IDApCisgICAgICAgIGludGVydmFs
SW5NUyA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGludGVydmFsICo9IDEwMDA7CisgICAgICAg
IGludGVydmFsSW5NUyA9IChndWludClpbnRlcnZhbDsKKyAgICB9CisKKyAgICBzdG9wU2hhcmVk
VGltZXIoKTsKKyAgICBpZiAoaW50ZXJ2YWxJbk1TID09IDApCisgICAgICAgIHNoYXJlZFRpbWVy
ID0gZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgdGltZW91dF9jYiwgTlVMTCwg
TlVMTCk7CisgICAgZWxzZQorICAgICAgICBzaGFyZWRUaW1lciA9IGdfdGltZW91dF9hZGRfZnVs
bChHX1BSSU9SSVRZX0RFRkFVTFQsIGludGVydmFsSW5NUywgdGltZW91dF9jYiwgTlVMTCwgTlVM
TCk7Cit9CisKK3ZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKK3sKKyAgICBnYm9vbGVhbiBzID0gRkFM
U0U7CisgICAgaWYgKHNoYXJlZFRpbWVyID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIHMg
PSBnX3NvdXJjZV9yZW1vdmUoc2hhcmVkVGltZXIpOworICAgIEFTU0VSVChzKTsKKyAgICBzaGFy
ZWRUaW1lciA9IDA7Cit9CisKK30KKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0
LmgJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsOSArNDAsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShHREspCi10eXBlZGVmIHN0cnVjdCBfR2RrRHJhd2FibGUg
R2RrRHJhd2FibGU7Ci0jZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQogY2xhc3MgUVdpZGdldDsK
QEAgLTYwLDYgKzU3LDE0IEBACiAgICAgY2xhc3MgU2Nyb2xsVmlldzsKICAgICBjbGFzcyBXaWRn
ZXRDbGllbnQ7CiAgICAgY2xhc3MgV2lkZ2V0UHJpdmF0ZTsKKyNpZiBQTEFURk9STShHREspCisg
ICAgY2xhc3MgV2luZG93R2RrOworICAgIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKKyAg
ICBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CisgICAgY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50
OworICAgIGNsYXNzIEZyYW1lVmlldzsKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisjZW5kaWYK
IAogICAgIGNsYXNzIFdpZGdldCB7CiAgICAgcHVibGljOgpAQCAtMTc0LDkgKzE3OSwyNCBAQAog
I2VuZGlmCiAKICNpZiBQTEFURk9STShHREspCi0gICAgICAgIFdpZGdldChHZGtEcmF3YWJsZSog
ZHJhd2FibGUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd2FibGUoR2RrRHJhd2FibGUq
IGRyYXdhYmxlKTsKLSAgICAgICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlKCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgYXR0YWNoV2luZG93KFdpbmRvd0dkayopOworICAgICAgICB2b2lkIGRldGFjaFdp
bmRvdygpOworICAgICAgICBXaW5kb3dHZGsqIHdpbmRvdygpOworICAgICAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldygpIGNvbnN0OworICAgICAgICB2b2lkIHNldEZyYW1lVmlldyhGcmFtZVZpZXcq
KTsKKyAgICAgICAgdm9pZCBzZXRQYXJlbnQoV2lkZ2V0Kik7CisgICAgICAgIFdpZGdldCogcGFy
ZW50KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0T3duZXIoV2lkZ2V0Kik7CisgICAgICAgIFdp
ZGdldCogb3duZXIoKSBjb25zdDsKKyAgICAgICAgSW50UG9pbnQgbG9jYXRpb25JbldpbmRvdygp
IGNvbnN0OworICAgICAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnRpbmcoSW50UmVjdCBy
ZWN0KTsKKyAgICAgICAgdm9pZCByZXBhaW50KGJvb2wgbm93KTsKKyAgICAgICAgdm9pZCByZXBh
aW50KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KTsKKyAgICAgICAgdm9pZCBm
b2N1c0NoYW5nZUZyb21XaW5kb3coYm9vbCBmb2N1c2VkKTsKKyAgICAgICAgdm9pZCB3aGVlbEV2
ZW50RnJvbVdpbmRvdyhQbGF0Zm9ybVdoZWVsRXZlbnQpOworICAgICAgICB2b2lkIGtleUV2ZW50
RnJvbVdpbmRvdyhQbGF0Zm9ybUtleWJvYXJkRXZlbnQsIGNvbnN0IEF0b21pY1N0cmluZyBldmVu
dFR5cGUpOworICAgICAgICB2b2lkIG1vdXNlRXZlbnRGcm9tV2luZG93KFBsYXRmb3JtTW91c2VF
dmVudCxjb25zdCBBdG9taWNTdHJpbmcgZXZlbnRUeXBlKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBldnQpe307
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJl
dmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDEyIEBACiAgICAgY2xhc3MgRmxvYXRSZWN0OwogICAgIGNsYXNz
IFBsYXRmb3JtV2hlZWxFdmVudDsKICAgICBjbGFzcyBQbGF0Zm9ybVNjcm9sbGJhcjsKKyNpZiBQ
TEFURk9STShHREspCisgICAgY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OworICAgIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKKyNlbmRpZgogCisKICAgICBjbGFzcyBTY3JvbGxWaWV3IDogcHVi
bGljIFdpZGdldCB7CiAgICAgcHVibGljOgogICAgICAgICBpbnQgdmlzaWJsZVdpZHRoKCkgY29u
c3Q7CkBAIC0xMzAsMTcgKzEzNSwxNiBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShHREspCi0g
ICAgICAgIHZvaWQgdXBkYXRlVmlldyhjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3YWJsZShHZGtEcmF3YWJsZSogZHJhd2FibGUp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7
CiAgICAgICAgIFNjcm9sbFZpZXcoKTsKICAgICAgICAgflNjcm9sbFZpZXcoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2
ZW50JiBldnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJ
bnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCB1cGRhdGVTY3JvbGxi
YXJzKCk7Ci0gICAgICAgIEludFNpemUgbWF4aW11bVNjcm9sbCgpIGNvbnN0OwotICAgICAgICBp
bnQgdXBkYXRlU2Nyb2xsSW5mbyhzaG9ydCB0eXBlLCBpbnQgY3VycmVudCwgaW50IG1heCwgaW50
IHBhZ2VTaXplKTsKICAgICAgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7CiAgICAgICAgIFNj
cm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CisKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgJKHJldmlzaW9uIDE3NjMwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsMTAgKzQ0LDYgQEAKIHR5cGVkZWYgbG9uZyBMUEFSQU07CiAjZW5kaWYKIAotI2lmIFBM
QVRGT1JNKEdESykKLXR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwotI2VuZGlmCi0K
ICNpZiBQTEFURk9STShRVCkKIGNsYXNzIFFNb3VzZUV2ZW50OwogI2VuZGlmCkBAIC0xMDMsOSAr
OTksNiBAQAogICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoSFdORCwgVUlOVCwgV1BBUkFNLCBM
UEFSQU0pOwogICAgICAgICB2b2lkIHNldENsaWNrQ291bnQoaW50IGNvdW50KSB7IG1fY2xpY2tD
b3VudCA9IGNvdW50OyB9CiAjZW5kaWYKLSNpZiBQTEFURk9STShHREspIAotICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqKTsKLSNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAg
ICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQqLCBpbnQgY2xpY2tDb3VudCk7CiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAkocmV2aXNpb24g
MTc2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxNCArNDIsMjMgQEAKIHR5cGVkZWYgbG9uZyBMUEFSQU07CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50Owot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFBsYXRmb3JtV2hlZWxF
dmVudCB7CiAgICAgcHVibGljOgorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoIEludFBvaW50
IHBvc2l0aW9uLCBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgZmxvYXQgZGVsdGFYLCBmbG9hdCBk
ZWx0YVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleSwgYm9vbCBj
dHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5KQorICAgICAgICAgICAgOiBtX3Bvc2l0
aW9uKHBvc2l0aW9uKQorICAgICAgICAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0
aW9uKQorICAgICAgICAgICAgLCBtX2RlbHRhWChkZWx0YVgpCisgICAgICAgICAgICAsIG1fZGVs
dGFZKGRlbHRhWSkKKyAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdEtleSkKKyAgICAgICAg
ICAgICwgbV9jdHJsS2V5KGN0cmxLZXkpCisgICAgICAgICAgICAsIG1fYWx0S2V5KGFsdEtleSkK
KyAgICAgICAgICAgICwgbV9tZXRhS2V5KG1ldGFLZXkpCisgICAgICAgIHsKKyAgICAgICAgfQor
CiAgICAgICAgIGNvbnN0IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
OyB9CiAgICAgICAgIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBt
X2dsb2JhbFBvc2l0aW9uOyB9CiAKQEAgLTc2LDEwICs4NSw2IEBACiAjaWYgUExBVEZPUk0oV0lO
KQogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwgV1BBUkFNLCBMUEFSQU0pOwogI2Vu
ZGlmCi0jaWYgUExBVEZPUk0oR0RLKQotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoR2RrRXZl
bnQqKTsKLSNlbmRpZgotCiAgICAgcHJpdmF0ZToKICAgICAgICAgSW50UG9pbnQgbV9wb3NpdGlv
bjsKICAgICAgICAgSW50UG9pbnQgbV9nbG9iYWxQb3NpdGlvbjsKSW5kZXg6IFdlYkNvcmUvUHJv
amVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1Byb2plY3Rz
L2dkay93ZWJjb3JlLWdkay5ia2wJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9Qcm9qZWN0
cy9nZGsvd2ViY29yZS1nZGsuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xNiw3ICsxNiw3IEBACiAJ
CTxvcHRpb24gbmFtZT0iRkVBVFVSRV9ERUZJTkVTIiBuZXZlcl9lbXB0eT0iMSIgPgogCQk8IS0t
IFNWR19TVVBQT1JUIFhQQVRIX1NVUFBPUlQtLT4KIAkJPGRlZmF1bHQtdmFsdWU+WFBBVEhfU1VQ
UE9SVDwvZGVmYXVsdC12YWx1ZT4KLQkJPHZhbHVlcz5YUEFUSF9TVVBQT1JULFNWR19TVVBQT1JU
PC92YWx1ZXM+CisJCTx2YWx1ZXM+WFBBVEhfU1VQUE9SVDwvdmFsdWVzPgogCQk8L29wdGlvbj4K
IAkJPHNldCB2YXI9IkZFQVRVUkVfREVGSU5FUyI+WFBBVEhfU1VQUE9SVDwvc2V0PgogCQk8c2V0
IHZhcj0iRU5DT0RJTkdTX0ZJTEUiPiQoU1JDRElSKS9wbGF0Zm9ybS9nZGsvZ2RrLWVuY29kaW5n
cy50eHQ8L3NldD4KQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgPGNvbW1hbmQ+YmFzaCAtYyAi
dG91Y2ggLkRlcml2ZWRTb3VyY2VzIjwvY29tbWFuZD4KICAgIDwvYWN0aW9uPgogCi0gICAgPGRs
bCBpZD0id2ViY29yZS1nZGsiIHRlbXBsYXRlPSJ3ZWJjb3JlX2Jhc2UsZnJlZXR5cGUsZ3RrLGN1
cmwsY2Fpcm8sc3FsaXRlMyI+ICAgICAgICAKKyAgICA8ZGxsIGlkPSJ3ZWJjb3JlLWdkayIgdGVt
cGxhdGU9IndlYmNvcmVfYmFzZSxqc2NvcmUsZnJlZXR5cGUsZ2RrLGN1cmwsY2Fpcm8sc3FsaXRl
MyI+ICAgICAgICAKIAk8IS0tIEZJWE1FOiBjcmVhdGUgYSBkZWJ1ZyBvcHRpb24gYW5kIHNldCB0
aGVzZSBhY2NvcmRpbmdseSAtLT4KIAk8IS0tIGNoZWNrIGZvciB1bmRlZmluZWQgc3ltYm9scyBm
b3IgZGVidWdnaW5nIHJlYXNvbnMgLS0+CiAJPCEtLQpAQCAtNTksMzYgKzU5LDM3IEBACiAJCTxp
bmNsdWRlPnBsYXRmb3JtL2NhaXJvPC9pbmNsdWRlPgogCSAgICA8aW5jbHVkZT4kKFNSQ0RJUikv
a2NhbnZhcy9kZXZpY2UvY2Fpcm88L2luY2x1ZGU+CiAgICAgCTxkZWZpbmU+WFBBVEhfU1VQUE9S
VDwvZGVmaW5lPgotICAgICAgICA8IS0tIGdkayBidWlsZCBicm9rZW4gd2l0aCB3aXRob3V0IE5E
RUJVRyBkZWZpbmVkIC0tPgotICAgIAk8ZGVmaW5lPk5ERUJVRzwvZGVmaW5lPgotIAorCisgICAg
ICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19HREsiPiAgICAKKyAgICAg
ICAgICAgIHBsYXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9y
bS9nZGsvQ3Vyc29yR2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZpbGVDaG9vc2Vy
R2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAKKyAgICAg
ICAgICAgIHBsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3Jt
L2dkay9Gb250R2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURh
dGFHZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwCisgICAgICAg
ICAgICBwbGF0Zm9ybS9nZGsvRnJhbWVWaWV3R2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0v
Z2RrL0dseXBoTWFwR2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ljb25HZGsuY3Bw
CisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3BwCisgICAgICAgICAgICBwbGF0
Zm9ybS9nZGsvUGFnZUdkay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNj
cm9sbGJhckdkay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9Qb3B1cE1lbnVHZGsuY3Bw
CisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCisgICAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1Nj
cm9sbFZpZXdHZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvU3lzdGVtVGltZUxpbnV4
LmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKKyAg
ICAgICAgICAgIHBsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9y
bS9nZGsvV2lkZ2V0UHJpdmF0ZUdkay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9XaW5k
b3dHZGsuY3BwCisgICAgICAgIDwvc2V0PgorCiAgICAgICAgIDxzb3VyY2VzPgkJCi0gICAgICAg
ICAgcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCi0gICAgICAgICAgcGxh
dGZvcm0vY2Fpcm8vSW1hZ2VDYWlyby5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9jYWlyby9JbWFn
ZVNvdXJjZUNhaXJvLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3Bw
Ci0gICAgICAgICAgcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAKLSAgICAgICAgICBwbGF0Zm9y
bS9nZGsvRm9udENhY2hlR2RrLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250RGF0YUdk
ay5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udEdkay5jcHAKLSAgICAgICAgICBwbGF0
Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YUdkay5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsv
RnJhbWVHZGsuY3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNwcAotICAg
ICAgICAgIHBsYXRmb3JtL2dkay9JbWFnZUdkay5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsv
S2V5RXZlbnRHZGsuY3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3Bw
Ci0gICAgICAgICAgcGxhdGZvcm0vZ2RrL1BhZ2VHZGsuY3BwCi0gICAgICAgICAgcGxhdGZvcm0v
bmV0d29yay9nZGsvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAotICAgICAgICAgIHBsYXRmb3Jt
L2dkay9SZW5kZXJUaGVtZUdkay5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsvUmVuZGVyUG9w
dXBNZW51R2RrLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2dkay9TY3JlZW5HZGsuY3BwCi0gICAg
ICAgICAgcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwCi0gICAgICAgICAgcGxhdGZvcm0v
Z2RrL1NoYXJlZFRpbWVyTGludXguY3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ2RrL1N5c3RlbVRp
bWVMaW51eC5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAotICAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAK
LSAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAKLSAgICAgICAgICBwbGF0
Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAorICAgICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfQ0FJ
Uk9fQklORElOR1MpCisgICAgICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19DVVJMKQorICAgICAg
ICAgICAgJChXRUJDT1JFX1NPVVJDRVNfR0RLKSAKIAkJPC9zb3VyY2VzPgogCiAJCTxjbGVhbi1m
aWxlcz4KSW5kZXg6IFdlYkNvcmUvUHJvamVjdHMvZ2RrL1JlYWRtZS50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9Qcm9qZWN0cy9nZGsvUmVhZG1lLnR4dAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvUHJvamVjdHMvZ2RrL1JlYWRtZS50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAK
KworT25jZSB0aGUgYmFrZWZpbGVzIGFyZSBnZW5lcmF0ZWQgcGVyIHRoZSBpbnN0cnVjdGlvbnMg
aW4gJHNyY2Rpci9CYWtlZmlsZXMKKworY2QgV2ViQ29yZS9Qcm9qZWN0cy9nZGsKKworVGhlIHZl
cnkgZmlyc3QgdGltZSB5b3UgYnVpbGQgeW91IG5lZWQgdG8gcnVuCittYWtlIC5EZXJpdmVkU291
cmNlcworCithZnRlciB0aGlzIG1ha2UgaXMgc3VmZmljaWVudC4KK25vdyBydW4gbWFrZQorCitt
YWtlCisKK2NkIFdlYmtpdFRvb2xzL0dka2xhdW5jaGVyCitiYWtlZmlsZV9nZW4KK21ha2UKKy4g
Li9FTlYKKy4vZ2RrbGF1bmNoZXIKKworZ2RrbGF1bmNoZXIgY2FuIHRha2UgYSB1cmwgYXMgYW4g
YXJndW1lbnQKKwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw2OSBAQAorMjAwNi0xMS0wNyAgTWljaGFlbCBFbW1lbCAgPG1p
a2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAKKworICAg
ICAgICBCdWlsZCBmaXhlcyBvbmx5IHdpdGggbmV3IGNvZGUgZGVzaWduIGZvciBnZGsgcG9ydC4K
KyAgICAgICAgQ29tbWVudHMgaW5saW5lIG9uIGNoYW5nZXMgdG8gY29tbW9uIGZpbGVzCisJCUJ1
ZzogMTEzMzIKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxl
TWFuYWdlci5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuaAorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvZ2RrL0xvYWRlckZ1bmN0aW9u
c0N1cmwuY3BwCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VIYW5kbGVD
dXJsLmNwcAorICAgICAgICBBZGRlZCBjdXJsIGlmZGVmcworICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNl
LmgKKyAgICAgICAgQWRkZWQgZ2VuZXJpYyBjb25zdHJ1Y3RvcgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1BhZ2VHZGsu
Y3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAKKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dkay9HbHlwaE1hcEdk
ay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3BwCisgICAgICAgICogcGxh
dGZvcm0vZ2RrL1dpZGdldEdkay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udFBsYXRm
b3JtRGF0YS5oCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRlclBvcHVwTWVudUdkay5jcHAK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvS2V5RXZl
bnRHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAorICAgICAgICAq
IHBsYXRmb3JtL2dkay9Gb250Q2FjaGVHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvS2V5Ym9hcmRDb2Rl
cy5oCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRlclBvcHVwTWVudUdkay5oCisgICAgICAg
ICogcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udERh
dGFHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1NoYXJlZFRpbWVyTGludXguY3BwCisg
ICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAorICAgICAgICAqIHBsYXRm
b3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dkay9G
b250R2RrLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3BwCisgICAg
ICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0v
Z2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhl
bWVHZGsuaAorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oCisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsVmlldy5oCisgICAgICAgIEFkZGVkIGdlbmVyaWMgY29uc3RydWN0b3IKKyAgICAgICAg
KiBwbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAorICAgICAgICBBZGRlZCBnZW5lcmljIGNv
bnN0cnVjdG9yCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKKyAgICAg
ICAgKiBQcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsCisgICAgICAgICogUHJvamVjdHMvZ2Rr
L1JlYWRtZS50eHQKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2wKKyAgICAgICAgKiB3ZWJj
b3JlLWJhc2UuYmtsCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorCisgICAgICAg
IEFkZGVkIGluY2x1ZGUgb2Ygc3lzL3N0YXQuaCBhbmQgc3lzL3R5cGVzLmggdG8gYnVpbGQKKyAg
ICAgICAgc2hvdWxkIGJlIHRydWUgZm9yIHBvc2l4IHBsYXRmb3JtcworCisgICAgICAgICogbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAorICAgICAgICBBZGRlZCBDdXJsIGlmZGVmIAorICAg
ICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oCisgICAgICAgICogV2ViS2l0VG9vbHMvR2RrTGF1
bmNoZXIvbWFpbi5jcHAKKyAgICAgICAgKiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9nZGtsYXVu
Y2hlci5ia2wKKwogMjAwNi0xMS0wNiAgR3JhaGFtIERlbm5pcyAgPGdyYWhhbS5kZW5uaXNAZ21h
aWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNl
cy5ia2wJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdv
cmtpbmcgY29weSkKQEAgLTEwMiwyMiArMTAyLDE3IEBACiAJCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvWFBhdGhHcmFtbWFyLmNwcAogCiAJPC9zZXQ+Ci0JPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VC
Q09SRV9TT1VSQ0VTX0tIVE1MIj4KLQkJCiAKLQk8L3NldD4KLQk8c2V0IGFwcGVuZD0iMSIgdmFy
PSJXRUJDT1JFX1NPVVJDRVNfTUlTQyI+Ci0JCQotCi0JPC9zZXQ+CiAJPHNldCBhcHBlbmQ9IjEi
IHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BBR0UiPgogCQkKKwkJcGFnZS9DaHJvbWUuY3BwCiAJCXBh
Z2UvRE9NV2luZG93LmNwcAogCQlwYWdlL0ZyYW1lLmNwcAogCQlwYWdlL0ZyYW1lVHJlZS5jcHAK
IAkJcGFnZS9GcmFtZVZpZXcuY3BwCiAJCXBhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cy5jcHAKIAkJcGFnZS9QYWdlLmNwcAorCQlwYWdlL1BhZ2VTdGF0ZS5jcHAKIAogCTwvc2V0Pgog
CTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19MT0FERVIiPgpAQCAtMTMxLDEy
ICsxMjYsMTIgQEAKICAgICBsb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKICAgICBsb2Fk
ZXIvRG9jTG9hZGVyLmNwcAogICAgIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKLSAgICBsb2Fk
ZXIvRm9ybURhdGEuY3BwCiAgICAgbG9hZGVyL0Zvcm1TdGF0ZS5jcHAKICAgICBsb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCiAgICAgbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCiAgICAgbG9hZGVyL01h
aW5SZXNvdXJjZUxvYWRlci5jcHAKICAgICBsb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIuY3BwCisgICAgbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uY3BwCiAgICAgbG9hZGVyL1BsdWdp
bkRvY3VtZW50LmNwcAogICAgIGxvYWRlci9SZXF1ZXN0LmNwcAogICAgIGxvYWRlci9SZXNvdXJj
ZUxvYWRlci5jcHAKQEAgLTE0OCw2ICsxNDMsNyBAQAogICA8L3NldD4KIAk8c2V0IGFwcGVuZD0i
MSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfUExBVEZPUk0iPgogCQkKKwkJcGxhdGZvcm0vQWZmaW5l
VHJhbnNmb3JtLmNwcAogCQlwbGF0Zm9ybS9BcmVuYS5jcHAKIAkJcGxhdGZvcm0vQXJyYXlJbXBs
LmNwcAogCQlwbGF0Zm9ybS9BdG9taWNTdHJpbmcuY3BwCkBAIC0xNjgsMTUgKzE2NCwxNyBAQAog
CQlwbGF0Zm9ybS9Gb250RmFtaWx5LmNwcAogCQlwbGF0Zm9ybS9HbHlwaE1hcC5jcHAKIAkJcGxh
dGZvcm0vR2x5cGhXaWR0aE1hcC5jcHAKLQkJcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcAot
CQlwbGF0Zm9ybS9HcmFwaGljc1R5cGVzLmNwcAorCQlwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCisJCXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCiAJCXBs
YXRmb3JtL0ltYWdlLmNwcAogCQlwbGF0Zm9ybS9JbnRSZWN0LmNwcAogCQlwbGF0Zm9ybS9LVVJM
LmNwcAogCQlwbGF0Zm9ybS9Mb2dnaW5nLmNwcAorCQlwbGF0Zm9ybS9QYXRoLmNwcAogCQlwbGF0
Zm9ybS9QZW4uY3BwCiAJCXBsYXRmb3JtL1JlZ3VsYXJFeHByZXNzaW9uLmNwcAogCQlwbGF0Zm9y
bS9TZWdtZW50ZWRTdHJpbmcuY3BwCisJCXBsYXRmb3JtL1Njcm9sbEJhci5jcHAKIAkJcGxhdGZv
cm0vVGV4dENvZGVjLmNwcAogCQlwbGF0Zm9ybS9UZXh0Q29kZWNJQ1UuY3BwCiAJCXBsYXRmb3Jt
L1N0cmluZy5jcHAKQEAgLTE4OSw2ICsxODcsNyBAQAogCQlwbGF0Zm9ybS9UZXh0U3RyZWFtLmNw
cAogCQlwbGF0Zm9ybS9UaW1lci5jcHAKIAkJcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZS5jcHAKKwkJcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKIAkJcGxhdGZvcm0vV2lkZ2V0
LmNwcAogCiAJPC9zZXQ+CkBAIC0zMTIsMTIgKzMxMSwxMiBAQAogCQlwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcAogCiAJPC9zZXQ+Ci0JPHNldCBhcHBlbmQ9
IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NBSVJPIj4KKwk8c2V0IGFwcGVuZD0iMSIgdmFyPSJX
RUJDT1JFX1NPVVJDRVNfQ0FJUk9fQklORElOR1MiPgogCQkKKwkJcGxhdGZvcm0vY2Fpcm8vQWZm
aW5lVHJhbnNmb3JtQ2Fpcm8uY3BwCiAJCXBsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAogCQlwbGF0Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAogCQlwbGF0Zm9ybS9jYWly
by9JbWFnZVNvdXJjZUNhaXJvLmNwcAotCiAJPC9zZXQ+CiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0i
V0VCQ09SRV9TT1VSQ0VTX1BJWE1BTiI+CiAJCQpAQCAtNDMyLDExICs0MzEsMTEgQEAKIAkJcmVu
ZGVyaW5nL0NvdW50ZXJSZXNldE5vZGUuY3BwCiAJCXJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAK
IAkJcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCisJCXJlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmNwcAogCQlyZW5kZXJpbmcvSW5saW5lQm94LmNwcAogCQlyZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKIAkJcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCiAJCXJlbmRlcmluZy9MaXN0
TWFya2VyQm94LmNwcAotCQlyZW5kZXJpbmcvUmVuZGVyU3R5bGUuY3BwCiAJCXJlbmRlcmluZy9S
ZW5kZXJBcHBsZXQuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJBcmVuYS5jcHAKIAkJcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcApAQCAtNDQ5LDYgKzQ0OCw3IEBACiAJCXJlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAog
CQlyZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKKwkJcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmpl
Y3QuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJGb3JtRWxlbWVudC5jcHAKIAkJcmVuZGVyaW5nL1Jl
bmRlckZyYW1lLmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCkBAIC00NjYsOSAr
NDY2LDkgQEAKIAkJcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRl
clBhcnQuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAotCQlyZW5kZXJpbmcv
UmVuZGVyUG9wdXBNZW51LmNwcAorCQlyZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKIAkJcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcAotCQlyZW5kZXJpbmcvRGVwcmVjYXRlZFJlbmRlclNlbGVj
dC5jcHAKKwkJcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNwcAogCQlyZW5kZXJpbmcvRGVwcmVjYXRl
ZFNsaWRlci5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAogCQlyZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmNwcApAQCAtNDc5LDEyICs0NzksMTAgQEAKIAkJcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAogCQly
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCi0JCQogCQlyZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuY3BwCiAJCXJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAotCiAJPC9zZXQ+CiAKIAk8c2V0
IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfWE1MIj4KQEAgLTU2NCwxMSArNTYyLDEy
IEBACiAJPC9zZXQ+CiAKIAk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSUNP
TiI+Ci0JCWljb24vSWNvbkRhdGFiYXNlLmNwcAotCQlpY29uL0ljb25Mb2FkZXIuY3BwCi0JCWlj
b24vU1FMRGF0YWJhc2UuY3BwCi0JCWljb24vU1FMU3RhdGVtZW50LmNwcAotCQlpY29uL1NpdGVJ
Y29uLmNwcAorCQlsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisJCWxvYWRlci9pY29uL0lj
b25EYXRhQ2FjaGUuY3BwCisJCWxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCisJCWxvYWRlci9p
Y29uL1NRTERhdGFiYXNlLmNwcAorCQlsb2FkZXIvaWNvbi9TUUxTdGF0ZW1lbnQuY3BwCisJCWxv
YWRlci9pY29uL1NRTFRyYW5zYWN0aW9uLmNwcAogCTwvc2V0PgogCiAJPHNldCBhcHBlbmQ9IjEi
IHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0JSSURHRSI+CkBAIC01ODksOSArNTg4LDEyIEBACiAJCWVk
aXRpbmcvQ29tbWFuZEJ5TmFtZS5jcHAKIAkJZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKIAkJZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5jcHAKKwkJZWRpdGluZy9EZWxldGVCdXR0
b25Db250cm9sbGVyLmNwcAorCQllZGl0aW5nL0RlbGV0ZUJ1dHRvbi5jcHAKIAkJZWRpdGluZy9E
ZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAogCQllZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCiAJCWVkaXRpbmcvRWRpdENvbW1hbmQuY3BwCisJCWVkaXRpbmcvRWRpdG9yLmNw
cAogCQllZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKIAkJZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAKIAkJZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwCkBAIC02MTQsOCArNjE2LDggQEAK
IAkJZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKIAkJZWRpdGluZy9SZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAKIAkJZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKKwkJZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAogCQllZGl0aW5nL1Nl
bGVjdGlvbi5jcHAKLQkJZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAogCQllZGl0aW5n
L1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAogCQllZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuY3BwCiAJCWVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC02MjMsMTAgKzYy
NSw5IEBACiAJCWVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAogCQllZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCiAJCWVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAKKwkJZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uY3BwCiAJCWVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKLQkJZWRpdGluZy9WaXNpYmxl
UG9zaXRpb24uY3BwCiAJCWVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNw
cAotCiAJPC9zZXQ+CiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0hUTUwi
PgogCkBAIC02NTgsNiArNjU5LDcgQEAKIAkJaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCiAJ
CWh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAogCQlodG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCisJ
CWh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCiAJCWh0bWwvSFRNTEZyYW1lU2V0RWxlbWVu
dC5jcHAKIAkJaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmNwcAogCQlodG1sL0hUTUxIZWFk
RWxlbWVudC5jcHAKQEAgLTcwOSwxMiArNzExLDE5IEBACiAJICAgIGh0bWwvSFRNTFZpZXdTb3Vy
Y2VEb2N1bWVudC5jcHAJCiAKIAk8L3NldD4KLQk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JF
X1NPVVJDRVNfQklORElOR1MiPgotCQkKIAorCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVf
U09VUkNFU19DVVJMIj4KKworCQlwbGF0Zm9ybS9uZXR3b3JrL2dkay9GcmFtZUxvYWRlckN1cmwu
Y3BwCisJCXBsYXRmb3JtL25ldHdvcmsvZ2RrL0xvYWRlckZ1bmN0aW9uc0N1cmwuY3BwCisJCXBs
YXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKKwkJcGxhdGZvcm0vbmV0
d29yay9nZGsvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorCiAJPC9zZXQ+CisKIAk8c2V0IGFw
cGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSlMiPgogCQkKKwogCQliaW5kaW5ncy9qcy9K
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKIAkJYmluZGluZ3MvanMvSlNIVE1M
RWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAogCQliaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVu
dEN1c3RvbS5jcHAKSW5kZXg6IFdlYkNvcmUvd2ViY29yZS1iYXNlLmJrbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3dlYmNvcmUtYmFzZS5ia2wJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS93
ZWJjb3JlLWJhc2UuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksOSBAQAogICAgIDxp
bmNsdWRlIGZpbGU9IldlYkNvcmVTb3VyY2VzLmJrbCIvPgogICAgIAogCTxzZXQgdmFyPSJXRUJD
T1JFX0JBU0VfU09VUkNFUyI+CQotCQkkKFdFQkNPUkVfU09VUkNFU19ERVJJVkVEU09VUkNFUykK
LQkJJChXRUJDT1JFX1NPVVJDRVNfS0hUTUwpCi0JCSQoV0VCQ09SRV9TT1VSQ0VTX01JU0MpCiAJ
CSQoV0VCQ09SRV9TT1VSQ0VTX1BBR0UpCiAJCSQoV0VCQ09SRV9TT1VSQ0VTX0xPQURFUikKKwkJ
JChXRUJDT1JFX1NPVVJDRVNfSUNPTikKIAkJJChXRUJDT1JFX1NPVVJDRVNfUExBVEZPUk0pCiAJ
CSQoV0VCQ09SRV9TT1VSQ0VTX0lNQUdFLURFQ09ERVJTKQogCQkkKFdFQkNPUkVfU09VUkNFU19C
TVApCkBAIC02MCw4ICs1OCw4IEBACiAJCSQoV0VCQ09SRV9TT1VSQ0VTX0JSSURHRSkKIAkJJChX
RUJDT1JFX1NPVVJDRVNfRURJVElORykKIAkJJChXRUJDT1JFX1NPVVJDRVNfSFRNTCkKLQkJJChX
RUJDT1JFX1NPVVJDRVNfQklORElOR1MpCiAJCSQoV0VCQ09SRV9TT1VSQ0VTX0pTKQorCQkkKFdF
QkNPUkVfU09VUkNFU19ERVJJVkVEU09VUkNFUykKIAk8L3NldD4KIAogICAgIDxzZXQgdmFyPSJC
VUlMRERJUiI+b2JqLSQoRk9STUFUKTwvc2V0PgpAQCAtNzAsMTMgKzY4LDE0IEBACiAgICAgICAg
IDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9jYWlyby9jYWlyby9zcmM8L2luY2x1ZGU+CiAg
ICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjPC9pbmNs
dWRlPgogICAgICAgICA8c291cmNlcz4KLSAgICAgICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX0NB
SVJPKSAKLQkJICAgICQoV0VCQ09SRV9TT1VSQ0VTX1BJWE1BTikgCisJCQkkKFdFQkNPUkVfU09V
UkNFU19DQUlSTykgCisJCQkkKFdFQkNPUkVfU09VUkNFU19QSVhNQU4pIAogICAgICAgICA8L3Nv
dXJjZXM+CiAgICAgPC90ZW1wbGF0ZT4KLSAgICAKLSAgICA8dGVtcGxhdGUgaWQ9IndlYmNvcmVf
YmFzZSIgdGVtcGxhdGU9InhtbDIsaWNvbnYseHNsdCxpY3UsanNjb3JlIj4KKworICAgIDx0ZW1w
bGF0ZSBpZD0id2ViY29yZV9iYXNlIiB0ZW1wbGF0ZT0ieG1sMixpY29udix4c2x0LGljdSI+CiAg
ICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS8uPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4k
KFNSQ0RJUikvRm9yd2FyZGluZ0hlYWRlcnM8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQo
U1JDRElSKS9pbmNsdWRlPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZTwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIp
L2JpbmRpbmdzL2pzPC9pbmNsdWRlPgpAQCAtODksNiArODgsNyBAQAogICAgICAgICA8aW5jbHVk
ZT4kKFNSQ0RJUikvbG9hZGVyL2ljb248L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JD
RElSKS9wYWdlPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm08
L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9ncmFwaGljczwv
aW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmPC9pbmNsdWRlPgpAQCAtOTcsMTUgKzk3LDExIEBACiAgICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym08L2luY2x1
ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmc8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy96bGliPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZv
cm0vbmV0b3dyazwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3Jt
L25ldHdvcms8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9yZW5kZXJpbmc8
L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS94bWw8L2luY2x1ZGU+Ci0gICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVk
ZT4kKFNSQ0RJUikva2NhbnZhcy9kZXZpY2U8L2luY2x1ZGU+Ci0gICAgICAgIAotICAgICAgICA8
c291cmNlcz4kKFdFQkNPUkVfQkFTRV9TT1VSQ0VTKTwvc291cmNlcz4KKyAgIAogCi0KIDwhLS0g
SEFDSyBBTEVSVCEgRklYIFRIRVNFIExBVEVSISEgLS0+CiAgICAgICA8aWYgY29uZD0iUExBVEZP
Uk1fTUFDT1NYPT0nMSciPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vbWFj
PC9pbmNsdWRlPiA8IS0tIHdoZW4gYnVpbGRpbmcgb24gTWFjLCBFeHRyYUNGRW5jb2RpbmdzLmgg
aXMgbmVlZGVkIC0tPiAgICAgIApAQCAtMTQxLDYgKzEzNyw5IEBACiAgICAgICAgICAgICA8ZGVm
aW5lPkhBVkVfRkxPQVRfSD0xPC9kZWZpbmU+CiAgICAgICAgICAgICA8ZGVmaW5lPkhBVkVfRlVO
Q19fRklOSVRFPTE8L2RlZmluZT4KICAgICAgICAgPC9pZj4KKyAgICAgICAgPHNvdXJjZXM+Cisg
ICAgICAgICAgICAkKFdFQkNPUkVfQkFTRV9TT1VSQ0VTKQorICAgICAgICA8L3NvdXJjZXM+CiAg
ICAgPC90ZW1wbGF0ZT4KIDwvbWFrZWZpbGU+CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw2ICs1MCw5IEBACiAgICAgLCBtX3F1aWNrUmVkaXJlY3RDb21pbmco
ZmFsc2UpCiAgICAgLCBtX3NlbnRSZWRpcmVjdE5vdGlmaWNhdGlvbihmYWxzZSkKICAgICAsIG1f
aXNTdG9wcGluZ0xvYWQoZmFsc2UpCisjaWYgVVNFKENVUkwpCisgICAgLCBtX3BsYXRmb3JtUHJp
dmF0ZSgwKQorI2VuZGlmCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5IEBACiAjaWYgUExBVEZPUk0oV0lO
KQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3aW5iYXNlLmg+CisjZWxzZQorI2lu
Y2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiAxNzYzMCkK
KysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYg
Kzg2LDkgQEAKIAogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogICAgIHN0cnVjdCBXaW5k
b3dGZWF0dXJlczsKKyNpZiBVU0UoQ1VSTCkKKyAgICBjbGFzcyBGcmFtZUxvYWRlclByaXZhdGU7
CisjZW5kaWYKIAogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+ID4g
UmVzb3VyY2VMb2FkZXJTZXQ7CiAKQEAgLTQwNCw2ICs0MDcsNyBAQAogICAgICAgICBib29sIG1f
cXVpY2tSZWRpcmVjdENvbWluZzsKICAgICAgICAgYm9vbCBtX3NlbnRSZWRpcmVjdE5vdGlmaWNh
dGlvbjsKICAgICAgICAgYm9vbCBtX2lzU3RvcHBpbmdMb2FkOworICAgICAgICBGcmFtZUxvYWRl
clByaXZhdGUqIG1fcGxhdGZvcm1Qcml2YXRlOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYktpdFRv
b2xzL0dka0xhdW5jaGVyL21haW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dka0xh
dW5jaGVyL21haW4uY3BwCShyZXZpc2lvbiAxNzYzMCkKKysrIFdlYktpdFRvb2xzL0dka0xhdW5j
aGVyL21haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDE3ICsyLDI3IEBACiAjaW5jbHVkZSA8
c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgog
I2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8Z2Rr
L2dka2tleXN5bXMuaD4KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFtZUdkay5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRv
Y0xvYWRlci5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFz
VGV4dC5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKIAogI2lu
Y2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorLy8jaW5jbHVkZSAiaHRt
bG5hbWVzLmgiCiAKICNpZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC0y
MCwxOCArMzAsMjcgQEAKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNlbmRp
ZgogCisvL3BhaW50aW5nCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiV2luZG93R2RrLmgiCisjaW5jbHVkZSAiRnJhbWVH
ZGsuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKK3N0YXRpYyBHTWFpbkxvb3AgKmxvb3A7CisKIGNsYXNzIExhdW5jaGVyRnJhbWVHZGsg
OiBwdWJsaWMgRnJhbWVHZGsKIHsKIHB1YmxpYzoKLSAgICBMYXVuY2hlckZyYW1lR2RrKFBhZ2Uq
IHBhZ2UsIEVsZW1lbnQqIGVsZW1lbnQpIDogRnJhbWVHZGsocGFnZSwgZWxlbWVudCksIG1fZXhp
dEFmdGVyTG9hZGluZyhmYWxzZSkge30KLSAgICBMYXVuY2hlckZyYW1lR2RrKEdka0RyYXdhYmxl
KiBkcmF3YWJsZSkgOiBGcmFtZUdkayhkcmF3YWJsZSksIG1fZXhpdEFmdGVyTG9hZGluZyhmYWxz
ZSkge30KKyAgICBMYXVuY2hlckZyYW1lR2RrKFBhZ2UqIHBhZ2UsIEVsZW1lbnQqIGVsZW1lbnQs
UGFzc1JlZlB0cjxFZGl0b3JDbGllbnQ+IGVkaXRvcixXaW5kb3dHZGsqIHdpbmRvdykgOiBGcmFt
ZUdkayhwYWdlLGVsZW1lbnQsZWRpdG9yLHdpbmRvdyksIG1fZXhpdEFmdGVyTG9hZGluZyhmYWxz
ZSkKKyAgICB7fQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVkT25sb2FkRXZlbnRzKCk7Ci0gICAg
dm9pZCBzZXRFeGl0QWZ0ZXJMb2FkaW5nKGJvb2wgZXhpdEFmdGVyTG9hZGluZykgeyBtX2V4aXRB
ZnRlckxvYWRpbmcgPSBleGl0QWZ0ZXJMb2FkaW5nOyB9CisgICAgdm9pZCBzZXRFeGl0QWZ0ZXJM
b2FkaW5nKGJvb2wgZXhpdEFmdGVyTG9hZGluZykKKyAgICB7CisgICAgICAgIG1fZXhpdEFmdGVy
TG9hZGluZyA9IGV4aXRBZnRlckxvYWRpbmc7CisgICAgfQogcHJpdmF0ZToKICAgICBib29sIG1f
ZXhpdEFmdGVyTG9hZGluZzsKIH07CkBAIC0zOSw2MCArNTgsMTAwIEBACiB2b2lkIExhdW5jaGVy
RnJhbWVHZGs6OmhhbmRsZWRPbmxvYWRFdmVudHMoKQogewogICAgIGlmIChtX2V4aXRBZnRlckxv
YWRpbmcpCi0gICAgICAgIGd0a19tYWluX3F1aXQoKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKIH0KIAotc3RhdGljICBMYXVuY2hlckZyYW1lR2RrICpmcmFtZTsKLXN0YXRpYyAg
R2RrV2luZG93ICp3aW47CitzdGF0aWMgTGF1bmNoZXJGcmFtZUdkayAqZnJhbWU7CitzdGF0aWMg
R2RrV2luZG93ICp3aW47CitzdGF0aWMgV2luZG93R2RrICp3aW5kb3c7CitzdGF0aWMgYm9vbCBk
ZWJ1ZzsKIAogc3RhdGljIHZvaWQgaGFuZGxlX2V2ZW50KEdka0V2ZW50ICpldmVudCkKIHsKKyAg
ICBnZGtfdGhyZWFkc19sZWF2ZSgpOworICAgIFdpbmRvd0dkayogZWZyYW1lID0gV2luZG93R2Rr
OjpmaW5kV2luZG93KGV2ZW50LT5hbnkud2luZG93KTsKKyAgICBpZiAoZWZyYW1lKSB7CisgICAg
ICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAg
ICAgICAgICAgY2FzZSBHREtfRVhQT1NFOgorICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSBj
bGlwOworICAgICAgICAgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9z
ZS5yZWdpb24sICZjbGlwKTsKKyAgICAgICAgICAgICAgICAvL3ByaW50ZigiIFBBSU5UIEZSQU1F
ICVwIHg9JWQgeT0lZCB3PSVkIGg9JWQgXG4iLGVmcmFtZSwKKyAgICAgICAgICAgICAgICAvLyAg
ICBjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHREtfS0VZX1BSRVNTOgorICAgICAgICAgICAg
ICAgIGlmIChldmVudC0+a2V5LmtleXZhbCA9PSBHREtfRjkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgV2lkZ2V0KiB3aWRnZXQgPSB3aW5kb3ctPndpZGdldCgpOworICAgICAgICAgICAgICAgICAg
ICBpZiggd2lkZ2V0LT5mcmFtZVZpZXcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRnJh
bWUqIGVmcmFtZSA9IHdpZGdldC0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0ID0gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihl
ZnJhbWUtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0
cmluZyBzOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGUkFNRUdESyBET0NVTUVO
VDogJXMgXG4iLHN0LmFzY2lpKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgVGV4dFN0cmVh
bSBzdHJlYW0oJnMpOworICAgICAgICAgICAgICAgICAgICAgICAgZWZyYW1lLT5kb2N1bWVudCgp
LT5kdW1wKCZzdHJlYW0sRGVwcmVjYXRlZFN0cmluZygiICIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByaW50ZigiRlJBTUVHREsgTk9ERVM6ICVzIFxuIixzLmFzY2lpKCkpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVmcmFtZS0+aGFuZGxlR2RrRXZl
bnQoZXZlbnQpOworICAgIH0KICAgICBpZiAoR0RLX0RFTEVURSA9PSBldmVudC0+dHlwZSkgewot
ICAgICAgICBndGtfbWFpbl9xdWl0KCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZnJhbWUtPmhhbmRsZUdka0V2ZW50KGV2ZW50
KTsKKyAgICBnZGtfdGhyZWFkc19lbnRlcigpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hh
ciAqYXJndltdKSAKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisgICAgZGVi
dWcgPSB0cnVlOwogICAgIEdka1dpbmRvd0F0dHIgYXR0cjsKLSAgICBjaGFyICp1cmw7CisgICAg
Ly9nX3RocmVhZF9pbml0KDApOworICAgIC8vZ2RrX3RocmVhZHNfaW5pdCgpOwogICAgIGdka19p
bml0KCZhcmdjLCZhcmd2KTsKICAgICBnZGtfZXZlbnRfaGFuZGxlcl9zZXQgKChHZGtFdmVudEZ1
bmMpaGFuZGxlX2V2ZW50LCBOVUxMLCBOVUxMKTsKLQotICAgIGF0dHIud2lkdGggPSA4MDA7Ci0g
ICAgYXR0ci5oZWlnaHQgPSA2MDA7CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCxU
UlVFKTsKKyAgICBTdHJpbmcgcyA9IGdldGVudigiUFdEIik7CisgICAgU3RyaW5nIHJlcyA9ICJm
aWxlOi8vIitzKyIvY29tcG9uZW50cyI7CisgICAgV2luZG93R2RrOjpzZXRSZXNvdXJjZUxvY2F0
aW9uKHJlcy5kZXByZWNhdGVkU3RyaW5nKCkuYXNjaWkoKSk7CisgICAgYXR0ci53aWR0aCA9IDQw
MDsKKyAgICBhdHRyLmhlaWdodCA9IDMwMDsKICAgICBhdHRyLndpbmRvd190eXBlID0gR0RLX1dJ
TkRPV19UT1BMRVZFTDsKICAgICBhdHRyLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CiAgICAg
Ly9zZWUgaG93IHdoZXJlIHdlIGhhbmRsZSBtb3Rpb24gaGVyZSBuZWVkIHRvIGRvIHRoZSBoaW50
IHN0dWZmCi0gICAgYXR0ci5ldmVudF9tYXNrID0gKChHREtfQUxMX0VWRU5UU19NQVNLXkdES19Q
T0lOVEVSX01PVElPTl9ISU5UX01BU0spKTsgCisgICAgYXR0ci5ldmVudF9tYXNrID0gKChHREtf
QUxMX0VWRU5UU19NQVNLXkdES19QT0lOVEVSX01PVElPTl9ISU5UX01BU0spKTsKICAgICB3aW4g
PSBnZGtfd2luZG93X25ldyhOVUxMLCZhdHRyLDApOwotICAgIGZyYW1lID0gbmV3IExhdW5jaGVy
RnJhbWVHZGsod2luKTsKKyAgICB3aW5kb3cgPSBuZXcgV2luZG93R2RrKHdpbik7CisgICAgUGFz
c1JlZlB0cjxFZGl0b3JDbGllbnQ+IGVkaXRvcjsKKyAgICBSZWZQdHI8Q2hyb21lQ2xpZW50PiBj
aHJvbWVDbGllbnQ7CisgICAgZnJhbWUgPSBuZXcgTGF1bmNoZXJGcmFtZUdkayhuZXcgUGFnZShj
aHJvbWVDbGllbnQpLDAsZWRpdG9yLHdpbmRvdyk7CiAgICAgZ2RrX3dpbmRvd19zaG93KHdpbik7
Ci0gICAgdXJsID0gImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSI7CisKKyAgICBjaGFyICp1cmwgPSJj
b21wb25lbnRzL2Jyb3dzZXIuc3ZnIjsKICAgICBib29sIGV4aXRBZnRlckxvYWRpbmcgPSBmYWxz
ZTsKKwogICAgIGZvciAoaW50IGFyZ1BvcyA9IDE7IGFyZ1BvcyA8IGFyZ2M7ICsrYXJnUG9zKSB7
CiAgICAgICAgIGlmICgwID09IHN0cmNtcChhcmd2W2FyZ1Bvc10sICItZXhpdC1hZnRlci1sb2Fk
aW5nIikpCiAgICAgICAgICAgICBleGl0QWZ0ZXJMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgdXJsID0gYXJndlthcmdQb3NdOwogICAgIH0KLSAgICBmcmFtZS0+c2V0
RXhpdEFmdGVyTG9hZGluZyhleGl0QWZ0ZXJMb2FkaW5nKTsKLSAgICBpZiAodXJsKSB7Ci0gICAg
ICAgIHByaW50ZigiT1BFTklORyBVUkwgPT0gJXMgXG4iLCB1cmwpOwotICAgICAgICBmcmFtZS0+
b3BlblVSTCh1cmwpOwotICAgIH0gZWxzZSB7Ci0jaWYgMAotICAgICAgICBjaGFyICpwZyA9ICIg
PGh0bWw+PGhlYWQ+PHRpdGxlPkdvb2dsZTwvdGl0bGU+IDxib2R5IGJnY29sb3I9I2ZmZmZmZiB0
ZXh0PSMwMDAwMDA+IDxwPjxmb250IHNpemU9LTIvPjIwMDYgR29vZ2xlIEhlbGxvIGJpZ3dvcmxk
IGZyb20gbWlrZTwvcD48L2JvZHk+PC9odG1sPiAiOwotICAgICAgICBmcmFtZS0+Y3JlYXRlRW1w
dHlEb2N1bWVudCgpOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+b3BlbigpOwotICAgICAg
ICBmcmFtZS0+d3JpdGUocGcsc3RybGVuKHBnKSk7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgp
LT5jbG9zZSgpOwotI2VuZGlmCisKKyAgICBTdHJpbmcgc3VybD11cmw7CisKKyAgICBpZiAoc3Ry
bmNtcCgiZmlsZTovLyIsdXJsLDcpICYmIHN0cm5jbXAoImh0dHA6Ly8iLHVybCw3KSkgeworICAg
ICAgICBpZiAoKnVybCAhPSAnLycpIHsKKyAgICAgICAgICAgIFN0cmluZyBwd2QgPSBnZXRlbnYo
IlBXRCIpOworICAgICAgICAgICAgc3VybCA9ICJmaWxlOi8vIitwd2QrIi8iK3N1cmw7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgc3VybCA9ICJmaWxlOi8vIitzdXJsOwogICAgIH0KLSAg
ICAKLSAgICBndGtfbWFpbigpOworCisgICAgcHJpbnRmKCJPUEVOSU5HIFVSTCA9PSAlcyBcbiIs
IHN1cmwuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCkpOworICAgIGZyYW1lLT5jaGFuZ2VMb2Nh
dGlvbihzdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSwiIik7CisgICAgZ19tYWluX2xvb3BfcnVuIChs
b29wKTsKICAgICBkZWxldGUgZnJhbWU7CiAgICAgZ2RrX3dpbmRvd19kZXN0cm95KHdpbik7CiAg
ICAgcmV0dXJuIDA7CkluZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9nZGtsYXVuY2hlci5i
a2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvZ2RrbGF1bmNoZXIuYmts
CShyZXZpc2lvbiAxNzYzMCkKKysrIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2dka2xhdW5jaGVy
LmJrbAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQAogICAgICAgICA8aW5jbHVkZT4k
KFRPUERJUikvV2ViQ29yZS9sb2FkZXI8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoVE9Q
RElSKS9XZWJDb3JlL3BhZ2U8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9X
ZWJDb3JlL3BsYXRmb3JtPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJ
UikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljczwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+
JChUT1BESVIpL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnM8L2luY2x1ZGU+CiAgICAg
ICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
ZjwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZzwvaW5jbHVkZT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11419</attachid>
            <date>2006-11-07 19:05:03 -0800</date>
            <delta_ts>2006-11-16 12:00:12 -0800</delta_ts>
            <desc>patch to add path support for cairo</desc>
            <filename>cairo_path.patch</filename>
            <type>text/plain</type>
            <size>53297</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCShyZXZpc2lvbiAxNzY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBQ
TEFURk9STShDQUlSTykKIAorI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMzcsMTEgKzM4
LDIwIEBACiAjaWYgV0lOMzIKICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgogI2VuZGlmCisjaWZk
ZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlQ2Fpcm8uaCIKKyNlbmRp
ZgogCiAjaWZuZGVmIE1fUEkKICNkZWZpbmUgTV9QSSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2CiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdESykKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7
IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICVzXG4iLCBfX0ZJ
TEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0gd2hpbGUoMCkKKyNlbHNlCisj
ZGVmaW5lIG5vdEltcGxlbWVudGVkKCkKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7CkBAIC02OSw3ICs3OSw3IEBA
CiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKCkKLSAgICA6ICBjb250ZXh0KDApCisgICAgOiBjb250ZXh0KDApCiB7CiB9
CiAKQEAgLTQ1NywxMyArNDY3LDM0OCBAQAogICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeDsKICAg
ICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OwogICAgIGNhaXJvX2dldF9tYXRy
aXgoY29udGV4dCwgJm1hdHJpeCk7Ci0gICAgcmV0dXJuIEludFBvaW50KG1hdHJpeC54MCwgbWF0
cml4LnkwKTsKKyAgICByZXR1cm4gSW50UG9pbnQoKGludCltYXRyaXgueDAsIChpbnQpbWF0cml4
LnkwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgS1VS
TCYgbGluaywgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7CiB9CiAKKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJ
bnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwKKyAgICAgICAgY29uc3Qg
SW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpCit7IAorICAg
IGlmKCByZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fbWF0cml4
X3QgY3VycmVudDsKKyAgICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OworCisg
ICAgY2Fpcm9fZ2V0X21hdHJpeChjb250ZXh0LCZjdXJyZW50KTsKKyAgICBjYWlyb19uZXdfcGF0
aChjb250ZXh0KTsKKworICAgIGRvdWJsZSB4ID0gcmVjdC54KCk7CisgICAgZG91YmxlIHkgPSBy
ZWN0LnkoKTsKKyAgICBkb3VibGUgd2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgZG91YmxlIGhl
aWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBmbG9hdCByeF90bCA9IC41ICogdG9wTGVmdC53
aWR0aCgpOworICAgIGZsb2F0IHJ5X3RsID0gLjUgKiB0b3BMZWZ0LmhlaWdodCgpOworCisgICAg
Ly9mb2xsb3cgc3ZnIHNwZWMgc2VlIFBhdGguY3BwIAorICAgIGlmIChyeF90bCA+IHdpZHRoIC8g
Mi4wKQorICAgICAgICByeF90bCA9IHdpZHRoIC8gMi4wOworICAgIGlmIChyeV90bCA+IGhlaWdo
dC8gMi4wKQorICAgICAgICByeV90bCA9IGhlaWdodCAvIDIuMDsKKworICAgIGZsb2F0IHJ4X3Ry
ID0gLjUgKiB0b3BSaWdodC53aWR0aCgpOworICAgIGZsb2F0IHJ5X3RyID0gLjUgKiB0b3BSaWdo
dC5oZWlnaHQoKTsKKworICAgIGlmIChyeF90ciA+IHdpZHRoIC8gMi4wKQorICAgICAgICByeF90
ciA9IHdpZHRoIC8gMi4wOworICAgIGlmIChyeV90ciA+IGhlaWdodC8gMi4wKQorICAgICAgICBy
eV90ciA9IGhlaWdodCAvIDIuMDsKKworICAgIGZsb2F0IHJ4X2JsID0gLjUgKiBib3R0b21MZWZ0
LndpZHRoKCk7CisgICAgZmxvYXQgcnlfYmwgPSAuNSAqIGJvdHRvbUxlZnQuaGVpZ2h0KCk7CisK
KyAgICBpZiAocnhfYmwgPiB3aWR0aCAvIDIuMCkKKyAgICAgICAgcnhfYmwgPSB3aWR0aCAvIDIu
MDsKKyAgICBpZiAocnlfYmwgPiBoZWlnaHQvIDIuMCkKKyAgICAgICAgcnlfYmwgPSBoZWlnaHQg
LyAyLjA7CisKKyAgICBmbG9hdCByeF9iciA9IC41ICogYm90dG9tUmlnaHQud2lkdGgoKTsKKyAg
ICBmbG9hdCByeV9iciA9IC41ICogYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisKKyAgICBpZiAocnhf
YnIgPiB3aWR0aCAvIDIuMCkKKyAgICAgICAgcnhfYnIgPSB3aWR0aCAvIDIuMDsKKyAgICBpZiAo
cnlfYnIgPiBoZWlnaHQvIDIuMCkKKyAgICAgICAgcnlfYnIgPSBoZWlnaHQgLyAyLjA7CisKKwor
ICAgIC8vdG9wICBsaW5lCisgICAgY2Fpcm9fbW92ZV90byhjb250ZXh0LCB4ICsgcnhfdGwsIHkp
OworICAgIGNhaXJvX2xpbmVfdG8oY29udGV4dCwgeCArIHdpZHRoIC0gcnhfdGwtIHJ4X3RyLCB5
KTsKKworICAgIC8vdG9wIHJpZ2h0IGN1cnZlCisgICAgY2Fpcm9fc2V0X21hdHJpeChjb250ZXh0
LCZjdXJyZW50KTsKKyAgICBpZiAocnhfdHIgPiAwIHx8IHJ5X3RyID4gMCkgeworICAgICAgICBj
YWlyb190cmFuc2xhdGUoY29udGV4dCwgeCArIHdpZHRoLXJ4X3RsLXJ4X3RyLHkpOworICAgICAg
ICBjYWlyb19zY2FsZShjb250ZXh0LCByeF90ciwgcnlfdHIpOworICAgICAgICBjYWlyb19hcmMo
Y29udGV4dCwgMC4sIDAuLCAxLiwgMC4sIDIgKiBNX1BJKTsKKyAgICAgICAgY2Fpcm9fc2V0X21h
dHJpeChjb250ZXh0LCZjdXJyZW50KTsKKyAgICB9ZWxzZSAKKyAgICAgICAgY2Fpcm9fbGluZV90
byhjb250ZXh0LCB4ICsgd2lkdGgsIHkrd2lkdGgtcnlfYmwpOworCisgICAgLy9ib3R0b20gcmln
aHQgY3VydmUKKyAgICBpZiAocnhfYnIgPiAwIHx8IHJ5X2JyID4gMCkgeworICAgICAgICBjYWly
b190cmFuc2xhdGUoY29udGV4dCwgeCArIHdpZHRoLCB5K3dpZHRoLXJ5X2JsKTsKKyAgICAgICAg
Y2Fpcm9fc2NhbGUoY29udGV4dCwgcnhfYnIsIHJ5X2JyKTsKKyAgICAgICAgY2Fpcm9fYXJjKGNv
bnRleHQsIDAuLCAwLiwgMS4sIDAuLCAyICogTV9QSSk7CisgICAgICAgIGNhaXJvX3NldF9tYXRy
aXgoY29udGV4dCwmY3VycmVudCk7CisgICAgICAgIGNhaXJvX2xpbmVfdG8oY29udGV4dCwgeCAt
IHJ4X2JsICwgeSt3aWR0aC1yeV9ibCk7CisgICAgfWVsc2UgCisgICAgICAgIGNhaXJvX2xpbmVf
dG8oY29udGV4dCwgeCAtIHJ4X2JsICwgeSt3aWR0aC1yeV9ibCk7CisKKyAgIAorICAgIC8vYm90
dG9tIGxlZnQgY3VydmUKKyAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQsJmN1cnJlbnQpOwor
ICAgIGlmIChyeF9ibCA+IDAgfHwgcnlfYmwgPiAwKSB7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0
ZShjb250ZXh0LCB4IC1yeF9ibCwgeSt3aWR0aCk7CisgICAgICAgIGNhaXJvX3NjYWxlKGNvbnRl
eHQsIHJ4X2JsLCByeV9ibCk7CisgICAgICAgIGNhaXJvX2FyYyhjb250ZXh0LCAwLiwgMC4sIDEu
LCAwLiwgMiAqIE1fUEkpOworICAgICAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQsJmN1cnJl
bnQpOworICAgICAgICBjYWlyb19saW5lX3RvKGNvbnRleHQsIHggLSByeF90ciAsIHkgLSByeV90
cik7CisgICAgfWVsc2UgCisgICAgICAgIGNhaXJvX2xpbmVfdG8oY29udGV4dCwgeCAtIHJ4X3Ry
ICwgeSAtIHJ5X3RyKTsKKworICAgIC8vdG9wIGxlZnQgY3VydmUKKyAgICBjYWlyb19zZXRfbWF0
cml4KGNvbnRleHQsJmN1cnJlbnQpOworICAgIGlmIChyeF90bCA+IDAgfHwgcnlfdGwgPiAwKSB7
CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCB4LCB5LXJ5X3RsKTsKKyAgICAgICAg
Y2Fpcm9fc2NhbGUoY29udGV4dCwgcnhfdGwsIHJ5X3RsKTsKKyAgICAgICAgY2Fpcm9fYXJjKGNv
bnRleHQsIDAuLCAwLiwgMS4sIDAuLCAyICogTV9QSSk7CisgICAgICAgIGNhaXJvX3NldF9tYXRy
aXgoY29udGV4dCwmY3VycmVudCk7CisgICAgfQorICAgIGNhaXJvX2NsaXAoY29udGV4dCk7CisK
KyAgICBjYWlyb19uZXdfcGF0aChjb250ZXh0KTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRl
eHQsJmN1cnJlbnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVk
UmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykgeworCisgICAgY2Fp
cm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19tYXRyaXhfdCBjdXJy
ZW50OworICAgIGNhaXJvX2dldF9tYXRyaXgoY29udGV4dCwmY3VycmVudCk7CisKKyAgICBmbG9h
dCB4UmFkaXVzID0gLjUgKiByZWN0LndpZHRoKCk7CisgICAgZmxvYXQgeVJhZGl1cyA9IC41ICog
cmVjdC5oZWlnaHQoKTsKKworICAgIAorICAgIGNhaXJvX25ld19wYXRoKGNvbnRleHQpOworICAg
IGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCByZWN0LngoKSArIHhSYWRpdXMsIHJlY3QueSgpICsg
eVJhZGl1cyk7CisgICAgY2Fpcm9fc2NhbGUoY29udGV4dCwgeFJhZGl1cywgeVJhZGl1cyk7Cisg
ICAgY2Fpcm9fYXJjKGNvbnRleHQsIDAuLCAwLiwgMS4sIDAuLCAyICogTV9QSSk7CisgICAgY2Fp
cm9fc2V0X21hdHJpeChjb250ZXh0LCZjdXJyZW50KTsKKworICAgIHhSYWRpdXMgPSAuNSAqIHJl
Y3Qud2lkdGgoKSAtICh0aGlja25lc3MgKiAyKTsKKyAgICB5UmFkaXVzID0gLjUgKiByZWN0Lmhl
aWdodCgpLSAodGhpY2tuZXNzICogMik7CisKKworICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0
LCByZWN0LngoKSArdGhpY2tuZXNzKyB4UmFkaXVzLCByZWN0LnkoKSArIHRoaWNrbmVzcyArIHlS
YWRpdXMpOworICAgIGNhaXJvX3NjYWxlKGNvbnRleHQsIHhSYWRpdXMsIHlSYWRpdXMpOworICAg
IGNhaXJvX2FyYyhjb250ZXh0LCAwLiwgMC4sIDEuLCAwLiwgMiAqIE1fUEkpOworICAgIGNhaXJv
X3NldF9tYXRyaXgoY29udGV4dCwmY3VycmVudCk7CisKKyAgICBjYWlyb19jbGlwKGNvbnRleHQp
OworCisgICAgY2Fpcm9fbmV3X3BhdGgoY29udGV4dCk7CisgICAgY2Fpcm9fc2V0X21hdHJpeChj
b250ZXh0LCZjdXJyZW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhJ
bnRTaXplIGNvbnN0JiwgaW50LCBDb2xvciBjb25zdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBhbHBoYSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fp
cm9fcHVzaF9ncm91cChjcik7CisgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYSAoY3IsYWxwaGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190
KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19wb3BfZ3JvdXBfdG9fc291cmNlIChj
cik7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7
CisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19P
UEVSQVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcmVjdGFuZ2xlIChjciwgcmVjdC54KCkscmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbCAoY3IpOwor
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0
YS0+Y29udGV4dDsKKworICAgIGlmIChwZW4oKS5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsKKyAg
ICAgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgICAgIHNldENvbG9yKGNyLCBwZW4oKS5jb2xvcigp
KTsKKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNy
LHdpZHRoKTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKKyAgICAgICAgY2Fpcm9fcmVzdG9y
ZShjcik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZVdpZHRoKGZs
b2F0IHdpZHRoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBjYWlyb19zZXRfbGluZV93aWR0aCAobV9kYXRhLT5jb250ZXh0LHdpZHRoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsYykKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb19saW5l
X2NhcF90IGNhcCA9IENBSVJPX0xJTkVfQ0FQX0JVVFQ7CisKKyAgICBzd2l0Y2ggKGxjKSB7Cisg
ICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgY2FwID0gQ0FJUk9fTElORV9DQVBfUk9VTkQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU3F1YXJlQ2FwOgorICAgICAgICBjYXAgPSBDQUlST19M
SU5FX0NBUF9TUVVBUkU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYWlyb19zZXRfbGlu
ZV9jYXAobV9kYXRhLT5jb250ZXh0LGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lSm9pbihMaW5lSm9pbiBsaikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fbGluZV9qb2luX3Qgam9pbiA9IENBSVJPX0xJTkVf
Sk9JTl9NSVRFUjsKKworICAgIHN3aXRjaCAobGopIHsKKyAgICBjYXNlIFJvdW5kSm9pbjoKKyAg
ICAgICAgam9pbiA9IENBSVJPX0xJTkVfSk9JTl9ST1VORDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBCZXZlbEpvaW46CisgICAgICAgIGpvaW4gPSBDQUlST19MSU5FX0pPSU5fUk9VTkQ7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYWlyb19zZXRfbGluZV9qb2luKG1fZGF0YS0+Y29u
dGV4dCxqb2luKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhaXJvX3NldF9taXRlcl9saW1pdChtX2RhdGEtPmNvbnRleHQsbWl0ZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vRklYTUUgbWUgdXNl
IHRoaXMgYWxwaGEgaG93ID8KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19vcGVyYXRvcl90IGNvcCA9IENB
SVJPX09QRVJBVE9SX0NMRUFSOworCisgICAgLy9ub3Qgc3VwcG9ydGVkID8KKyAgICAvL2NvcCA9
IENBSVJPX09QRVJBVE9SX0RFU1Q7CisgICAgLy9jb3AgPSBDQUlST19PUEVSQVRPUl9BREQ7Cisg
ICAgLy8gY29wID0gQ0FJUk9fT1BFUkFUT1JfU0FUVVJBVEU7CisKKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgICAgIC8vY2FzZSBDb21wb3NpdGVDbGVhcjoKKyAgICBjYXNlIENvbXBvc2l0ZUNvcHk6
CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX1NPVVJDRTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRP
Ul9PVkVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUluOgorICAg
ICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9JTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
b21wb3NpdGVTb3VyY2VPdXQ6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX09VVDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VBdG9wOgorICAgICAgICBjb3Ag
PSBDQUlST19PUEVSQVRPUl9BVE9QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0
ZURlc3RpbmF0aW9uT3ZlcjoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfREVTVF9PVkVS
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uSW46CisgICAg
ICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX0RFU1RfSU47CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQ6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9S
X0RFU1RfT1VUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9u
QXRvcDoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfREVTVF9BVE9QOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVhPUjoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFU
T1JfWE9SOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVBsdXNEYXJrZXI6Cisg
ICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX09WRVI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29tcG9zaXRlSGlnaGxpZ2h0OgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9PVkVS
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVBsdXNMaWdodGVyOgorICAgICAg
ICBjb3AgPSBDQUlST19PUEVSQVRPUl9PVkVSOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2Fpcm9fc2V0X29wZXJhdG9yKGNyLGNvcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNh
aXJvX3BhdGhfdCAqcCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CisgICAgY2Fpcm9fYXBwZW5kX3Bh
dGgoY3IscCk7CisgICAgY2Fpcm9fY2xpcChjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Ojpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3JvdGF0ZShtX2RhdGEtPmNvbnRleHQs
YW5nbGVJblJhZGlhbnMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBjYWlyb19zY2FsZShtX2RhdGEtPmNvbnRleHQsc2l6ZS53aWR0aCgpLHNp
emUuaGVpZ2h0KCkpOworfQorCisjaWZkZWYgU1ZHX1NVUFBPUlQKK0tSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKQor
eworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBjdHggPSBzdGF0aWNfY2FzdDxHcmFwaGljc0Nv
bnRleHRDYWlybyo+KHRoaXMpOworICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRDYWlybyhjdHgpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKENBSVJPKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9QYXRo
Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vUGF0aENhaXJv
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vUGF0aENhaXJvLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorCisgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQYXRoLmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisKKyNpZiBQTEFURk9S
TShHREspCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJ
WE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJF
VFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBub3RJbXBsZW1lbnRl
ZCgpCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXRoOjpQYXRoKCkKK3sKKyAg
ICBpbml0KCk7Cit9CisKK1BhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCit7CisgICAgaW5p
dCgpOworICAgIGNhaXJvX3BhdGhfdCAqcCA9IGNhaXJvX2NvcHlfcGF0aChvdGhlci5tX2NyKTsK
KyAgICBjYWlyb19hcHBlbmRfcGF0aChtX2NyLHApOworfQorCit2b2lkIFBhdGg6OmluaXQoKQor
eworICAgIGNhaXJvX3N1cmZhY2VfdCogcGF0aFN1cmZhY2UgPSAKKyAgICAgICAgICAgIGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BOCwxLDEpOworICAgIG1fY3IgPSBj
YWlyb19jcmVhdGUocGF0aFN1cmZhY2UpOworICAgIC8vRklYTUU6IGhhY2sgdG8gd29yayBhcm91
bmQgbm8gY3VycmVudCBwb2ludCBidWcKKyAgICAvL3Nob3VsZCBiZSBmaXhlZCBpbiBjYWlybyBn
aXQKKyAgICBtb3ZlVG8oRmxvYXRQb2ludCgwLDApKTsKK30KKworCisKK1BhdGgmIFBhdGg6Om9w
ZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKK3sKKyAgICBpZiAoJm90aGVyID09IHRoaXMpIHsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBjbGVhcigpOworICAgIGNhaXJvX3Bh
dGhfdCAqcCA9IGNhaXJvX2NvcHlfcGF0aChvdGhlci5tX2NyKTsKKyAgICBjYWlyb19hcHBlbmRf
cGF0aChtX2NyLHApOworICAgIHJldHVybiAqdGhpczsKK30KKworCitQYXRoOjp+UGF0aCgpCit7
CisgICAgY2Fpcm9fZGVzdHJveShtX2NyKTsKK30KKwordm9pZCBQYXRoOjpjbGVhcigpCit7Cisg
ICAgY2Fpcm9fbmV3X3BhdGgobV9jcik7Cit9CisKK2Jvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0
Cit7CisgICAgLy9kb3VibGUgZHgsZHk7CisgICAgLy9pZi93aGVuIHRoZSBwYXRjaCB0byBnZXQg
Y3VycmVudCBwdCByZXR1cm4gc3RhdHVzIGlzIGFwcGxpZWQKKyAgICAvL3JldHVybiBjYWlyb19n
ZXRfY3VycmVudF9wb2ludChtX2NyLCZkeCwmZHkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBwKQoreworICAgIGNhaXJvX3Ry
YW5zbGF0ZShtX2NyLHAud2lkdGgoKSxwLmhlaWdodCgpKTsKK30KKwordm9pZCBQYXRoOjptb3Zl
VG8oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBjYWlyb19tb3ZlX3RvKG1fY3IsIHAueCgp
LCBwLnkoKSk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHAp
Cit7CisgICAgY2Fpcm9fbGluZV90byhtX2NyLCBwLngoKSwgcC55KCkpOworfQorCit2b2lkIFBh
dGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGNhaXJvX3JlY3Rhbmds
ZShtX2NyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
Cit9CisKKy8qCisgKiBjb3BpZWQgZnJvbSBsaWJzdmctY2Fpcm8KKyAqLwordm9pZCBQYXRoOjph
ZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KQoreworIAorICAgIGRvdWJsZSB4LCB5OworICAgIGRvdWJsZSB4MSA9IGNv
bnRyb2xQb2ludC54KCk7CisgICAgZG91YmxlIHkxID0gY29udHJvbFBvaW50LnkoKTsKKyAgICBk
b3VibGUgeDIgPSBwb2ludC54KCk7CisgICAgZG91YmxlIHkyID0gcG9pbnQueSgpOworICAgIGNh
aXJvX2dldF9jdXJyZW50X3BvaW50IChtX2NyLCAmeCwgJnkpOworICAgIGNhaXJvX2N1cnZlX3Rv
IChtX2NyLAorICAgICAgICAgICAgICAgICAgICB4ICArIDIuMC8zLjAgKiAoeDEgLSB4KSwgIHkg
ICsgMi4wLzMuMCAqICh5MSAtIHkpLAorICAgICAgICAgICAgICAgICAgICB4MiArIDIuMC8zLjAg
KiAoeDEgLSB4MiksIHkyICsgMi4wLzMuMCAqICh5MSAtIHkyKSwKKyAgICAgICAgICAgICAgICAg
ICAgeDIsIHkyKTsKK30KKwordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDIsIGNv
bnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDMpCit7CisgICAgY2Fpcm9fY3VydmVfdG8obV9j
ciwgY29udHJvbFBvaW50MS54KCksIGNvbnRyb2xQb2ludDEueSgpLAorICAgICAgICAgICAgICAg
ICAgIGNvbnRyb2xQb2ludDIueCgpLCBjb250cm9sUG9pbnQyLnkoKSwKKyAgICAgICAgICAgICAg
ICAgICBjb250cm9sUG9pbnQzLngoKSwgY29udHJvbFBvaW50My55KCkpOworfQorCit2b2lkIFBh
dGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzYSwgZmxvYXQg
ZWEsIGJvb2wgY2xvY2t3aXNlKQoreworICAgIGlmIChjbG9ja3dpc2UpCisgICAgICAgIGNhaXJv
X2FyYyhtX2NyLHAueCgpLHAueSgpLHIsc2EsZWEpOworICAgIGVsc2UKKyAgICAgICAgY2Fpcm9f
YXJjX25lZ2F0aXZlKG1fY3IscC54KCkscC55KCkscixzYSxlYSk7Cit9CisKK3ZvaWQgUGF0aDo6
YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9h
dCByYWRpdXMpCit7CisgICAgLy9GSVhNRTogY2Fpcm9fYXJjX3RvIG5vdCB5ZXQgaW4gY2Fpcm8g
c2VlIGNhaXJvLmgKKyAgICAvL2NhaXJvX2FyY190byhtX2NyLHAxLngoKSxwMS55KCkscDIueCgp
LHAyLnkoKSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjphZGRFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBjYWlyb19zYXZlKG1fY3IpOworICAg
IGZsb2F0IHlSYWRpdXMgPSAuNSAqIHJlY3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgeFJhZGl1cyA9
IC41ICogcmVjdC53aWR0aCgpOworICAgIGNhaXJvX3RyYW5zbGF0ZShtX2NyLCByZWN0LngoKSAr
IHhSYWRpdXMsIHJlY3QueSgpICsgeVJhZGl1cyk7CisgICAgY2Fpcm9fc2NhbGUobV9jciwgeFJh
ZGl1cywgeVJhZGl1cyk7CisgICAgY2Fpcm9fYXJjKG1fY3IsIDAuLCAwLiwgMS4sIDAuLCAyICog
TV9QSSk7CisgICAgY2Fpcm9fcmVzdG9yZShtX2NyKTsKK30KKwordm9pZCBQYXRoOjpjbG9zZVN1
YnBhdGgoKQoreworICAgIGNhaXJvX2Nsb3NlX3BhdGgobV9jcik7Cit9CisKKworRmxvYXRSZWN0
IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0Cit7CisgICAgZG91YmxlIHgsIHksIHcsIGg7Cisg
ICAgY2Fpcm9fZmlsbF9leHRlbnRzKG1fY3IsJngsJnksJncsJmgpOworICAgIHJldHVybiBGbG9h
dFJlY3QoeCx5LHcsaCk7Cit9CisKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Cit7CisgICAgY2Fpcm9fZmlsbF9ydWxlX3Qg
Y3VyID0gY2Fpcm9fZ2V0X2ZpbGxfcnVsZShtX2NyKTsKKyAgICBjYWlyb19zZXRfZmlsbF9ydWxl
KG1fY3IscnVsZSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOgor
ICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOworICAgIGJv
b2wgY29udGFpbnMgPSAgY2Fpcm9faW5fZmlsbChtX2NyLChkb3VibGUpcG9pbnQueCgpLChkb3Vi
bGUpcG9pbnQueSgpKTsKKyAgICBjYWlyb19zZXRfZmlsbF9ydWxlKG1fY3IsY3VyKTsKKyAgICBy
ZXR1cm4gY29udGFpbnM7Cit9CisKKyNpZmRlZiBTVkdfU1VQUE9SVCAKKworYm9vbCBQYXRoOjpz
dHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbGluZVdpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lQ2FwIGNhcCxMaW5lSm9pbiBqb2luLCBmbG9h
dCBtaXRlckxpbWl0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUobV9jcik7CisKKyAgICBjYWly
b19zZXRfbGluZV93aWR0aCAobV9jcixsaW5lV2lkdGgpOworCisgICAgaWYgKGNhcCA9PSBSb3Vu
ZENhcCkKKyAgICAgICAgY2Fpcm9fc2V0X2xpbmVfY2FwKG1fY3IsQ0FJUk9fTElORV9DQVBfUk9V
TkQpOworICAgIGVsc2UgaWYoY2FwID09IFNxdWFyZUNhcCkKKyAgICAgICAgY2Fpcm9fc2V0X2xp
bmVfY2FwKG1fY3IsQ0FJUk9fTElORV9DQVBfU1FVQVJFKTsKKyAgICBlbHNlCisgICAgICAgIGNh
aXJvX3NldF9saW5lX2NhcChtX2NyLENBSVJPX0xJTkVfQ0FQX0JVVFQpOworCisgICAgaWYoam9p
biA9PSBSb3VuZEpvaW4pCisgICAgICAgIGNhaXJvX3NldF9saW5lX2pvaW4obV9jcixDQUlST19M
SU5FX0pPSU5fUk9VTkQpOworICAgIGVsc2UgaWYoam9pbiA9PSBCZXZlbEpvaW4pCisgICAgICAg
IGNhaXJvX3NldF9saW5lX2pvaW4obV9jcixDQUlST19MSU5FX0pPSU5fQkVWRUwpOworICAgIGVs
c2UKKyAgICAgICAgY2Fpcm9fc2V0X2xpbmVfam9pbihtX2NyLENBSVJPX0xJTkVfSk9JTl9NSVRF
Uik7CisKKyAgICBpZiAoam9pbiA9PSBNaXRlckpvaW4gJiYgbWl0ZXJMaW1pdCkKKyAgICAgICAg
Y2Fpcm9fc2V0X21pdGVyX2xpbWl0KG1fY3IsbWl0ZXJMaW1pdCk7CisKKyAgICBib29sIGluU3Ry
b2tlID0gY2Fpcm9faW5fc3Ryb2tlKGNyLChkb3VibGUpcC54KCksKGRvdWJsZSlwLnkoKSk7CisK
KyAgICBjYWlyb19yZXN0b3JlKG1fY3IpOworCisgICAgcmV0dXJuIGluU3Ryb2tlOworfQorCitG
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGZsb2F0IGxpbmVXaWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZUNhcCBjYXAsTGluZUpvaW4gam9pbiwg
ZmxvYXQgbWl0ZXJMaW1pdCkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKG1fY3IpOworCisgICAg
Y2Fpcm9fc2V0X2xpbmVfd2lkdGggKG1fY3IsbGluZVdpZHRoKTsKKworICAgIGlmIChjYXAgPT0g
Um91bmRDYXApIAorICAgICAgICBjYWlyb19zZXRfbGluZV9jYXAobV9jcixDQUlST19MSU5FX0NB
UF9ST1VORCk7CisgICAgZWxzZSBpZihjYXAgPT0gU3F1YXJlQ2FwKQorICAgICAgICBjYWlyb19z
ZXRfbGluZV9jYXAobV9jcixDQUlST19MSU5FX0NBUF9TUVVBUkUpOworICAgIGVsc2UKKyAgICAg
ICAgY2Fpcm9fc2V0X2xpbmVfY2FwKG1fY3IsQ0FJUk9fTElORV9DQVBfQlVUVCk7CisKKyAgICBp
Zihqb2luID09IFJvdW5kSm9pbikKKyAgICAgICAgY2Fpcm9fc2V0X2xpbmVfam9pbihtX2NyLENB
SVJPX0xJTkVfSk9JTl9ST1VORCk7CisgICAgZWxzZSBpZihqb2luID09IEJldmVsSm9pbikKKyAg
ICAgICAgY2Fpcm9fc2V0X2xpbmVfam9pbihtX2NyLENBSVJPX0xJTkVfSk9JTl9CRVZFTCk7Cisg
ICAgZWxzZQorICAgICAgICBjYWlyb19zZXRfbGluZV9qb2luKG1fY3IsQ0FJUk9fTElORV9KT0lO
X01JVEVSKTsKKworICAgIGlmIChqb2luID09IE1pdGVySm9pbiAmJiBtaXRlckxpbWl0KQorICAg
ICAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQobV9jcixtaXRlckxpbWl0KTsKKworICAgIGRvdWJs
ZSB4LCB5LCB3LCBoOworICAgIGNhaXJvX3N0cm9rZV9leHRlbnRzKGNyLCZ4LCZ5LCZ3LCZoKTsK
KyAgICBGbG9hdFJlY3QgYmJveCA9IEZsb2F0UmVjdCh4LHksdyxoKTsKKworICAgIGNhaXJvX3Jl
c3RvcmUobV9jcik7CisKKyAgICByZXR1cm4gYmJveDsKK30KKyNlbmRpZgorCit2b2lkIFBhdGg6
OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Cit7
CisgICAgaW50IGk7CisgICAgY2Fpcm9fcGF0aF90ICpwYXRoID0gIHBsYXRmb3JtUGF0aCgpOwor
ICAgIGNhaXJvX3BhdGhfZGF0YV90KiBkYXRhOworICAgIFBhdGhFbGVtZW50IHBlbGVtZW50Owor
ICAgIEZsb2F0UG9pbnQgcG9pbnRzWzNdOworICAgIHBlbGVtZW50LnBvaW50cyA9IHBvaW50czsK
KworICAgIGZvciAoaT0wOyBpIDwgcGF0aC0+bnVtX2RhdGE7IGkgKz0gcGF0aC0+ZGF0YVtpXS5o
ZWFkZXIubGVuZ3RoKSB7CisgICAgICAgIGRhdGEgPSAmcGF0aC0+ZGF0YVtpXTsKKyAgICAgICAg
c3dpdGNoIChkYXRhLT5oZWFkZXIudHlwZSkgeworICAgICAgICBjYXNlIENBSVJPX1BBVEhfTU9W
RV9UTzoKKyAgICAgICAgICAgIHBlbGVtZW50LnR5cGUgPSBQYXRoRWxlbWVudE1vdmVUb1BvaW50
OworICAgICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzBdID0gRmxvYXRQb2ludChkYXRhWzFdLnBv
aW50LngsZGF0YVsxXS5wb2ludC55KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKGluZm8sICZwZWxl
bWVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDQUlST19QQVRIX0xJTkVf
VE86CisgICAgICAgICAgICBwZWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2lu
dDsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1swXSA9IEZsb2F0UG9pbnQoZGF0YVsxXS5w
b2ludC54LGRhdGFbMV0ucG9pbnQueSk7CisgICAgICAgICAgICBmdW5jdGlvbihpbmZvLCAmcGVs
ZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0FJUk9fUEFUSF9DVVJW
RV9UTzoKKyAgICAgICAgICAgIHBlbGVtZW50LnR5cGUgPSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Q
b2ludDsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1swXSA9IEZsb2F0UG9pbnQoZGF0YVsx
XS5wb2ludC54LGRhdGFbMV0ucG9pbnQueSk7CisgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNb
MV0gPSBGbG9hdFBvaW50KGRhdGFbMl0ucG9pbnQueCxkYXRhWzJdLnBvaW50LnkpOworICAgICAg
ICAgICAgcGVsZW1lbnQucG9pbnRzWzJdID0gRmxvYXRQb2ludChkYXRhWzNdLnBvaW50LngsZGF0
YVszXS5wb2ludC55KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKGluZm8sICZwZWxlbWVudCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDQUlST19QQVRIX0NMT1NFX1BBVEg6Cisg
ICAgICAgICAgICBwZWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg7CisgICAg
ICAgICAgICBmdW5jdGlvbihpbmZvLCAmcGVsZW1lbnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2Fpcm9fcGF0aF9kZXN0cm95IChwYXRoKTsKK30KKwordm9p
ZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFucykKK3sKKyAgICBj
YWlyb19tYXRyaXhfdCBjX21hdHJpeCA9IGNhaXJvX21hdHJpeF90KHRyYW5zKTsKKyAgICBjYWly
b190cmFuc2Zvcm0obV9jciwmY19tYXRyaXgpOworfQorCitQbGF0Zm9ybVBhdGgqIFBhdGg6OnBs
YXRmb3JtUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2NvcHlfcGF0aChtX2NyKTsK
K30KKworU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgc3Ry
aW5nPSIiOworICAgIGludCBpOworICAgIGNhaXJvX3BhdGhfdCAqcGF0aCA9ICBwbGF0Zm9ybVBh
dGgoKTsKKyAgICBjYWlyb19wYXRoX2RhdGFfdCogZGF0YTsKKyAgICBpZiAocGF0aC0+bnVtX2Rh
dGEgPT0gMCkKKyAgICAgICAgc3RyaW5nID0gIkVNUFRZIjsKKyAgICBmb3IgKGk9MDsgaSA8IHBh
dGgtPm51bV9kYXRhOyBpICs9IHBhdGgtPmRhdGFbaV0uaGVhZGVyLmxlbmd0aCkgeworICAgICAg
ICBkYXRhID0gJnBhdGgtPmRhdGFbaV07CisgICAgICAgIHN3aXRjaCAoZGF0YS0+aGVhZGVyLnR5
cGUpIHsKKyAgICAgICAgY2FzZSBDQUlST19QQVRIX01PVkVfVE86CisgICAgICAgICAgICBzdHJp
bmcgKz0gU3RyaW5nOjpzcHJpbnRmKCJNICUuMmYsJS4yZiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFbMV0ucG9pbnQueCwgZGF0YVsxXS5wb2ludC55KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENBSVJPX1BBVEhfTElORV9UTzoKKyAgICAg
ICAgICAgIHN0cmluZyArPSBTdHJpbmc6OnNwcmludGYoIkwgJS4yZiwlLjJmIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXS5wb2ludC54LCBkYXRhWzFdLnBv
aW50LnkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0FJUk9fUEFUSF9DVVJW
RV9UTzoKKyAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmc6OnNwcmludGYoIkMgJS4yZiwlLjJm
LCUuMmYsJS4yZiwlLjJmLCUuMmYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhWzFdLnBvaW50LngsIGRhdGFbMV0ucG9pbnQueSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXS5wb2ludC54LCBkYXRhWzJdLnBvaW50LnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10ucG9pbnQueCwgZGF0
YVszXS5wb2ludC55KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENBSVJPX1BB
VEhfQ0xPU0VfUEFUSDoKKyAgICAgICAgICAgIHN0cmluZyArPSAiWCI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYWlyb19wYXRoX2Rlc3Ryb3kgKHBhdGgpOwor
ICAgIHJldHVybiBzdHJpbmc7Cit9CisKK30KKy8vIHZpbTp0cz00OmV0CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDE3NjMwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIsMzAgKzIyLDI2IEBACiAgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2RlZmluZSBXSU4zMl9DT01QSUxFX0hB
Q0sKKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAi
Q1N0cmluZy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJUZXh0RmllbGQuaCIKLSNp
bmNsdWRlICJGaWxlQ2hvb3Nlci5oIgogI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJMaXN0
Qm94LmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIldpZGdldC5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIlNsaWRlci5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgogI2lu
Y2x1ZGUgImxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIktVUkwu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgotI2luY2x1ZGUgIlNjcm9sbEJhci5o
IgotI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNp
bmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJTY3JlZW4uaCIKQEAgLTU5LDMyMCArNTUs
NTA2IEBACiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVHZGsuaCIKICNpbmNsdWRlICJUZXh0Qm91bmRh
cmllcy5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJFZGl0Q29tbWFu
ZC5oIgotI2luY2x1ZGUgIkljb24uaCIKLSNpbmNsdWRlICJJY29uTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiSWNvbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRl
ICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIK
KyNpbmNsdWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJTb3VuZC5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1zdHJ1Y3QgUGxhdGZvcm1EYXRhU3RydWN0CisKKyNkZWZpbmUgbm90
SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6
ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0g
d2hpbGUoMCkKKworYm9vbCBSZXNvdXJjZUxvYWRlcjo6bG9hZHNCbG9ja2VkKCkgeyByZXR1cm4g
ZmFsc2U7IH0KKworV2lkZ2V0KiBGcmFtZUdkazo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25z
dCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JikKIHsK
LX07CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAotc3RydWN0IFBs
YXRmb3JtUmVzcG9uc2VTdHJ1Y3QKK3ZvaWQgVGV4dEZpZWxkOjpzZWxlY3RBbGwoKQogewotfTsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQordm9pZCBUZXh0RmllbGQ6OmFkZFNlYXJjaFJlc3Vs
dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK2ludCBUZXh0RmllbGQ6OnNlbGVjdGlv
blN0YXJ0KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorYm9vbCBUZXh0RmllbGQ6Omhhc1NlbGVjdGVkVGV4dCgpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK1N0cmluZyBUZXh0RmllbGQ6OnNlbGVjdGVk
VGV4dCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9Cit2b2lkIFRleHRGaWVsZDo6c2V0QXV0b1NhdmVOYW1lKFN0cmluZyBjb25zdCYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK2Jvb2wgVGV4dEZpZWxkOjpjaGVja3NEZXNjZW5k
YW50c0ZvckZvY3VzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KK3ZvaWQgVGV4dEZpZWxkOjpzZXRTZWxlY3Rpb24oaW50LCBpbnQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgVGV4dEZpZWxkOjpzZXRNYXhSZXN1bHRzKGlu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorYm9vbCBUZXh0RmllbGQ6OmVkaXRlZCgp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KIAotI2Rl
ZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBM
RU1FTlRFRDogJXMgaW4gJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9f
KTsgfSB3aGlsZSgwKQorU2xpZGVyOjpTbGlkZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CitJbnRTaXplIFNsaWRlcjo6c2l6ZUhpbnQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIEludFNpemUoKTsKK30KK3ZvaWQgU2xpZGVyOjpzZXRWYWx1ZShk
b3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgU2xpZGVyOjpzZXRNYXhW
YWx1ZShkb3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgU2xpZGVyOjpz
ZXRNaW5WYWx1ZShkb3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK1NsaWRlcjo6
flNsaWRlcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgU2xpZGVyOjpzZXRG
b250KFdlYkNvcmU6OkZvbnQgY29uc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Citk
b3VibGUgU2xpZGVyOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KIAotdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUJvcmRlcigpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotYm9vbCBGcmFtZVZpZXc6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1Njcm9s
bGJhcihNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgUGxhdGZvcm1TY3JvbGxiYXIqKSB7
IHJldHVybiBmYWxzZTsgfQotYm9vbCBGcmFtZVZpZXc6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1
YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBGcmFtZSopIHsgcmV0dXJuIHRy
dWU7IH0KLWJvb2wgRnJhbWVWaWV3OjpwYXNzTW91c2VSZWxlYXNlRXZlbnRUb1N1YmZyYW1lKE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBGcmFtZSopIHsgcmV0dXJuIHRydWU7IH0KLWJv
b2wgRnJhbWVWaWV3OjpwYXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmLCBGcmFtZSopIHsgcmV0dXJuIHRydWU7IH0KLWJvb2wgRnJhbWVWaWV3
OjpwYXNzV2hlZWxFdmVudFRvU3ViZnJhbWUoUGxhdGZvcm1XaGVlbEV2ZW50JiwgRnJhbWUqKSB7
IHJldHVybiB0cnVlOyB9CitXaWRnZXQ6OkZvY3VzUG9saWN5IFNsaWRlcjo6Zm9jdXNQb2xpY3ko
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIENsaWNrRm9jdXM7
Cit9CiAKLXZvaWQgV2lkZ2V0OjplbmFibGVGbHVzaERyYXdpbmcoKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLWJvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiAwOyB9Ci1XaWRnZXQ6OkZvY3VzUG9saWN5IFdpZGdldDo6Zm9jdXNQb2xpY3koKSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBOb0ZvY3VzOyB9Ci12b2lkIFdpZGdldDo6
ZGlzYWJsZUZsdXNoRHJhd2luZygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotR3JhcGhpY3NDb250
ZXh0KiBXaWRnZXQ6OmxvY2tEcmF3aW5nRm9jdXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biAwOyB9Ci12b2lkIFdpZGdldDo6dW5sb2NrRHJhd2luZ0ZvY3VzKEdyYXBoaWNzQ29udGV4dCop
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBXaWRnZXQ6OnJlbW92ZUZyb21QYXJlbnQoKSB7
IH0KK1dpZGdldDo6Rm9jdXNQb2xpY3kgVGV4dEZpZWxkOjpmb2N1c1BvbGljeSgpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gQ2xpY2tGb2N1czsKK30KIAotdm9p
ZCBUZXh0RmllbGQ6OnNlbGVjdEFsbCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBUZXh0
RmllbGQ6OmFkZFNlYXJjaFJlc3VsdCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotaW50IFRleHRG
aWVsZDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAw
OyB9Ci1ib29sIFRleHRGaWVsZDo6aGFzU2VsZWN0ZWRUZXh0KCkgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMDsgfQotU3RyaW5nIFRleHRGaWVsZDo6c2VsZWN0ZWRUZXh0KCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLXZvaWQgVGV4dEZpZWxk
OjpzZXRBdXRvU2F2ZU5hbWUoU3RyaW5nIGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1i
b29sIFRleHRGaWVsZDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0IHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFRleHRGaWVsZDo6c2V0U2VsZWN0aW9u
KGludCwgaW50KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRNYXhS
ZXN1bHRzKGludCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29sIFRleHRGaWVsZDo6ZWRpdGVk
KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorQ3Vyc29yOjpDdXJzb3Io
SW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KIAot
U2xpZGVyOjpTbGlkZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUludFNpemUgU2xpZGVyOjpz
aXplSGludCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFNpemUoKTsgfQot
dm9pZCBTbGlkZXI6OnNldFZhbHVlKGRvdWJsZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lk
IFNsaWRlcjo6c2V0TWF4VmFsdWUoZG91YmxlKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQg
U2xpZGVyOjpzZXRNaW5WYWx1ZShkb3VibGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotU2xpZGVy
Ojp+U2xpZGVyKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFNsaWRlcjo6c2V0Rm9udChX
ZWJDb3JlOjpGb250IGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1kb3VibGUgU2xpZGVy
Ojp2YWx1ZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2NvbnN0IFBs
YXRmb3JtTW91c2VFdmVudDo6Q3VycmVudEV2ZW50VGFnIFBsYXRmb3JtTW91c2VFdmVudDo6Y3Vy
cmVudEV2ZW50ID0geyB9OwogCi12b2lkIExpc3RCb3g6OnNldFNlbGVjdGVkKGludCwgYm9vbCkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1JbnRTaXplIExpc3RCb3g6OnNpemVGb3JOdW1iZXJPZkxp
bmVzKGludCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gSW50U2l6ZSgpOyB9Ci1i
b29sIExpc3RCb3g6OmlzU2VsZWN0ZWQoaW50KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiAwOyB9Ci12b2lkIExpc3RCb3g6OmFwcGVuZEl0ZW0oRGVwcmVjYXRlZFN0cmluZyBjb25z
dCYsIExpc3RCb3hJdGVtVHlwZSwgYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIExp
c3RCb3g6OmRvbmVBcHBlbmRpbmdJdGVtcygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBM
aXN0Qm94OjpzZXRXcml0aW5nRGlyZWN0aW9uKFRleHREaXJlY3Rpb24pIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQotdm9pZCBMaXN0Qm94OjpzZXRFbmFibGVkKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotdm9pZCBMaXN0Qm94OjpjbGVhcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBM
aXN0Qm94OjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDsgfQorUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQo
Y29uc3QgQ3VycmVudEV2ZW50VGFnJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQogCi1X
aWRnZXQ6OkZvY3VzUG9saWN5IFNsaWRlcjo6Zm9jdXNQb2xpY3koKSBjb25zdCB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiBOb0ZvY3VzOyB9Ci1XaWRnZXQ6OkZvY3VzUG9saWN5IExpc3RCb3g6
OmZvY3VzUG9saWN5KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9Gb2N1czsg
fQotV2lkZ2V0OjpGb2N1c1BvbGljeSBUZXh0RmllbGQ6OmZvY3VzUG9saWN5KCkgY29uc3QgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9Gb2N1czsgfQorU3RyaW5nIFdlYkNvcmU6OnNlYXJj
aGFibGVJbmRleEludHJvZHVjdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CiAKLUN1cnNvcjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9p
bnQmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2ludCBXZWJDb3JlOjpmaW5kTmV4dFNlbnRlbmNl
RnJvbUluZGV4KFVDaGFyIGNvbnN0KiwgaW50LCBpbnQsIGJvb2wpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK3ZvaWQgV2ViQ29yZTo6ZmluZFNlbnRlbmNlQm91
bmRhcnkoVUNoYXIgY29uc3QqLCBpbnQsIGludCwgaW50KiwgaW50KikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQoraW50IFdlYkNvcmU6OmZpbmROZXh0V29yZEZyb21JbmRleChVQ2hhciBj
b25zdCosIGludCwgaW50LCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CiAKLVBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0
IEN1cnJlbnRFdmVudFRhZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotU3RyaW5nIFdlYkNvcmU6
OnNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IFN0cmluZygpOyB9Citib29sIEZyYW1lR2RrOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQo
RWxlbWVudCosIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCopCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQogCi1pbnQgV2ViQ29yZTo6ZmluZE5leHRTZW50ZW5jZUZyb21JbmRleChVQ2hhciBj
b25zdCosIGludCwgaW50LCBib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12
b2lkIFdlYkNvcmU6OmZpbmRTZW50ZW5jZUJvdW5kYXJ5KFVDaGFyIGNvbnN0KiwgaW50LCBpbnQs
IGludCosIGludCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotaW50IFdlYkNvcmU6OmZpbmROZXh0
V29yZEZyb21JbmRleChVQ2hhciBjb25zdCosIGludCwgaW50LCBib29sKSB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Cit2b2lkIEZyYW1lR2RrOjpmb2N1c1dpbmRvdygpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgRnJhbWVHZGs6OnVuZm9jdXNXaW5kb3coKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Citib29sIEZyYW1lR2RrOjpsb2NhdGlvbmJhclZpc2li
bGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIEZy
YW1lR2RrOjppc3N1ZVJlZG9Db21tYW5kKHZvaWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0T2JqZWN0SW5zdGFuY2VG
b3JXaWRnZXQoV2lkZ2V0ICopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0RW1iZWRJbnN0YW5j
ZUZvcldpZGdldChXaWRnZXQgKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogRnJhbWVHZGs6OmJpbmRpbmdSb290
T2JqZWN0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorYm9v
bCBGcmFtZUdkazo6Y2FuUmVkbygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVHZGs6OmNhblVuZG8oKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIEZyYW1lR2RrOjpyZWdpc3Rl
ckNvbW1hbmRGb3JSZWRvKFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9Citib29sIEZyYW1lR2RrOjpydW5KYXZhU2NyaXB0UHJvbXB0
KFN0cmluZyBjb25zdCYsIFN0cmluZyBjb25zdCYsIFN0cmluZyAmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Citib29sIEZyYW1lR2RrOjpzaG91bGRJbnRlcnJ1
cHRKYXZhU2NyaXB0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KK3ZvaWQgRnJhbWVHZGs6OnByaW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lR2RrOjpnZXRBcHBsZXRJbnN0YW5jZUZv
cldpZGdldChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9Cit2b2lkIEZyYW1lR2RrOjppc3N1ZUN1dENvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9Cit2b2lkIEZyYW1lR2RrOjppc3N1ZUNvcHlDb21tYW5kKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQordm9pZCBGcmFtZUdkazo6aXNzdWVVbmRvQ29tbWFuZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgRnJhbWVHZGs6Omlzc3VlUGFzdGVDb21tYW5k
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBGcmFtZUdkazo6c2NoZWR1bGVD
bG9zZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK2Jvb2wgRnJhbWVHZGs6Om1lbnVi
YXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQor
Ym9vbCBGcmFtZUdkazo6cGVyc29uYWxiYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorYm9vbCBGcmFtZUdkazo6c3RhdHVzYmFyVmlzaWJsZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVH
ZGs6OnRvb2xiYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQordm9pZCBGcmFtZUdkazo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorYm9vbCBGcmFtZUdkazo6Y2FuUGFzdGUoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKK2VudW0gV2ViQ29yZTo6T2JqZWN0Q29udGVudFR5cGUgRnJhbWVHZGs6Om9iamVjdENv
bnRlbnRUeXBlKEtVUkwgY29uc3QmLCBTdHJpbmcgY29uc3QmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIChPYmplY3RDb250ZW50VHlwZSkwOworfQorYm9vbCBGcmFtZUdk
azo6Y2FuR29CYWNrT3JGb3J3YXJkKGludCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQogCi1WZWN0b3I8Y2hhcj4gU2VydmVTeW5jaHJvbm91c1JlcXVl
c3QoTG9hZGVyKixEb2NMb2FkZXIqLFJlc291cmNlSGFuZGxlKixLVVJMJixEZXByZWNhdGVkU3Ry
aW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPGNoYXI+KCk7IH0KK3ZvaWQg
RnJhbWVHZGs6OmdvQmFja09yRm9yd2FyZChpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KIAoraW50IEZyYW1lR2RrOjpnZXRIaXN0b3J5TGVuZ3RoKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOwogfQogCi12b2lkIEZyYW1lR2RrOjpmb2N1c1dpbmRvdygp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUdkazo6dW5mb2N1c1dpbmRvdygpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBGcmFtZUdkazo6bG9jYXRpb25iYXJWaXNpYmxlKCkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFtZUdkazo6aXNzdWVSZWRv
Q29tbWFuZCh2b2lkKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUtKUzo6QmluZGluZ3M6Okluc3Rh
bmNlKiBGcmFtZUdkazo6Z2V0T2JqZWN0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0ICopIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFt
ZUdkazo6Z2V0RW1iZWRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQgKikgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDsgfQotS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogRnJhbWVHZGs6OmJp
bmRpbmdSb290T2JqZWN0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotV2lkZ2V0
KiBGcmFtZUdkazo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVu
dCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JikgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6Y2FuUmVkbygpIGNvbnN0IHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgRnJhbWVHZGs6OmNhblVuZG8oKSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZyYW1lR2RrOjpyZWdpc3RlckNvbW1hbmRG
b3JSZWRvKFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+KSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLWJvb2wgRnJhbWVHZGs6OnJ1bkphdmFTY3JpcHRQcm9tcHQoU3RyaW5nIGNvbnN0Jiwg
U3RyaW5nIGNvbnN0JiwgU3RyaW5nICYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0K
LWJvb2wgRnJhbWVHZGs6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKSB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBGcmFtZUdkazo6cHJpbnQoKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0QXBwbGV0
SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsg
fQotYm9vbCBGcmFtZUdkazo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFtZUdkazo6aXNzdWVDdXRDb21t
YW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjppc3N1ZUNvcHlDb21t
YW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjppc3N1ZVVuZG9Db21t
YW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1TdHJpbmcgRnJhbWVHZGs6Om1pbWVUeXBlRm9y
RmlsZU5hbWUoU3RyaW5nIGNvbnN0JikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
U3RyaW5nKCk7IH0KLXZvaWQgRnJhbWVHZGs6Omlzc3VlUGFzdGVDb21tYW5kKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjpzY2hlZHVsZUNsb3NlKCkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci12b2lkIEZyYW1lR2RrOjptYXJrTWlzc3BlbGxpbmdzKFdlYkNvcmU6OlNlbGVj
dGlvbiBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBGcmFtZUdkazo6bWVudWJh
clZpc2libGUoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIEZyYW1lR2Rr
OjpwZXJzb25hbGJhclZpc2libGUoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1i
b29sIEZyYW1lR2RrOjpzdGF0dXNiYXJWaXNpYmxlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6dG9vbGJhclZpc2libGUoKSB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiAwOyB9Ci12b2lkIEZyYW1lR2RrOjppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVHZGs6OmNhblBhc3RlKCkgY29uc3QgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotZW51bSBXZWJDb3JlOjpPYmplY3RDb250ZW50
VHlwZSBGcmFtZUdkazo6b2JqZWN0Q29udGVudFR5cGUoS1VSTCBjb25zdCYsIFN0cmluZyBjb25z
dCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIChPYmplY3RDb250ZW50VHlwZSkwOyB9Ci1i
b29sIEZyYW1lR2RrOjpjYW5Hb0JhY2tPckZvcndhcmQoaW50KSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZyYW1lR2RrOjppc3N1ZVBhc3RlQW5kTWF0Y2hTdHls
ZUNvbW1hbmQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVHZGs6OmlzTG9hZFR5
cGVSZWxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotS1VSTCBGcmFt
ZUdkazo6b3JpZ2luYWxSZXF1ZXN0VVJMKCkgY29uc3QgeyByZXR1cm4gS1VSTCgpOyB9Ci1QbHVn
aW4qIEZyYW1lR2RrOjpjcmVhdGVQbHVnaW4oRWxlbWVudCosIEtVUkwgY29uc3QmLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgU3RyaW5nIGNvbnN0JikgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorS1VSTCBGcmFtZUdkazo6aGlzdG9yeVVSTChp
bnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gS1VSTCgpOworfQogCi1p
bnQgV2ViQ29yZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoY29uc3QgUGFnZSopIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgV2ViQ29yZTo6c2NyZWVuSXNNb25vY2hyb21l
KGNvbnN0IFBhZ2UqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQordm9pZCBG
cmFtZUdkazo6aXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorUGx1Z2luKiBGcmFtZUdkazo6Y3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBL
VVJMIGNvbnN0JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IFN0cmluZyBjb25zdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KIAoraW50IFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KGNvbnN0IFBhZ2UqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9Citib29sIFdlYkNvcmU6
OnNjcmVlbklzTW9ub2Nocm9tZShjb25zdCBQYWdlKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogQ29tcGxldGVseSBlbXB0eSBzdHVicyAo
bW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIEN1cnNvciBsb2NhbEN1
cnNvcjsKLWNvbnN0IEN1cnNvciYgV2ViQ29yZTo6bW92ZUN1cnNvcigpIHsgcmV0dXJuIGxvY2Fs
Q3Vyc29yOyB9Citjb25zdCBDdXJzb3ImIFdlYkNvcmU6Om1vdmVDdXJzb3IoKQoreworICAgIHJl
dHVybiBsb2NhbEN1cnNvcjsKK30KIAogYm9vbCBBWE9iamVjdENhY2hlOjpnQWNjZXNzaWJpbGl0
eUVuYWJsZWQgPSBmYWxzZTsKIAotYm9vbCBXZWJDb3JlOjpoaXN0b3J5Q29udGFpbnMoRGVwcmVj
YXRlZFN0cmluZyBjb25zdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci1TdHJpbmcgV2ViQ29yZTo6c3Vi
bWl0QnV0dG9uRGVmYXVsdExhYmVsKCkgeyByZXR1cm4gIlN1Ym1pdCI7IH0KLVN0cmluZyBXZWJD
b3JlOjppbnB1dEVsZW1lbnRBbHRUZXh0KCkgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOyB9
Ci1TdHJpbmcgV2ViQ29yZTo6cmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKSB7IHJldHVybiAiUmVz
ZXQiOyB9Ci1TdHJpbmcgV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpIHsgcmV0
dXJuICJCcm93c2UuLi4iOyB9Ci1TdHJpbmcgV2ViQ29yZTo6ZmlsZUJ1dHRvbk5vRmlsZVNlbGVj
dGVkTGFiZWwoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorYm9vbCBXZWJDb3JlOjpoaXN0b3J5Q29u
dGFpbnMoRGVwcmVjYXRlZFN0cmluZyBjb25zdCYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
U3RyaW5nIFdlYkNvcmU6OnN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpCit7CisgICAgcmV0dXJu
ICJTdWJtaXQiOworfQorU3RyaW5nIFdlYkNvcmU6OmlucHV0RWxlbWVudEFsdFRleHQoKQorewor
ICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7Cit9CitTdHJpbmcgV2ViQ29yZTo6cmVzZXRC
dXR0b25EZWZhdWx0TGFiZWwoKQoreworICAgIHJldHVybiAiUmVzZXQiOworfQorU3RyaW5nIFdl
YkNvcmU6OmRlZmF1bHRMYW5ndWFnZSgpCit7CisgICAgcmV0dXJuICJlbiI7Cit9CitTdHJpbmcg
V2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpCit7CisgICAgcmV0dXJuICJDaG9v
c2UgRmlsZSI7Cit9CiAKLVN0cmluZyBXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UoKSB7IHJldHVy
biAiZW4iOyB9Cit2b2lkIFdlYkNvcmU6OmZpbmRXb3JkQm91bmRhcnkoVUNoYXIgY29uc3QqIHN0
ciwgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sKKyAgICAq
c3RhcnQgPSBwb3NpdGlvbjsKKyAgICAqZW5kID0gcG9zaXRpb247Cit9CiAKLXZvaWQgV2ViQ29y
ZTo6ZmluZFdvcmRCb3VuZGFyeShVQ2hhciBjb25zdCogc3RyLCBpbnQgbGVuLCBpbnQgcG9zaXRp
b24sIGludCogc3RhcnQsIGludCogZW5kKSB7KnN0YXJ0ID0gcG9zaXRpb247ICplbmQgPSBwb3Np
dGlvbjsgfQorUGx1Z2luSW5mbypQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQ
bHVnaW5BdEluZGV4KHVuc2lnbmVkKQoreworICAgIHJldHVybiAwOworfQordW5zaWduZWQgUGx1
Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9Citi
b29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJD
b3JlOjpTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KK3ZvaWQgV2ViQ29yZTo6cmVm
cmVzaFBsdWdpbnMoYm9vbCkKK3sgfQogCi1QbHVnaW5JbmZvKlBsdWdJbkluZm9TdG9yZTo6Y3Jl
YXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsgcmV0dXJuIDA7fQotdW5z
aWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
LWJvb2wgV2ViQ29yZTo6UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJlc2hQ
bHVnaW5zKGJvb2wpIHsgfQordm9pZCBGcmFtZUdkazo6cmVzdG9yZURvY3VtZW50U3RhdGUoKQor
eyB9Cit2b2lkIEZyYW1lR2RrOjpwYXJ0Q2xlYXJlZEluQmVnaW4oKQoreyB9Cit2b2lkIEZyYW1l
R2RrOjpjcmVhdGVFbXB0eURvY3VtZW50KCkKK3sgfQorU3RyaW5nIEZyYW1lR2RrOjpvdmVycmlk
ZU1lZGlhVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQordm9pZCBGcmFt
ZUdkazo6aGFuZGxlZE9ubG9hZEV2ZW50cygpCit7IH0KK1JhbmdlKiBGcmFtZUdkazo6bWFya2Vk
VGV4dFJhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KK2Jvb2wgRnJhbWVHZGs6Omxh
c3RFdmVudElzTW91c2VVcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQordm9pZCBG
cmFtZUdkazo6YWRkTWVzc2FnZVRvQ29uc29sZShTdHJpbmcgY29uc3QmLCB1bnNpZ25lZCBpbnQs
IFN0cmluZyBjb25zdCYpCit7IH0KIAotdm9pZCBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6YXNz
ZW1ibGVSZXNwb25zZUhlYWRlcnMoKSBjb25zdCB7IH0KLXZvaWQgV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OnJldHJpZXZlQ2hhcnNldCgpIGNvbnN0IHsgfQordm9pZCBGcmFtZUdkazo6c2F2ZURv
Y3VtZW50U3RhdGUoKQoreyB9Cit2b2lkIEZyYW1lR2RrOjpyZWdpc3RlckNvbW1hbmRGb3JVbmRv
KFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+KQoreyB9Cit2b2lkIEZyYW1lR2RrOjpj
bGVhclVuZG9SZWRvT3BlcmF0aW9ucyh2b2lkKQoreyB9CitTdHJpbmcgRnJhbWVHZGs6OmluY29t
aW5nUmVmZXJyZXIoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KK3ZvaWQgRnJh
bWVHZGs6Om1hcmtNaXNzcGVsbGluZ3NJbkFkamFjZW50V29yZHMoV2ViQ29yZTo6VmlzaWJsZVBv
c2l0aW9uIGNvbnN0JikKK3sgfQogCi12b2lkIEZyYW1lR2RrOjpyZXN0b3JlRG9jdW1lbnRTdGF0
ZSgpIHsgfQotdm9pZCBGcmFtZUdkazo6cGFydENsZWFyZWRJbkJlZ2luKCkgeyB9Ci12b2lkIEZy
YW1lR2RrOjpjcmVhdGVFbXB0eURvY3VtZW50KCkgeyB9Ci1TdHJpbmcgRnJhbWVHZGs6Om92ZXJy
aWRlTWVkaWFUeXBlKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KLXZvaWQgRnJhbWVHZGs6
OmhhbmRsZWRPbmxvYWRFdmVudHMoKSB7IH0KLVJhbmdlKiBGcmFtZUdkazo6bWFya2VkVGV4dFJh
bmdlKCkgY29uc3QgeyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6bGFzdEV2ZW50SXNNb3Vz
ZVVwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgRnJhbWVHZGs6OmFkZE1lc3NhZ2VU
b0NvbnNvbGUoU3RyaW5nIGNvbnN0JiwgdW5zaWduZWQgaW50LCBTdHJpbmcgY29uc3QmKSB7IH0K
LWJvb2wgRnJhbWVHZGs6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mLCBj
b25zdCBTZWxlY3Rpb24mLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLWJvb2wgRnJhbWVHZGs6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxl
Y3Rpb24mKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci12b2lkIEZyYW1lR2RrOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKFdlYkNvcmU6OlNlbGVjdGlvbiBjb25zdCYsIGJvb2wpIHsgfQotRnJh
bWUqIEZyYW1lR2RrOjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bmFtZSwgRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKSB7IHJl
dHVybiAwOyB9CitUZXh0RmllbGQ6OlRleHRGaWVsZChUZXh0RmllbGQ6OlR5cGUpCit7IH0KK1Rl
eHRGaWVsZDo6flRleHRGaWVsZCgpCit7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRGb250KFdlYkNv
cmU6OkZvbnQgY29uc3QmKQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0QWxpZ25tZW50KEhvcml6
b250YWxBbGlnbm1lbnQpCit7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRXcml0aW5nRGlyZWN0aW9u
KFRleHREaXJlY3Rpb24pCit7IH0KK2ludCBUZXh0RmllbGQ6Om1heExlbmd0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIFRleHRGaWVsZDo6c2V0TWF4TGVuZ3RoKGludCkKK3sg
fQorU3RyaW5nIFRleHRGaWVsZDo6dGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQordm9pZCBUZXh0RmllbGQ6OnNldFRleHQoU3RyaW5nIGNvbnN0JikKK3sgfQoraW50IFRl
eHRGaWVsZDo6Y3Vyc29yUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiAwOworfQordm9p
ZCBUZXh0RmllbGQ6OnNldEN1cnNvclBvc2l0aW9uKGludCkKK3sgfQordm9pZCBUZXh0RmllbGQ6
OnNldEVkaXRlZChib29sKQoreyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0UmVhZE9ubHkoYm9vbCkK
K3sgfQordm9pZCBUZXh0RmllbGQ6OnNldFBsYWNlaG9sZGVyU3RyaW5nKFN0cmluZyBjb25zdCYp
Cit7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRDb2xvcnMoQ29sb3IgY29uc3QmLCBDb2xvciBjb25z
dCYpCit7IH0KK0ludFNpemUgVGV4dEZpZWxkOjpzaXplRm9yQ2hhcmFjdGVyV2lkdGgoaW50KSBj
b25zdAoreworICAgIHJldHVybiBJbnRTaXplKCk7Cit9CitpbnQgVGV4dEZpZWxkOjpiYXNlbGlu
ZVBvc2l0aW9uKGludCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KK3ZvaWQgVGV4dEZpZWxk
OjpzZXRMaXZlU2VhcmNoKGJvb2wpCit7IH0KIAotdm9pZCBGcmFtZUdkazo6c2F2ZURvY3VtZW50
U3RhdGUoKSB7IH0KLXZvaWQgRnJhbWVHZGs6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4pIHsgfQotdm9pZCBGcmFtZUdkazo6Y2xlYXJVbmRv
UmVkb09wZXJhdGlvbnModm9pZCkgeyB9Ci1TdHJpbmcgRnJhbWVHZGs6OmluY29taW5nUmVmZXJy
ZXIoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotdm9pZCBGcmFtZUdkazo6bWFya01pc3Nw
ZWxsaW5nc0luQWRqYWNlbnRXb3JkcyhXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24gY29uc3QmKSB7
IH0KLXZvaWQgRnJhbWVHZGs6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBTZWxlY3Rp
b24mKSB7IH0KK0NvbG9yIFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkKK3sKKyAgICByZXR1cm4g
MHhGRjAwMDBGRjsKK30KK3ZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5j
dGlvbih2b2lkICgqKSgpKQoreyB9CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK3ZvaWQgRnJhbWU6
OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCit7IH0KIAotYm9vbCBDaGVja0lmUmVsb2FkaW5nKERv
Y0xvYWRlciopIHsgcmV0dXJuIGZhbHNlOyB9Ci10aW1lX3QgQ2FjaGVPYmplY3RFeHBpcmVzVGlt
ZShEb2NMb2FkZXIqLCBQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiAwOyB9Ci12b2lkIENoZWNr
Q2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqKSB7IH0KLURlcHJl
Y2F0ZWRTdHJpbmcgUmVzcG9uc2VVUkwoUGxhdGZvcm1SZXNwb25zZSkgeyByZXR1cm4gRGVwcmVj
YXRlZFN0cmluZygpOyB9Ci1ib29sIElzUmVzcG9uc2VVUkxFcXVhbFRvVVJMKFBsYXRmb3JtUmVz
cG9uc2UgLCBjb25zdCBTdHJpbmcmIFVSTCkgeyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgUmVzcG9u
c2VJc011bHRpcGFydChQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiBmYWxzZTsgfQotRGVwcmVj
YXRlZFN0cmluZyBSZXNwb25zZU1JTUVUeXBlKFBsYXRmb3JtUmVzcG9uc2UpIHsgcmV0dXJuIERl
cHJlY2F0ZWRTdHJpbmcoKTsgfQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoUGxh
dGZvcm1SZXNwb25zZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIENhY2hlZFJlc291cmNl
OjpzZXRBbGxEYXRhKFBsYXRmb3JtRGF0YSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIElt
YWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgVGlsZVJ1bGUsIFRpbGVSdWxlLCBDb21wb3NpdGVPcGVyYXRvcikKK3sgfQog
CitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBJbnRQb2ludCYsIGludCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9Cit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK2Zsb2F0IEZvbnQ6
OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxl
JikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQoraW50
IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNv
bnN0IFRleHRTdHlsZSYsIGludCwgYm9vbCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQogCi12b2lkIFdpZGdldDo6c2V0RW5hYmxlZChib29sKSB7IH0K
LXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBJbnRSZWN0IGNvbnN0JikgeyB9
Ci12b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sKSB7IH0KLXZvaWQgV2lkZ2V0OjppbnZh
bGlkYXRlKCkgeyB9Ci12b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYg
cikgeyB9Ci0KLXZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KikgeyB9Ci12b2lkIFNj
cm9sbFZpZXc6OnJlbW92ZUNoaWxkKFdpZGdldCopIHsgfQotdm9pZCBTY3JvbGxWaWV3OjpzY3Jv
bGxQb2ludFJlY3Vyc2l2ZWx5KGludCB4LCBpbnQgeSkgeyB9Ci1ib29sIFNjcm9sbFZpZXc6Omlu
V2luZG93KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2
ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpIHsgfQotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3Jv
bGxiYXJzKCkgeyB9Ci1pbnQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsSW5mbyhzaG9ydCB0eXBl
LCBpbnQgY3VycmVudCwgaW50IG1heCwgaW50IHBhZ2VTaXplKSB7IHJldHVybiAwOyB9Ci1JbnRQ
b2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QgeyByZXR1cm4gcG9pbnQ7IH0KLUludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9X
aW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBwb2ludDsgfQotUGxh
dGZvcm1TY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhclVuZGVyTW91c2UoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KSB7IHJldHVybiAwOyB9Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
SW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCi0gICAgICAgIGNvbnN0
IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0
Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coSW50U2l6ZSBjb25zdCYsIGlu
dCwgQ29sb3IgY29uc3QmKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygp
IHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
IHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkgeyB9Ci12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIHsg
fQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVXaWR0aChmbG9hdCkgeyB9Ci12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwKSB7IH0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbikgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TWl0ZXJMaW1pdChmbG9hdCkgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxv
YXQpIHsgfQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcikgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRo
JikgeyB9Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0KSB7IH0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmKSB7IH0KLQotUGF0aDo6UGF0aCgp
eyB9Ci1QYXRoOjp+UGF0aCgpeyB9Ci1QYXRoOjpQYXRoKGNvbnN0IFBhdGgmKXsgfQotYm9vbCBQ
YXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgV2luZFJ1bGUgcnVsZSkgY29uc3R7IHJl
dHVybiBmYWxzZTsgfQotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJil7IH0K
LUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3Qo
KTsgfQotUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmKXsgcmV0dXJuICogdGhpczsg
fQotdm9pZCBQYXRoOjpjbGVhcigpIHsgfQotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQ
b2ludCYpIHsgfQotdm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpIHsgfQot
dm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpIHsgfQotdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIHsgfQotdm9pZCBQYXRoOjph
ZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0KSB7IH0K
LXZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkgeyB9Ci12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCkgeyB9Ci12b2lkIFBhdGg6OmFk
ZFJlY3QoY29uc3QgRmxvYXRSZWN0JikgeyB9Ci12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgeyB9Ci0KLVRleHRGaWVsZDo6VGV4dEZpZWxkKFRleHRGaWVsZDo6VHlwZSkg
eyB9Ci1UZXh0RmllbGQ6On5UZXh0RmllbGQoKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRGb250
KFdlYkNvcmU6OkZvbnQgY29uc3QmKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRBbGlnbm1lbnQo
SG9yaXpvbnRhbEFsaWdubWVudCkgeyB9Ci12b2lkIFRleHRGaWVsZDo6c2V0V3JpdGluZ0RpcmVj
dGlvbihUZXh0RGlyZWN0aW9uKSB7IH0KLWludCBUZXh0RmllbGQ6Om1heExlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRNYXhMZW5ndGgoaW50KSB7IH0KLVN0
cmluZyBUZXh0RmllbGQ6OnRleHQoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotdm9pZCBU
ZXh0RmllbGQ6OnNldFRleHQoU3RyaW5nIGNvbnN0JikgeyB9Ci1pbnQgVGV4dEZpZWxkOjpjdXJz
b3JQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRDdXJz
b3JQb3NpdGlvbihpbnQpIHsgfQotdm9pZCBUZXh0RmllbGQ6OnNldEVkaXRlZChib29sKSB7IH0K
LXZvaWQgVGV4dEZpZWxkOjpzZXRSZWFkT25seShib29sKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpz
ZXRQbGFjZWhvbGRlclN0cmluZyhTdHJpbmcgY29uc3QmKSB7IH0KLXZvaWQgVGV4dEZpZWxkOjpz
ZXRDb2xvcnMoQ29sb3IgY29uc3QmLCBDb2xvciBjb25zdCYpIHsgfQotSW50U2l6ZSBUZXh0Rmll
bGQ6OnNpemVGb3JDaGFyYWN0ZXJXaWR0aChpbnQpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsg
fQotaW50IFRleHRGaWVsZDo6YmFzZWxpbmVQb3NpdGlvbihpbnQpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KLXZvaWQgVGV4dEZpZWxkOjpzZXRMaXZlU2VhcmNoKGJvb2wpIHsgfQotCi1QbGF0Zm9ybVNj
cm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSkgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwgY29udHJvbFNpemUpIHsgfQot
UGxhdGZvcm1TY3JvbGxiYXI6On5QbGF0Zm9ybVNjcm9sbGJhcigpIHsgfQotaW50IFBsYXRmb3Jt
U2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLWludCBQbGF0Zm9ybVNjcm9s
bGJhcjo6aGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJh
cjo6c2V0RW5hYmxlZChib29sKSB7IH0KLXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpIHsgfQotdm9pZCBQbGF0
Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigpIHsgfQotdm9pZCBQbGF0Zm9ybVNj
cm9sbGJhcjo6dXBkYXRlVGh1bWJQcm9wb3J0aW9uKCkgeyB9Ci12b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmKSB7IH0KLQotTGlzdEJveDo6TGlzdEJveCgpIHsg
fQotTGlzdEJveDo6fkxpc3RCb3goKSB7IH0KLXZvaWQgTGlzdEJveDo6c2V0U2VsZWN0aW9uTW9k
ZShMaXN0Qm94OjpTZWxlY3Rpb25Nb2RlKSB7IH0KLXZvaWQgTGlzdEJveDo6c2V0Rm9udChXZWJD
b3JlOjpGb250IGNvbnN0JikgeyB9Ci0KLUZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihEb2N1bWVu
dCosIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1GaWxl
Q2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1QYXNzUmVmUHRy
PEZpbGVDaG9vc2VyPiBGaWxlQ2hvb3Nlcjo6Y3JlYXRlKERvY3VtZW50KiwgUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIEZpbGVD
aG9vc2VyOjpvcGVuRmlsZUNob29zZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVN0cmluZyBG
aWxlQ2hvb3Nlcjo6YmFzZW5hbWVGb3JXaWR0aChpbnQgd2lkdGgpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIEZpbGVDaG9vc2VyOjpkaXNjb25uZWN0
VXBsb2FkQ29udHJvbCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGaWxlQ2hvb3Nlcjo6
Y2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
LQotQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9
Ci12b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKiko
KSkgeyB9Ci0KLXZvaWQgRnJhbWU6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpIHsgfQotCi12b2lk
IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgVGlsZVJ1bGUsIFRpbGVSdWxlLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9
Ci0KLXZvaWQgUmVuZGVyVGhlbWVHZGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0IHsgfQotYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
ZmFsc2U7IH0KLXZvaWQgUmVuZGVyVGhlbWVHZGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0IHsgfQotdm9pZCBSZW5kZXJUaGVtZUdkazo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCogZSkgY29uc3Qge30KLWJvb2wg
UmVuZGVyVGhlbWVHZGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LUljb246Okljb24oKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLUljb246On5JY29uKCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9Ci1QYXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFBhc3NSZWZQ
dHI8SWNvbj4obmV3IEljb24oKSk7IH0KLXZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi12b2lkIEljb25Mb2Fk
ZXI6OnN0b3BMb2FkaW5nKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9IAotdm9pZCBJY29uTG9hZGVy
OjpzdGFydExvYWRpbmcoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0gCi1JY29uTG9hZGVyKiBJY29u
TG9hZGVyOjpjcmVhdGVGb3JGcmFtZShGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIDA7IH0gCi0KLWJv
b2wgSWNvbkRhdGFiYXNlOjppc0ljb25FeHBpcmVkRm9ySWNvblVSTChjb25zdCBTdHJpbmcmIHVy
bCkgeyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgSWNvbkRhdGFiYXNlOjpoYXNFbnRyeUZvckljb25V
UkwoY29uc3QgU3RyaW5nJiB1cmwpIHsgcmV0dXJuIGZhbHNlOyB9Ci1JY29uRGF0YWJhc2UqIElj
b25EYXRhYmFzZTo6c2hhcmVkSWNvbkRhdGFiYXNlKCkgeyByZXR1cm4gMDsgfQotYm9vbCBJY29u
RGF0YWJhc2U6OnNldEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgY29u
c3QgU3RyaW5nJiBwYWdlVVJMKSB7IHJldHVybiBmYWxzZTsgfQotCi1GbG9hdFJlY3QgRm9udDo6
c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5
bGUmLCBjb25zdCBJbnRQb2ludCYsIGludCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0K
LXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9Ci1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIDA7IH0KLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBpbnQsIGJvb2wpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIDA7IH0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewotVmVjdG9yPFN0cmlu
Zz4gc3VwcG9ydGVkS2V5U2l6ZXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8
U3RyaW5nPigpOyB9Ci1TdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVu
c2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0
IEtVUkwgJnVybCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1ZlY3RvcjxTdHJpbmc+IHN1cHBvcnRl
ZEtleVNpemVzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBWZWN0b3I8
U3RyaW5nPigpOworfQorU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1
bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25z
dCBLVVJMICZ1cmwpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQogCit2b2lkIHN5c3RlbUJl
ZXAoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5oCShyZXZp
c2lvbiAxNzYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMiArMjYsMTUgQEAKIAogI2lmbmRlZiBQYXRoX2gKICNkZWZpbmUgUGF0aF9oCi0KICNp
ZiBQTEFURk9STShDRykKIHR5cGVkZWYgc3RydWN0IENHUGF0aCBQbGF0Zm9ybVBhdGg7CiAjZWxp
ZiBQTEFURk9STShRVCkKIGNsYXNzIFFQYWludGVyUGF0aDsKIHR5cGVkZWYgUVBhaW50ZXJQYXRo
IFBsYXRmb3JtUGF0aDsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQordHlwZWRlZiBzdHJ1Y3QgX2Nh
aXJvIGNhaXJvX3Q7Cit0eXBlZGVmIHN0cnVjdCBjYWlyb19wYXRoIGNhaXJvX3BhdGhfdDsKK3R5
cGVkZWYgY2Fpcm9fcGF0aF90IFBsYXRmb3JtUGF0aDsKICNlbHNlCiB0eXBlZGVmIHZvaWQgUGxh
dGZvcm1QYXRoOwogI2VuZGlmCkBAIC05Niw3ICs5OSwxMSBAQAogCiAgICAgICAgIFN0cmluZyBk
ZWJ1Z1N0cmluZygpIGNvbnN0OwogCisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgIFBsYXRm
b3JtUGF0aCogcGxhdGZvcm1QYXRoKCkgY29uc3Q7CisjZWxzZSAgICAgICAgCiAgICAgICAgIFBs
YXRmb3JtUGF0aCogcGxhdGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisjZW5k
aWYKIAogICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSk7CiAgICAgICAgIHN0YXRp
YyBQYXRoIGNyZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTEwOCw3ICsxMTUs
MTIgQEAKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAK
ICAgICBwcml2YXRlOgorI2lmIFBMQVRGT1JNKENBSVJPKQorICAgICAgICB2b2lkIGluaXQoKTsK
KyAgICAgICAgY2Fpcm9fdCogbV9jcjsKKyNlbHNlCiAgICAgICAgIFBsYXRmb3JtUGF0aCogbV9w
YXRoOworI2VuZGlmCiAgICAgICAgIFdpbmRSdWxlIG1fcnVsZTsKICAgICB9OwogCkluZGV4OiBX
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTc2MzApCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDgyIEBACisyMDA2LTExLTA3ICBNaWNoYWVsIEVtbWVsICA8bWlrZS5lbW1lbEBnbWFpbC5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIAorCisJCUFkZCBwYXRoIHN1cHBvcnQgdG8g
Y2Fpcm8KKwkJQnVnOiAxMTMzMgorCisgICAgICAgICogcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCisJCU5ldyBwYXRoIGltcGwKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWly
by9QYXRoQ2Fpcm8uY3BwCisgICAgICAgICogcGxhdGZvcm0vY2Fpcm8vUGF0aC5oCisgICAgICAg
ICogcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKKworMjAwNi0xMS0wNyAgTWlj
aGFlbCBFbW1lbCAgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAKKworICAgICAgICBCdWlsZCBmaXhlcyBvbmx5IHdpdGggbmV3IGNvZGUgZGVzaWdu
IGZvciBnZGsgcG9ydC4KKyAgICAgICAgQ29tbWVudHMgaW5saW5lIG9uIGNoYW5nZXMgdG8gY29t
bW9uIGZpbGVzCisJCUJ1ZzogMTEzMzIKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvZ2Rr
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2dk
ay9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaAorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvZ2Rr
L0xvYWRlckZ1bmN0aW9uc0N1cmwuY3BwCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9nZGsv
UmVzb3VyY2VIYW5kbGVDdXJsLmNwcAorICAgICAgICBBZGRlZCBjdXJsIGlmZGVmcworICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlc3BvbnNlLmgKKyAgICAgICAgQWRkZWQgZ2VuZXJpYyBjb25zdHJ1Y3RvcgorICAg
ICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCisgICAgICAgICogcGxhdGZv
cm0vZ2RrL1BhZ2VHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9HbHlwaE1hcEdkay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvSW1hZ2VHZGsuY3Bw
CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAKKyAgICAgICAgKiBwbGF0Zm9y
bS9nZGsvRm9udFBsYXRmb3JtRGF0YS5oCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRlclBv
cHVwTWVudUdkay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAKKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZyYW1lR2Rr
LmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dkay9Gb250Q2FjaGVHZGsuY3BwCisgICAgICAgICog
cGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9n
ZGsvS2V5Ym9hcmRDb2Rlcy5oCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRlclBvcHVwTWVu
dUdkay5oCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1NoYXJlZFRp
bWVyTGludXguY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAor
ICAgICAgICAqIHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcAorICAgICAgICAq
IHBsYXRmb3JtL2dkay9Gb250R2RrLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dkay9Db29raWVK
YXJHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCisgICAg
ICAgICogcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmgKKyAgICAgICAgKiBwbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuaAorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oCisgICAgICAgIEFkZGVkIGdlbmVyaWMgY29uc3Ry
dWN0b3IKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAorICAgICAgICBB
ZGRlZCBnZW5lcmljIGNvbnN0cnVjdG9yCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVl
bEV2ZW50LmgKKyAgICAgICAgKiBQcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsCisgICAgICAg
ICogUHJvamVjdHMvZ2RrL1JlYWRtZS50eHQKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2wK
KyAgICAgICAgKiB3ZWJjb3JlLWJhc2UuYmtsCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAorCisgICAgICAgIEFkZGVkIGluY2x1ZGUgb2Ygc3lzL3N0YXQuaCBhbmQgc3lzL3R5cGVz
LmggdG8gYnVpbGQKKyAgICAgICAgc2hvdWxkIGJlIHRydWUgZm9yIHBvc2l4IHBsYXRmb3Jtcwor
CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAorICAgICAgICBBZGRlZCBD
dXJsIGlmZGVmIAorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oCisgICAgICAgICogV2Vi
S2l0VG9vbHMvR2RrTGF1bmNoZXIvbWFpbi5jcHAKKyAgICAgICAgKiBXZWJLaXRUb29scy9HZGtM
YXVuY2hlci9nZGtsYXVuY2hlci5ia2wKKwogMjAwNi0xMS0wNiAgR3JhaGFtIERlbm5pcyAgPGdy
YWhhbS5kZW5uaXNAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVy
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11426</attachid>
            <date>2006-11-08 10:42:01 -0800</date>
            <delta_ts>2006-11-16 12:00:57 -0800</delta_ts>
            <desc>Cairo svg support patch</desc>
            <filename>svg.patch</filename>
            <type>text/plain</type>
            <size>83357</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IEJha2VmaWxlcy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQmFrZWZpbGVzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTc2MzApCisrKyBCYWtlZmlsZXMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDYtMTEtMDcgIE1pY2hhZWwgRW1tZWwgIDxtaWtlLmVt
bWVsQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkKKworCQlGaXhlZCBp
Y3UgY3BwIGJ1aWxkIGZsYWdzCQorCQkqIEJha2VmaWxlcy9wcmVzZXRzLmJrbAorCisyMDA2LTEx
LTA3ICBNaWNoYWVsIEVtbWVsICA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZCisKKwkJQWRkZWQgaW5mbyBvbiBnZGsgYnVpbGQgaW5zdHJ1Y3RvbnMK
KyAgICAgICAgKiBCYWtlZmlsZXMvUmVhZG1lLnR4dAorCQlBZGRlZCBnZGsgdGVtcGxhdGUgIAor
CQkqIEJha2VmaWxlcy9wcmVzZXRzLmJrbAorCiAyMDA2LTEwLTA5ICBLcnp5c3p0b2YgS293YWxj
enlrICA8a2tvd2FsY3p5a0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYu
CkluZGV4OiBCYWtlZmlsZXMvcHJlc2V0cy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQmFrZWZpbGVzL3By
ZXNldHMuYmtsCShyZXZpc2lvbiAxNzYzMCkKKysrIEJha2VmaWxlcy9wcmVzZXRzLmJrbAkod29y
a2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNywyNCBAQAogICAgICAgICA8IS0tICAgIFRPRE86IG5v
bi1DeWd3aW4gV2luZG93cyBzdXBwb3J0IGZvciB0aGlzPyA6KSAtLT4gCiAgICAgPC90ZW1wbGF0
ZT4KIAorICAgIDxvcHRpb24gbmFtZT0iR0RLX0xJQlMiPgorICAgICAgICA8ZGVmYXVsdC12YWx1
ZT4kKG9zLnBvcGVuKCJwa2ctY29uZmlnIC0tbGlicyBnZGstMi4wIikucmVhZCgpKTwvZGVmYXVs
dC12YWx1ZT4KKyAgICA8L29wdGlvbj4KIAorICAgIDxvcHRpb24gbmFtZT0iR0RLX0NGTEFHUyI+
CisgICAgICAgIDxkZWZhdWx0LXZhbHVlPiQob3MucG9wZW4oInBrZy1jb25maWcgLS1jZmxhZ3Mg
Z2RrLTIuMCIpLnJlYWQoKSk8L2RlZmF1bHQtdmFsdWU+CisgICAgPC9vcHRpb24+CisKKyAgICA8
IS0tIEdESyBzZXR0aW5ncywgZm9yIEdESyBwb3J0cyAtIHd4IGRvZXNuJ3QgdXNlIHRoZXNlIC0t
PgorICAgIDx0ZW1wbGF0ZSBpZD0iZ2RrIj4KKyAgICAgICAgPGlmIGNvbmQ9IkZPUk1BVD09J2du
dSciPgorICAgICAgICAgICAgPGxkZmxhZ3M+JChHREtfTElCUyk8L2xkZmxhZ3M+CisgICAgICAg
ICAgICA8Y3h4ZmxhZ3M+JChHREtfQ0ZMQUdTKTwvY3h4ZmxhZ3M+CisgICAgICAgIDwvaWY+CisK
KyAgICAgICAgPCEtLSAgICBUT0RPOiBub24tQ3lnd2luIFdpbmRvd3Mgc3VwcG9ydCBmb3IgdGhp
cz8gOikgLS0+CisgICAgPC90ZW1wbGF0ZT4KKwogICAgIDxvcHRpb24gbmFtZT0iWE1MMl9MSUJT
Ij4KICAgICAgICAgPGRlZmF1bHQtdmFsdWU+JChvcy5wb3BlbigieG1sMi1jb25maWcgLS1saWJz
IikucmVhZCgpKTwvZGVmYXVsdC12YWx1ZT4KICAgICA8L29wdGlvbj4KQEAgLTE3Niw3ICsxOTMs
NyBAQAogICAgIDwvb3B0aW9uPgogCiAgICAgPG9wdGlvbiBuYW1lPSJJQ1VfQ0ZMQUdTIj4KLSAg
ICAgICAgPGRlZmF1bHQtdmFsdWU+JChvcy5wb3BlbigiaWN1LWNvbmZpZyAtLWN4eGZsYWdzIiku
cmVhZCgpKTwvZGVmYXVsdC12YWx1ZT4KKyAgICAgICAgPGRlZmF1bHQtdmFsdWU+JChvcy5wb3Bl
bigiaWN1LWNvbmZpZyAtLWNwcGZsYWdzIikucmVhZCgpKTwvZGVmYXVsdC12YWx1ZT4KICAgICA8
L29wdGlvbj4KIAogICAgIDwhLS0gSUJNIElDVSBzZXR0aW5ncyAtLT4KSW5kZXg6IFdlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzYz
MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTExIEBA
CisyMDA2LTExLTA3ICBNaWNoYWVsIEVtbWVsICA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIAorCQlBZGRlZCBzdmcgZmlsZXMgdG8gYnVpbGQKKwkJ
KiBQcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsCisJCSogd2ViY29yZS1iYXNlLmJrbAorCQkq
IFdlYkNvcmVTb3VyY2VzLmJrbAorCQlDYWlybyBjYW52YXMgc3VwcG9ydAorCQkqIGtjYW52YXMv
ZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdEZXZpY2VDYWlyby5oCisJCSoga2NhbnZhcy9kZXZpY2Uv
Y2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmNwcAorCQkqIGtjYW52YXMvZGV2aWNlL2NhaXJv
L1BhdHRlcm5DYWlyby5jcHAKKwkJKiBrY2FudmFzL2RldmljZS9jYWlyby9QYXR0ZXJuQ2Fpcm8u
aAorCQkqIGtjYW52YXMvZGV2aWNlL2NhaXJvL1JlbmRlclBhdGhDYWlyby5jcHAKKwkJRml4ZWQg
c3ZnIG9ubHkgY2FsbHMKKwkJKiBwbGF0Zm9ybS9QYXRoLmgKKwkJQWRkZWQgc3VwcG9ydCB0byBj
cmVhdGUgZW1wdHkgaW1hZ2UgYnVmZmVycyAgZm9yIHN2ZworCQkqIHBsYXRmb3JtL0ltYWdlLmgK
KwkJKiBwbGF0Zm9ybS9JbWFnZVNvdXJjZS5oCisJCUFkZGVkIG1pc3NpbmcgY29uY2F0Q1RNCisJ
CSogcGxhdGZvcm0vY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisJCUFkZGVkIGFsbG9j
YXRlZCBidWZmZXIgc3VwcG9ydAorCQkqIHBsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCisJ
CSogcGxhdGZvcm0vY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAKKwkJQ2Fpcm8gU1ZHIHJlc291
cmNlIHN1cHBvcnQKKwkJKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VJbWFnZS5o
CisJCSogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NhaXJvL1NWR1Jlc291cmNlQ2xpcHBlckNhaXJv
LmNwcAorCQkqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jYWlyby9TVkdSZXNvdXJjZU1hc2tlckNh
aXJvLmNwcAorCQkqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jYWlyby9TVkdSZXNvdXJjZUltYWdl
Q2Fpcm8uY3BwCisKKzIwMDYtMTEtMDcgIE1pY2hhZWwgRW1tZWwgIDxtaWtlLmVtbWVsQGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgCisKKwkJQWRkIHBhdGggc3VwcG9y
dCB0byBjYWlybworCQlCdWc6IDExMzMyCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKKwkJTmV3IHBhdGggaW1wbAorICAgICAgICAqIHBsYXRmb3Jt
L2NhaXJvL1BhdGhDYWlyby5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9QYXRoLmgKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAorCisyMDA2LTExLTA3
ICBNaWNoYWVsIEVtbWVsICA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIAorCisgICAgICAgIEJ1aWxkIGZpeGVzIG9ubHkgd2l0aCBuZXcgY29kZSBk
ZXNpZ24gZm9yIGdkayBwb3J0LgorICAgICAgICBDb21tZW50cyBpbmxpbmUgb24gY2hhbmdlcyB0
byBjb21tb24gZmlsZXMKKwkJQnVnOiAxMTMzMgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9nZGsvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9nZGsvTG9hZGVyRnVuY3Rpb25zQ3VybC5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2dkay9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCisgICAgICAgIEFkZGVkIGN1cmwgaWZkZWZzCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVzcG9uc2UuaAorICAgICAgICBBZGRlZCBnZW5lcmljIGNvbnN0cnVjdG9y
CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKKyAgICAgICAgKiBw
bGF0Zm9ybS9nZGsvUGFnZUdkay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvQ3Vyc29yR2Rr
LmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dkay9TY3JlZW5HZGsuY3BwCisgICAgICAgICogcGxh
dGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dkay9JbWFnZUdk
ay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAorICAgICAgICAqIHBs
YXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUmVu
ZGVyUG9wdXBNZW51R2RrLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2Rr
LmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNwcAorICAgICAgICAq
IHBsYXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJh
bWVHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAorICAgICAgICAqIHBsYXRm
b3JtL2dkay9LZXlib2FyZENvZGVzLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUmVuZGVyUG9w
dXBNZW51R2RrLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAorICAgICAgICAq
IHBsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU2hh
cmVkVGltZXJMaW51eC5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsu
Y3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCisgICAg
ICAgICogcGxhdGZvcm0vZ2RrL0ZvbnRHZGsuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0Nv
b2tpZUphckdkay5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAK
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAorICAgICAgICAqIHBs
YXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5oCisgICAgICAgICogcGxhdGZvcm0vV2lkZ2V0LmgK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmgKKyAgICAgICAgQWRkZWQgZ2VuZXJpYyBj
b25zdHJ1Y3RvcgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCisgICAg
ICAgIEFkZGVkIGdlbmVyaWMgY29uc3RydWN0b3IKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaAorICAgICAgICAqIFByb2plY3RzL2dkay93ZWJjb3JlLWdkay5ia2wKKyAg
ICAgICAgKiBQcm9qZWN0cy9nZGsvUmVhZG1lLnR4dAorICAgICAgICAqIFdlYkNvcmVTb3VyY2Vz
LmJrbAorICAgICAgICAqIHdlYmNvcmUtYmFzZS5ia2wKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCisKKyAgICAgICAgQWRkZWQgaW5jbHVkZSBvZiBzeXMvc3RhdC5oIGFuZCBzeXMv
dHlwZXMuaCB0byBidWlsZAorICAgICAgICBzaG91bGQgYmUgdHJ1ZSBmb3IgcG9zaXggcGxhdGZv
cm1zCisKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisgICAgICAgIEFk
ZGVkIEN1cmwgaWZkZWYgCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKyAgICAgICAg
KiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9tYWluLmNwcAorICAgICAgICAqIFdlYktpdFRvb2xz
L0dka0xhdW5jaGVyL2dka2xhdW5jaGVyLmJrbAorCiAyMDA2LTExLTA2ICBHcmFoYW0gRGVubmlz
ICA8Z3JhaGFtLmRlbm5pc0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhh
dGNoZXIuCkluZGV4OiBXZWJDb3JlL1Byb2plY3RzL2dkay93ZWJjb3JlLWdkay5ia2wKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9Qcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsCShyZXZpc2lvbiAx
NzYzMCkKKysrIFdlYkNvcmUvUHJvamVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJrbAkod29ya2luZyBj
b3B5KQpAQCAtOCwxOCArOCwxOCBAQAogCiA8bWFrZWZpbGU+CiAKLQkJPG9wdGlvbiBuYW1lPSJF
TkNPRElOR1NfRklMRSI+Ci0JCTxkZWZhdWx0LXZhbHVlPnBsYXRmb3JtL2dkay9nZGstZW5jb2Rp
bmdzLnR4dDwvZGVmYXVsdC12YWx1ZT4KLQkJPHZhbHVlcz5wbGF0Zm9ybS9nZGsvZ2RrLWVuY29k
aW5ncy50eHQ8L3ZhbHVlcz4KLQkJPC9vcHRpb24+CisJPG9wdGlvbiBuYW1lPSJFTkNPRElOR1Nf
RklMRSI+CisJPGRlZmF1bHQtdmFsdWU+cGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3MudHh0PC9k
ZWZhdWx0LXZhbHVlPgorCTx2YWx1ZXM+cGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3MudHh0PC92
YWx1ZXM+CisJPC9vcHRpb24+CiAKLQkJPG9wdGlvbiBuYW1lPSJGRUFUVVJFX0RFRklORVMiIG5l
dmVyX2VtcHR5PSIxIiA+Ci0JCTwhLS0gU1ZHX1NVUFBPUlQgWFBBVEhfU1VQUE9SVC0tPgotCQk8
ZGVmYXVsdC12YWx1ZT5YUEFUSF9TVVBQT1JUPC9kZWZhdWx0LXZhbHVlPgotCQk8dmFsdWVzPlhQ
QVRIX1NVUFBPUlQsU1ZHX1NVUFBPUlQ8L3ZhbHVlcz4KLQkJPC9vcHRpb24+Ci0JCTxzZXQgdmFy
PSJGRUFUVVJFX0RFRklORVMiPlhQQVRIX1NVUFBPUlQ8L3NldD4KLQkJPHNldCB2YXI9IkVOQ09E
SU5HU19GSUxFIj4kKFNSQ0RJUikvcGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3MudHh0PC9zZXQ+
CisJPG9wdGlvbiBuYW1lPSJGRUFUVVJFX0RFRklORVMiIG5ldmVyX2VtcHR5PSIxIiA+CisJPCEt
LSBTVkdfU1VQUE9SVCBYUEFUSF9TVVBQT1JULS0+CisJPGRlZmF1bHQtdmFsdWU+WFBBVEhfU1VQ
UE9SVDwvZGVmYXVsdC12YWx1ZT4KKwk8dmFsdWVzPlhQQVRIX1NVUFBPUlQsU1ZHX1NVUFBPUlQ8
L3ZhbHVlcz4KKwk8L29wdGlvbj4KKwk8c2V0IHZhcj0iRkVBVFVSRV9ERUZJTkVTIj5YUEFUSF9T
VVBQT1JULFNWR19TVVBQT1JUPC9zZXQ+CisJPHNldCB2YXI9IkVOQ09ESU5HU19GSUxFIj4kKFNS
Q0RJUikvcGxhdGZvcm0vZ2RrL2dkay1lbmNvZGluZ3MudHh0PC9zZXQ+CiAKIAk8aW5jbHVkZSBm
aWxlPSIuLi8uLi93ZWJjb3JlLWJhc2UuYmtsIi8+CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAg
ICAgPGNvbW1hbmQ+YmFzaCAtYyAidG91Y2ggLkRlcml2ZWRTb3VyY2VzIjwvY29tbWFuZD4KICAg
IDwvYWN0aW9uPgogCi0gICAgPGRsbCBpZD0id2ViY29yZS1nZGsiIHRlbXBsYXRlPSJ3ZWJjb3Jl
X2Jhc2UsZnJlZXR5cGUsZ3RrLGN1cmwsY2Fpcm8sc3FsaXRlMyI+ICAgICAgICAKKyAgICA8ZGxs
IGlkPSJ3ZWJjb3JlLWdkayIgdGVtcGxhdGU9IndlYmNvcmVfc3ZnLHdlYmNvcmVfYmFzZSxqc2Nv
cmUsZnJlZXR5cGUsZ2RrLGN1cmwsY2Fpcm8sc3FsaXRlMyI+ICAgICAgICAKIAk8IS0tIEZJWE1F
OiBjcmVhdGUgYSBkZWJ1ZyBvcHRpb24gYW5kIHNldCB0aGVzZSBhY2NvcmRpbmdseSAtLT4KIAk8
IS0tIGNoZWNrIGZvciB1bmRlZmluZWQgc3ltYm9scyBmb3IgZGVidWdnaW5nIHJlYXNvbnMgLS0+
CiAJPCEtLQpAQCAtNTksMzYgKzU5LDM4IEBACiAJCTxpbmNsdWRlPnBsYXRmb3JtL2NhaXJvPC9p
bmNsdWRlPgogCSAgICA8aW5jbHVkZT4kKFNSQ0RJUikva2NhbnZhcy9kZXZpY2UvY2Fpcm88L2lu
Y2x1ZGU+CiAgICAgCTxkZWZpbmU+WFBBVEhfU1VQUE9SVDwvZGVmaW5lPgotICAgICAgICA8IS0t
IGdkayBidWlsZCBicm9rZW4gd2l0aCB3aXRob3V0IE5ERUJVRyBkZWZpbmVkIC0tPgotICAgIAk8
ZGVmaW5lPk5ERUJVRzwvZGVmaW5lPgotIAorICAgIAk8ZGVmaW5lPlNWR19TVVBQT1JUPC9kZWZp
bmU+CisKKyAgICAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0dESyI+
ICAgIAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0Nvb2tpZUphckdkay5jcHAKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dkay9DdXJzb3JHZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsv
RmlsZUNob29zZXJHZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udENhY2hlR2Rr
LmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcAorICAgICAgICAg
ICAgcGxhdGZvcm0vZ2RrL0ZvbnRHZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9u
dFBsYXRmb3JtRGF0YUdkay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9GcmFtZUdkay5j
cHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9GcmFtZVZpZXdHZGsuY3BwCisgICAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsv
SWNvbkdkay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9JbWFnZUdkay5jcHAKKyAgICAg
ICAgICAgIHBsYXRmb3JtL2dkay9QYWdlR2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2Rr
L1BsYXRmb3JtU2Nyb2xsYmFyR2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1BvcHVw
TWVudUdkay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAK
KyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9TY3JlZW5HZGsuY3BwCisgICAgICAgICAgICBwbGF0
Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9TeXN0
ZW1UaW1lTGludXguY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dkay9XaWRnZXRQcml2YXRlR2RrLmNwcAorICAgICAgICAgICAgcGxhdGZv
cm0vZ2RrL1dpbmRvd0dkay5jcHAKKyAgICAgICAgPC9zZXQ+CisKICAgICAgICAgPHNvdXJjZXM+
CQkKLSAgICAgICAgICBwbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKLSAg
ICAgICAgICBwbGF0Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAotICAgICAgICAgIHBsYXRmb3Jt
L2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ2RrL0Nvb2tp
ZUphckdkay5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAotICAgICAg
ICAgIHBsYXRmb3JtL2dkay9Gb250Q2FjaGVHZGsuY3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ2Rr
L0ZvbnREYXRhR2RrLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250R2RrLmNwcAotICAg
ICAgICAgIHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcAotICAgICAgICAgIHBs
YXRmb3JtL2dkay9GcmFtZUdkay5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsvR2x5cGhNYXBH
ZGsuY3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ2RrL0ltYWdlR2RrLmNwcAotICAgICAgICAgIHBs
YXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsvTW91c2VF
dmVudEdkay5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsvUGFnZUdkay5jcHAKLSAgICAgICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCi0gICAgICAg
ICAgcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2dk
ay9SZW5kZXJQb3B1cE1lbnVHZGsuY3BwCi0gICAgICAgICAgcGxhdGZvcm0vZ2RrL1NjcmVlbkdk
ay5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKLSAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvU2hhcmVkVGltZXJMaW51eC5jcHAKLSAgICAgICAgICBwbGF0Zm9ybS9n
ZGsvU3lzdGVtVGltZUxpbnV4LmNwcAotICAgICAgICAgIHBsYXRmb3JtL2dkay9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCi0gICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VIYW5k
bGVDdXJsLmNwcAotICAgICAgICAgIHBsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNwcAotICAg
ICAgICAgIHBsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCisgICAgICAgICAgICAkKFdFQkNPUkVf
U09VUkNFU19DQUlST19CSU5ESU5HUykKKyAgICAgICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX0NV
UkwpCisgICAgICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19HREspIAogCQk8L3NvdXJjZXM+CiAK
IAkJPGNsZWFuLWZpbGVzPgpAQCAtOTcsNyArOTksMzMgQEAKIAkJcm0gLXJmICQoU1JDRElSKS9p
bmNsdWRlL0phdmFTY3JpcENvcmUKIAkJcm0gLXJmICQoU1JDRElSKS9Qcm9qZWN0cy9nZGsvb2Jq
LWdudQogCQk8L2NsZWFuLWZpbGVzPgotCQk8IS0tSEFDSyBibG9jayBkZXBlbmRlbmNpZXMgb24g
dGhlIHBob255IHRhcmdldCAtLT4KICAgICA8L2RsbD4KKworICAgIDxkbGwgaWQ9IndlYmNvcmUt
c3ZnIiB0ZW1wbGF0ZT0id2ViY29yZV9zdmcsd2ViY29yZV9iYXNlLGZyZWV0eXBlLGdkayxjdXJs
LGNhaXJvLHNxbGl0ZTMiPiAgICAgICAgCisgICAgPGRpcm5hbWU+LjwvZGlybmFtZT4KKyAgICA8
cGljPm9uPC9waWM+CisgICAgPHRocmVhZGluZz5tdWx0aTwvdGhyZWFkaW5nPgorICAgIDx3YXJu
aW5ncz5ubzwvd2FybmluZ3M+CisJPGN4eGZsYWdzPi13PC9jeHhmbGFncz4KKyAgICA8Y3h4LXJ0
dGk+b2ZmPC9jeHgtcnR0aT4KKyAgICA8Y3h4LWV4Y2VwdGlvbnM+b2ZmPC9jeHgtZXhjZXB0aW9u
cz4KKyAgICA8aW5jbHVkZT4kKFNSQ0RJUikvLi4vSmF2YVNjcmlwdENvcmU8L2luY2x1ZGU+Cisg
ICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2dkazwvaW5jbHVkZT4KKyAgICA8aW5jbHVk
ZT4kKFNSQ0RJUikvcGxhdGZvcm0vY2Fpcm88L2luY2x1ZGU+CisgICAgPGRlZmluZT5CVUlMRElO
R19HREtfXzwvZGVmaW5lPgorICAgIDxkZWZpbmU+QlVJTERJTkdfQ0FJUk9fXzwvZGVmaW5lPgor
ICAgIDxkZWZpbmU+WFBBVEhfU1VQUE9SVDwvZGVmaW5lPgorCTxpbmNsdWRlPnBsYXRmb3JtL2dk
azwvaW5jbHVkZT4KKwk8aW5jbHVkZT5wbGF0Zm9ybS9jYWlybzwvaW5jbHVkZT4KKwk8aW5jbHVk
ZT4kKFNSQ0RJUikva2NhbnZhcy9kZXZpY2UvY2Fpcm88L2luY2x1ZGU+CisJPGluY2x1ZGU+JChT
UkNESVIpL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jYWlybzwvaW5jbHVkZT4KKyAgICA8c291cmNl
cz4JCQorICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19LQ0FOVkFTX0NBSVJPKQorICAgICAgICAk
KFdFQkNPUkVfU09VUkNFU19LQ0FOVkFTKQorICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19LU1ZH
MikKKyAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfU1ZHX0RFUklWRURTT1VSQ0VTKQorICAgCTwv
c291cmNlcz4KKyAgIDwvZGxsPgorCiA8L21ha2VmaWxlPgogCkluZGV4OiBXZWJDb3JlL3dlYmNv
cmUtYmFzZS5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93ZWJjb3JlLWJhc2UuYmtsCShyZXZp
c2lvbiAxNzYzMCkKKysrIFdlYkNvcmUvd2ViY29yZS1iYXNlLmJrbAkod29ya2luZyBjb3B5KQpA
QCAtMzksMTEgKzM5LDkgQEAKICAgICA8aW5jbHVkZSBmaWxlPSJXZWJDb3JlU291cmNlcy5ia2wi
Lz4KICAgICAKIAk8c2V0IHZhcj0iV0VCQ09SRV9CQVNFX1NPVVJDRVMiPgkKLQkJJChXRUJDT1JF
X1NPVVJDRVNfREVSSVZFRFNPVVJDRVMpCi0JCSQoV0VCQ09SRV9TT1VSQ0VTX0tIVE1MKQotCQkk
KFdFQkNPUkVfU09VUkNFU19NSVNDKQogCQkkKFdFQkNPUkVfU09VUkNFU19QQUdFKQogCQkkKFdF
QkNPUkVfU09VUkNFU19MT0FERVIpCisJCSQoV0VCQ09SRV9TT1VSQ0VTX0lDT04pCiAJCSQoV0VC
Q09SRV9TT1VSQ0VTX1BMQVRGT1JNKQogCQkkKFdFQkNPUkVfU09VUkNFU19JTUFHRS1ERUNPREVS
UykKIAkJJChXRUJDT1JFX1NPVVJDRVNfQk1QKQpAQCAtNjAsOCArNTgsOCBAQAogCQkkKFdFQkNP
UkVfU09VUkNFU19CUklER0UpCiAJCSQoV0VCQ09SRV9TT1VSQ0VTX0VESVRJTkcpCiAJCSQoV0VC
Q09SRV9TT1VSQ0VTX0hUTUwpCi0JCSQoV0VCQ09SRV9TT1VSQ0VTX0JJTkRJTkdTKQogCQkkKFdF
QkNPUkVfU09VUkNFU19KUykKKwkJJChXRUJDT1JFX1NPVVJDRVNfREVSSVZFRFNPVVJDRVMpCiAJ
PC9zZXQ+CiAKICAgICA8c2V0IHZhcj0iQlVJTERESVIiPm9iai0kKEZPUk1BVCk8L3NldD4KQEAg
LTcwLDEzICs2OCwyOCBAQAogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vY2Fp
cm8vY2Fpcm8vc3JjPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZv
cm0vY2Fpcm8vcGl4bWFuL3NyYzwvaW5jbHVkZT4KICAgICAgICAgPHNvdXJjZXM+Ci0gICAgICAg
ICAgICAkKFdFQkNPUkVfU09VUkNFU19DQUlSTykgCi0JCSAgICAkKFdFQkNPUkVfU09VUkNFU19Q
SVhNQU4pIAorCQkJJChXRUJDT1JFX1NPVVJDRVNfQ0FJUk8pIAorCQkJJChXRUJDT1JFX1NPVVJD
RVNfUElYTUFOKSAKICAgICAgICAgPC9zb3VyY2VzPgogICAgIDwvdGVtcGxhdGU+Ci0gICAgCi0g
ICAgPHRlbXBsYXRlIGlkPSJ3ZWJjb3JlX2Jhc2UiIHRlbXBsYXRlPSJ4bWwyLGljb252LHhzbHQs
aWN1LGpzY29yZSI+CisKKyAgICA8dGVtcGxhdGUgaWQ9IndlYmNvcmVfc3ZnIiA+CisgICAgICAg
IDxkZWZpbmU+U1ZHX1NVUFBPUlQ8L2RlZmluZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIp
L3BsYXRmb3JtL2dyYXBoaWNzL3N2ZzwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNE
SVIpL2tjYW52YXM8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFz
L2RldmljZTwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyPC9pbmNs
dWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikva3N2ZzIvYmluZGluZ3MvanM8L2luY2x1
ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rc3ZnMi9jc3M8L2luY2x1ZGU+CisgICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rc3ZnMi9lY21hPC9pbmNsdWRlPgorICAgICAgICA8aW5j
bHVkZT4kKFNSQ0RJUikva3N2ZzIvZXZlbnRzPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4k
KFNSQ0RJUikva3N2ZzIvbWlzYzwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIp
L2tzdmcyL3N2ZzwvaW5jbHVkZT4KKyAgICA8L3RlbXBsYXRlPgorCisgICAgPHRlbXBsYXRlIGlk
PSJ3ZWJjb3JlX2Jhc2UiIHRlbXBsYXRlPSJ4bWwyLGljb252LHhzbHQsaWN1Ij4KICAgICAgICAg
PGluY2x1ZGU+JChTUkNESVIpLy48L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElS
KS9Gb3J3YXJkaW5nSGVhZGVyczwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIp
L2luY2x1ZGU8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9EZXJpdmVkU291
cmNlcy9XZWJDb3JlPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvYmluZGlu
Z3MvanM8L2luY2x1ZGU+CkBAIC04OSw2ICsxMDIsNyBAQAogICAgICAgICA8aW5jbHVkZT4kKFNS
Q0RJUikvbG9hZGVyL2ljb248L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9w
YWdlPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm08L2luY2x1
ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9ncmFwaGljczwvaW5jbHVk
ZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzPC9p
bmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYm1wPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmPC9pbmNsdWRlPgpAQCAtOTcsMTUgKzExMSwxMSBAQAogICAgICAgICA8
aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtPC9pbmNsdWRlPgog
ICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nPC9p
bmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvemxpYjwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL25l
dG93cms8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9uZXR3
b3JrPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcmVuZGVyaW5nPC9pbmNs
dWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikveG1sPC9pbmNsdWRlPgotICAgICAgICA8
aW5jbHVkZT4kKFNSQ0RJUikva2NhbnZhczwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChT
UkNESVIpL2tjYW52YXMvZGV2aWNlPC9pbmNsdWRlPgotICAgICAgICAKLSAgICAgICAgPHNvdXJj
ZXM+JChXRUJDT1JFX0JBU0VfU09VUkNFUyk8L3NvdXJjZXM+CisgICAKIAotCiA8IS0tIEhBQ0sg
QUxFUlQhIEZJWCBUSEVTRSBMQVRFUiEhIC0tPgogICAgICAgPGlmIGNvbmQ9IlBMQVRGT1JNX01B
Q09TWD09JzEnIj4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL21hYzwvaW5j
bHVkZT4gPCEtLSB3aGVuIGJ1aWxkaW5nIG9uIE1hYywgRXh0cmFDRkVuY29kaW5ncy5oIGlzIG5l
ZWRlZCAtLT4gICAgICAKQEAgLTE0MSw2ICsxNTEsOSBAQAogICAgICAgICAgICAgPGRlZmluZT5I
QVZFX0ZMT0FUX0g9MTwvZGVmaW5lPgogICAgICAgICAgICAgPGRlZmluZT5IQVZFX0ZVTkNfX0ZJ
TklURT0xPC9kZWZpbmU+CiAgICAgICAgIDwvaWY+CisgICAgICAgIDxzb3VyY2VzPgorICAgICAg
ICAgICAgJChXRUJDT1JFX0JBU0VfU09VUkNFUykKKyAgICAgICAgPC9zb3VyY2VzPgogICAgIDwv
dGVtcGxhdGU+CiA8L21ha2VmaWxlPgogCkluZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24gMTc2
MzApCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtMTAy
LDIyICsxMDIsMjg2IEBACiAJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvWFBhdGhHcmFtbWFyLmNw
cAogCiAJPC9zZXQ+Ci0JPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0tIVE1M
Ij4KLQkJCiAKKwk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfU1ZHX0RFUklW
RURTT1VSQ0VTIj4KKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9TVkdFbGVtZW50RmFjdG9yeS5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9TVkdOYW1lcy5jcHAKKworICAgICAgICAgIDwh
LS0gaW5jbHVkZWQgc291cmNlcworCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUG9pbnRU
YWJsZS5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1JlY3RUYWJsZS5jcHAKKyAg
ICAgICAgICAtLT4KKworCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQUVsZW1lbnQuY3Bw
CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmdsZS5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTVkdBbmltYXRlZEFuZ2xlLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0Fu
aW1hdGVkSW50ZWdlci5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVk
TGVuZ3RoLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0ZWROdW1iZXIuY3Bw
CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCis8
IS0tIGJyb2tlbiBub3QgYnVpbHQgYnkgT1NYCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
VkdBbmltYXRlZFBvaW50cy5jcHAKKy0tPgorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTU1ZHQW5pbWF0ZWRSZWN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5p
bWF0ZWRTdHJpbmcuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3QuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdBbmltYXRlRWxl
bWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHQW5pbWF0aW9uRWxlbWVu
dC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0NpcmNsZUVsZW1lbnQuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdDbGlwUGF0aEVsZW1lbnQuY3BwCisJCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdDb2xvci5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcAorCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHQ3Vyc29yRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0RlZnNFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
RGVzY0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdEb2N1bWVudC5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0VsZW1lbnQuY3BwCisJCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNTVkdFbGxpcHNlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1NWR0ZFQmxlbmRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTU1ZHRkVGdW5jQUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdG
RUZ1bmNCRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFRnVuY0dF
bGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHRkVGdW5jUkVsZW1lbnQu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGRUltYWdlRWxlbWVudC5jcHAKKwkJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcAorCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNTVkdGRVRpbGVFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NW
R0ZpbHRlckVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdGb3JlaWdu
T2JqZWN0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0dFbGVtZW50
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHR3JhZGllbnRFbGVtZW50LmNwcAor
CQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHSW1hZ2VFbGVtZW50LmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHTGVuZ3RoLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTU1ZHTGVuZ3RoTGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0xpbmVh
ckdyYWRpZW50RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR0xpbmVF
bGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHTWFya2VyRWxlbWVudC5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR01hc2tFbGVtZW50LmNwcAorCQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHTWF0cml4LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHTWV0YWRhdGFFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHTnVtYmVyTGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhaW50LmNw
cAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aEVsZW1lbnQuY3BwCisJCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQXJjQWJzLmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0FyY1JlbC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR1BhdGhTZWdDbG9zZVBhdGguY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNT
VkdQYXRoU2VnLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY0Ficy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljU21vb3RoQWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuY3BwCisJCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5jcHAKKwkJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVs
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0xpbmV0b0Ficy5jcHAK
KwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJz
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWxSZWwuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnTGluZXRvUmVs
LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
QWJzLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsUmVsLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ0xpc3QuY3Bw
CisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQYXRoU2VnTW92ZXRvQWJzLmNwcAorCQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUGF0aFNlZ01vdmV0b1JlbC5jcHAKKwkJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1BhdHRlcm5FbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTU1ZHUG9pbnRMaXN0LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
U1ZHUG9seWdvbkVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQb2x5
bGluZUVsZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHUmVjdEVsZW1lbnQu
Y3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdSZW5kZXJpbmdJbnRlbnQuY3BwCisJ
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTY3JpcHRFbGVtZW50LmNwcAorCQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTU1ZHU2V0RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR1N0b3BFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZH
U3RyaW5nTGlzdC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1N0eWxlRWxlbWVu
dC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1NWR0VsZW1lbnQuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdTd2l0Y2hFbGVtZW50LmNwcAorCQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTU1ZHU3ltYm9sRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR1RleHRFbGVtZW50LmNwcAorCQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1Rp
dGxlRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1RyYW5zZm9ybS5j
cHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1RyYW5zZm9ybUxpc3QuY3BwCisJCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdUUmVmRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1NWR1RTcGFuRWxlbWVudC5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1NWR1VuaXRUeXBlcy5jcHAKKwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1VzZUVs
ZW1lbnQuY3BwCisJCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTVkdWaWV3RWxlbWVudC5jcHAK
KwkJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NWR1pvb21FdmVudC5jcHAKKwogCTwvc2V0Pgot
CTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19NSVNDIj4KLQkJCiAKKwk8c2V0
IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfS1NWRzIiPgorCisJCWJpbmRpbmdzL2pz
L0pTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAorCQliaW5kaW5ncy9qcy9KU1NWR051bWJl
ci5jcHAKKwkJYmluZGluZ3MvanMvSlNTVkdQb2ludC5jcHAKKwkJYmluZGluZ3MvanMvSlNTVkdS
ZWN0LmNwcAorCisJCWtzdmcyL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCisJCWtzdmcyL2Nzcy9TVkdD
U1NTdHlsZVNlbGVjdG9yLmNwcAorCQlrc3ZnMi9jc3MvU1ZHUmVuZGVyU3R5bGUuY3BwCisJCWtz
dmcyL2Nzcy9TVkdSZW5kZXJTdHlsZURlZnMuY3BwCisgICAgICAgICAgPCEtLQorCQlrc3ZnMi9l
Y21hL0dsb2JhbE9iamVjdC5jcHAKKyAgICAgICAgICAtLT4KKwkJa3N2ZzIvZXZlbnRzL0pTU1ZH
TGF6eUV2ZW50TGlzdGVuZXIuY3BwCisJCWtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3BwCisJ
CWtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAorCQlrc3ZnMi9taXNjL0tTVkdU
aW1lU2NoZWR1bGVyLmNwcAorCQlrc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAK
KwkJa3N2ZzIvbWlzYy9TVkdJbWFnZUxvYWRlci5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0FFbGVtZW50
LmNwcAorCQlrc3ZnMi9zdmcvU1ZHQW5nbGUuY3BwCisJCWtzdmcyL3N2Zy9TVkdBbmltYXRlQ29s
b3JFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHQW5pbWF0ZWRQYXRoRGF0YS5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR0FuaW1hdGVkUG9pbnRzLmNwcAorCQlrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1l
bnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKKwkJa3N2
ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVt
ZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcv
U1ZHQ29sb3IuY3BwCisJCWtzdmcyL3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9T
VkdEZWZzRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0Rlc2NFbGVtZW50LmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHRG9jdW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdET01JbXBsZW1lbnRhdGlvbi5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR0VsZW1lbnQuY3BwCisgICAgICAgICAgPCEtLQorCQlrc3ZnMi9z
dmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcAorCQlrc3ZnMi9zdmcvU1ZHRWxlbWVudEluc3RhbmNl
TGlzdC5jcHAKKyAgICAgICAgICAtLT4KKwkJa3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNw
cAorCQlrc3ZnMi9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVGdW5j
QUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRUZ1bmNCRWxlbWVudC5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR0ZFRnVuY0dFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVGdW5jUkVsZW1lbnQu
Y3BwCisJCWtzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisJCWtzdmcyL3N2
Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNw
cAorCQlrc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRU1l
cmdlTm9kZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCisJ
CWtzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9T
VkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5j
cHAKKwkJa3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR0ZvcmVpZ25P
YmplY3RFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2
Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwCisJCWtz
dmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuY3Bw
CisJCWtzdmcyL3N2Zy9TVkdMZW5ndGguY3BwCisJCWtzdmcyL3N2Zy9TVkdMZW5ndGhMaXN0LmNw
cAorCQlrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcv
U1ZHTGluZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdMb2NhdGFibGUuY3BwCisJCWtzdmcy
L3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3Bw
CisJCWtzdmcyL3N2Zy9TVkdNYXRyaXguY3BwCisJCWtzdmcyL3N2Zy9TVkdNZXRhZGF0YUVsZW1l
bnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGFp
bnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL3N2Z3Bh
dGhwYXJzZXIuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnQXJjLmNwcAorCQlrc3ZnMi9zdmcv
U1ZHUGF0aFNlZ0Nsb3NlUGF0aC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWcuY3BwCisJCWtz
dmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGgu
Y3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvLmNwcAorCQlrc3ZnMi9zdmcvU1ZHUGF0
aFNlZ0xpbmV0b0hvcml6b250YWwuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvVmVy
dGljYWwuY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXRoU2VnTGlzdC5jcHAKKwkJa3N2ZzIvc3ZnL1NW
R1BhdGhTZWdNb3ZldG8uY3BwCisJCWtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKKwkJ
a3N2ZzIvc3ZnL1NWR1BvaW50TGlzdC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cAorCQlrc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdQb2x5
bGluZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAor
CQlrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZH
UmVjdEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAorCQlrc3Zn
Mi9zdmcvU1ZHU2V0RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAor
CQlrc3ZnMi9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmNw
cAorCQlrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAorCQlr
c3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1Rlc3RzLmNwcAor
CQlrc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVGV4
dEVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAor
CQlrc3ZnMi9zdmcvU1ZHVGl0bGVFbGVtZW50LmNwcAorCQlrc3ZnMi9zdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybS5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1Ry
YW5zZm9ybUxpc3QuY3BwCisJCWtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKKwkJa3N2ZzIv
c3ZnL1NWR1RTcGFuRWxlbWVudC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAK
KwkJa3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCisJCWtzdmcyL3N2Zy9TVkdWaWV3RWxlbWVu
dC5jcHAKKwkJa3N2ZzIvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCisKIAk8L3NldD4KKworCiAJPHNl
dCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BBR0UiPgogCQkKKwkJcGFnZS9DaHJv
bWUuY3BwCiAJCXBhZ2UvRE9NV2luZG93LmNwcAogCQlwYWdlL0ZyYW1lLmNwcAogCQlwYWdlL0Zy
YW1lVHJlZS5jcHAKIAkJcGFnZS9GcmFtZVZpZXcuY3BwCiAJCXBhZ2UvTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cy5jcHAKIAkJcGFnZS9QYWdlLmNwcAorCQlwYWdlL1BhZ2VTdGF0ZS5jcHAK
IAogCTwvc2V0PgogCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19MT0FERVIi
PgpAQCAtMTMxLDEyICszOTUsMTIgQEAKICAgICBsb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5j
cHAKICAgICBsb2FkZXIvRG9jTG9hZGVyLmNwcAogICAgIGxvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAKLSAgICBsb2FkZXIvRm9ybURhdGEuY3BwCiAgICAgbG9hZGVyL0Zvcm1TdGF0ZS5jcHAKICAg
ICBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwCiAgICAgbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCiAg
ICAgbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKICAgICBsb2FkZXIvTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXIuY3BwCisgICAgbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uY3BwCiAgICAg
bG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAogICAgIGxvYWRlci9SZXF1ZXN0LmNwcAogICAgIGxv
YWRlci9SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTE0OCw2ICs0MTIsNyBAQAogICA8L3NldD4KIAk8
c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfUExBVEZPUk0iPgogCQkKKwkJcGxh
dGZvcm0vQWZmaW5lVHJhbnNmb3JtLmNwcAogCQlwbGF0Zm9ybS9BcmVuYS5jcHAKIAkJcGxhdGZv
cm0vQXJyYXlJbXBsLmNwcAogCQlwbGF0Zm9ybS9BdG9taWNTdHJpbmcuY3BwCkBAIC0xNjgsMTUg
KzQzMywxNyBAQAogCQlwbGF0Zm9ybS9Gb250RmFtaWx5LmNwcAogCQlwbGF0Zm9ybS9HbHlwaE1h
cC5jcHAKIAkJcGxhdGZvcm0vR2x5cGhXaWR0aE1hcC5jcHAKLQkJcGxhdGZvcm0vR3JhcGhpY3ND
b250ZXh0LmNwcAotCQlwbGF0Zm9ybS9HcmFwaGljc1R5cGVzLmNwcAorCQlwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisJCXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwCiAJCXBsYXRmb3JtL0ltYWdlLmNwcAogCQlwbGF0Zm9ybS9JbnRSZWN0LmNwcAogCQlw
bGF0Zm9ybS9LVVJMLmNwcAogCQlwbGF0Zm9ybS9Mb2dnaW5nLmNwcAorCQlwbGF0Zm9ybS9QYXRo
LmNwcAogCQlwbGF0Zm9ybS9QZW4uY3BwCiAJCXBsYXRmb3JtL1JlZ3VsYXJFeHByZXNzaW9uLmNw
cAogCQlwbGF0Zm9ybS9TZWdtZW50ZWRTdHJpbmcuY3BwCisJCXBsYXRmb3JtL1Njcm9sbEJhci5j
cHAKIAkJcGxhdGZvcm0vVGV4dENvZGVjLmNwcAogCQlwbGF0Zm9ybS9UZXh0Q29kZWNJQ1UuY3Bw
CiAJCXBsYXRmb3JtL1N0cmluZy5jcHAKQEAgLTE4OSw2ICs0NTYsNyBAQAogCQlwbGF0Zm9ybS9U
ZXh0U3RyZWFtLmNwcAogCQlwbGF0Zm9ybS9UaW1lci5jcHAKIAkJcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5jcHAKKwkJcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKIAkJcGxh
dGZvcm0vV2lkZ2V0LmNwcAogCiAJPC9zZXQ+CkBAIC0zMTIsMTMgKzU4MCw0OCBAQAogCQlwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcAogCiAJPC9zZXQ+Ci0J
PHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NBSVJPIj4KKworCTxzZXQgYXBw
ZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19LQ0FOVkFTIj4KKwkJa2NhbnZhcy9LQ2FudmFz
RmlsdGVycy5jcHAKKwkJa2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAKKwkJa2Nh
bnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3BwCisJCWtjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uY3BwCisJCWtjYW52YXMvZGV2aWNl
L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmNwcAorCQlwbGF0Zm9ybS9ncmFwaGljcy9zdmcv
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorCQlwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3Vy
Y2UuY3BwCisJCXBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZU1hcmtlci5jcHAKKwkJ
cGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlTWFza2VyLmNwcAorCQlyZW5kZXJpbmcv
U1ZHSW5saW5lRmxvd0JveC5jcHAKKwkJcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
CisJCXJlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcAorCQlyZW5kZXJpbmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcAorCQlyZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCisJCXJlbmRlcmlu
Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCisJCXJlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNw
cAorCQlyZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKKwkJcmVuZGVyaW5nL1JlbmRlclNWR1RT
cGFuLmNwcAorCisJPC9zZXQ+CisKKwk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJD
RVNfS0NBTlZBU19DQUlSTyI+CisgICAgICAgIGtjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJp
bmdEZXZpY2VDYWlyby5jcHAKKyAgICAgICAga2NhbnZhcy9kZXZpY2UvY2Fpcm8vUGF0dGVybkNh
aXJvLmNwcAorICAgICAgICBrY2FudmFzL2RldmljZS9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jYWlyby9TVkdSZXNvdXJjZUNsaXBwZXJD
YWlyby5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NhaXJvL1NWR1Jlc291cmNl
SW1hZ2VDYWlyby5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NhaXJvL1NWR1Jl
c291cmNlTWFza2VyQ2Fpcm8uY3BwCisgICAgPC9zZXQ+CisKKwk8c2V0IGFwcGVuZD0iMSIgdmFy
PSJXRUJDT1JFX1NPVVJDRVNfQ0FJUk9fQklORElOR1MiPgogCQkKKwkJcGxhdGZvcm0vY2Fpcm8v
QWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwCiAJCXBsYXRmb3JtL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAogCQlwbGF0Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAogCQlwbGF0Zm9ybS9j
YWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcAorCQlwbGF0Zm9ybS9jYWlyby9QYXRoQ2Fpcm8uY3Bw
CiAKIAk8L3NldD4KKwogCTxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19QSVhN
QU4iPgogCQkKIAkJcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9mYmNvbXBvc2UuYwpAQCAtNDMy
LDExICs3MzUsMTEgQEAKIAkJcmVuZGVyaW5nL0NvdW50ZXJSZXNldE5vZGUuY3BwCiAJCXJlbmRl
cmluZy9FbGxpcHNpc0JveC5jcHAKIAkJcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCisJ
CXJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAogCQlyZW5kZXJpbmcvSW5saW5lQm94LmNwcAog
CQlyZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKIAkJcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCiAJCXJlbmRlcmluZy9MaXN0TWFya2VyQm94LmNwcAotCQlyZW5kZXJpbmcvUmVuZGVyU3R5
bGUuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJB
cmVuYS5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNDQ5LDYgKzc1Miw3IEBA
CiAJCXJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKIAkJcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKKwkJcmVuZGVy
aW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJGb3JtRWxlbWVu
dC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuY3BwCkBAIC00NjYsOSArNzcwLDkgQEAKIAkJcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKIAkJcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCiAJCXJlbmRlcmluZy9SZW5kZXJQYXJ0T2Jq
ZWN0LmNwcAotCQlyZW5kZXJpbmcvUmVuZGVyUG9wdXBNZW51LmNwcAorCQlyZW5kZXJpbmcvUmVu
ZGVyUGF0aC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAotCQlyZW5kZXJpbmcv
RGVwcmVjYXRlZFJlbmRlclNlbGVjdC5jcHAKKwkJcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNwcAog
CQlyZW5kZXJpbmcvRGVwcmVjYXRlZFNsaWRlci5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNDc5LDEyICs3ODMsMTAg
QEAKIAkJcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAogCQlyZW5kZXJpbmcvUmVuZGVy
VGV4dEZyYWdtZW50LmNwcAogCQlyZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCi0JCQogCQlyZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKIAkJcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCiAJ
CXJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCiAJCXJlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAotCiAJPC9zZXQ+CiAKIAk8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfWE1M
Ij4KQEAgLTU2NCwxMSArODY2LDEyIEBACiAJPC9zZXQ+CiAKIAk8c2V0IGFwcGVuZD0iMSIgdmFy
PSJXRUJDT1JFX1NPVVJDRVNfSUNPTiI+Ci0JCWljb24vSWNvbkRhdGFiYXNlLmNwcAotCQlpY29u
L0ljb25Mb2FkZXIuY3BwCi0JCWljb24vU1FMRGF0YWJhc2UuY3BwCi0JCWljb24vU1FMU3RhdGVt
ZW50LmNwcAotCQlpY29uL1NpdGVJY29uLmNwcAorCQlsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2Uu
Y3BwCisJCWxvYWRlci9pY29uL0ljb25EYXRhQ2FjaGUuY3BwCisJCWxvYWRlci9pY29uL0ljb25M
b2FkZXIuY3BwCisJCWxvYWRlci9pY29uL1NRTERhdGFiYXNlLmNwcAorCQlsb2FkZXIvaWNvbi9T
UUxTdGF0ZW1lbnQuY3BwCisJCWxvYWRlci9pY29uL1NRTFRyYW5zYWN0aW9uLmNwcAogCTwvc2V0
PgogCiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0JSSURHRSI+CkBAIC01
ODksOSArODkyLDEyIEBACiAJCWVkaXRpbmcvQ29tbWFuZEJ5TmFtZS5jcHAKIAkJZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKIAkJZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5jcHAK
KwkJZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAorCQllZGl0aW5nL0RlbGV0ZUJ1
dHRvbi5jcHAKIAkJZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAogCQllZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCiAJCWVkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
CisJCWVkaXRpbmcvRWRpdG9yLmNwcAogCQllZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAK
IAkJZWRpdGluZy9odG1sZWRpdGluZy5jcHAKIAkJZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3Bw
CkBAIC02MTQsOCArOTIwLDggQEAKIAkJZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKIAkJ
ZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAKIAkJZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKwkJZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcAogCQllZGl0aW5nL1NlbGVjdGlvbi5jcHAKLQkJZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcAogCQllZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAogCQllZGl0
aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCiAJCWVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1h
bmQuY3BwCkBAIC02MjMsMTAgKzkyOSw5IEBACiAJCWVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAog
CQllZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCiAJCWVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAK
KwkJZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCiAJCWVkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAKLQkJZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCiAJCWVkaXRpbmcvV3JhcENvbnRlbnRz
SW5EdW1teVNwYW5Db21tYW5kLmNwcAotCiAJPC9zZXQ+CiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0i
V0VCQ09SRV9TT1VSQ0VTX0hUTUwiPgogCkBAIC02NTgsNiArOTYzLDcgQEAKIAkJaHRtbC9IVE1M
Rm9ybUNvbGxlY3Rpb24uY3BwCiAJCWh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAogCQlodG1sL0hU
TUxGcmFtZUVsZW1lbnQuY3BwCisJCWh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCiAJCWh0
bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKIAkJaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50
LmNwcAogCQlodG1sL0hUTUxIZWFkRWxlbWVudC5jcHAKQEAgLTcwOSwxMiArMTAxNSwxOSBAQAog
CSAgICBodG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCQogCiAJPC9zZXQ+Ci0JPHNldCBh
cHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0JJTkRJTkdTIj4KLQkJCiAKKwk8c2V0IGFw
cGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfQ1VSTCI+CisKKwkJcGxhdGZvcm0vbmV0d29y
ay9nZGsvRnJhbWVMb2FkZXJDdXJsLmNwcAorCQlwbGF0Zm9ybS9uZXR3b3JrL2dkay9Mb2FkZXJG
dW5jdGlvbnNDdXJsLmNwcAorCQlwbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZUN1
cmwuY3BwCisJCXBsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAK
KwogCTwvc2V0PgorCiAJPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0pTIj4K
IAkJCisKIAkJYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CiAJCWJpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAKIAkJYmluZGlu
Z3MvanMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwCkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdEZXZpY2VDYWlyby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdEZXZpY2VDYWly
by5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisJCQkJICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBLUmVuZGVyaW5nRGV2aWNl
Q2Fpcm9fSAorI2RlZmluZSBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm9fSAorCisKKyNpbmNsdWRlICJL
UmVuZGVyaW5nRGV2aWNlLmgiCisjaW1wb3J0ICJQYXR0ZXJuQ2Fpcm8uaCIKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dC5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uaCIKKyNpbmNsdWRl
ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBSZW5kZXJQYXRoOworY2xhc3MgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXI7CitjbGFzcyBLUmVu
ZGVyaW5nRmlsbFBhaW50ZXI7CitjbGFzcyBQYXRoOworY2xhc3MgQ29sb3I7CitjbGFzcyBTVkdS
ZXNvdXJjZUltYWdlOworY2xhc3MgU1ZHUmVzb3VyY2U7CisKKworY2xhc3MgS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRDYWlybyA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dAoreworcHVi
bGljOgorICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8oR3JhcGhpY3NDb250ZXh0KiBn
YykKKyAgICA6bV9nYyhnYykgeyB9CisKKyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dENhaXJvKCl7fQorCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gY29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgd29ybGRNYXRyaXgpCisgICAgeworICAgICAgICBtX2djLT5j
b25jYXRDVE0od29ybGRNYXRyaXgpOworICAgICAgICByZXR1cm4gY3RtKCk7CisgICAgfQorCisg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gY3RtKCljb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclBhdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJiBwYXRo
KTsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBjcmVhdGVHcmFwaGljc0NvbnRleHQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQobV9nYy0+cGxhdGZv
cm1Db250ZXh0KCkpOyAKKyAgICB9CisgICAgCisgICAgLy8gQ2Fpcm8gc3BlY2lmaWMgc3R1ZmYK
KyAgICBHcmFwaGljc0NvbnRleHQqIGNhaXJvQ29udGV4dCgpeyByZXR1cm4gbV9nYzt9CisKKyAg
ICB2b2lkIGRyYXdQYXRoKGNvbnN0IFJlbmRlclBhdGgqLCBQYXR0ZXJuQ2Fpcm8mLCBLQ1BhaW50
VGFyZ2V0VHlwZSB0eXBlKTsKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQqIG1fZ2M7
Cit9OworCitjbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ2Fpcm8gOiBwdWJsaWMgS1JlbmRlcmluZ0Rl
dmljZQoreworcHVibGljOgorICAgIEtSZW5kZXJpbmdEZXZpY2VDYWlybygpIHt9CisgICAgdmly
dHVhbCB+S1JlbmRlcmluZ0RldmljZUNhaXJvKCkge30KKworICAgIHZpcnR1YWwgYm9vbCBpc0J1
ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gY29udGV4dCBtYW5hZ2Vt
ZW50LgorICAgIHZpcnR1YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHRGb3JJbWFn
ZShTVkdSZXNvdXJjZUltYWdlKikgY29uc3Q7CisKKworICAgIC8vIFJlc291cmNlIGNyZWF0aW9u
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNWR1Jlc291cmNlPiBjcmVhdGVSZXNvdXJjZShjb25z
dCBTVkdSZXNvdXJjZVR5cGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8S1JlbmRl
cmluZ1BhaW50U2VydmVyPiBjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1BhaW50U2VydmVyVHlw
ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCogY3JlYXRlRmlsdGVy
RWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSYpIGNvbnN0OworCisgICAgS1JlbmRlcmlu
Z0RldmljZUNvbnRleHRDYWlybyogY2Fpcm9Db250ZXh0KCkgY29uc3QgCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyo+KGN1cnJl
bnRDb250ZXh0KCkpOworICAgIH0KKyAgcHJpdmF0ZToKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dENhaXJvKiBtX2NvbnRleHQ7CisKK307CisKK2NsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZl
ckxpbmVhckdyYWRpZW50Q2Fpcm8gOiBwdWJsaWMgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFy
R3JhZGllbnQKK3sKK3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFk
aWVudENhaXJvKCl7fQorICAgIHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50Q2Fpcm8oKXt9CisgICAgdmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworfTsK
KworY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRDYWlybyA6IHB1Ymxp
YyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudAoreworcHVibGljOgorICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Q2Fpcm8oKXt9CisgICAgdmlydHVhbCB+
S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRDYWlybygpe30KKyAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBL
Q1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Cit9OworCisKK2NsYXNzIEtSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm5DYWlybyA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuCit7
CitwdWJsaWM6CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvKCl7fQorICAg
IHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5DYWlybygpe30KKyAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgq
LCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Cit9OworCitjbGFzcyBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZENhaXJvIDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkCit7Citw
dWJsaWM6CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRDYWlybygpe30KKyAgICB2aXJ0
dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZENhaXJvKCl7fQorICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFp
bnRUYXJnZXRUeXBlKSBjb25zdDsKK307CisKK30KKyNlbmRpZgorLy8gdmltOnRzPTQ6ZXQKSW5k
ZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vS1JlbmRlcmluZ0RldmljZUNhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2NhaXJvL0tSZW5kZXJpbmdE
ZXZpY2VDYWlyby5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL2Nh
aXJvL0tSZW5kZXJpbmdEZXZpY2VDYWlyby5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjg4
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKwkJCQkgIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlr
ZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZUNhaXJvLmgi
CisjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyUGF0
aC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlQ2xpcHBlci5oIgorI2luY2x1ZGUgIlNWR1Jlc291
cmNlSW1hZ2UuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZU1hc2tlci5oIgorI2luY2x1ZGUgIlNW
R1Jlc291cmNlTWFya2VyLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGFz
c2VydC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FmZmluZVRyYW5zZm9ybSBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dENhaXJvOjpjdG0oKWNvbnN0Cit7CisJY2Fpcm9fbWF0cml4X3QgbWF0
cml4OworCWNhaXJvX3QqIGNyID0gbV9nYy0+cGxhdGZvcm1Db250ZXh0KCk7CisJY2Fpcm9fZ2V0
X21hdHJpeChjciwmbWF0cml4KTsKKwlyZXR1cm4gQWZmaW5lVHJhbnNmb3JtKG1hdHJpeCk7Cit9
CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6Y2xlYXJQYXRoKCkKK3sKKwlj
YWlyb190KiBjciA9IG1fZ2MtPnBsYXRmb3JtQ29udGV4dCgpOworCWNhaXJvX25ld19wYXRoKGNy
KTsKK30KK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybzo6YWRkUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQoreyAKKwljYWlyb190KiBjciA9IG1fZ2MtPnBsYXRmb3JtQ29udGV4dCgpOwor
CWNhaXJvX3BhdGhfdCogY3BhdGggPSBwYXRoLnBsYXRmb3JtUGF0aCgpOworCWNhaXJvX2FwcGVu
ZF9wYXRoKGNyLGNwYXRoKTsKK30KKwordm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJv
OjpkcmF3UGF0aChjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBQYXR0ZXJuQ2Fpcm8mIHBhdHRlcm4s
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpCit7CisgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxl
ID0gcGF0aC0+c3R5bGUoKTsKKwljYWlyb190KiBjciA9IG1fZ2MtPnBsYXRmb3JtQ29udGV4dCgp
OworICAgIG1fZ2MtPnNhdmUoKTsKKworCWNhaXJvX3BhdGhfdCAqcCA9IHBhdGgtPnBhdGgoKS5w
bGF0Zm9ybVBhdGgoKTsKKwljYWlyb19hcHBlbmRfcGF0aChjcixwKTsKKwljYWlyb19zZXRfc291
cmNlKGNyLHBhdHRlcm4ucGF0dGVybigpKTsKKworICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJ
TEwpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpIHsKKwkJaWYocmVuZGVy
U3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REICkKKyAgIAkJCWNh
aXJvX3NldF9maWxsX3J1bGUoY3IsIENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCk7IAorCQllbHNl
CisgICAJCQljYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBDQUlST19GSUxMX1JVTEVfV0lORElORyk7
CisKKwkJY2Fpcm9fZmlsbChjcik7CisgICAgfQorCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9f
U1RST0tFKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKKworICAg
IAljYWlyb19zZXRfbGluZV93aWR0aChjcixLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1ByaW1pdGl2
ZVRvTGVuZ3RoKHBhdGgsCisJCQkJCQkJCXJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VX
aWR0aCgpLCAxLjApKTsKKyAgIAkJY2Fpcm9fbGluZV9jYXBfdCBjYXAgPSBDQUlST19MSU5FX0NB
UF9CVVRUOworICAgIAlzd2l0Y2ggKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgp
KSB7CisgICAgCQljYXNlIFJvdW5kQ2FwOgorICAgICAgICAJCWNhcCA9IENBSVJPX0xJTkVfQ0FQ
X1JPVU5EOworICAgICAgICAJYnJlYWs7CisgICAgCQljYXNlIFNxdWFyZUNhcDoKKyAgICAgICAg
CQljYXAgPSBDQUlST19MSU5FX0NBUF9TUVVBUkU7CisgICAgICAgIAlicmVhazsKKyAgICAJfQor
ICAgIAljYWlyb19zZXRfbGluZV9jYXAoY3IsY2FwKTsKKworICAgCQljYWlyb19saW5lX2pvaW5f
dCBqb2luID0gQ0FJUk9fTElORV9KT0lOX01JVEVSOworICAgIAlzd2l0Y2ggKHJlbmRlclN0eWxl
LT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSkgeworICAgIAkJY2FzZSBSb3VuZEpvaW46CisgICAg
ICAgIAkJam9pbiA9IENBSVJPX0xJTkVfSk9JTl9ST1VORDsKKyAgICAgICAgCWJyZWFrOworICAg
IAkJY2FzZSBCZXZlbEpvaW46CisgICAgICAgIAkJam9pbiA9IENBSVJPX0xJTkVfSk9JTl9ST1VO
RDsKKyAgICAgICAgCWJyZWFrOworICAgIAl9CisgICAgCWNhaXJvX3NldF9saW5lX2pvaW4oY3Is
am9pbik7CisJCWNhaXJvX3NldF9taXRlcl9saW1pdChjcixyZW5kZXJTdHlsZS0+c3ZnU3R5bGUo
KS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKKworICAgIAljb25zdCBLQ0Rhc2hBcnJheSYgZGFzaGVz
ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUocmVuZGVy
U3R5bGUpOworICAgIAl1bnNpZ25lZCBpbnQgZGFzaExlbmd0aCA9IGRhc2hlcy5zaXplKCk7Cisg
ICAgCWlmKGRhc2hMZW5ndGgpIHsKKyAgICAJCWRvdWJsZSBkYXNoT2Zmc2V0ID0gS1NWR1BhaW50
ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aChwYXRoLAorCQkJCQkJCXJlbmRlclN0eWxl
LT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7CisgICAgICAgIAlkb3VibGUq
IGNkYXNoZXMgPSBuZXcgZG91YmxlW2Rhc2hMZW5ndGhdOworICAgICAgICAJZm9yKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGRhc2hMZW5ndGg7IGkrKykKKyAgICAgICAgICAgIAljZGFzaGVzW2ld
ID0gKGRvdWJsZSlkYXNoZXNbZGFzaExlbmd0aF07CisJCQljYWlyb19zZXRfZGFzaChjcixjZGFz
aGVzLGRhc2hMZW5ndGgsZGFzaE9mZnNldCk7CisgICAgICAgCQlkZWxldGVbXSBjZGFzaGVzOwor
ICAgIAl9CisJCWNhaXJvX3N0cm9rZShjcik7CisgICAgfQorICAgIG1fZ2MtPnJlc3RvcmUoKTsK
K30KKworCitLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogS1JlbmRlcmluZ0RldmljZUNhaXJvOjpj
b250ZXh0Rm9ySW1hZ2UoU1ZHUmVzb3VyY2VJbWFnZSogaW1hZ2UpIGNvbnN0Cit7CisgICAgSW1h
Z2UqIGltZyA9IGltYWdlLT5pbWFnZSgpOworCWNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGlt
Zy0+ZnJhbWVBdEluZGV4KDApOworCWNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2Up
OworCXJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRDYWlybyhuZXcgR3JhcGhpY3ND
b250ZXh0KGNyKSk7Cit9CisKKworLy8gUmVzb3VyY2UgY3JlYXRpb24KK1Bhc3NSZWZQdHI8U1ZH
UmVzb3VyY2U+IEtSZW5kZXJpbmdEZXZpY2VDYWlybzo6Y3JlYXRlUmVzb3VyY2UoY29uc3QgU1ZH
UmVzb3VyY2VUeXBlJiB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7Cisg
ICAgICAgIGNhc2UgUlNfQ0xJUFBFUjoKKyAgICAgICAgICAgIHJldHVybiBuZXcgU1ZHUmVzb3Vy
Y2VDbGlwcGVyKCk7CisJCWNhc2UgUlNfTUFSS0VSOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBT
VkdSZXNvdXJjZU1hcmtlcigpOworICAgICAgICBjYXNlIFJTX0lNQUdFOgorICAgICAgICAgICAg
Ly8gcmV0dXJuIG5ldyBTVkdSZXNvdXJjZUltYWdlKCk7CisgICAgICAgIGNhc2UgUlNfRklMVEVS
OgorICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBLQ2FudmFzRmlsdGVyQ2Fpcm8oKTsKKyAgICAg
ICAgY2FzZSBSU19NQVNLRVI6CisgICAgICAgICAgICAvLyByZXR1cm4gbmV3IFNWR1Jlc291cmNl
TWFza2VyKCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK1Bhc3NSZWZQdHI8S1JlbmRlcmluZ1BhaW50U2VydmVyPiBLUmVuZGVyaW5nRGV2aWNl
Q2Fpcm86OmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJiB0eXBlKSBj
b25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgUFNfU09MSUQ6
CisgICAgICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQ2Fpcm8o
KTsKKyAgICAgICAgY2FzZSBQU19QQVRURVJOOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8oKTsKKyAgICAgICAgY2FzZSBQU19MSU5FQVJf
R1JBRElFTlQ6CisgICAgICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlckxp
bmVhckdyYWRpZW50Q2Fpcm8oKTsKKyAgICAgICAgY2FzZSBQU19SQURJQUxfR1JBRElFTlQ6Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50
Q2Fpcm8oKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
K30KKworS0NhbnZhc0ZpbHRlckVmZmVjdCogS1JlbmRlcmluZ0RldmljZUNhaXJvOjpjcmVhdGVG
aWx0ZXJFZmZlY3QoY29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlJiB0eXBlKSBjb25zdAoreworICAg
IHByaW50ZigiS1JlbmRlcmluZ0RldmljZUNhaXJvOjpjcmVhdGVGaWx0ZXJFZmZlY3QoKSBUT0RP
IVxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKworS1JlbmRlcmluZ0RldmljZSogcmVuZGVyaW5n
RGV2aWNlKCkKK3sKKyAgICBzdGF0aWMgS1JlbmRlcmluZ0RldmljZSAqc2hhcmVkUmVuZGVyaW5n
RGV2aWNlID0gbmV3IEtSZW5kZXJpbmdEZXZpY2VDYWlybygpOworICAgIHJldHVybiBzaGFyZWRS
ZW5kZXJpbmdEZXZpY2U7Cit9CisKKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI6OnJlbmRl
clBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgq
IHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisJZHJhdyhjb250ZXh0LHBh
dGgsdHlwZSk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRD
YWlybzo6ZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVy
UGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dENhaXJvKj4oY29udGV4dCk7CisgICAgUmVuZGVyU3R5bGUqIHJlbmRl
clN0eWxlID0gcGF0aC0+c3R5bGUoKTsKKwljYWlyb190KiBjciA9IGNhaXJvQ29udGV4dC0+Y2Fp
cm9Db250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKGxpc3RlbmVyKCkpCisg
ICAgICAgIGxpc3RlbmVyKCktPnJlc291cmNlTm90aWZpY2F0aW9uKCk7CisKKworCUZsb2F0UmVj
dCBiYm94ID0gRmxvYXRSZWN0KCk7CisJaWYoYm91bmRpbmdCb3hNb2RlKCkpIHsKKwkJZG91Ymxl
IHgsIHksIHcsIGg7CisJCWNhaXJvX3N0cm9rZV9leHRlbnRzKGNyLCZ4LCZ5LCZ3LCZoKTsKKwkJ
YmJveCA9IEZsb2F0UmVjdCh4LHksdyxoKTsKKwl9CisKKwlGbG9hdFBvaW50IHN0YXJ0ID0gZ3Jh
ZGllbnRTdGFydCgpOworCUZsb2F0UG9pbnQgZW5kID0gICBncmFkaWVudEVuZCgpOworCUFmZmlu
ZVRyYW5zZm9ybSB0cmFucyA9ICBncmFkaWVudFRyYW5zZm9ybSgpOworCisJUGF0dGVybkNhaXJv
IGxpbmVhclBhdHRlcm4gPSBQYXR0ZXJuQ2Fpcm8oc3RhcnQKKyAgICAgICAgLCBlbmQgCisgICAg
ICAgICwgZ3JhZGllbnRTdG9wcygpIAorICAgICAgICAsIHJlbmRlclN0eWxlLT5vcGFjaXR5KCkg
CisgICAgICAgICwgdHJhbnMgCisgICAgICAgICwgc3ByZWFkTWV0aG9kKCkKKyAgICAgICAgLCBi
Ym94KTsKKyAKKwljYWlyb0NvbnRleHQtPmRyYXdQYXRoKHBhdGgsbGluZWFyUGF0dGVybix0eXBl
KTsKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudENhaXJvOjpk
cmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBw
YXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0Q2Fpcm8qIGNhaXJvQ29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0Q2Fpcm8qPihjb250ZXh0KTsKKyAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUg
PSBwYXRoLT5zdHlsZSgpOworICAgIGlmIChsaXN0ZW5lcigpKQorICAgICAgICBsaXN0ZW5lcigp
LT5yZXNvdXJjZU5vdGlmaWNhdGlvbigpOworCisJY2Fpcm9fdCogY3IgPSBjYWlyb0NvbnRleHQt
PmNhaXJvQ29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIEFmZmluZVRyYW5zZm9y
bSBkZXN0VHJhbnNmb3JtID0gY29udGV4dC0+Y3RtKCk7CisKKwlGbG9hdFJlY3QgYmJveCA9IEZs
b2F0UmVjdCgpOyAKKwlpZihib3VuZGluZ0JveE1vZGUoKSkgeworCQlkb3VibGUgeCwgeSwgdywg
aDsKKwkJY2Fpcm9fc3Ryb2tlX2V4dGVudHMoY3IsJngsJnksJncsJmgpOworCQliYm94ID0gRmxv
YXRSZWN0KHgseSx3LGgpOworCX0KKwkKKwlGbG9hdFBvaW50IGN0ciA9IGdyYWRpZW50Q2VudGVy
KCk7CisJRmxvYXRQb2ludCBmb2NhbCA9IGdyYWRpZW50Rm9jYWwoKTsKKwlBZmZpbmVUcmFuc2Zv
cm0gdHJhbnMgPSAgZ3JhZGllbnRUcmFuc2Zvcm0oKTsKKworCVBhdHRlcm5DYWlybyByYWRpYWxQ
YXR0ZXJuID0gUGF0dGVybkNhaXJvKGN0cgorICAgICAgICAsIGZvY2FsIAorICAgICAgICAsIGdy
YWRpZW50UmFkaXVzKCkgCisgICAgICAgICwgZ3JhZGllbnRTdG9wcygpIAorICAgICAgICAsIHJl
bmRlclN0eWxlLT5vcGFjaXR5KCkgCisgICAgICAgICwgdHJhbnMgCisgICAgICAgICwgc3ByZWFk
TWV0aG9kKCkKKyAgICAgICAgLCBkZXN0VHJhbnNmb3JtCisgICAgICAgICwgYmJveCk7CisgCisJ
Y2Fpcm9Db250ZXh0LT5kcmF3UGF0aChwYXRoLHJhZGlhbFBhdHRlcm4sdHlwZSk7Cit9CisKK3Zv
aWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkNhaXJvOjpkcmF3KEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0
VHlwZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qIGNh
aXJvQ29udGV4dCA9IAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNv
bnRleHRDYWlybyo+KGNvbnRleHQpOworICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHBh
dGgtPnN0eWxlKCk7CisKKyAgICBpZiAobGlzdGVuZXIoKSkgeworICAgICAgICBsaXN0ZW5lcigp
LT5yZXNvdXJjZU5vdGlmaWNhdGlvbigpOworICAgIH0KKworCVNWR1Jlc291cmNlSW1hZ2UqIGlt
YWdlID0gc3RhdGljX2Nhc3Q8U1ZHUmVzb3VyY2VJbWFnZSo+KHRpbGUoKSk7CQkKKworCVBhdHRl
cm5DYWlybyBpbWFnZVBhdHRlcm4gPSBQYXR0ZXJuQ2Fpcm8oaW1hZ2UtPmltYWdlKCkKKyAgICAg
ICAgLCByZW5kZXJTdHlsZS0+b3BhY2l0eSgpIAorICAgICAgICAsIHBhdHRlcm5UcmFuc2Zvcm0o
KSAKKyAgICAgICAgLCBTUFJFQURNRVRIT0RfUkVQRUFUKTsKKworCWNhaXJvQ29udGV4dC0+ZHJh
d1BhdGgocGF0aCxpbWFnZVBhdHRlcm4sdHlwZSk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRDYWlybzo6ZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwg
Y29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sK
KyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKiBjYWlyb0NvbnRleHQgPSAKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Q2Fpcm8qPihjb250ZXh0
KTsKKyAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworICAgIFBh
dHRlcm5DYWlybyBjb2xvclBhdHRlcm4gPSBQYXR0ZXJuQ2Fpcm8oJmNvbG9yKCkscmVuZGVyU3R5
bGUtPm9wYWNpdHkoKSk7CisJY2Fpcm9Db250ZXh0LT5kcmF3UGF0aChwYXRoLGNvbG9yUGF0dGVy
bix0eXBlKTsKK30KKworfQorLy8gdmltOnRzPTQ6bm9ldAorCkluZGV4OiBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIyMyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAg
ICAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisJCQkJICAyMDA2IE1pY2hhZWwgRW1tZWwgPG1p
a2UuZW1tZWxAZ21haWwuY29tPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXR0ZXJuQ2Fpcm8uaCIKKyNp
bmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsQ29sb3JBcnJheShjYWly
b19wYXR0ZXJuX3QgKnBhdHRlcm4sIGNvbnN0IFZlY3RvcjxLQ0dyYWRpZW50U3RvcD4mIHN0b3Bz
LCBmbG9hdCBvcGFjaXR5KQoreworCWRvdWJsZSByLCBnLCBiLCBhOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgb2Zmc2V0
ID0gKGRvdWJsZSlzdG9wc1tpXS5maXJzdDsKKyAgICAgICAgQ29sb3IgY29sb3IgPSBzdG9wc1tp
XS5zZWNvbmQ7CisJCWNvbG9yLmdldFJHQkEocixnLGIsYSk7CisgICAgICAgCWEgPSBhKm9wYWNp
dHk7IAorCQljYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEocGF0dGVybixvZmZzZXQs
cixnLGIsYSk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVN0b3BPZmZz
ZXQoY29uc3QgS0NHcmFkaWVudFN0b3AmIGZpcnN0LCBjb25zdCBLQ0dyYWRpZW50U3RvcCYgc2Vj
b25kKQoreworICAgIHJldHVybiBmaXJzdC5maXJzdCA8IHNlY29uZC5maXJzdDsKK30KKworCitz
dGF0aWMgaW5saW5lIHZvaWQgc2V0VHJhbnNBbmRSZXBlYXQoY2Fpcm9fcGF0dGVybl90ICpwYXR0
ZXJuLAorCUFmZmluZVRyYW5zZm9ybSYgdHJhbnMsS0NHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJl
YWRNZXRob2QgKQoreworICAgIGlmIChzcHJlYWRNZXRob2QgPT0gU1BSRUFETUVUSE9EX1JFUEVB
VCkgeworCQljYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybixDQUlST19FWFRFTkRfUkVQ
RUFUKTsKKyAgICB9IGVsc2UgaWYgKHNwcmVhZE1ldGhvZCA9PSBTUFJFQURNRVRIT0RfUkVGTEVD
VCkgeworCQljYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybixDQUlST19FWFRFTkRfUkVG
TEVDVCk7CisgICAgfSBlbHNlIHsKKwkJY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBhdHRlcm4s
Q0FJUk9fRVhURU5EX1BBRCk7CisgICAgfQorCWNhaXJvX21hdHJpeF90IG09IChjYWlyb19tYXRy
aXhfdCl0cmFuczsKKwljYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwmbSk7Cit9CisK
KworUGF0dGVybkNhaXJvOjpQYXR0ZXJuQ2Fpcm8oRmxvYXRQb2ludCYgZ3JhZGllbnRTdGFydAor
CSwgRmxvYXRQb2ludCYgZ3JhZGllbnRFbmQKKwksIGNvbnN0IFZlY3RvcjxLQ0dyYWRpZW50U3Rv
cD4mIHN0b3BzSW4KKwksIGZsb2F0IG9wYWNpdHkKKwksIEFmZmluZVRyYW5zZm9ybSYgZ3JhZGll
bnRUcmFuc2Zvcm0KKwksIEtDR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kCisJLCBG
bG9hdFJlY3QmIGJib3gpCit7CisgICAgZG91YmxlIHgxLCB4MiwgeTEsIHkyOworCisJVmVjdG9y
PEtDR3JhZGllbnRTdG9wPiBzdG9wcyA9IHN0b3BzSW47CisgCXN0ZDo6c29ydChzdG9wcy5iZWdp
bigpLHN0b3BzLmVuZCgpLCBjb21wYXJlU3RvcE9mZnNldCk7CisKKwkvL0ZJWE1FOiBjb3BpZWQg
ZnJvbSBxdAorICAgIGlmICghYmJveC5pc0VtcHR5KCkpIHsKKyAgICAgICAgeDEgPSBkb3VibGUo
YmJveC54KCkpICsgKGRvdWJsZShncmFkaWVudFN0YXJ0LngoKSAvIDEwMC4wKSAqIGRvdWJsZShi
Ym94LndpZHRoKCkpKTsKKyAgICAgICAgeTEgPSBkb3VibGUoYmJveC55KCkpICsgKGRvdWJsZShn
cmFkaWVudFN0YXJ0LnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7CisgICAg
ICAgIHgyID0gZG91YmxlKGJib3gud2lkdGgoKSkgKyAoZG91YmxlKGdyYWRpZW50RW5kLngoKSAv
IDEwMC4wKSAgKiBkb3VibGUoYmJveC53aWR0aCgpKSk7CisgICAgICAgIHkyID0gZG91YmxlKGJi
b3guaGVpZ2h0KCkpICsgKGRvdWJsZShncmFkaWVudEVuZC55KCkgLyAxMDAuMCkgKiBkb3VibGUo
YmJveC5oZWlnaHQoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHgxID0gZ3JhZGllbnRTdGFy
dC54KCk7CisgICAgICAgIHkxID0gZ3JhZGllbnRTdGFydC55KCk7CisgICAgICAgIHgyID0gZ3Jh
ZGllbnRFbmQueCgpOworICAgICAgICB5MiA9IGdyYWRpZW50RW5kLnkoKTsKKyAgICB9CisKKwlt
X3BhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIgKHgxLHkxLHgyLHkyKTsKKyAg
ICBmaWxsQ29sb3JBcnJheShtX3BhdHRlcm4sc3RvcHMsb3BhY2l0eSk7CisJc2V0VHJhbnNBbmRS
ZXBlYXQobV9wYXR0ZXJuLGdyYWRpZW50VHJhbnNmb3JtLHNwcmVhZE1ldGhvZCk7Cit9CisKK1Bh
dHRlcm5DYWlybzo6UGF0dGVybkNhaXJvKCBGbG9hdFBvaW50JiBncmFkaWVudENlbnRlcgorCSwg
RmxvYXRQb2ludCYgZ3JhZGllbnRGb2NhbAorCSwgZmxvYXQgZ3JhZGllbnRSYWRpdXMKKwksIGNv
bnN0IFZlY3RvcjxLQ0dyYWRpZW50U3RvcD4mIHN0b3BzSW4KKwksIGZsb2F0IG9wYWNpdHkKKwks
IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRUcmFuc2Zvcm0KKwksIEtDR3JhZGllbnRTcHJlYWRN
ZXRob2Qgc3ByZWFkTWV0aG9kCisJLCBBZmZpbmVUcmFuc2Zvcm0mIGRlc3RUcmFuc2Zvcm0KKwks
IEZsb2F0UmVjdCYgYmJveCkKK3sKKworICAgIGRvdWJsZSBjeCwgZngsIGN5LCBmeSwgcjsKKwor
CVZlY3RvcjxLQ0dyYWRpZW50U3RvcD4gc3RvcHMgPSBzdG9wc0luOworIAlzdGQ6OnNvcnQoc3Rv
cHMuYmVnaW4oKSxzdG9wcy5lbmQoKSwgY29tcGFyZVN0b3BPZmZzZXQpOworCisJLy9YWFggRklY
TUU6IHRoaXMgaXMgcHJvYmFibHkgYWxsIHdyb25nIGNvcGllZCBmcm9tIHF0CisgICAgaWYgKCFi
Ym94LmlzRW1wdHkoKSkgeworICAgICAgICBjeCA9IGRvdWJsZShiYm94LngoKSkgKyAoZG91Ymxl
KGdyYWRpZW50Q2VudGVyLngoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LndpZHRoKCkpKTsKKyAg
ICAgICAgY3kgPSBkb3VibGUoYmJveC55KCkpICsgKGRvdWJsZShncmFkaWVudENlbnRlci55KCkg
LyAxMDAuMCkgKiBkb3VibGUoYmJveC5oZWlnaHQoKSkpOworICAgICAgICBmeCA9IGRvdWJsZShi
Ym94LndpZHRoKCkpICsgKGRvdWJsZShncmFkaWVudEZvY2FsLngoKSAvIDEwMC4wKSAqIGRvdWJs
ZShiYm94LndpZHRoKCkpKSAtIGN4OworICAgICAgICBmeSA9IGRvdWJsZShiYm94LmhlaWdodCgp
KSArIChkb3VibGUoZ3JhZGllbnRGb2NhbC55KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC5oZWln
aHQoKSkpIC0gY3k7CisgICAgICAgIHIgPSBkb3VibGUoZ3JhZGllbnRSYWRpdXMvIDEwMC4wKSAq
IChzcXJ0KHBvdyhiYm94LndpZHRoKCksIDIpICsgcG93KGJib3guaGVpZ2h0KCksIDIpKSk7CisK
KyAgICAgICAgZmxvYXQgd2lkdGggPSBiYm94LndpZHRoKCk7CisgICAgICAgIGZsb2F0IGhlaWdo
dCA9IGJib3guaGVpZ2h0KCk7CisKKyAgICAgICAgaW50IGRpZmYgPSBpbnQod2lkdGggLSBoZWln
aHQpOyAvLyBhbGxvdyBzbGlnaHQgdG9sZXJhbmNlCisgICAgICAgIGlmICghKGRpZmYgPiAtMiAm
JiBkaWZmIDwgMikpIHsKKyAgICAgICAgICAgIC8vIG1ha2UgZWxsaXB0aWNhbCBvciBjaXJjdWxh
ciBkZXBlbmRpbmcgb24gYmJveCBhc3BlY3QgcmF0aW8KKyAgICAgICAgICAgIGZsb2F0IHJhdGlv
WCA9ICh3aWR0aCAvIGhlaWdodCk7CisgICAgICAgICAgICBmbG9hdCByYXRpb1kgPSAoaGVpZ2h0
IC8gd2lkdGgpOworICAgICAgICAgICAgZGVzdFRyYW5zZm9ybS5zY2FsZSgod2lkdGggPiBoZWln
aHQpID8gMSA6IHJhdGlvWCwgKHdpZHRoID4gaGVpZ2h0KSA/IHJhdGlvWSA6IDEpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3ggPSBncmFkaWVudENlbnRlci54KCk7CisgICAg
ICAgIGN5ID0gZ3JhZGllbnRDZW50ZXIueSgpOworCisgICAgICAgIGZ4ID0gZ3JhZGllbnRGb2Nh
bC54KCk7CisgICAgICAgIGZ5ID0gZ3JhZGllbnRGb2NhbC55KCk7CisKKyAgICAgICAgZnggLT0g
Y3g7CisgICAgICAgIGZ5IC09IGN5OworCisgICAgICAgIHIgPSBncmFkaWVudFJhZGl1czsKKyAg
ICB9CisKKyAgICBpZiAoc3FydChmeCAqIGZ4ICsgZnkgKiBmeSkgPiByKSB7CisgICAgICAgIC8v
IFNwZWM6IElmIChmeCwgZnkpIGxpZXMgb3V0c2lkZSB0aGUgY2lyY2xlIGRlZmluZWQgYnkgKGN4
LCBjeSkgYW5kIHIsIHNldCAoZngsIGZ5KQorICAgICAgICAvLyB0byB0aGUgcG9pbnQgb2YgaW50
ZXJzZWN0aW9uIG9mIHRoZSBsaW5lIHRocm91Z2ggKGZ4LCBmeSkgYW5kIHRoZSBjaXJjbGUuCisg
ICAgICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKGZ5LCBmeCk7CisgICAgICAgIGZ4ID0gaW50KGNv
cyhhbmdsZSkgKiByKSAtIDE7CisgICAgICAgIGZ5ID0gaW50KHNpbihhbmdsZSkgKiByKSAtIDE7
CisgICAgfQorCisJbV9wYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsIChjeCxj
eSxyLGZ4LGZ5LHIpOworCisgICAgZmlsbENvbG9yQXJyYXkobV9wYXR0ZXJuLHN0b3BzLG9wYWNp
dHkpOworCXNldFRyYW5zQW5kUmVwZWF0KG1fcGF0dGVybixncmFkaWVudFRyYW5zZm9ybSxzcHJl
YWRNZXRob2QpOworfQorCitQYXR0ZXJuQ2Fpcm86OlBhdHRlcm5DYWlybyhJbWFnZSogaW1nCisJ
LCBmbG9hdCBvcGFjaXR5CisJLCBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybQorCSwg
S0NHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCit7CisgICAJY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlID0gaW1nLT5mcmFtZUF0SW5kZXgoMCk7CisgICAJaWYoIXN1cmZhY2UpIHsK
KyAgICAgICAgcmV0dXJuOworICAgCX0KKwkKKyAgIAltX3BhdHRlcm4gPSBjYWlyb19wYXR0ZXJu
X2NyZWF0ZV9mb3Jfc3VyZmFjZShzdXJmYWNlKTsKKworCWlmKCBvcGFjaXR5ICE9IDEuMDAgKSB7
CisJCWludCB3aWR0aCA9IGltZy0+c2l6ZSgpLndpZHRoKCk7CisJCWludCBoZWlnaHQgPSBpbWct
PnNpemUoKS5oZWlnaHQoKTsKKyAgICAJY2Fpcm9fc3VyZmFjZV90KiBpc3VyZmFjZSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsd2lkdGgsaGVpZ2h0KTsK
KwkJY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoaXN1cmZhY2UpOworICAgCQljYWlyb19zZXRf
c291cmNlX3JnYmEoY3IsMS4wLDEuMCwxLjAsMS4wKTsKKyAgICAJY2Fpcm9fcmVjdGFuZ2xlKGNy
LCAwLCAwLHdpZHRoLGhlaWdodCk7CisgICAgCWNhaXJvX2ZpbGwoY3IpOworICAgCQljYWlyb19z
ZXRfc291cmNlKGNyLG1fcGF0dGVybik7CisgICAgCWNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCx3
aWR0aCxoZWlnaHQpOworICAgIAljYWlyb19wYWludF93aXRoX2FscGhhKGNyLG9wYWNpdHkpOwor
ICAgICAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kobV9wYXR0ZXJuKTsKKwkJY2Fpcm9fZGVzdHJv
eShjcik7CisJCW1fcGF0dGVybiA9ICBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShp
c3VyZmFjZSk7CisJCQorCX0KKwlzZXRUcmFuc0FuZFJlcGVhdChtX3BhdHRlcm4scGF0dGVyblRy
YW5zZm9ybSxzcHJlYWRNZXRob2QpOworfQorCisKK1BhdHRlcm5DYWlybzo6UGF0dGVybkNhaXJv
KENvbG9yKiBjb2xvcixmbG9hdCBvcGFjaXR5KQoreworCWRvdWJsZSAgciwgZywgYiwgYTsKKwlh
c3NlcnQoY29sb3IpOworCWNvbG9yLT5nZXRSR0JBKHIsZyxiLGEpOworCS8vRklYTUU6IGlzIHRo
aXMgdHJ1ZSA/CisJYSA9IGEqb3BhY2l0eTsKKwltX3BhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2Ny
ZWF0ZV9yZ2JhKHIsZyxiLGEpOworfQorCitQYXR0ZXJuQ2Fpcm86OlBhdHRlcm5DYWlybyhJbnRT
aXplIHNpemUKKwksIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtCisJLCBLQ0dyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCkKK3sKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLHNp
emUud2lkdGgoKSxzaXplLmhlaWdodCgpKTsKKyAgICBtX3BhdHRlcm4gPSBjYWlyb19wYXR0ZXJu
X2NyZWF0ZV9mb3Jfc3VyZmFjZShzdXJmYWNlKTsKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3ko
c3VyZmFjZSk7CisJc2V0VHJhbnNBbmRSZXBlYXQobV9wYXR0ZXJuLHBhdHRlcm5UcmFuc2Zvcm0s
c3ByZWFkTWV0aG9kKTsKK30KKworUGF0dGVybkNhaXJvOjp+UGF0dGVybkNhaXJvKCkKK3sKKyAg
ICBpZihtX3BhdHRlcm4pCisgICAgICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShtX3BhdHRlcm4p
OworCW1fcGF0dGVybiA9MDsJCit9CisKK30KKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vUGF0dGVybkNhaXJvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9jYWlyby9QYXR0ZXJuQ2Fpcm8uaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vUGF0dGVybkNhaXJvLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAg
ICAgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorCQkJCSAgMjAwNiBNaWNoYWVsIEVtbWVsIDxt
aWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnQuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgSW1hZ2U7CisKK2NsYXNzIFBhdHRlcm5DYWly
bworeworCitwdWJsaWM6CisKKyAgICBQYXR0ZXJuQ2Fpcm8oY2Fpcm9fcGF0dGVybl90KiBwYXR0
ZXJuKTptX3BhdHRlcm4ocGF0dGVybikge30KKworICAgIFBhdHRlcm5DYWlybyhGbG9hdFBvaW50
JiBncmFkaWVudFN0YXJ0CisJICAgICwgRmxvYXRQb2ludCYgZ3JhZGllbnRFbmQKKwkgICAgLCBj
b25zdCBWZWN0b3I8S0NHcmFkaWVudFN0b3A+JiBzdG9wc0luCisJICAgICwgZmxvYXQgb3BhY2l0
eQorCSAgICAsIEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRUcmFuc2Zvcm0KKwkgICAgLCBLQ0dy
YWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZAorCSAgICAsIEZsb2F0UmVjdCYgYmJveCk7
CisKKyAgICBQYXR0ZXJuQ2Fpcm8oIEZsb2F0UG9pbnQmIGdyYWRpZW50Q2VudGVyCisJICAgICwg
RmxvYXRQb2ludCYgZ3JhZGllbnRGb2NhbAorCSAgICAsIGZsb2F0IGdyYWRpZW50UmFkaXVzCisJ
ICAgICwgY29uc3QgVmVjdG9yPEtDR3JhZGllbnRTdG9wPiYgc3RvcHNJbgorCSAgICAsIGZsb2F0
IG9wYWNpdHkKKwkgICAgLCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50VHJhbnNmb3JtCisJICAg
ICwgS0NHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QKKwkgICAgLCBBZmZpbmVUcmFu
c2Zvcm0mIGRlc3RUcmFuc2Zvcm0KKwkgICAgLCBGbG9hdFJlY3QmIGJib3gpOworCisgICAgUGF0
dGVybkNhaXJvKEltYWdlKiBpbWcKKwkgICAgLCBmbG9hdCBvcGFjaXR5CisJICAgICwgQWZmaW5l
VHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0KKwkgICAgLCBLQ0dyYWRpZW50U3ByZWFkTWV0aG9k
IHNwcmVhZE1ldGhvZCk7CisKKyAgICBQYXR0ZXJuQ2Fpcm8oQ29sb3IqIGNvbG9yLGZsb2F0IG9w
YWNpdHkpOworCisgICAgUGF0dGVybkNhaXJvKEludFNpemUgc2l6ZQorCSAgICAsIEFmZmluZVRy
YW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtCisJICAgICwgS0NHcmFkaWVudFNwcmVhZE1ldGhvZCBz
cHJlYWRNZXRob2QpOworCisgICAgflBhdHRlcm5DYWlybygpOworCisgICAgY2Fpcm9fcGF0dGVy
bl90KiBwYXR0ZXJuKCkgeyByZXR1cm4gbV9wYXR0ZXJuOyB9CisKK3ByaXZhdGU6CisgICAgY2Fp
cm9fcGF0dGVybl90KiBtX3BhdHRlcm47CisKK307CisKK30KKwpJbmRleDogV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9jYWlyby9SZW5kZXJQYXRoQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vUmVuZGVyUGF0aENhaXJvLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvY2Fpcm8vUmVuZGVyUGF0aENhaXJvLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAg
ICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljLnNlaWRlbEBrZGVtYWlsLm5ldD4KKwkJ
CQkgIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgorI2luY2x1ZGUgIktDYW52
YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICAKK2Jvb2wgUmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQ
b2ludCYgcCwgYm9vbCByZXF1aXJlc1N0cm9rZSkgY29uc3QKK3sKKyAgICBmbG9hdCBsaW5lV2lk
dGggPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKHRoaXMsIHN0eWxl
KCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMCk7CisgICAgTGluZUNhcCBjYXAgPSBz
dHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpOworICAgIExpbmVKb2luIGpvaW4gPSAgc3R5
bGUoKS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCk7CisgICAgZmxvYXQgbWl0ZXJMaW1pdCA9IHN0
eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKTsKKworICAgIHJldHVybiBwYXRo
KCkuc3Ryb2tlQ29udGFpbnMocCwgbGluZVdpZHRoLGNhcCxqb2luLG1pdGVyTGltaXQpOworfQor
CitGbG9hdFJlY3QgUmVuZGVyUGF0aDo6c3Ryb2tlQkJveCgpIGNvbnN0Cit7CisgICAgZmxvYXQg
bGluZVdpZHRoID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aCh0aGlz
LCBzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApOworICAgIExpbmVDYXAg
Y2FwID0gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKTsKKyAgICBMaW5lSm9pbiBqb2lu
ID0gIHN0eWxlKCktPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpOworICAgIGZsb2F0IG1pdGVyTGlt
aXQgPSBzdHlsZSgpLT5zdmdTdHlsZSgpLT5zdHJva2VNaXRlckxpbWl0KCk7CisKKyAgICByZXR1
cm4gcGF0aCgpLnN0cm9rZUJvdW5kaW5nUmVjdChsaW5lV2lkdGgsY2FwLGpvaW4sbWl0ZXJMaW1p
dCk7Cit9CisKKworfQorCisvLyB2aW06dHM9NDpldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Q
YXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QYXRoLmgJKHJldmlzaW9uIDE3
NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEy
ICsyNiwxNiBAQAogCiAjaWZuZGVmIFBhdGhfaAogI2RlZmluZSBQYXRoX2gKLQogI2lmIFBMQVRG
T1JNKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dQYXRoIFBsYXRmb3JtUGF0aDsKICNlbGlmIFBMQVRG
T1JNKFFUKQogY2xhc3MgUVBhaW50ZXJQYXRoOwogdHlwZWRlZiBRUGFpbnRlclBhdGggUGxhdGZv
cm1QYXRoOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fp
cm9fdDsKK3R5cGVkZWYgc3RydWN0IGNhaXJvX3BhdGggY2Fpcm9fcGF0aF90OwordHlwZWRlZiBj
YWlyb19wYXRoX3QgUGxhdGZvcm1QYXRoOworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNl
bHNlCiB0eXBlZGVmIHZvaWQgUGxhdGZvcm1QYXRoOwogI2VuZGlmCkBAIC05Niw3ICsxMDAsMTEg
QEAKIAogICAgICAgICBTdHJpbmcgZGVidWdTdHJpbmcoKSBjb25zdDsKIAorI2lmIFBMQVRGT1JN
KENBSVJPKQorICAgICAgICBQbGF0Zm9ybVBhdGgqIHBsYXRmb3JtUGF0aCgpIGNvbnN0OworI2Vs
c2UgICAgICAgIAogICAgICAgICBQbGF0Zm9ybVBhdGgqIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQorI2VuZGlmCiAKICAgICAgICAgc3RhdGljIFBhdGggY3JlYXRlUm91
bmRlZFJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5n
UmFkaWkpOwogICAgICAgICBzdGF0aWMgUGF0aCBjcmVhdGVSZWN0YW5nbGUoY29uc3QgRmxvYXRS
ZWN0Jik7CkBAIC0xMDYsOSArMTE0LDIyIEBACiAKICAgICAgICAgdm9pZCBhcHBseSh2b2lkKiBp
bmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uKSBjb25zdDsKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisjaWYgUExBVEZPUk0oQ0FJUk8pCisjaWZkZWYgU1ZH
X1NVUFBPUlQgCisgICAgICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IGxpbmVXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lQ2FwLCBM
aW5lSm9pbiwgZmxvYXQgbWl0ZXJMaW1pdCkgY29uc3Q7CisgICAgICAgIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ1JlY3QoZmxvYXQgbGluZVdpZHRoLCBMaW5lQ2FwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIExpbmVKb2luICwgZmxvYXQgbWl0ZXJMaW1pdCkgY29uc3Q7CisjZW5kaWYK
KyNlbmRpZgogCiAgICAgcHJpdmF0ZToKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICAgICAgdm9p
ZCBpbml0KCk7CisgICAgICAgIGNhaXJvX3QqIG1fY3I7CisjZWxzZQogICAgICAgICBQbGF0Zm9y
bVBhdGgqIG1fcGF0aDsKKyNlbmRpZgogICAgICAgICBXaW5kUnVsZSBtX3J1bGU7CiAgICAgfTsK
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vSW1hZ2UuaAkocmV2aXNpb24gMTc2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0lt
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDkgQEAKICAgICBmcmllbmQgY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OwogcHVibGljOgogICAgIEltYWdlKCk7CisjaWYgUExBVEZPUk0oQ0FJ
Uk8pCisgICAgICAgIEltYWdlKEludFNpemUgc2l6ZSk7CisjZW5kaWYKICAgICBJbWFnZShJbWFn
ZUFuaW1hdGlvbk9ic2VydmVyKiBvYnNlcnZlciwgYm9vbCBpc1BERiA9IGZhbHNlKTsKICAgICB+
SW1hZ2UoKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vSW1hZ2VTb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDE3NjMw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw3IEBACiAjZWxpZiBQTEFURk9STShRVCkKIGNsYXNzIFFJbWFnZTsKICNlbGlmIFBM
QVRGT1JNKENBSVJPKQorI2luY2x1ZGUgIkludFNpemUuaCIKIHN0cnVjdCBfY2Fpcm9fc3VyZmFj
ZTsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKICNlbmRp
ZgpAQCAtNzIsNiArNzMsMTAgQEAKIAogICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CiAgICAg
SW50U2l6ZSBzaXplKCkgY29uc3Q7CisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgdm9pZCBzZXRT
aXplKEludFNpemUgc2l6ZSl7IG1fc2l6ZSA9IHNpemU7IH0KKyNlbmRpZgorCiAgICAgCiAgICAg
aW50IHJlcGV0aXRpb25Db3VudCgpOwogICAgIApAQCAtODIsNiArODcsOSBAQAogCiBwcml2YXRl
OgogICAgIE5hdGl2ZUltYWdlU291cmNlUHRyIG1fZGVjb2RlcjsKKyNpZiBQTEFURk9STShDQUlS
TykKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyNlbmRpZgogfTsKIAogfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDE3
NjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFBMQVRGT1JNKENBSVJPKQog
CisjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC0zNywxMSArMzgsMjAgQEAKICNpZiBXSU4z
MgogI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+CiAjZW5kaWYKKyNpZmRlZiBTVkdfU1VQUE9SVAor
I2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VDYWlyby5oIgorI2VuZGlmCiAKICNpZm5kZWYgTV9Q
SQogI2RlZmluZSBNX1BJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oR0RLKQorI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIs
ICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyxf
X1BSRVRUWV9GVU5DVElPTl9fKTsgfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgbm90SW1wbGVt
ZW50ZWQoKQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKQEAgLTY5LDcgKzc5LDcgQEAKIH0KIAogR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQot
ICAgIDogIGNvbnRleHQoMCkKKyAgICA6IGNvbnRleHQoMCkKIHsKIH0KIApAQCAtNDU3LDEzICs0
NjcsMzU1IEBACiAgICAgY2Fpcm9fbWF0cml4X3QgbWF0cml4OwogICAgIGNhaXJvX3QqIGNvbnRl
eHQgPSBtX2RhdGEtPmNvbnRleHQ7CiAgICAgY2Fpcm9fZ2V0X21hdHJpeChjb250ZXh0LCAmbWF0
cml4KTsKLSAgICByZXR1cm4gSW50UG9pbnQobWF0cml4LngwLCBtYXRyaXgueTApOworICAgIHJl
dHVybiBJbnRQb2ludCgoaW50KW1hdHJpeC54MCwgKGludCltYXRyaXgueTApOwogfQogCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQoreworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX21h
dHJpeF90IGNfbWF0cml4ID0gY2Fpcm9fbWF0cml4X3QodHJhbnNmb3JtKTsKKyAgICBjYWlyb190
cmFuc2Zvcm0oY3IsJmNfbWF0cml4KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVS
TEZvclJlY3QoY29uc3QgS1VSTCYgbGluaywgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91
bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQs
IGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LAorICAgICAgICBjb25zdCBJbnRTaXplJiBib3R0b21M
ZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCkKK3sgCisgICAgaWYoIHJlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb19tYXRyaXhfdCBjdXJyZW50OworICAg
IGNhaXJvX3QqIGNvbnRleHQgPSBtX2RhdGEtPmNvbnRleHQ7CisKKyAgICBjYWlyb19nZXRfbWF0
cml4KGNvbnRleHQsJmN1cnJlbnQpOworICAgIGNhaXJvX25ld19wYXRoKGNvbnRleHQpOworCisg
ICAgZG91YmxlIHggPSByZWN0LngoKTsKKyAgICBkb3VibGUgeSA9IHJlY3QueSgpOworICAgIGRv
dWJsZSB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBkb3VibGUgaGVpZ2h0ID0gcmVjdC5oZWln
aHQoKTsKKworICAgIGZsb2F0IHJ4X3RsID0gLjUgKiB0b3BMZWZ0LndpZHRoKCk7CisgICAgZmxv
YXQgcnlfdGwgPSAuNSAqIHRvcExlZnQuaGVpZ2h0KCk7CisKKyAgICAvL2ZvbGxvdyBzdmcgc3Bl
YyBzZWUgUGF0aC5jcHAgCisgICAgaWYgKHJ4X3RsID4gd2lkdGggLyAyLjApCisgICAgICAgIHJ4
X3RsID0gd2lkdGggLyAyLjA7CisgICAgaWYgKHJ5X3RsID4gaGVpZ2h0LyAyLjApCisgICAgICAg
IHJ5X3RsID0gaGVpZ2h0IC8gMi4wOworCisgICAgZmxvYXQgcnhfdHIgPSAuNSAqIHRvcFJpZ2h0
LndpZHRoKCk7CisgICAgZmxvYXQgcnlfdHIgPSAuNSAqIHRvcFJpZ2h0LmhlaWdodCgpOworCisg
ICAgaWYgKHJ4X3RyID4gd2lkdGggLyAyLjApCisgICAgICAgIHJ4X3RyID0gd2lkdGggLyAyLjA7
CisgICAgaWYgKHJ5X3RyID4gaGVpZ2h0LyAyLjApCisgICAgICAgIHJ5X3RyID0gaGVpZ2h0IC8g
Mi4wOworCisgICAgZmxvYXQgcnhfYmwgPSAuNSAqIGJvdHRvbUxlZnQud2lkdGgoKTsKKyAgICBm
bG9hdCByeV9ibCA9IC41ICogYm90dG9tTGVmdC5oZWlnaHQoKTsKKworICAgIGlmIChyeF9ibCA+
IHdpZHRoIC8gMi4wKQorICAgICAgICByeF9ibCA9IHdpZHRoIC8gMi4wOworICAgIGlmIChyeV9i
bCA+IGhlaWdodC8gMi4wKQorICAgICAgICByeV9ibCA9IGhlaWdodCAvIDIuMDsKKworICAgIGZs
b2F0IHJ4X2JyID0gLjUgKiBib3R0b21SaWdodC53aWR0aCgpOworICAgIGZsb2F0IHJ5X2JyID0g
LjUgKiBib3R0b21SaWdodC5oZWlnaHQoKTsKKworICAgIGlmIChyeF9iciA+IHdpZHRoIC8gMi4w
KQorICAgICAgICByeF9iciA9IHdpZHRoIC8gMi4wOworICAgIGlmIChyeV9iciA+IGhlaWdodC8g
Mi4wKQorICAgICAgICByeV9iciA9IGhlaWdodCAvIDIuMDsKKworCisgICAgLy90b3AgIGxpbmUK
KyAgICBjYWlyb19tb3ZlX3RvKGNvbnRleHQsIHggKyByeF90bCwgeSk7CisgICAgY2Fpcm9fbGlu
ZV90byhjb250ZXh0LCB4ICsgd2lkdGggLSByeF90bC0gcnhfdHIsIHkpOworCisgICAgLy90b3Ag
cmlnaHQgY3VydmUKKyAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQsJmN1cnJlbnQpOworICAg
IGlmIChyeF90ciA+IDAgfHwgcnlfdHIgPiAwKSB7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShj
b250ZXh0LCB4ICsgd2lkdGgtcnhfdGwtcnhfdHIseSk7CisgICAgICAgIGNhaXJvX3NjYWxlKGNv
bnRleHQsIHJ4X3RyLCByeV90cik7CisgICAgICAgIGNhaXJvX2FyYyhjb250ZXh0LCAwLiwgMC4s
IDEuLCAwLiwgMiAqIE1fUEkpOworICAgICAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQsJmN1
cnJlbnQpOworICAgIH1lbHNlIAorICAgICAgICBjYWlyb19saW5lX3RvKGNvbnRleHQsIHggKyB3
aWR0aCwgeSt3aWR0aC1yeV9ibCk7CisKKyAgICAvL2JvdHRvbSByaWdodCBjdXJ2ZQorICAgIGlm
IChyeF9iciA+IDAgfHwgcnlfYnIgPiAwKSB7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250
ZXh0LCB4ICsgd2lkdGgsIHkrd2lkdGgtcnlfYmwpOworICAgICAgICBjYWlyb19zY2FsZShjb250
ZXh0LCByeF9iciwgcnlfYnIpOworICAgICAgICBjYWlyb19hcmMoY29udGV4dCwgMC4sIDAuLCAx
LiwgMC4sIDIgKiBNX1BJKTsKKyAgICAgICAgY2Fpcm9fc2V0X21hdHJpeChjb250ZXh0LCZjdXJy
ZW50KTsKKyAgICAgICAgY2Fpcm9fbGluZV90byhjb250ZXh0LCB4IC0gcnhfYmwgLCB5K3dpZHRo
LXJ5X2JsKTsKKyAgICB9ZWxzZSAKKyAgICAgICAgY2Fpcm9fbGluZV90byhjb250ZXh0LCB4IC0g
cnhfYmwgLCB5K3dpZHRoLXJ5X2JsKTsKKworICAgCisgICAgLy9ib3R0b20gbGVmdCBjdXJ2ZQor
ICAgIGNhaXJvX3NldF9tYXRyaXgoY29udGV4dCwmY3VycmVudCk7CisgICAgaWYgKHJ4X2JsID4g
MCB8fCByeV9ibCA+IDApIHsKKyAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNvbnRleHQsIHggLXJ4
X2JsLCB5K3dpZHRoKTsKKyAgICAgICAgY2Fpcm9fc2NhbGUoY29udGV4dCwgcnhfYmwsIHJ5X2Js
KTsKKyAgICAgICAgY2Fpcm9fYXJjKGNvbnRleHQsIDAuLCAwLiwgMS4sIDAuLCAyICogTV9QSSk7
CisgICAgICAgIGNhaXJvX3NldF9tYXRyaXgoY29udGV4dCwmY3VycmVudCk7CisgICAgICAgIGNh
aXJvX2xpbmVfdG8oY29udGV4dCwgeCAtIHJ4X3RyICwgeSAtIHJ5X3RyKTsKKyAgICB9ZWxzZSAK
KyAgICAgICAgY2Fpcm9fbGluZV90byhjb250ZXh0LCB4IC0gcnhfdHIgLCB5IC0gcnlfdHIpOwor
CisgICAgLy90b3AgbGVmdCBjdXJ2ZQorICAgIGNhaXJvX3NldF9tYXRyaXgoY29udGV4dCwmY3Vy
cmVudCk7CisgICAgaWYgKHJ4X3RsID4gMCB8fCByeV90bCA+IDApIHsKKyAgICAgICAgY2Fpcm9f
dHJhbnNsYXRlKGNvbnRleHQsIHgsIHktcnlfdGwpOworICAgICAgICBjYWlyb19zY2FsZShjb250
ZXh0LCByeF90bCwgcnlfdGwpOworICAgICAgICBjYWlyb19hcmMoY29udGV4dCwgMC4sIDAuLCAx
LiwgMC4sIDIgKiBNX1BJKTsKKyAgICAgICAgY2Fpcm9fc2V0X21hdHJpeChjb250ZXh0LCZjdXJy
ZW50KTsKKyAgICB9CisgICAgY2Fpcm9fY2xpcChjb250ZXh0KTsKKworICAgIGNhaXJvX25ld19w
YXRoKGNvbnRleHQpOworICAgIGNhaXJvX3NldF9tYXRyaXgoY29udGV4dCwmY3VycmVudCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJ
bnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKSB7CisKKyAgICBjYWlyb190KiBjb250ZXh0ID0g
bV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX21hdHJpeF90IGN1cnJlbnQ7CisgICAgY2Fpcm9f
Z2V0X21hdHJpeChjb250ZXh0LCZjdXJyZW50KTsKKworICAgIGZsb2F0IHhSYWRpdXMgPSAuNSAq
IHJlY3Qud2lkdGgoKTsKKyAgICBmbG9hdCB5UmFkaXVzID0gLjUgKiByZWN0LmhlaWdodCgpOwor
CisgICAgCisgICAgY2Fpcm9fbmV3X3BhdGgoY29udGV4dCk7CisgICAgY2Fpcm9fdHJhbnNsYXRl
KGNvbnRleHQsIHJlY3QueCgpICsgeFJhZGl1cywgcmVjdC55KCkgKyB5UmFkaXVzKTsKKyAgICBj
YWlyb19zY2FsZShjb250ZXh0LCB4UmFkaXVzLCB5UmFkaXVzKTsKKyAgICBjYWlyb19hcmMoY29u
dGV4dCwgMC4sIDAuLCAxLiwgMC4sIDIgKiBNX1BJKTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNv
bnRleHQsJmN1cnJlbnQpOworCisgICAgeFJhZGl1cyA9IC41ICogcmVjdC53aWR0aCgpIC0gKHRo
aWNrbmVzcyAqIDIpOworICAgIHlSYWRpdXMgPSAuNSAqIHJlY3QuaGVpZ2h0KCktICh0aGlja25l
c3MgKiAyKTsKKworCisgICAgY2Fpcm9fdHJhbnNsYXRlKGNvbnRleHQsIHJlY3QueCgpICt0aGlj
a25lc3MrIHhSYWRpdXMsIHJlY3QueSgpICsgdGhpY2tuZXNzICsgeVJhZGl1cyk7CisgICAgY2Fp
cm9fc2NhbGUoY29udGV4dCwgeFJhZGl1cywgeVJhZGl1cyk7CisgICAgY2Fpcm9fYXJjKGNvbnRl
eHQsIDAuLCAwLiwgMS4sIDAuLCAyICogTV9QSSk7CisgICAgY2Fpcm9fc2V0X21hdHJpeChjb250
ZXh0LCZjdXJyZW50KTsKKworICAgIGNhaXJvX2NsaXAoY29udGV4dCk7CisKKyAgICBjYWlyb19u
ZXdfcGF0aChjb250ZXh0KTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQsJmN1cnJlbnQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KEludFNpemUgY29uc3QmLCBp
bnQsIENvbG9yIGNvbnN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IGFs
cGhhKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19wdXNoX2dyb3VwKGNy
KTsKKyAgICBjYWlyb19wYWludF93aXRoX2FscGhhIChjcixhbHBoYSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5j
b250ZXh0OworICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UgKGNyKTsKKyAgICBjYWlyb19w
YWludChjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb19zYXZl
KGNyKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX0NMRUFSKTsK
KyAgICBjYWlyb19yZWN0YW5nbGUgKGNyLCByZWN0LngoKSxyZWN0LnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19maWxsIChjcik7CisgICAgY2Fpcm9fcmVzdG9y
ZShjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworCisg
ICAgaWYgKHBlbigpLnN0eWxlKCkgIT0gUGVuOjpOb1BlbikgeworICAgICAgICBjYWlyb19zYXZl
KGNyKTsKKyAgICAgICAgc2V0Q29sb3IoY3IsIHBlbigpLmNvbG9yKCkpOworICAgICAgICBjYWly
b19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKKyAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3Isd2lkdGgpOworICAgICAg
ICBjYWlyb19zdHJva2UoY3IpOworICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKKyAgICB9Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lV2lkdGgoZmxvYXQgd2lkdGgpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3Nl
dF9saW5lX3dpZHRoIChtX2RhdGEtPmNvbnRleHQsd2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxjKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX2xpbmVfY2FwX3QgY2FwID0gQ0FJ
Uk9fTElORV9DQVBfQlVUVDsKKworICAgIHN3aXRjaCAobGMpIHsKKyAgICBjYXNlIFJvdW5kQ2Fw
OgorICAgICAgICBjYXAgPSBDQUlST19MSU5FX0NBUF9ST1VORDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgIGNhcCA9IENBSVJPX0xJTkVfQ0FQX1NRVUFSRTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhaXJvX3NldF9saW5lX2NhcChtX2RhdGEtPmNv
bnRleHQsY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVK
b2luIGxqKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBjYWlyb19saW5lX2pvaW5fdCBqb2luID0gQ0FJUk9fTElORV9KT0lOX01JVEVSOworCisg
ICAgc3dpdGNoIChsaikgeworICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICBqb2luID0gQ0FJ
Uk9fTElORV9KT0lOX1JPVU5EOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJldmVsSm9pbjoK
KyAgICAgICAgam9pbiA9IENBSVJPX0xJTkVfSk9JTl9ST1VORDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhaXJvX3NldF9saW5lX2pvaW4obV9kYXRhLT5jb250ZXh0LGpvaW4pOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fc2V0
X21pdGVyX2xpbWl0KG1fZGF0YS0+Y29udGV4dCxtaXRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgLy9GSVhNRSBtZSB1c2UgdGhpcyBhbHBoYSBob3cg
PworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRh
LT5jb250ZXh0OworICAgIGNhaXJvX29wZXJhdG9yX3QgY29wID0gQ0FJUk9fT1BFUkFUT1JfQ0xF
QVI7CisKKyAgICAvL25vdCBzdXBwb3J0ZWQgPworICAgIC8vY29wID0gQ0FJUk9fT1BFUkFUT1Jf
REVTVDsKKyAgICAvL2NvcCA9IENBSVJPX09QRVJBVE9SX0FERDsKKyAgICAvLyBjb3AgPSBDQUlS
T19PUEVSQVRPUl9TQVRVUkFURTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgLy9jYXNl
IENvbXBvc2l0ZUNsZWFyOgorICAgIGNhc2UgQ29tcG9zaXRlQ29weToKKyAgICAgICAgY29wID0g
Q0FJUk9fT1BFUkFUT1JfU09VUkNFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0
ZVNvdXJjZU92ZXI6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX09WRVI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlSW46CisgICAgICAgIGNvcCA9IENBSVJP
X09QRVJBVE9SX0lOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU91
dDoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfT1VUOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvbXBvc2l0ZVNvdXJjZUF0b3A6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9S
X0FUT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdmVy
OgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9ERVNUX09WRVI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKKyAgICAgICAgY29wID0gQ0FJUk9f
T1BFUkFUT1JfREVTVF9JTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0
aW5hdGlvbk91dDoKKyAgICAgICAgY29wID0gQ0FJUk9fT1BFUkFUT1JfREVTVF9PVVQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25BdG9wOgorICAgICAgICBj
b3AgPSBDQUlST19PUEVSQVRPUl9ERVNUX0FUT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29tcG9zaXRlWE9SOgorICAgICAgICBjb3AgPSBDQUlST19PUEVSQVRPUl9YT1I7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKKyAgICAgICAgY29wID0gQ0FJ
Uk9fT1BFUkFUT1JfT1ZFUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVIaWdo
bGlnaHQ6CisgICAgICAgIGNvcCA9IENBSVJPX09QRVJBVE9SX09WRVI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6CisgICAgICAgIGNvcCA9IENBSVJPX09Q
RVJBVE9SX09WRVI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IsY29wKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYg
cGF0aCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fcGF0aF90ICpwID0g
cGF0aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBjYWlyb19hcHBlbmRfcGF0aChjcixwKTsKKyAgICBj
YWlyb19jbGlwKGNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBh
bmdsZUluUmFkaWFucykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgY2Fpcm9fcm90YXRlKG1fZGF0YS0+Y29udGV4dCxhbmdsZUluUmFkaWFucyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNh
aXJvX3NjYWxlKG1fZGF0YS0+Y29udGV4dCxzaXplLndpZHRoKCksc2l6ZS5oZWlnaHQoKSk7Cit9
CisKKyNpZmRlZiBTVkdfU1VQUE9SVAorS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIEdyYXBoaWNz
Q29udGV4dDo6Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG5l
dyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvKHRoaXMpOworfQorI2VuZGlmCisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JNKENBSVJPKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jYWlyby9JbWFnZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiAxNzYzMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYg
KzQ5LDEzIEBACiAvLyBJbWFnZSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CiAKK0ltYWdlOjpJbWFnZShJbnRTaXplIHNpemUpCit7Cisg
ICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX3NvdXJjZS5zZXRTaXplKHNpemUpOworICAgIGNhY2hl
RnJhbWUoMCk7Cit9CisKIC8vIERyYXdpbmcgUm91dGluZXMKIAogc3RhdGljIHZvaWQgc2V0Q29t
cG9zaXRpbmdPcGVyYXRpb24oY2Fpcm9fdCogY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGJvb2wgaGFzQWxwaGEpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL0ltYWdlU291cmNl
Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vSW1hZ2VTb3Vy
Y2VDYWlyby5jcHAJKHJldmlzaW9uIDE3NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9J
bWFnZVNvdXJjZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQAogCiBJ
bWFnZVNvdXJjZTo6fkltYWdlU291cmNlKCkKIHsKLSAgICBkZWxldGUgbV9kZWNvZGVyOworICAg
IGlmKG1fZGVjb2RlcikKKyAgICAgICAgZGVsZXRlIG1fZGVjb2RlcjsKIH0KIAogYm9vbCBJbWFn
ZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdApAQCAtMTEzLDcgKzExNCw3IEBACiBib29sIElt
YWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQogewogICAgIGlmICghbV9kZWNvZGVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIG1f
ZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7CiB9CkBAIC0xMjEsNyArMTIyLDcgQEAKIEludFNp
emUgSW1hZ2VTb3VyY2U6OnNpemUoKSBjb25zdAogewogICAgIGlmICghbV9kZWNvZGVyKQotICAg
ICAgICByZXR1cm4gSW50U2l6ZSgpOworICAgICAgICByZXR1cm4gbV9zaXplOwogCiAgICAgcmV0
dXJuIG1fZGVjb2Rlci0+c2l6ZSgpOwogfQpAQCAtMTQxLDE4ICsxNDIsMTggQEAKIAogTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiB7
Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChtX2RlY29k
ZXIpIHsKKyAgICAgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7CisgICAgICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVz
KCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlci0+Ynl0
ZXMoKS5kYXRhKCksCisgICAgICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9m
b3JfZGF0YSgodW5zaWduZWQgY2hhciopYnVmZmVyLT5ieXRlcygpLmRhdGEoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0Iz
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSgp
LndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlci0+aGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemUoKS53aWR0aCgpKjQpOworICAgIH0KKyAgICByZXR1cm4gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMixzaXplKCkud2lkdGgoKSxzaXpl
KCkuaGVpZ2h0KCkpOwogfQogCiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoc2l6ZV90IGluZGV4KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZH
UmVzb3VyY2VJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL1NWR1Jlc291cmNlSW1hZ2UuaAkocmV2aXNpb24gMTc2MzApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDEwIEBACiAgICAgY2xhc3MgU1ZHUmVzb3VyY2VJbWFnZSA6IHB1YmxpYyBTVkdSZXNv
dXJjZSB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdSZXNvdXJjZUltYWdlKCk7Ci0KKyNpZiBQ
TEFURk9STShDQUlSTykKKyAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlOyB9Cisg
ICAgdmlydHVhbCB+U1ZHUmVzb3VyY2VJbWFnZSgpOworI2VuZGlmCiAjaWYgUExBVEZPUk0oQ0cp
CiAgICAgdmlydHVhbCB+U1ZHUmVzb3VyY2VJbWFnZSgpOwogI2VuZGlmCkBAIC02Myw2ICs2Niwx
MiBAQAogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAgICAgQ0dMYXllclJlZiBtX2NnTGF5
ZXI7CiAjZW5kaWYKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICBwcml2YXRlOgorICAgICAgICBJ
bWFnZSogbV9pbWFnZTsKKyAgICAgICAgYm9vbCBtX2NyZWF0ZWRJbWFnZTsKKyNlbmRpZgorCiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdmcvY2Fpcm8vU1ZHUmVzb3VyY2VDbGlwcGVyQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NhaXJvL1NWR1Jlc291cmNlQ2xpcHBl
ckNhaXJvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Zn
L2NhaXJvL1NWR1Jlc291cmNlQ2xpcHBlckNhaXJvLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA1IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
aW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlQ2xpcHBlci5o
IgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Cit2b2lkIFNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwKGNvbnN0IEZsb2F0UmVjdCYgYm91
bmRpbmdCb3gpIGNvbnN0Cit7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQg
PSByZW5kZXJpbmdEZXZpY2UoKS0+Y3VycmVudENvbnRleHQoKTsKKyAgICBLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dENhaXJvICpjYWlyb0NvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dENhaXJvICo+KGNvbnRleHQpOworICAgIGlmIChtX2NsaXBEYXRhLmNvdW50KCkg
PCAxKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IGNhaXJvQ29udGV4dC0+
Y2Fpcm9Db250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworCWNhaXJvX3Jlc2V0X2NsaXAoY3Ip
OworCQorICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgbV9jbGlwRGF0YS5jb3VudCgp
OyB4KyspIHsKKyAgICAgICAgQ2xpcERhdGEgY2xpcERhdGEgPSBtX2NsaXBEYXRhW3hdOworICAg
IAlXaW5kUnVsZSBjbGlwUnVsZSA9IG1fY2xpcERhdGFbeF0ud2luZFJ1bGU7CisgICAgICAgCisg
ICAgICAgIFBhdGggcGF0aCA9IGNsaXBEYXRhLnBhdGg7IAorCQlpZiggcGF0aC5pc0VtcHR5KCkg
KQorCQkJCWNvbnRpbnVlOworCQlwYXRoLmNsb3NlU3VicGF0aCgpOworCisJCWNhaXJvX3NldF9m
aWxsX3J1bGUoY3IsY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0REID8gCisJCQlDQUlST19GSUxMX1JV
TEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CisKKworICAgIAlpZiAoY2xp
cERhdGEuYmJveFVuaXRzKSB7CisgICAJCQkvLyBSZXNwZWN0IGNsaXBwaW5nIHVuaXRzLi4uCisg
ICAgICAgIAlBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgICAgICAJdHJhbnNmb3JtLnRy
YW5zbGF0ZShib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIAl0cmFu
c2Zvcm0uc2NhbGUoYm91bmRpbmdCb3gud2lkdGgoKSwgYm91bmRpbmdCb3guaGVpZ2h0KCkpOwor
CQkJcGF0aC50cmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgIAkJfQorICAgIAljYWlyb0NvbnRleHQt
PmNhaXJvQ29udGV4dCgpLT5jbGlwKHBhdGgpOworICAgIH0KKworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3ZnL2NhaXJvL1NWR1Jlc291cmNlTWFza2VyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NhaXJvL1NWR1Jlc291cmNlTWFza2VyQ2Fp
cm8uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2Fp
cm8vU1ZHUmVzb3VyY2VNYXNrZXJDYWlyby5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZv
eEBrZGUub3JnPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZU1hc2tlci5oIgorI2luY2x1
ZGUgIlNWR1Jlc291cmNlSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIktS
ZW5kZXJpbmdEZXZpY2VDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTVkdSZXNvdXJj
ZU1hc2tlcjo6YXBwbHlNYXNrKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0Cit7
CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQgPSByZW5kZXJpbmdEZXZpY2Uo
KS0+Y3VycmVudENvbnRleHQoKTsKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvICpj
YWlyb0NvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dENhaXJvICo+
KGNvbnRleHQpOworICAgIEltYWdlKiBpbWFnZSA9ICBtYXNrKCktPmltYWdlKCk7CisgICAgY2Fp
cm9fdCogY3IgPSBjYWlyb0NvbnRleHQtPmNhaXJvQ29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBpbWFnZS0+ZnJhbWVBdEluZGV4KDAp
OworICAgIGlmKCFzdXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgY2Fpcm9fcGF0dGVybl90
KiBtYXNrID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1cmZhY2Uoc3VyZmFjZSk7CisgICAg
Y2Fpcm9fbWFzayAoY3IsbWFzayk7CisgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KG1hc2spOwor
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gdmltOnRzPTQ6bm9ldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2Fpcm8vU1ZHUmVzb3VyY2VJbWFnZUNhaXJv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jYWlyby9T
VkdSZXNvdXJjZUltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdmcvY2Fpcm8vU1ZHUmVzb3VyY2VJbWFnZUNhaXJvLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR1Jlc291
cmNlSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdSZXNvdXJjZUltYWdlOjpTVkdSZXNvdXJjZUltYWdl
KCkKKzogbV9pbWFnZSgwKQorICwgbV9jcmVhdGVkSW1hZ2UoZmFsc2UpCit7Cit9CisKK1NWR1Jl
c291cmNlSW1hZ2U6On5TVkdSZXNvdXJjZUltYWdlKCkKK3sKKwlpZihtX2NyZWF0ZWRJbWFnZSkK
KwkJZGVsZXRlIG1faW1hZ2U7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VJbWFnZTo6aW5pdChjb25z
dCBJbWFnZSYgaW1hZ2UpCit7CisgICAgbV9pbWFnZSA9IGNvbnN0X2Nhc3Q8SW1hZ2UqPigmaW1h
Z2UpOworfQorCisKK3ZvaWQgU1ZHUmVzb3VyY2VJbWFnZTo6aW5pdChJbnRTaXplIHNpemUpCit7
CisgICAgICAgIG1faW1hZ2U9IG5ldyBJbWFnZShzaXplKTsKKyAgICAgICAgbV9jcmVhdGVkSW1h
Z2UgPSB0cnVlOworfQorCitJbnRTaXplIFNWR1Jlc291cmNlSW1hZ2U6OnNpemUoKSBjb25zdAor
eworICAgIHJldHVybiBtX2ltYWdlLT5zaXplKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworLy8gdmltOnRzPTQ6bm9ldAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11509</attachid>
            <date>2006-11-13 13:46:04 -0800</date>
            <delta_ts>2006-11-13 16:38:47 -0800</delta_ts>
            <desc>Smaller gdk patch to allow it to build and load URLS agian</desc>
            <filename>gdksimple.patch</filename>
            <type>text/plain</type>
            <size>176470</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IEJha2VmaWxlcy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQmFrZWZpbGVzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTc3NDYpCisrKyBCYWtlZmlsZXMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDYtMTAtMDkgIE1pY2hhZWwgRW1tZWwgIDxtaWtlLmVt
bWVsQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAg
QWRkIGdkayBsaWJyYXJ5IG9ubHkgbGluayBvcHRpb25zLgorICAgICAgICAqIHByZXNldHMuYmts
OgorCQlBZGRlZCBnZGsgYnVpbGQgaW5zdHJ1Y3Rpb25zCisgICAgICAgICogUmVhZG1lLnR4dDoK
KwogMjAwNi0xMC0wOSAgS3J6eXN6dG9mIEtvd2FsY3p5ayAgPGtrb3dhbGN6eWtAZ21haWwuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmLgpJbmRleDogQmFrZWZpbGVzL1JlYWRtZS50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQmFrZWZpbGVzL1JlYWRtZS50eHQJKHJldmlzaW9uIDE3NzQ2KQor
KysgQmFrZWZpbGVzL1JlYWRtZS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk3LDMgKzk3LDIyIEBA
CiAKIGh0dHA6Ly9iYWtlZmlsZS5zb3VyY2Vmb3JnZS5uZXQvZG9jL2h0bWwvcm4wMXJlMDEuaHRt
bAogCitHZGsgYnVpbGQgaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09u
Y2UgdGhlIGJha2VmaWxlcyBhcmUgZ2VuZXJhdGVkIHBlciB0aGUgYWJvdmUgaW5zdHJ1Y3Rpb25z
LgorY2QgV2ViQ29yZS9Qcm9qZWN0cy9nZGsKKworQnVpbGQgdGhlIGRlcml2ZWQgc291cmNlcyBt
YW51YWxseSBvbmNlCitUaGlzIHNob3VsZCBvbmx5IG5lZWQgdG8gYmUgZG9uZSB0aGUgZmlyc3Qg
dGltZSB5b3UgYnVpbGQKK21ha2UgLkRlcml2ZWRTb3VyY2VzCittYWtlCisKK2NkIFdlYmtpdFRv
b2xzL0dka2xhdW5jaGVyCitiYWtlZmlsZV9nZW4KK21ha2UKKy4gLi9FTlYKKy4vZ2RrbGF1bmNo
ZXIKKworZ2RrbGF1bmNoZXIgY2FuIHRha2UgYSB1cmwgYXMgYW4gYXJndW1lbnQKKwpJbmRleDog
QmFrZWZpbGVzL3ByZXNldHMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEJha2VmaWxlcy9wcmVzZXRzLmJr
bAkocmV2aXNpb24gMTc3NDYpCisrKyBCYWtlZmlsZXMvcHJlc2V0cy5ia2wJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw4ICsxMDgsMjYgQEAKICAgICAgICAgPGN4eGZsYWdzPiQoQ0FJUk9fQ0ZMQUdT
KTwvY3h4ZmxhZ3M+CiAgICAgPC90ZW1wbGF0ZT4KIAorICAgIDxvcHRpb24gbmFtZT0iR0RLX0xJ
QlMiPgorICAgICAgICA8ZGVmYXVsdC12YWx1ZT4kKG9zLnBvcGVuKCJwa2ctY29uZmlnIC0tbGli
cyBnZGstMi4wIikucmVhZCgpKTwvZGVmYXVsdC12YWx1ZT4KKyAgICA8L29wdGlvbj4KIAorICAg
IDxvcHRpb24gbmFtZT0iR0RLX0NGTEFHUyI+CisgICAgICAgIDxkZWZhdWx0LXZhbHVlPiQob3Mu
cG9wZW4oInBrZy1jb25maWcgLS1jZmxhZ3MgZ2RrLTIuMCIpLnJlYWQoKSk8L2RlZmF1bHQtdmFs
dWU+CisgICAgPC9vcHRpb24+CisKKyAgICA8IS0tIEdESyBzZXR0aW5ncywgZm9yIEdESyBwb3J0
cyAtIHd4IGRvZXNuJ3QgdXNlIHRoZXNlIC0tPgorICAgIDx0ZW1wbGF0ZSBpZD0iZ2RrIj4KKyAg
ICAgICAgPGlmIGNvbmQ9IkZPUk1BVD09J2dudSciPgorICAgICAgICAgICAgPGxkZmxhZ3M+JChH
REtfTElCUyk8L2xkZmxhZ3M+CisgICAgICAgICAgICA8Y3h4ZmxhZ3M+JChHREtfQ0ZMQUdTKTwv
Y3h4ZmxhZ3M+CisgICAgICAgIDwvaWY+CisKKyAgICAgICAgPCEtLSAgICBUT0RPOiBub24tQ3ln
d2luIFdpbmRvd3Mgc3VwcG9ydCBmb3IgdGhpcz8gOikgLS0+CisgICAgPC90ZW1wbGF0ZT4KKwog
ICAgIDxvcHRpb24gbmFtZT0iR1RLX0xJQlMiPgorCiAgICAgICAgIDxkZWZhdWx0LXZhbHVlPiQo
b3MucG9wZW4oInBrZy1jb25maWcgLS1saWJzIGd0aystMi4wIikucmVhZCgpKTwvZGVmYXVsdC12
YWx1ZT4KICAgICA8L29wdGlvbj4KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCShyZXZpc2lvbiAxNzc0NikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDkgQEAKICNlbmRpZgogCiAjaWYgVVNFKENVUkwpCi10eXBlZGVmIHZv
aWQgQ1VSTDsKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8Q1N0cmluZy5oPgogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKQEAgLTg0
LDYgKzg2LDE0IEBACiAjZW5kaWYKICNpZiBVU0UoQ1VSTCkKICAgICAgICAgICAgICwgbV9oYW5k
bGUoMCkKKyAgICAgICAgICAgICwgbV91cmwoMCkKKyAgICAgICAgICAgICwgbV91c2VTaW1wbGUo
ZmFsc2UpCisgICAgICAgICAgICAsIG1fY3VzdG9tSGVhZGVyKDApCisgICAgICAgICAgICAsIG1f
Y3VzdG9tUG9zdEhlYWRlcigwKQorICAgICAgICAgICAgLCBtX2ZpbGVQb3N0KDApCisgICAgICAg
ICAgICAsIG1fcmVzcG9uc2UoMCkKKyAgICAgICAgICAgICwgbV9zZW50UmVzcG9uc2UoZmFsc2Up
CisKICNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTEyMyw2ICsxMzMsMjMgQEAKICNl
bmRpZgogI2lmIFVTRShDVVJMKQogICAgICAgICBDVVJMKiBtX2hhbmRsZTsKKyAgICAgICAgY2hh
ciAqbV91cmw7CisgICAgICAgIC8qCisgICAgICAgICAqIGV4ZWN1dGUgdGhlIGZ1bGwgcmVxdWVz
dCBvbiBjYWxsYmFjaworICAgICAgICAgKiBkb24ndCBtdWx0aXBsZXgKKyAgICAgICAgICovCisg
ICAgICAgIGJvb2wgbV91c2VTaW1wbGU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTdG9yZXMg
ZW50aXJlIHJlc3BvbnNlIGlmIGpvYiBpcyBtX3VzZVNpbXBsZQorICAgICAgICAgKi8KKyAgICAg
ICAgVmVjdG9yPGNoYXI+IG1fcmVzdWx0RGF0YTsKKyAgICAgICAgc3RydWN0IGN1cmxfc2xpc3Qq
IG1fY3VzdG9tSGVhZGVyOworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogbV9jdXN0b21Qb3N0
SGVhZGVyOworICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqbV9maWxlUG9zdDsKKyAgICAg
ICAgVmVjdG9yPGNoYXI+IG1fcG9zdEJ5dGVzOworICAgICAgICBWZWN0b3I8Q1N0cmluZz4gbV9j
c3RyaW5nczsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSogbV9yZXNwb25zZTsKKyAgICAgICAg
Ym9vbCBtX3NlbnRSZXNwb25zZTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBR
U3RyaW5nIG1fY2hhcnNldDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5oCShyZXZpc2lvbiAxNzc0NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCwxMSBAQAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFTdHJpbmc+CiAjZW5kaWYK
KyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Niw2ICs3MSw5IEBACiAKICAgICB0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtRGF0YTsKICAgICB0eXBlZGVmIFJlZlB0cjxQbGF0Zm9ybVJlc3BvbnNlUXQ+IFBs
YXRmb3JtUmVzcG9uc2U7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICAgdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybURhdGE7CisgICAgIHR5cGVkZWYgUmVzb3VyY2VSZXNwb25zZSogUGxhdGZvcm1SZXNwb25z
ZTsKICNlbHNlCiAgICAgLy8gTm90IHN1cmUgd2hhdCB0aGUgc3RyYXRlZ3kgZm9yIHRoaXMgd2ls
bCBiZSBvbiBvdGhlciBwbGF0Zm9ybXMuCiAgICAgdHlwZWRlZiBzdHJ1Y3QgUGxhdGZvcm1EYXRh
U3RydWN0KiBQbGF0Zm9ybURhdGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMTc3NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTAgQEAKICNl
bmRpZgogI2VuZGlmCiAKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY0xvYWRlcjsKQEAgLTk0LDcg
Kzk4LDE5IEBACiAgICAgZnJpZW5kIExSRVNVTFQgX19zdGRjYWxsIFJlc291cmNlSGFuZGxlV25k
UHJvYyhIV05ELCB1bnNpZ25lZCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKEdESykgfHwgUExBVEZPUk0oUVQpCisjaWYgVVNFKENVUkwpCit2b2lkICBz
ZXR1cFB1dCgpOwordm9pZCAgc2V0dXBQb3N0KCk7Cit2b2lkICBpbml0Sm9iKCk7Cit2b2lkICBw
cm9jZXNzTWVzc2FnZShDVVJMTXNnKiBtc2cpOwordm9pZCAgZmluaXNoKCk7CitzaXplX3Qgd3Jp
dGUodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iKTsKK3NpemVfdCBoZWFkZXIo
Y2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iKTsKK1ZlY3RvcjxjaGFyPiBydW5J
bW1lZGlhdGVseShSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSk7CitDVVJMICpwbGF0Zm9ybUhh
bmRsZSgpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKICAgICBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsKiBnZXRJbnRlcm5hbCgpIHsgcmV0dXJuIGQ7IH0KICNlbmRpZgogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlLmgJKHJldmlzaW9uIDE3NzQ2
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsMTIgKzU0LDE3IEBACiAgICAgfQogIAogICAgIGNvbnN0IEtVUkwmIHVy
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgdm9pZCBzZXRVcmwoIGNvbnN0IEtVUkwm
IHVybCl7IG1fdXJsID0gdXJsOyB9CiAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWltZVR5cGU7IH0KKyAgICB2b2lkIHNldE1pbWVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpIHsgbV9taW1lVHlwZSA9IG1pbWVUeXBlOyB9CiAgICAgbG9uZyBsb25nIGV4
cGVjdGVkQ29udGVudExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWRDb250ZW50TGVu
Z3RoOyB9CisgICAgdm9pZCBzZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobG9uZyBsb25nIGV4cGVj
dGVkTGVuZ3RoKSB7IG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRMZW5ndGg7IH0K
ICAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHRFbmNvZGluZ05hbWU7IH0KKyAgICB2b2lkIHNldFRleHRFbmNvZGluZ05hbWUoU3RyaW5nJiB0
ZXh0RW5jb2RpbmdOYW1lICkgeyBtX3RleHRFbmNvZGluZ05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1l
OyB9CiAKICAgICAvLyBGSVhNRSBzaG91bGQgY29tcHV0ZSB0aGlzIG9uIHRoZSBmbHkKICAgICBj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdWdnZXN0
ZWRGaWxlbmFtZTsgfQorICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoU3RyaW5nJiBzdWdn
ZXN0ZWRGaWxlbmFtZSkgeyBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7
IH0KIAogICAgIGludCBodHRwU3RhdHVzQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1faHR0cFN0YXR1
c0NvZGU7IH0KICAgICB2b2lkIHNldEhUVFBTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKSB7IG1f
aHR0cFN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCShyZXZpc2lv
biAxNzc0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tIAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlTWFuYWdlci5oIgotCi0jaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgaW50IHNlbGVjdFRpbWVvdXRNUyA9IDU7Ci1jb25z
dCBkb3VibGUgcG9sbFRpbWVTZWNvbmRzID0gMC4wNTsKLQotUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
OjpSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKQotICAgIDogbV91c2VTaW1wbGUoZmFsc2UpCi0gICAg
LCBqb2JzKG5ldyBIYXNoU2V0PFJlc291cmNlSGFuZGxlKj4pCi0gICAgLCBtX2Rvd25sb2FkVGlt
ZXIodGhpcywgJlJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKQot
ewotICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKLSAgICBjdXJsTXVsdGlI
YW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKLX0KLQotUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBS
ZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmdldCgpCi17Ci0gICAgc3RhdGljIFJlc291cmNlSGFuZGxl
TWFuYWdlciogc2luZ2xldG9uOwotICAgIGlmICghc2luZ2xldG9uKQotICAgICAgICBzaW5nbGV0
b24gPSBuZXcgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOwotICAgIHJldHVybiBzaW5nbGV0b247Ci19
Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjp1c2VTaW1wbGVUcmFuc2Zlcihib29sIHVz
ZVNpbXBsZSkKLXsKLSAgICBtX3VzZVNpbXBsZSA9IHVzZVNpbXBsZTsKLX0KLQotc3RhdGljIHNp
emVfdCB3cml0ZUNhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwg
dm9pZCogb2JqKQotewotICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNv
dXJjZUhhbmRsZSo+KG9iaik7Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+
Z2V0SW50ZXJuYWwoKTsKLSAgICBpbnQgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOwotICAgIGlm
IChkLT5jbGllbnQoKSkKLSAgICAgICAgZC0+Y2xpZW50KCktPmRpZFJlY2VpdmVEYXRhKGpvYiwg
c3RhdGljX2Nhc3Q8Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7Ci0gICAgcmV0dXJuIHRvdGFsU2l6
ZTsKLX0KLQotc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBz
aXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCi17Ci0gICAgaW50IHRvdGFsU2l6ZSA9IHNp
emUgKiBubWVtYjsKLSAgICByZXR1cm4gdG90YWxTaXplOwotfQotCi12b2lkIFJlc291cmNlSGFu
ZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKFRpbWVyPFJlc291cmNlSGFuZGxlTWFu
YWdlcj4qIHRpbWVyKQotewotICAgIGlmIChqb2JzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9k
b3dubG9hZFRpbWVyLnN0b3AoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobV91
c2VTaW1wbGUpIHsKLSAgICAgICAgZm9yIChIYXNoU2V0PFJlc291cmNlSGFuZGxlKj46Oml0ZXJh
dG9yIGl0ID0gam9icy0+YmVnaW4oKTsgaXQgIT0gam9icy0+ZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSAqaXQ7Ci0gICAgICAgICAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgICAgICAgICAgQ1VSTGNv
ZGUgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oZC0+bV9oYW5kbGUpOwotICAgICAgICAgICAgaWYg
KHJlcyAhPSBDVVJMRV9PSykKLSAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIFdJVEggSk9C
ICVkXG4iLCByZXMpOwotICAgICAgICAgICAgaWYgKGQtPmNsaWVudCgpKSB7Ci0gICAgICAgICAg
ICAgICAgZC0+Y2xpZW50KCktPnJlY2VpdmVkQWxsRGF0YShqb2IsIDApOwotICAgICAgICAgICAg
ICAgIGQtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKGpvYik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChkLT5tX2hhbmRsZSk7Ci0gICAgICAgICAgICBk
LT5tX2hhbmRsZSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgam9icy0+Y2xlYXIoKTsKLSAgICAg
ICAgbV9kb3dubG9hZFRpbWVyLnN0b3AoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBGRF9aRVJP
KCZmZHJlYWQpOwotICAgICAgICBGRF9aRVJPKCZmZHdyaXRlKTsKLSAgICAgICAgRkRfWkVSTygm
ZmRleGNlcCk7Ci0gICAgICAgIGN1cmxfbXVsdGlfZmRzZXQoY3VybE11bHRpSGFuZGxlLCAmZmRy
ZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7Ci0gICAgICAgIGludCBucnVubmluZzsK
LSAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKLSAgICAgICAgaW50IHJldHZhbDsKLSAg
ICAgICAgdGltZW91dC50dl9zZWMgPSAwOwotICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSBzZWxl
Y3RUaW1lb3V0TVMgKiAxMDAwOyAgICAgICAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNvbmRzCi0g
ICAgICAgIHJldHZhbCA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZm
ZGV4Y2VwLCAmdGltZW91dCk7Ci0gICAgICAgIHN3aXRjaCAocmV0dmFsKSB7Ci0gICAgICAgICAg
ICBjYXNlIC0xOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBlcnJvcgotI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzLCBzZWxlY3QgZXJyb3IoJWQpXG4i
LCBfX1BSRVRUWV9GVU5DVElPTl9fLHJldHZhbCk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAv
KiBmYWxsdGhyb3VnaCovCi0gICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAvLyBz
ZWxlY3QgdGltZW91dAotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICAgICBwcmludGYoIiVz
LCBzZWxlY3QgdGltZW91dCAlZFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyxyZXR2YWwpOwotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2guIHRoaXMgY2FuIGJlIHRoZSBmaXJz
dCBwZXJmb3JtIHRvIGJlIG1hZGUgKi8KLSAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gMSsgZGVzY3JpcHRvcnMgaGF2ZSBkYXRhCi0gICAgICAgICAgICAgICAg
d2hpbGUgKENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9PSBjdXJsX211bHRpX3BlcmZvcm0oY3Vy
bE11bHRpSGFuZGxlLCAmbnJ1bm5pbmcpKQotICAgICAgICAgICAgICAgICAgICB7IH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIGNoZWNrIHRoZSBjdXJsIG1lc3NhZ2VzIGluZGljYXRpbmcgY29t
cGxldGVkIHRyYW5zZmVycwotICAgICAgICAvLyBhbmQgZnJlZSB0aGVpciByZXNvdXJjZXMKLSAg
ICAgICAgaW50IG5tc2dzOwotICAgICAgICB3aGlsZSAoQ1VSTE1zZyogbXNnID0gY3VybF9tdWx0
aV9pbmZvX3JlYWQoY3VybE11bHRpSGFuZGxlLCAmbm1zZ3MpKSB7Ci0gICAgICAgICAgICBpZiAo
bXNnLT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7Ci0gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUg
bm9kZSB3aGljaCBoYXMgc2FtZSBkLT5tX2hhbmRsZSBhcyBjb21wbGV0ZWQgdHJhbnNmZXIKLSAg
ICAgICAgICAgICAgICBDVVJMKiBjaGFuZGxlID0gbXNnLT5lYXN5X2hhbmRsZTsKLSAgICAgICAg
ICAgICAgICBhc3NlcnQoY2hhbmRsZSk7Ci0gICAgICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGUg
KmpvYjsKLSAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjaGFuZGxlLCBDVVJMSU5G
T19QUklWQVRFLCAmam9iKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoam9iKTsgLy9maXhtZTog
YXNzZXJ0LT5pZiA/Ci0gICAgICAgICAgICAgICAgLy8gaWYgZm91bmQsIGRlbGV0ZSBpdAotICAg
ICAgICAgICAgICAgIGlmIChqb2IpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCAqZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChtc2ctPmRhdGEucmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IENVUkxFX09LOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoaXMgdG8g
YXV0aGVudGljYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3BDb2RlID0g
LTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9o
YW5kbGUsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZyZXNwQ29kZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVtb3ZlKGpvYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ3VybCBFUlJP
UiAlc1xuIiwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVwb3J0IGFuIGVycm9yPwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbW92ZShqb2IpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDdXJsUmVxdWVzdCBub3QgZm91bmQsIGV2
ZW50aG91Z2ggY3VybCBkLT5tX2hhbmRsZSBmaW5pc2hlZFxuIik7Ci0gICAgICAgICAgICAgICAg
ICAgIGFzc2VydCgwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAoIWpvYnMtPmlzRW1wdHkoKSkKLSAgICAgICAgbV9kb3dubG9h
ZFRpbWVyLnN0YXJ0T25lU2hvdChwb2xsVGltZVNlY29uZHMpOwotfQotCi12b2lkIFJlc291cmNl
SGFuZGxlTWFuYWdlcjo6cmVtb3ZlKFJlc291cmNlSGFuZGxlKiBqb2IpCi17Ci0gICAgUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoIWQtPm1f
aGFuZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGpvYnMtPmNvbnRhaW5zKGpvYikpCi0g
ICAgICAgIGpvYnMtPnJlbW92ZShqb2IpOwotICAgIGlmIChqb2JzLT5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fZG93bmxvYWRUaW1lci5zdG9wKCk7Ci0gICAgaWYgKGQtPmNsaWVudCgpKSB7Ci0gICAg
ICAgIGQtPmNsaWVudCgpLT5yZWNlaXZlZEFsbERhdGEoam9iLCAwKTsKLSAgICAgICAgZC0+Y2xp
ZW50KCktPmRpZEZpbmlzaExvYWRpbmcoam9iKTsKLSAgICB9Ci0gICAgaWYgKGQtPm1faGFuZGxl
KSB7Ci0gICAgICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUsIGQt
Pm1faGFuZGxlKTsKLSAgICAgICAgY3VybF9lYXN5X2NsZWFudXAoZC0+bV9oYW5kbGUpOwotICAg
ICAgICBkLT5tX2hhbmRsZSA9IE5VTEw7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlSGFuZGxl
TWFuYWdlcjo6YWRkKFJlc291cmNlSGFuZGxlKiBqb2IpCi17Ci0gICAgYm9vbCBzdGFydFRpbWVy
ID0gam9icy0+aXNFbXB0eSgpOwotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2It
PmdldEludGVybmFsKCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyB1cmwgPSBqb2ItPnVybCgpLnVy
bCgpOwotICAgIGQtPm1faGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKLSAgICBjdXJsX2Vhc3lf
c2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BSSVZBVEUsIGpvYik7Ci0gICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgZXJyb3JfYnVmZmVyKTsK
LSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04s
IHdyaXRlQ2FsbGJhY2spOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxP
UFRfV1JJVEVEQVRBLCBqb2IpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfSEVBREVSRlVOQ1RJT04sIGhlYWRlckNhbGxiYWNrKTsKLSAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRFSEVBREVSLCBqb2IpOwotICAgIGN1cmxfZWFz
eV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOwotICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfTUFYUkVESVJTLCAxMCk7Ci0gICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhf
QU5ZKTsKLSAgICAvLyB1cmwgcHRyIG11c3QgcmVtYWluIHZhbGlkIHRocm91Z2ggdGhlIHJlcXVl
c3QKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VSTCwgdXJsLmFz
Y2lpKCkpOwotCi0gICAgaWYgKG1fdXNlU2ltcGxlKQotICAgICAgICBqb2JzLT5hZGQoam9iKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgQ1VSTE1jb2RlIHJldCA9IGN1cmxfbXVsdGlfYWRkX2hhbmRs
ZShjdXJsTXVsdGlIYW5kbGUsIGQtPm1faGFuZGxlKTsKLSAgICAgICAgLy8gZG9uJ3QgY2FsbCBw
ZXJmb3JtLCBiZWNhdXNlIGV2ZW50cyBtdXN0IGJlIGFzeW5jCi0gICAgICAgIC8vIHRpbWVvdXQg
d2lsbCBvY2N1ciBhbmQgZG8gY3VybF9tdWx0aV9wZXJmb3JtCi0gICAgICAgIGlmIChyZXQgJiYg
cmV0ICE9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgewotICAgICAgICAgICAgcHJpbnRmKCJF
cnJvciAlZCBzdGFydGluZyBqb2IgJXNcbiIsIHJldCwgam9iLT51cmwoKS51cmwoKS5hc2NpaSgp
KTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgYW4gZXJyb3I/Ci0gICAgICAgICAgICBz
dGFydFRpbWVyID1mYWxzZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBqb2JzLT5hZGQo
am9iKTsKLSAgICB9Ci0gICAgaWYgKHN0YXJ0VGltZXIpCi0gICAgICAgIG1fZG93bmxvYWRUaW1l
ci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNvbmRzKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRs
ZU1hbmFnZXI6OmNhbmNlbChSZXNvdXJjZUhhbmRsZSogam9iKQotewotICAgIHJlbW92ZShqb2Ip
OwotICAgIC8vIEZJWE1FOiByZXBvcnQgYW4gZXJyb3I/Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNv
dXJjZUhhbmRsZU1hbmFnZXIuaAkocmV2aXNpb24gMTc3NDYpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyX0hfCi0jZGVmaW5lIFJlc291cmNlSGFu
ZGxlTWFuYWdlcl9IXwotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgot
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSA8Y3VybC9jdXJsLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBnZXQoKTsKLSAgICB2
b2lkIGFkZChSZXNvdXJjZUhhbmRsZSopOwotICAgIHZvaWQgY2FuY2VsKFJlc291cmNlSGFuZGxl
Kik7Ci0KLSAgICAvLyBJZiB0cnVlLCBkb24ndCBtdWx0aXBsZXggZG93bmxvYWRzOiBkb3dubG9h
ZCBjb21wbGV0ZWx5IG9uZSBhdCBhIHRpbWUuCi0gICAgdm9pZCB1c2VTaW1wbGVUcmFuc2Zlcihi
b29sIHVzZVNpbXBsZSk7Ci0KLXByaXZhdGU6Ci0gICAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCk7
Ci0gICAgdm9pZCBkb3dubG9hZFRpbWVyQ2FsbGJhY2soVGltZXI8UmVzb3VyY2VIYW5kbGVNYW5h
Z2VyPiopOwotICAgIHZvaWQgcmVtb3ZlKFJlc291cmNlSGFuZGxlKik7Ci0KLSAgICBib29sIG1f
dXNlU2ltcGxlOwotICAgIEhhc2hTZXQ8UmVzb3VyY2VIYW5kbGUqPiogam9iczsKLSAgICBUaW1l
cjxSZXNvdXJjZUhhbmRsZU1hbmFnZXI+IG1fZG93bmxvYWRUaW1lcjsKLSAgICBDVVJMTSogY3Vy
bE11bHRpSGFuZGxlOyAvLyBub3QgZnJlZWQKLQotICAgIC8vIGN1cmwgZmlsZWhhbmRsZXMgdG8g
cG9sbCB3aXRoIHNlbGVjdAotICAgIGZkX3NldCBmZHJlYWQ7Ci0gICAgZmRfc2V0IGZkd3JpdGU7
Ci0gICAgZmRfc2V0IGZkZXhjZXA7Ci0KLSAgICBpbnQgbWF4ZmQ7Ci0gICAgY2hhciBlcnJvcl9i
dWZmZXJbQ1VSTF9FUlJPUl9TSVpFXTsKLQotICAgIC8vIE5VTEwtdGVybWluYXRlZCBsaXN0IG9m
IHN1cHBvcnRlZCBwcm90b2NvbHMKLSAgICBjb25zdCBjaGFyKiBjb25zdCogY3VybF9wcm90b2Nv
bHM7IC8vIG5vdCBmcmVlZAotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9nZGsvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHJldmlzaW9u
IDE3NzQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZUN1
cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotCi0jaW5jbHVkZSAiRG9jTG9hZGVy
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKLXsKLX0KLQotUmVzb3VyY2VI
YW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCi17Ci0gICAgY2FuY2VsKCk7Ci19Ci0KLWJvb2wgUmVz
b3VyY2VIYW5kbGU6OnN0YXJ0KERvY0xvYWRlciogZG9jTG9hZGVyKQotewotICAgIHJlZigpOwot
ICAgIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6Z2V0KCktPmFkZCh0aGlzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKLXsKLSAgICBSZXNvdXJj
ZUhhbmRsZU1hbmFnZXI6OmdldCgpLT5jYW5jZWwodGhpcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlTWFuYWdlci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiVGlt
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQgc2VsZWN0
VGltZW91dE1TID0gNTsKK2NvbnN0IGRvdWJsZSBwb2xsVGltZVNlY29uZHMgPSAwLjA1OworCitS
ZXNvdXJjZUhhbmRsZU1hbmFnZXI6OlJlc291cmNlSGFuZGxlTWFuYWdlcigpCisgICAgOiBtX2Rv
d25sb2FkVGltZXIodGhpcywgJlJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNh
bGxiYWNrKQoreworICAgIEZEX1pFUk8oJmZkcmVhZCk7CisgICAgRkRfWkVSTygmZmR3cml0ZSk7
CisgICAgRkRfWkVSTygmZmRleGNlcCk7CisgICAgbWF4ZmQgPSAwOworICAgIGN1cmxfZ2xvYmFs
X2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgICBjdXJsTXVsdGlIYW5kbGUgPSBjdXJsX211bHRp
X2luaXQoKTsKK30KKworUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBSZXNvdXJjZUhhbmRsZU1hbmFn
ZXI6OnNlbGYoKQoreworICAgIHN0YXRpYyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIqIHNpbmdsZXRv
bjsKKyAgICBpZiAoIXNpbmdsZXRvbikKKyAgICAgICAgc2luZ2xldG9uID0gbmV3IFJlc291cmNl
SGFuZGxlTWFuYWdlcjsKKyAgICByZXR1cm4gc2luZ2xldG9uOworfQorCit2b2lkIFJlc291cmNl
SGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKFRpbWVyPFJlc291cmNlSGFuZGxl
TWFuYWdlcj4qIHRpbWVyKQoreworICAgIEZEX1pFUk8oJmZkcmVhZCk7CisgICAgRkRfWkVSTygm
ZmR3cml0ZSk7CisgICAgRkRfWkVSTygmZmRleGNlcCk7CisgICAgY3VybF9tdWx0aV9mZHNldChj
dXJsTXVsdGlIYW5kbGUsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKKyAg
ICBpbnQgbnJ1bm5pbmcgPSAwOworICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgdGlt
ZW91dC50dl9zZWMgPSAwOworICAgIHRpbWVvdXQudHZfdXNlYyA9IHNlbGVjdFRpbWVvdXRNUyAq
IDEwMDA7ICAgICAgIC8vIHNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMKKyAgICA6OnNlbGVjdCht
YXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOworCisgICAg
d2hpbGUgKENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9PSBjdXJsX211bHRpX3BlcmZvcm0oY3Vy
bE11bHRpSGFuZGxlLCAmbnJ1bm5pbmcpKSB7IH0KKworICAgIC8vIGNoZWNrIHRoZSBjdXJsIG1l
c3NhZ2VzIGluZGljYXRpbmcgY29tcGxldGVkIHRyYW5zZmVycworICAgIC8vIGFuZCBmcmVlIHRo
ZWlyIHJlc291cmNlcworICAgIGludCBubXNnczsKKyAgICB3aGlsZSAoQ1VSTE1zZyogbXNnID0g
Y3VybF9tdWx0aV9pbmZvX3JlYWQoY3VybE11bHRpSGFuZGxlLCAmbm1zZ3MpKSB7CisgICAgICAg
IENVUkwqIGhhbmRsZSA9IG1zZy0+ZWFzeV9oYW5kbGU7CisgICAgICAgIGFzc2VydChoYW5kbGUp
OworICAgICAgICBSZXNvdXJjZUhhbmRsZSAqam9iOworICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5m
byhoYW5kbGUsIENVUkxJTkZPX1BSSVZBVEUsICZqb2IpOworICAgICAgICBqb2ItPnByb2Nlc3NN
ZXNzYWdlKG1zZyk7CisgICAgfQorICAgIGlmKG5ydW5uaW5nICYmICFtX2Rvd25sb2FkVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0YXJ0T25lU2hvdChwb2xsVGlt
ZVNlY29uZHMpOworfQorCisKK0NVUkxjb2RlIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6cnVuSW1t
ZWRpYXRlbHkoUmVzb3VyY2VIYW5kbGUqIGpvYikKK3sKKyAgICAvL2NhdXNlIGRhdGEgdG8gYmUg
Y2FjaGVkIGluIG1fcmVzdWx0RGF0YQorICAgIENVUkwqIGhhbmRsZSA9IGpvYi0+cGxhdGZvcm1I
YW5kbGUoKTsKKyAgICBDVVJMY29kZSByZXM7CisgICAgaWYoaGFuZGxlKSB7CisgICAgICAgIGN1
cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUsaGFuZGxlKTsKKyAgICAgICAg
cmVzID0gY3VybF9lYXN5X3BlcmZvcm0oaGFuZGxlKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsK
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnJlbW92ZSggUmVzb3VyY2VIYW5kbGUq
IGpvYikKK3sKKyAgICAvL3Rha2Ugb3V0IG9mIGN1cmwgbXVsdGkgZmlyc3QgIQorICAgIGN1cmxf
bXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUsIGpvYi0+cGxhdGZvcm1IYW5kbGUo
KSk7CisgICAgam9iLT5maW5pc2goKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6
OmFkZCggUmVzb3VyY2VIYW5kbGUqIGpvYikKK3sKKyAgICBDVVJMTWNvZGUgcmV0ID0gY3VybF9t
dWx0aV9hZGRfaGFuZGxlKGN1cmxNdWx0aUhhbmRsZSxqb2ItPnBsYXRmb3JtSGFuZGxlKCkpOwor
ICAgIGlmIChyZXQgJiYgcmV0ICE9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeworICAgICAg
ICBwcmludGYoIkVycm9yICVkIHN0YXJ0aW5nIGpvYiAlc1xuIiwgcmV0LCBqb2ItPnVybCgpLnVy
bCgpLmFzY2lpKCkpOworICAgICAgIGpvYi0+Y2FuY2VsKCk7CisgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIW1fZG93bmxvYWRUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2Rvd25s
b2FkVGltZXIuc3RhcnRPbmVTaG90KHBvbGxUaW1lU2Vjb25kcyk7Cit9CisKKworY2hhciogUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpnZXRNaW1lVHlwZShTdHJpbmcmIGluUGF0aCkKK3sKKyAgICBE
ZXByZWNhdGVkU3RyaW5nIHBhdGggPSBpblBhdGguZGVwcmVjYXRlZFN0cmluZygpOworICAgIGlm
IChwYXRoLmVuZHNXaXRoKCIuc3ZnIikpCisgICAgICAgIHJldHVybiAiaW1hZ2Uvc3ZnK3htbCI7
CisgICAgaWYgKHBhdGguZW5kc1dpdGgoIi54bWwiKSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0L3ht
bCI7CisgICAgaWYgKHBhdGguZW5kc1dpdGgoIi54c2wiKSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0
L3hzbCI7CisgICAgaWYgKHBhdGguZW5kc1dpdGgoIi5qcyIpKQorICAgICAgICByZXR1cm4gImFw
cGxpY2F0aW9uL3gtamF2YXNjcmlwdCI7CisgICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworfQorCit9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZU1hbmFnZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBSZXNvdXJjZUhhbmRsZU1hbmFnZXJfSF8KKyNkZWZpbmUgUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
X0hfCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8Y3VybC9jdXJsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitjbGFzcyBSZXNvdXJj
ZUhhbmRsZU1hbmFnZXIKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgY2hhciogZ2V0TWltZVR5cGUo
U3RyaW5nJik7CisgICAgc3RhdGljIFJlc291cmNlSGFuZGxlTWFuYWdlciogc2VsZigpOworICAg
IHZvaWQgYWRkKFJlc291cmNlSGFuZGxlKik7CisgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VIYW5k
bGUqKTsKKyAgICBDVVJMY29kZSBydW5JbW1lZGlhdGVseShSZXNvdXJjZUhhbmRsZSogam9iKTsK
KworcHJpdmF0ZToKKyAgICBSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKTsKKyAgICB2b2lkIGRvd25s
b2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUhhbmRsZU1hbmFnZXI+Kik7CisgICAgVGlt
ZXI8UmVzb3VyY2VIYW5kbGVNYW5hZ2VyPiBtX2Rvd25sb2FkVGltZXI7CisgICAgQ1VSTE0qIGN1
cmxNdWx0aUhhbmRsZTsgLy8gbm90IGZyZWVkCisKKyAgICAvLyBjdXJsIGZpbGVoYW5kbGVzIHRv
IHBvbGwgd2l0aCBzZWxlY3QKKyAgICBmZF9zZXQgZmRyZWFkOworICAgIGZkX3NldCBmZHdyaXRl
OworICAgIGZkX3NldCBmZGV4Y2VwOworCisgICAgaW50IG1heGZkOworCisgICAgLy8gTlVMTC10
ZXJtaW5hdGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3RvY29scworICAgIGNvbnN0IGNoYXIqIGNv
bnN0KiBjdXJsX3Byb3RvY29sczsgLy8gbm90IGZyZWVkCit9OworCit9CisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZUN1cmwuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKworI2luY2x1ZGUgIkRv
Y0xvYWRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZUludGVybmFsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVk
ZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDxjdXJsL2N1cmwuaD4KKworCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRm
KHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9f
TElORV9fLF9fUFJFVFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGNoYXIgZXJyb3JfYnVmZmVyW0NVUkxfRVJST1JfU0laRV07CisKK3N0
YXRpYyBzaXplX3Qgd3JpdGVDYWxsYmFjayh2b2lkKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qg
bm1lbWIsIHZvaWQqIG9iaikKK3sKKyAgICBSZXNvdXJjZUhhbmRsZSogam9iID0gc3RhdGljX2Nh
c3Q8UmVzb3VyY2VIYW5kbGUqPihvYmopOworICAgIGFzc2VydChqb2IpOworICAgIHJldHVybiBq
b2ItPndyaXRlKHB0cixzaXplLG5tZW1iKTsKK30KKworc3RhdGljIHNpemVfdCBoZWFkZXJDYWxs
YmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIG9iaikKK3sK
KyAgICBSZXNvdXJjZUhhbmRsZSogam9iID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihv
YmopOworICAgIHJldHVybiBqb2ItPmhlYWRlcihwdHIsc2l6ZSxubWVtYik7Cit9CisKK1Jlc291
cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKK3sKKyAgICBpZiAo
bV9oYW5kbGUpCisgICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKG1faGFuZGxlKTsKKyAgICBpZiAo
bV91cmwpCisgICAgICAgIGZyZWUobV91cmwpOworCisgICAgaWYgKG1fY3VzdG9tSGVhZGVyKQor
ICAgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKG1fY3VzdG9tSGVhZGVyKTsKKworICAgIGlmICht
X2N1c3RvbVBvc3RIZWFkZXIpCisgICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9jdXN0b21Q
b3N0SGVhZGVyKTsKKworICAgIGlmIChtX2ZpbGVQb3N0KQorICAgICAgICBjdXJsX2Zvcm1mcmVl
KG1fZmlsZVBvc3QpOworICAgIC8vZG9uJ3QgZGVsZXRlIHdlIHBhc3MgdGhpcyBvZmYgaW4gdGhl
IGVuZAorICAgIGlmIChtX3Jlc3BvbnNlKQorICAgICAgICBtX3Jlc3BvbnNlID0gMDsKK30KKwor
UmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCit7CisgICAgZGVsZXRlIGQ7Cit9CisK
K0NVUkwqIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUhhbmRsZSgpCit7CisgICAgcmV0dXJuIGQt
Pm1faGFuZGxlOworfQorCit2b2lkICBSZXNvdXJjZUhhbmRsZTo6c2V0dXBQdXQoKQoreworICAg
IGlmIChtZXRob2QoKSAhPSAiUFVUIikKKyAgICAgICAgcmV0dXJuOworICAgIGN1cmxfZWFzeV9z
ZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVBMT0FELCBUUlVFKSA7CisgICAgc3RydWN0IGN1
cmxfc2xpc3QgKnNsaXN0PU5VTEw7CisgICAvL0ZJWE1FOiBobW1tIGRpc2FibGUgRXhwZWN0OiAx
MDAtY29udGludWUKKyAgIC8vc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwiRXhwZWN0
OiIpOworICAgLy9qdXN0IHN1cHByb3QgSHR0cCAxLjEgY2h1bmNrZWQgZW5jb2Rpbmcgbm93Cisg
ICBzbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKHNsaXN0LCJUcmFuc2Zlci1FbmNvZGluZzogY2h1
bmtlZCIpOworICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSxDVVJMT1BUX0hUVFBIRUFE
RVIsIHNsaXN0KTsKKyAgIGQtPm1fY3VzdG9tUG9zdEhlYWRlciA9IHNsaXN0OworfQorCit2b2lk
ICBSZXNvdXJjZUhhbmRsZTo6c2V0dXBQb3N0KCkKK3sKKyAgICBpZiAobWV0aG9kKCkgIT0gIlBP
U1QiKQorICAgICAgICByZXR1cm47CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwg
Q1VSTE9QVF9QT1NULHRydWUpOworICAgIC8vZGlzYWJsZSBFeHBlY3Q6IDEwMC1jb250aW51ZQor
ICAgIHsKKyAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKnNsaXN0PU5VTEw7CisgICAgICAgIHNs
aXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QsIkV4cGVjdDoiKTsKKyAgICAgICAgY3VybF9l
YXN5X3NldG9wdChkLT5tX2hhbmRsZSxDVVJMT1BUX0hUVFBIRUFERVIsIHNsaXN0KTsKKyAgICAg
ICAgZC0+bV9jdXN0b21Qb3N0SGVhZGVyID0gc2xpc3Q7CisgICAgfQorCisgICAgLy9maXJzdCBh
ZGQgYW55IGRhdGEKKyAgICBwb3N0RGF0YSgpLmZsYXR0ZW4oZC0+bV9wb3N0Qnl0ZXMpOworICAg
IGlmIChkLT5tX3Bvc3RCeXRlcy5zaXplKCkgIT0gMCkgeworICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFMsZC0+bV9wb3N0Qnl0ZXMuZGF0YSgp
KTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklF
TERTSVpFLGQtPm1fcG9zdEJ5dGVzLnNpemUoKSk7CisgICAgfQorCisgICAgVmVjdG9yPEZvcm1E
YXRhRWxlbWVudD4gZWxlbWVudHMgPSBwb3N0RGF0YSgpLmVsZW1lbnRzKCk7CisgICAgaW50IHNp
emUgPSBlbGVtZW50cy5zaXplKCk7CisgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKmxhc3RwdHI9
TlVMTDsKKworICAgIGZvciAoaW50IGkgPTA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgaWYg
KGVsZW1lbnRzW2ldLm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRGaWxlKSB7Cisg
ICAgICAgICAgICBDU3RyaW5nIGNzdHJpbmcgPSAgZWxlbWVudHNbaV0ubV9maWxlbmFtZS51dGY4
KCk7CisgICAgICAgICAgICAvL2tlZXAgcmVmIGhlcmUgc28gaXRzIG5vdCBmcmVlZAorICAgICAg
ICAgICAgZC0+bV9jc3RyaW5ncy5hcHBlbmQoY3N0cmluZyk7CisgICAgICAgICAgICBjb25zdCBj
aGFyICpmaWxlbmFtZSA9IGNzdHJpbmcuZGF0YSgpOworCisgICAgICAgICAgICAvKiBGaWxsIGlu
IHRoZSBmaWxlIHVwbG9hZCBmaWVsZCAqLworICAgICAgICAgICAgY3VybF9mb3JtYWRkKCZkLT5t
X2ZpbGVQb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICZsYXN0cHRyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAic2VuZGZpbGUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIENVUkxGT1JNX0VORCk7CisKKyAgICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIGZp
bGVuYW1lIGZpZWxkICovCisgICAgICAgICAgICBjdXJsX2Zvcm1hZGQoJmQtPm1fZmlsZVBvc3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgJmxhc3RwdHIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJmaWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBDVVJMRk9STV9FTkQpOworCisgICAgICAgICAgICAvKiBGaWxsIGluIHRoZSBzdWJt
aXQgZmllbGQgdG9vLCBldmVuIGlmIHRoaXMgaXMgcmFyZWx5IG5lZWRlZCAqLworICAgICAgICAg
ICAgY3VybF9mb3JtYWRkKCZkLT5tX2ZpbGVQb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICZsYXN0cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAi
c3VibWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZQ09OVEVOVFMs
ICJzZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjppbml0Sm9iKCkKK3sKKyAgICBy
ZWYoKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHN1cmwgPSB1cmwoKS51cmwoKTsKKyAgICBkLT5t
X2xvYWRpbmcgPSB0cnVlOworICAgIGQtPm1fcmVzcG9uc2UgPSBuZXcgUmVzb3VyY2VSZXNwb25z
ZSgpOworICAgIGQtPm1fcmVzcG9uc2UtPnNldFVybCh1cmwoKSk7CisKKy8vcHJpbnRmKCJSZXNv
dXJjZUhhbmRsZU1hbmFnZXI6OmFkZCBTdGFydGluZyBqb2IgJXNcbiIsam9iLT51cmwoKS5hc2Np
aSgpKTsKKyAgICAvL3JlbW92ZSBhbnkgcXVlcnkgcGFydCBzZW50IHRvIGEgbG9jYWwgZmlsZQor
ICAgIC8vYWxsb3dzIGh0dHAgc3R5bGUgZ2V0IG9wdGlvbnMgdG8gYmUgaGFuZGxlZCBieSBhIGxv
Y2FsIGZpbGUKKyAgICBpZiAodXJsKCkuaXNMb2NhbEZpbGUoKSkgeworICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIHF1ZXJ5ID0gdXJsKCkucXVlcnkoKTsKKyAgICAgICAgaWYgKCFxdWVyeS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZHggPSBzdXJsLmZpbmQocXVlcnkp
OworICAgICAgICAgICAgc3VybCA9IHN1cmwubGVmdChpZHgpOworICAgICAgICB9CisgICAgfQor
ICAgIGQtPm1faGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKKyAgICAvLyB1cmwgcHRyIG11c3Qg
cmVtYWluIHZhbGlkIHRocm91Z2ggdGhlIHJlcXVlc3QKKyAgICBkLT5tX3VybCA9ICBzdHJkdXAo
c3VybC5hc2NpaSgpKTsKKworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxP
UFRfUFJJVkFURSwgdGhpcyk7CisgICAgLy9GSVhNRTogbmVlZCB0byBkZWNpZGUgd2hlcmUgY29v
a2llcyBzaG91bGQgZ28KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BU
X0NPT0tJRUZJTEUsICJ3a2Nvb2tpZXMudHh0Iik7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9DT09LSUVKQVIsICJ3a2Nvb2tpZXMudHh0Iik7CisgICAgY3VybF9l
YXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgZXJyb3JfYnVmZmVy
KTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVOQ1RJ
T04sIHdyaXRlQ2FsbGJhY2spOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfV1JJVEVEQVRBLCB0aGlzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBoZWFkZXJDYWxsYmFjayk7CisgICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9XUklURUhFQURFUiwgdGhpcyk7CisgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7Cisg
ICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9NQVhSRURJUlMsIDEwKTsK
KyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJM
QVVUSF9BTlkpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVJM
LGQtPm1fdXJsKTsKKworICAgIC8veG1sSHR0cFJlcXVlc3Qgc2VlIHhtbC94bWxodHRwcmVxdWVz
dC5jcHAKKyAgICBIVFRQSGVhZGVyTWFwICBjdXN0b21IZWFkZXJzID0gIGQtPm1fcmVxdWVzdC5o
dHRwSGVhZGVyRmllbGRzKCk7CisgICAgaWYgKCFjdXN0b21IZWFkZXJzLmlzRW1wdHkoKSkgewor
ICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3Q9TlVMTDsKKyAgICAgICAgSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKKyAgICAgICAg
Zm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+
Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+c2Vjb25kOworICAgICAgICAg
ICAgU3RyaW5nIHBhaXIgPSBrZXkrIjogIit2YWx1ZTsKKyAgICAgICAgICAgIENTdHJpbmcgY3N0
cmluZyA9IHBhaXIudXRmOCgpOworICAgICAgICAgICAgLy9zYXZlIGZvciBsYXRlciBjbGVhbnVw
CisgICAgICAgICAgICBkLT5tX2NzdHJpbmdzLmFwcGVuZChjc3RyaW5nKTsKKyAgICAgICAgICAg
IHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QsY3N0cmluZy5kYXRhKCkpOworICAgICAg
ICB9CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEhF
QURFUiwgc2xpc3QpOworICAgICAgICBkLT5tX2N1c3RvbUhlYWRlciA9IHNsaXN0OworICAgIH0K
KyAgICAvL2RlZmF1bHQgdG8gZ2V0CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwg
Q1VSTE9QVF9IVFRQR0VULCBUUlVFKTsKKworICAgIGlmIChtZXRob2QoKSA9PSAiUE9TVCIpCisg
ICAgICAgIHNldHVwUG9zdCgpOworICAgIGVsc2UgaWYgKG1ldGhvZCgpID09ICJQVVQiKQorICAg
ICAgICBzZXR1cFB1dCgpOworICAgIGVsc2UgaWYgKG1ldGhvZCgpID09ICJIRUFEIikKKyAgICAg
ICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9OT0JPRFksIFRSVUUpOwor
fQorCitib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChEb2NMb2FkZXIqIGRvY0xvYWRlcikKK3sK
KyAgICBpbml0Sm9iKCk7CisgICAgLy9GSVhNRTogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIHNob3Vs
ZCBkbyB0aGlzCisgICAgcmVmKCk7CisgICAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzZWxmKCkt
PmFkZCh0aGlzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVjdG9yPGNoYXI+IFJlc291cmNl
SGFuZGxlOjpydW5JbW1lZGlhdGVseShSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAg
ICBkLT5tX3VzZVNpbXBsZSA9IHRydWU7CisgICAgQ1VSTGNvZGUgcmVzID0gUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyOjpzZWxmKCktPnJ1bkltbWVkaWF0ZWx5KHRoaXMpOworICAgIC8vRklYTUU6IG1h
a2UgZXJyb3IgZGVzY3JpcHRpdmUKKyAgICBpZihyZXMgIT0gQ1VSTEVfT0sgJiYgY2xpZW50KCkg
KQorICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbFdpdGhFcnJvcih0aGlzLFJlc291cmNlRXJyb3Io
KSk7CisKKyAgICByZXNwb25zZSA9ICpkLT5tX3Jlc3BvbnNlOworICAgIFZlY3RvcjxjaGFyPiBy
ZXN1bHRzID0gVmVjdG9yPGNoYXI+KGQtPm1fcmVzdWx0RGF0YSk7CisgICAgZC0+bV9yZXN1bHRE
YXRhLmNsZWFyKCk7CisgICAgZmluaXNoKCk7CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKKwor
dm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKK3sKKyAgICAvL0ZJWE1FOiBzZW5kIGVycm9y
IG9uIGNhbmNlbCA/IAorICAgIC8vaWYoY2xpZW50KCkpCisgICAgLy8gY2xpZW50KCktPmRpZEZh
aWxXaXRoRXJyb3IodGhpcyxSZXNvdXJjZUVycm9yKCkpOworICAgIFJlc291cmNlSGFuZGxlTWFu
YWdlcjo6c2VsZigpLT5yZW1vdmUodGhpcyk7CisgICAgZmluaXNoKCk7CisgICAgLy9GSVhNRTog
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyIHNob3VsZCBkbyB0aGlzCisgICAgZGVyZWYoKTsKK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRSZXNwb25zZShQbGF0Zm9ybVJlc3BvbnNlIHJl
c3BvbnNlKQoreworfQorCisKK3NpemVfdCBSZXNvdXJjZUhhbmRsZTo6d3JpdGUodm9pZCogcHRy
LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iKQoreworICAgIGlmICghY2xpZW50KCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmICghZC0+bV9zZW50UmVzcG9uc2UpIHsKKyAgICAgICAgZC0+
bV9zZW50UmVzcG9uc2UgPSB0cnVlOworICAgICAgICBjbGllbnQoKS0+cmVjZWl2ZWRSZXNwb25z
ZSh0aGlzLGQtPm1fcmVzcG9uc2UpOworICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3Bv
bnNlKHRoaXMsKmQtPm1fcmVzcG9uc2UpOworICAgIH0KKyAgICBpbnQgdG90YWxTaXplID0gc2l6
ZSAqIG5tZW1iOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBzdGF0aWNfY2Fz
dDxjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKKyAgICBpZiAoZC0+bV91c2VTaW1wbGUpIHsKKyAg
ICAgICAgZC0+bV9yZXN1bHREYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwgdG90
YWxTaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KKworc2l6ZV90IFJlc291
cmNlSGFuZGxlOjpoZWFkZXIoY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iKQor
eworICAgIGludCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7CisgICAgU3RyaW5nIHJlc3BvbnNl
ID0gU3RyaW5nKHB0cix0b3RhbFNpemUpOworICAgIGludCBpbmRleCA9IHJlc3BvbnNlLmZpbmQo
JzonKTsKKyAgICBTdHJpbmcgbmFtZSA9IHJlc3BvbnNlLnN1YnN0cmluZygwLGluZGV4KzEpLnN0
cmlwV2hpdGVTcGFjZSgpOworICAgIFN0cmluZyB2YWx1ZSA9IHJlc3BvbnNlLnN1YnN0cmluZyhp
bmRleCsxKS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgIGlmIChuYW1lID09ICJDb250ZW50LVR5
cGU6IikgeworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSB2YWx1ZTsKKyAgICAgICAgU3RyaW5n
IGNoYXJzZXQ7CisgICAgICAgIC8vdGhlIG1pbWUgc3RyaW5nIGNhbiBoYXZlIHR5cGU7IGNoYXJz
ZXQKKyAgICAgICAgaW5kZXggPSB2YWx1ZS5maW5kKCI7Iik7CisgICAgICAgIGlmIChpbmRleCAh
PSAtMSkgeworICAgICAgICAgICAgbWltZVR5cGUgPSB2YWx1ZS5sZWZ0KGluZGV4KTsKKyAgICAg
ICAgICAgIFN0cmluZyBjaGFyc2V0ID0gdmFsdWUucmlnaHQoaW5kZXgrMSk7CisgICAgICAgICAg
ICBkLT5tX3Jlc3BvbnNlLT5zZXRUZXh0RW5jb2RpbmdOYW1lKGNoYXJzZXQpOworICAgICAgICB9
CisgICAgICAgIGQtPm1fcmVzcG9uc2UtPnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKKyAgICB9Cisg
ICAgZC0+bV9yZXNwb25zZS0+aHR0cEhlYWRlckZpZWxkcygpLmFkZChuYW1lLHZhbHVlKTsKKyAg
ICByZXR1cm4gdG90YWxTaXplOworfQorCit2b2lkICBSZXNvdXJjZUhhbmRsZTo6cHJvY2Vzc01l
c3NhZ2UoQ1VSTE1zZyogbXNnKQoreworICAgIGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUp
IHsKKyAgICAgICAgLy8gZmluZCB0aGUgbm9kZSB3aGljaCBoYXMgc2FtZSBkLT5tX2hhbmRsZSBh
cyBjb21wbGV0ZWQgdHJhbnNmZXIKKyAgICAgICAgaWYgKG1zZy0+ZGF0YS5yZXN1bHQgIT0gQ1VS
TEVfT0spIHsKKyAgICAgICAgICAgIGNoYXIgKmhhbmRsZV91cmw9MDsKKyAgICAgICAgICAgIGN1
cmxfZWFzeV9nZXRpbmZvKGQtPm1faGFuZGxlLENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZoYW5k
bGVfdXJsKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9yID0gIGN1cmxfZWFzeV9zdHJl
cnJvcihtc2ctPmRhdGEucmVzdWx0KTsKKyAgICAgICAgICAgIHByaW50ZigiQ3VybCBFUlJPUiB1
cmw9JXMgZXJyb3I6JXNcbiIsaGFuZGxlX3VybCxlcnJvcik7CisgICAgICAgICAgICBmcmVlKGhh
bmRsZV91cmwpOworICAgICAgICAgICAgLy9GSVhNRTogbWFrZSBlcnJvciBkZXNjcmlwdGl2ZQor
ICAgICAgICAgICAgaWYoY2xpZW50KCkpCisgICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZEZh
aWxXaXRoRXJyb3IodGhpcyxSZXNvdXJjZUVycm9yKCkpOworICAgICAgICB9CisgICAgICAgIFJl
c291cmNlSGFuZGxlTWFuYWdlcjo6c2VsZigpLT5yZW1vdmUodGhpcyk7CisgICAgICAgIGZpbmlz
aCgpOworICAgICAgICAvL0ZJWE1FOiBSZXNvdXJjZUhhbmRsZU1hbmFnZXIgc2hvdWxkIGRvIHRo
aXMKKyAgICAgICAgZGVyZWYoKTsKKyAgICB9Cit9CisKK3ZvaWQgIFJlc291cmNlSGFuZGxlOjpm
aW5pc2goKQoreworICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICAvL2VtcHR5IHBhZ2UgaWYg
dHJ1ZQorICAgICAgICBpZiAoIWQtPm1fc2VudFJlc3BvbnNlKSB7CisgICAgICAgICAgICBkLT5t
X3NlbnRSZXNwb25zZSA9IHRydWU7CisgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZVJl
c3BvbnNlKHRoaXMsKmQtPm1fcmVzcG9uc2UpOworICAgICAgICAgICAgY2xpZW50KCktPnJlY2Vp
dmVkUmVzcG9uc2UodGhpcyxkLT5tX3Jlc3BvbnNlKTsKKyAgICAgICAgfQorICAgICAgICBjbGll
bnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKKyAgICAgICAgY2xpZW50KCktPnJlY2VpdmVk
QWxsRGF0YSh0aGlzLDApOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9DdXJzb3JHZGsuY3BwCShyZXZpc2lvbiAxNzc0NikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw0ICsx
OTgsMjAgQEAKICAgICByZXR1cm4gYzsKIH0KIAorY29uc3QgQ3Vyc29yJiB2ZXJ0aWNhbFRleHRD
dXJzb3IoKQoreworICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiB9CisKKworY29uc3QgQ3Vy
c29yJiBjZWxsQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworfQorCitj
b25zdCBDdXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gcG9pbnRlckN1
cnNvcigpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9DaHJvbWVDbGllbnRH
ZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9DaHJvbWVDbGllbnRHZGsu
aAkocmV2aXNpb24gMTc3NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9DaHJvbWVDbGllbnRH
ZGsuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDE0IEBACiAjZGVmaW5lIENocm9tZUNs
aWVudEdka19ICiAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJTaGFyZWQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2hyb21lQ2xpZW50R2RrIDog
cHVibGljIENocm9tZUNsaWVudCwgcHVibGljIFNoYXJlZDxDaHJvbWVDbGllbnRHZGs+IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkNocm9tZUNsaWVudEdkaygpIHsgfQorICAgICAg
ICBDaHJvbWVDbGllbnRHZGsoKTsKKyAgICAgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50R2RrKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiByKTsKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgd2luZG93UmVjdCgpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRWRpdG9yQ2xpZW50R2RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRWRpdG9yQ2xpZW50R2RrLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dkay9FZGl0b3JDbGllbnRHZGsuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRWRpdG9yQ2xp
ZW50R2RrX0gKKyNkZWZpbmUgRWRpdG9yQ2xpZW50R2RrX0gKKworI2luY2x1ZGUgIkVkaXRvckNs
aWVudC5oIgorI2luY2x1ZGUgIlNoYXJlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEVkaXRvckNsaWVudEdkayA6IHB1YmxpYyBFZGl0b3JDbGllbnQsIHB1YmxpYyBTaGFyZWQ8
RWRpdG9yQ2xpZW50R2RrPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIHNob3VsZERlbGV0
ZVJhbmdlKFJhbmdlKik7CisgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dEZWxldGVJbnRlcmZh
Y2UoSFRNTEVsZW1lbnQqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCgpOworICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKTsKKyAgICB2aXJ0dWFsIGludCAgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKTsKKworICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKTsKKyAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopOworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OlJhbmdlKik7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZygpOworICAgIHZpcnR1YWwgdm9pZCBy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGlu
ZygpOworICAgIHZpcnR1YWwgdm9pZCByZWYoKSB7IFNoYXJlZDxFZGl0b3JDbGllbnRHZGs+Ojpy
ZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIHsgU2hhcmVkPEVkaXRvckNsaWVudEdk
az46OmRlcmVmKCk7IH0KKworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOiB0cz00IHN3PTQg
ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAko
cmV2aXNpb24gMTc3NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJBWE9i
amVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJDaHJv
bWVDbGllbnRHZGsuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJDU3RyaW5n
LmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCkBAIC00Miw4ICs0MSw2IEBACiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGlzdG9yeS5oIgogI2luY2x1ZGUgIkljb24uaCIK
LSNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJY29uTG9hZGVyLmgiCiAjaW5j
bHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2Uu
aCIKQEAgLTEyOCw5ICsxMjUsNiBAQAogdm9pZCBXZWJDb3JlOjpmaW5kU2VudGVuY2VCb3VuZGFy
eShVQ2hhciBjb25zdCosIGludCwgaW50LCBpbnQqLCBpbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KIGludCBXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgoVUNoYXIgY29uc3QqLCBpbnQs
IGludCwgYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1WZWN0b3I8Y2hhcj4gU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoTG9hZGVyICps
b2FkZXIsIERvY0xvYWRlciAqZG9jTG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBWZWN0b3I8Y2hhcj4oKTsgfQotfQogCiB2b2lkIEZyYW1lR2RrOjpmb2N1c1dpbmRvdygpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBGcmFtZUdkazo6dW5mb2N1c1dpbmRvdygpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQpAQCAtMTM5LDcgKzEzMyw2IEBACiBLSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZSogRnJhbWVHZGs6OmdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCAqKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJh
bWVHZGs6OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0ICopIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7IH0KIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIEZyYW1lR2RrOjpi
aW5kaW5nUm9vdE9iamVjdCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVdpZGdl
dCogRnJhbWVHZGs6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1l
bnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpIHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KIGJvb2wgRnJhbWVHZGs6OmNhblJlZG8oKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9CiBib29sIEZyYW1lR2RrOjpjYW5VbmRvKCkgY29uc3QgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogdm9pZCBGcmFtZUdkazo6cmVnaXN0ZXJDb21tYW5k
Rm9yUmVkbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9CkBAIC0xNDcsNyArMTQwLDYgQEAKIGJvb2wgRnJhbWVHZGs6OnNob3VsZEludGVycnVw
dEphdmFTY3JpcHQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQogdm9pZCBG
cmFtZUdkazo6cHJpbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIEtKUzo6QmluZGluZ3M6Oklu
c3RhbmNlKiBGcmFtZUdkazo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6cGFzc01vdXNlRG93
bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQog
dm9pZCBGcmFtZUdkazo6aXNzdWVDdXRDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2
b2lkIEZyYW1lR2RrOjppc3N1ZUNvcHlDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2
b2lkIEZyYW1lR2RrOjppc3N1ZVVuZG9Db21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CkBA
IC0xNjEsMzYgKzE1Myw4IEBACiBib29sIEZyYW1lR2RrOjp0b29sYmFyVmlzaWJsZSgpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIHZvaWQgRnJhbWVHZGs6Omlzc3VlVHJhbnNwb3Nl
Q29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogYm9vbCBGcmFtZUdkazo6Y2FuUGFzdGUo
KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIEZyYW1lR2RrOjpj
YW5Hb0JhY2tPckZvcndhcmQoaW50KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAw
OyB9CiB2b2lkIEZyYW1lR2RrOjppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQoKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVHZGs6OmlzTG9hZFR5cGVSZWxvYWQoKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotS1VSTCBGcmFtZUdkazo6b3JpZ2luYWxS
ZXF1ZXN0VVJMKCkgY29uc3QgeyByZXR1cm4gS1VSTCgpOyB9CiAKLXZvaWQgRnJhbWVHZGs6Omdv
QmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotaW50IEZy
YW1lR2RrOjpnZXRIaXN0b3J5TGVuZ3RoKCkge25vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9
Ci1LVVJMIEZyYW1lR2RrOjpoaXN0b3J5VVJMKGludCBkaXN0YW5jZSkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gS1VSTCgpOyB9Ci0KLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRHZGs6OndpbmRv
d1JlY3QoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotdm9pZCBD
aHJvbWVDbGllbnRHZGs6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByKSB7bm90SW1w
bGVtZW50ZWQoKTsgfQotRmxvYXRSZWN0IENocm9tZUNsaWVudEdkazo6cGFnZVJlY3QoKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotZmxvYXQgQ2hyb21lQ2xpZW50
R2RrOjpzY2FsZUZhY3RvcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDEuMDsgfQotdm9p
ZCBDaHJvbWVDbGllbnRHZGs6OmZvY3VzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIENo
cm9tZUNsaWVudEdkazo6dW5mb2N1cygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotV2ViQ29yZTo6
UGFnZSogQ2hyb21lQ2xpZW50R2RrOjpjcmVhdGVXaW5kb3coY29uc3QgRnJhbWVMb2FkUmVxdWVz
dCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVdlYkNvcmU6OlBhZ2UqIENocm9t
ZUNsaWVudEdkazo6Y3JlYXRlTW9kYWxEaWFsb2coY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdm9pZCBDaHJvbWVDbGllbnRHZGs6OnNob3co
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgQ2hyb21lQ2xpZW50R2RrOjpjYW5SdW5Nb2Rh
bCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIENocm9tZUNsaWVu
dEdkazo6cnVuTW9kYWwoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgQ2hyb21lQ2xpZW50
R2RrOjpzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1ib29s
IENocm9tZUNsaWVudEdkazo6dG9vbGJhcnNWaXNpYmxlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gZmFsc2U7IH0KLXZvaWQgQ2hyb21lQ2xpZW50R2RrOjpzZXRTdGF0dXNiYXJWaXNpYmxl
KGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBDaHJvbWVDbGllbnRHZGs6OnN0YXR1
c2JhclZpc2libGUoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBD
aHJvbWVDbGllbnRHZGs6OnNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQotYm9vbCBDaHJvbWVDbGllbnRHZGs6OnNjcm9sbGJhcnNWaXNpYmxlKCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgQ2hyb21lQ2xpZW50R2RrOjpzZXRN
ZW51YmFyVmlzaWJsZShib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgQ2hyb21lQ2xp
ZW50R2RrOjptZW51YmFyVmlzaWJsZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNl
OyB9Ci12b2lkIENocm9tZUNsaWVudEdkazo6c2V0UmVzaXphYmxlKGJvb2wpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCiAvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8gYWxs
b3cgRFJUIHRvIHJ1bik6ICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjMsNyArMTg3LDYgQEAKIGJvb2wgRnJhbWVHZGs6
OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mLCBjb25zdCBTZWxlY3Rpb24m
LCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIGJvb2wg
RnJhbWVHZGs6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiB2b2lkIEZyYW1lR2RrOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KFdlYkNvcmU6OlNlbGVjdGlvbiBjb25zdCYsIGJvb2wpIHsgfQotRnJhbWUqIEZyYW1lR2RrOjpj
cmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgRWxlbWVudCog
b3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKSB7IHJldHVybiAwOyB9CiAKIHZv
aWQgRnJhbWVHZGs6OnNhdmVEb2N1bWVudFN0YXRlKCkgeyB9CiB2b2lkIEZyYW1lR2RrOjpyZWdp
c3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+KSB7IH0K
QEAgLTIzNiwxNiArMTk5LDYgQEAKIAogdm9pZCBzeXN0ZW1CZWVwKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9CiAKLWJvb2wgQ2hlY2tJZlJlbG9hZGluZyhEb2NMb2FkZXIqKSB7IHJldHVybiBmYWxz
ZTsgfQotdGltZV90IENhY2hlT2JqZWN0RXhwaXJlc1RpbWUoRG9jTG9hZGVyKiwgUGxhdGZvcm1S
ZXNwb25zZSkgeyByZXR1cm4gMDsgfQotdm9pZCBDaGVja0NhY2hlT2JqZWN0U3RhdHVzKERvY0xv
YWRlciosIENhY2hlZFJlc291cmNlKikgeyB9Ci1EZXByZWNhdGVkU3RyaW5nIFJlc3BvbnNlVVJM
KFBsYXRmb3JtUmVzcG9uc2UpIHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsgfQotYm9vbCBJ
c1Jlc3BvbnNlVVJMRXF1YWxUb1VSTChQbGF0Zm9ybVJlc3BvbnNlICwgY29uc3QgU3RyaW5nJiBV
UkwpIHsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIFJlc3BvbnNlSXNNdWx0aXBhcnQoUGxhdGZvcm1S
ZXNwb25zZSkgeyByZXR1cm4gZmFsc2U7IH0KLURlcHJlY2F0ZWRTdHJpbmcgUmVzcG9uc2VNSU1F
VHlwZShQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7IH0KLXZv
aWQgQ2FjaGVkUmVzb3VyY2U6OnNldFBsYXRmb3JtUmVzcG9uc2UoUGxhdGZvcm1SZXNwb25zZSkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIENhY2hlZFJlc291cmNlOjpzZXRBbGxEYXRhKFBs
YXRmb3JtRGF0YSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KIH0KIAogdm9pZCBXaWRnZXQ6OnNl
dEVuYWJsZWQoYm9vbCkgeyB9CkBAIC0zNTMsMTMgKzMwNiwxMyBAQAogdm9pZCBSZW5kZXJUaGVt
ZUdkazo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCogZSkgY29uc3Qge30KIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLWJvb2wgUmVzb3VyY2VMb2FkZXI6OmxvYWRz
QmxvY2tlZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKIEljb246Oklj
b24oKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIEljb246On5JY29uKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9CiBQYXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFBhc3NSZWZQdHI8SWNvbj4o
bmV3IEljb24oKSk7IH0KIHZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCisKIEZsb2F0UmVjdCBGb250OjpzZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYs
IGNvbnN0IEludFBvaW50JiwgaW50KSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogdm9p
ZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiwgY29uc3QgVGV4dFN0eWxlJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
MDsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCShyZXZpc2lvbiAxNzc0NikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDUwICsy
OSwyMCBAQAogI2RlZmluZSBGcmFtZUdka19IXwogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgor
I2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1ZGUgIkZvcm1EYXRhLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1l
R2RrOwotY2xhc3MgRm9ybURhdGE7CitjbGFzcyBFZGl0b3JDbGllbnQ7CiAKLWNsYXNzIEZyYW1l
R2RrQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5GcmFtZUdka0NsaWVudCgpIHt9Owog
Ci0gICAgdmlydHVhbCB2b2lkIHNldEZyYW1lKGNvbnN0IEZyYW1lR2RrKikgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIG9wZW5VUkwoY29uc3QgS1VSTCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3VibWl0Rm9ybShjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYsIGNvbnN0IEZvcm1E
YXRhKikgPSAwOwotfTsKLQotY2xhc3MgRnJhbWVHZGtDbGllbnREZWZhdWx0IDogcHVibGljIEZy
YW1lR2RrQ2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljICBSZXNv
dXJjZUhhbmRsZUNsaWVudCAKLXsKLXB1YmxpYzoKLQotICAgIEZyYW1lR2RrQ2xpZW50RGVmYXVs
dCgpOwotICAgIHZpcnR1YWwgfkZyYW1lR2RrQ2xpZW50RGVmYXVsdCgpOwotCi0gICAgLy8gRnJh
bWVHZGtDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWUoY29uc3QgRnJhbWVHZGsqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgb3BlblVSTChjb25zdCBLVVJMJik7Ci0gICAgdmlydHVhbCB2b2lk
IHN1Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBjb25zdCBGb3Jt
RGF0YSopOwotCi0gICAgLy8gUmVzb3VyY2VIYW5kbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjZWl2ZWRSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIFBsYXRmb3JtUmVzcG9uc2UpOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIq
LCBpbnQpOwotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZEFsbERhdGEoUmVzb3VyY2VIYW5kbGUq
LCBQbGF0Zm9ybURhdGEpOwotCi1wcml2YXRlOgotICAgIEZyYW1lR2RrKiBtX2ZyYW1lOwotICAg
IGJvb2wgbV9iZWdpbkNhbGxlZCA6IDE7Ci0KLX07Ci0KIGNsYXNzIEZyYW1lR2RrIDogcHVibGlj
IEZyYW1lIHsKIHB1YmxpYzoKICAgICBGcmFtZUdkayhQYWdlKiwgRWxlbWVudCosIFBhc3NSZWZQ
dHI8RWRpdG9yQ2xpZW50Pik7CkBAIC04MCwxMCArNTAsNyBAQAogICAgIHZpcnR1YWwgfkZyYW1l
R2RrKCk7CiAKICAgICB2b2lkIGhhbmRsZUdka0V2ZW50KEdka0V2ZW50Kik7Ci0gICAgdmlydHVh
bCB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIEV2ZW50Kik7Ci0gICAg
dmlydHVhbCB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBFdmVudCop
OwogCi0gICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQ2xvc2UoKTsKIApAQCAtMTA5LDcgKzc2LDYgQEAKICAgICB2aXJ0
dWFsIFJhbmdlKiBtYXJrZWRUZXh0UmFuZ2UoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgU3RyaW5n
IGluY29taW5nUmVmZXJyZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQo
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG1pbWVUeXBlRm9yRmlsZU5hbWUoY29uc3Qg
U3RyaW5nJikgY29uc3Q7CiAKQEAgLTExOCw5ICs4NCw2IEBACiAKICAgICB2aXJ0dWFsIGJvb2wg
bGFzdEV2ZW50SXNNb3VzZVVwKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFzc1N1YmZy
YW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgJiwgRnJhbWUq
IHN1YmZyYW1lID0gMCk7Ci0gICAgdmlydHVhbCBib29sIHBhc3NXaGVlbEV2ZW50VG9DaGlsZFdp
ZGdldChOb2RlKik7Ci0KICAgICB2aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNv
bnN0OwogCiAgICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0RW1iZWRJbnN0
YW5jZUZvcldpZGdldChXaWRnZXQqKTsKQEAgLTE0NCwxMCArMTA3LDYgQEAKICAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgcGFydENsZWFyZWRJbkJlZ2luKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuR29CYWNr
T3JGb3J3YXJkKGludCBkaXN0YW5jZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdvQmFja09y
Rm9yd2FyZChpbnQgZGlzdGFuY2UpOwotICAgIHZpcnR1YWwgaW50IGdldEhpc3RvcnlMZW5ndGgo
KTsKLSAgICB2aXJ0dWFsIEtVUkwgaGlzdG9yeVVSTChpbnQgZGlzdGFuY2UpOwogCiAgICAgdmly
dHVhbCB2b2lkIGhhbmRsZWRPbmxvYWRFdmVudHMoKTsKIApAQCAtMTU4LDIwICsxMTcsMTIgQEAK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwogCiAgICAgYm9v
bCBrZXlQcmVzcyhjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmKTsKLSAgICB2aXJ0dWFsIEtV
Ukwgb3JpZ2luYWxSZXF1ZXN0VVJMKCkgY29uc3Q7CiAKICAgICBJbnRSZWN0IGZyYW1lR2VvbWV0
cnkoKSBjb25zdDsKICAgICB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOwot
ICAgIHZpcnR1YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiByZWZlcnJlcik7Ci0g
ICAgV2lkZ2V0KiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50
KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKIAotICAgIEZyYW1lR2RrQ2xpZW50
KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQogCiBwcml2YXRlOgotICAgIHZp
cnR1YWwgYm9vbCBpc0xvYWRUeXBlUmVsb2FkKCk7Ci0gICAgdmlydHVhbCBib29sIHBhc3NNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCopOwotCi0gICAgRnJhbWVHZGtDbGllbnQqIG1fY2xp
ZW50OwogICAgIEdka0RyYXdhYmxlKiBtX2RyYXdhYmxlOwogfTsKIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvQ2hyb21lQ2xpZW50R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9DaHJvbWVDbGllbnRHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvQ2hyb21lQ2xpZW50R2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRHZGsuaCIKKworI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKworCisj
ZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklN
UExFTUVOVEVEOiAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgwKQorCitu
YW1lc3BhY2UgV2ViQ29yZQoreworCisgICAgCitDaHJvbWVDbGllbnRHZGs6OkNocm9tZUNsaWVu
dEdkaygpCit7Cit9CisKKworQ2hyb21lQ2xpZW50R2RrOjp+Q2hyb21lQ2xpZW50R2RrKCkKK3sK
K30KKworCit2b2lkIENocm9tZUNsaWVudEdkazo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitGbG9hdFJlY3QgQ2hy
b21lQ2xpZW50R2RrOjp3aW5kb3dSZWN0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKK30KKworCitGbG9hdFJlY3QgQ2hyb21lQ2xpZW50R2RrOjpw
YWdlUmVjdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gd2luZG93UmVj
dCgpOworfQorCisKK2Zsb2F0IENocm9tZUNsaWVudEdkazo6c2NhbGVGYWN0b3IoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDE7Cit9CisKKwordm9pZCBDaHJvbWVDbGll
bnRHZGs6OmZvY3VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgQ2hy
b21lQ2xpZW50R2RrOjp1bmZvY3VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisK
K1BhZ2UqIENocm9tZUNsaWVudEdkazo6Y3JlYXRlV2luZG93KGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKworUGFn
ZSogQ2hyb21lQ2xpZW50R2RrOjpjcmVhdGVNb2RhbERpYWxvZyhjb25zdCBGcmFtZUxvYWRSZXF1
ZXN0JikKK3sKKyAgICByZXR1cm4gMDsKK30KKworCit2b2lkIENocm9tZUNsaWVudEdkazo6c2hv
dygpCit7CisgICAgZm9jdXMoKTsKK30KKworCitib29sIENocm9tZUNsaWVudEdkazo6Y2FuUnVu
TW9kYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CisKK3ZvaWQgQ2hyb21lQ2xpZW50R2RrOjpydW5Nb2RhbCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworCit2b2lkIENocm9tZUNsaWVudEdkazo6c2V0VG9vbGJhcnNWaXNpYmxlKGJv
b2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitib29sIENocm9tZUNsaWVudEdk
azo6dG9vbGJhcnNWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworCit2b2lkIENocm9tZUNsaWVudEdkazo6c2V0U3RhdHVzYmFyVmlzaWJs
ZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBDaHJvbWVDbGll
bnRHZGs6OnN0YXR1c2JhclZpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCisKK3ZvaWQgQ2hyb21lQ2xpZW50R2RrOjpzZXRTY3JvbGxiYXJz
VmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBDaHJv
bWVDbGllbnRHZGs6OnNjcm9sbGJhcnNWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQgQ2hyb21lQ2xpZW50R2RrOjpzZXRNZW51
YmFyVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgQ2hy
b21lQ2xpZW50R2RrOjptZW51YmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50R2RrOjpzZXRSZXNpemFi
bGUoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9TY3JlZW5HZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1NjcmVlbkdkay5jcHAJKHJldmlzaW9uIDE3NzExKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvU2NyZWVuR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MjIsMjcgKzIyLDY4IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLS8vIEZJWE1FOiBzaG91bGQg
YmUgcmVuYW1lZCB0byBTY3JlZW5DbGllbnRHZGsuY3BwCi0KICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTY3JlZW5DbGllbnRHZGsuaCIKLQorI2luY2x1ZGUgIlNjcmVlbi5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXaWRnZXQu
aCIKKyNpbmNsdWRlICJGcmFtZUdkay5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogCi0jZGVmaW5lIG5vdEltcGxlbWVu
dGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIiVzIEZJWE1FOiBVTklNUExFTUVOVEVEICVzOiVk
XG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdoaWxlKDAp
CisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBV
TklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJFVFRZX0ZV
TkNUSU9OX18pOyB9IHdoaWxlKDApCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW50IFNjcmVl
bkNsaWVudEdkazo6ZGVwdGgoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAzMjsgfQotaW50
IFNjcmVlbkNsaWVudEdkazo6ZGVwdGhQZXJDb21wb25lbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiA4OyB9CitzdGF0aWMgR2RrRHJhd2FibGUqIGRyYXdhYmxlRm9yV2lkZ2V0KFdpZGdl
dCogd2lkZ2V0KQoreworICAgIC8vZm9yIG5vdyB0aGlzIGlzIHRydWUKKyAgICByZXR1cm4gd2lk
Z2V0LT5kcmF3YWJsZSgpOworfQogCi1ib29sIFNjcmVlbkNsaWVudEdkazo6aXNNb25vY2hyb21l
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK0Zsb2F0UmVjdCBzY3JlZW5S
ZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IGRyYXdh
YmxlRm9yV2lkZ2V0KHdpZGdldCk7CisgICAgaWYgKCFkcmF3YWJsZSkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX2RyYXdhYmxlX2dldF9z
Y3JlZW4oZHJhd2FibGUpOworICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgZ2RrX3NjcmVlbl9n
ZXRfd2lkdGgoc2NyZWVuKSwgZ2RrX3NjcmVlbl9nZXRfaGVpZ2h0KHNjcmVlbikpOworfQogCi1G
bG9hdFJlY3QgU2NyZWVuQ2xpZW50R2RrOjpyZWN0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gRmxvYXRSZWN0KCk7IH0KLUZsb2F0UmVjdCBTY3JlZW5DbGllbnRHZGs6OnVzYWJsZVJlY3Qo
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBGbG9hdFJlY3QoKTsgfQoraW50IHNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQoreworICAgIEdka0RyYXdhYmxlKiBkcmF3
YWJsZSA9IGRyYXdhYmxlRm9yV2lkZ2V0KHdpZGdldCk7CisgICAgaWYgKCFkcmF3YWJsZSkKKyAg
ICAgICAgcmV0dXJuIDg7CisgICAgaW50IGRlcHRoID0gIGdka19kcmF3YWJsZV9nZXRfZGVwdGgo
ZHJhd2FibGUpOworICAgIGlmKCBkZXB0aCA+IDE2ICkKKyAgICAgICAgcmV0dXJuIDg7CisgICAg
aWYoIGRlcHRoID09IDE2IHx8IGRlcHRoID09IDE1ICkKKyAgICAgICAgcmV0dXJuIDU7CisgICAg
cmV0dXJuIDg7Cit9CiAKK2ludCBzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBH
ZGtEcmF3YWJsZSogZHJhd2FibGUgPSBkcmF3YWJsZUZvcldpZGdldCh3aWRnZXQpOworICAgIGlm
ICghZHJhd2FibGUpCisgICAgICAgIHJldHVybiAzMjsKKyAgICBpbnQgZGVwdGggPSBnZGtfZHJh
d2FibGVfZ2V0X2RlcHRoKGRyYXdhYmxlKTsKIH0KKworYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUo
V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgcmV0dXJuIChzY3JlZW5EZXB0aCh3aWRnZXQpID09IDEp
OworfQorCitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOworfQorCit9CisvLyB2aW06dHM9NDpldApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRWRpdG9yQ2xpZW50R2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9FZGl0b3JDbGllbnRHZGsuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRWRpdG9yQ2xpZW50R2RrLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+IAorICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudEdkay5oIgorCisjaW5jbHVkZSA8c3Rk
aW8uaD4KKworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJG
SVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hp
bGUoMCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEVkaXRvckNsaWVudEdkazo6c2hv
dWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvckNsaWVudEdkazo6c2hvdWxkU2hvd0RlbGV0ZUlu
dGVyZmFjZShIVE1MRWxlbWVudCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVk
aXRvckNsaWVudEdkazo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvckNs
aWVudEdkazo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IEVkaXRvckNsaWVudEdkazo6c3BlbGxD
aGVja2VyRG9jdW1lbnRUYWcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50R2RrOjpzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29y
ZTo6UmFuZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIEVkaXRvckNsaWVudEdkazo6c2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5n
ZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgRWRpdG9yQ2xpZW50R2RrOjpzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OkNTU1N0eWxlRGVj
bGFyYXRpb24qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpSYW5nZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgRWRpdG9yQ2xpZW50R2RrOjpkaWRCZWdpbkVkaXRpbmcoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50R2RrOjpyZXNwb25kVG9DaGFuZ2Vk
Q29udGVudHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xp
ZW50R2RrOjpkaWRFbmRFZGl0aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9
CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFt
ZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3Bw
CShyZXZpc2lvbiAxNzc0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMzggKzI3LDM4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJGcmFtZUdkay5oIgotCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R2RrLmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWRp
dG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50R2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVQcml2
YXRlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2lu
Y2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5j
bHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHMuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5j
bHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlNTTEtleUdlbmVyYXRvci5oIgorI2luY2x1ZGUg
IkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNTTEtleUdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IlR5cGluZ0NvbW1hbmQuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAiRWRpdG9y
Q2xpZW50R2RrLmgiCiAKIC8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2Vi
S2l0CiAvLyBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIGFuZCBJJ20gbm90IHN1cmUgd2hlcmUK
QEAgLTc1LDczICs3NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhbWVHZGtDbGll
bnREZWZhdWx0OjpGcmFtZUdka0NsaWVudERlZmF1bHQoKQotICAgIDogUmVzb3VyY2VIYW5kbGVD
bGllbnQoKQotICAgICwgbV9mcmFtZSgwKQotICAgICwgbV9iZWdpbkNhbGxlZChmYWxzZSkKLXsK
LX0KIAotRnJhbWVHZGtDbGllbnREZWZhdWx0Ojp+RnJhbWVHZGtDbGllbnREZWZhdWx0KCkKLXsK
LX0KLQotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OnNldEZyYW1lKGNvbnN0IEZyYW1lR2Rr
KiBmcmFtZSkKLXsKLSAgICBtX2ZyYW1lID0gY29uc3RfY2FzdDxGcmFtZUdkayo+KGZyYW1lKTsK
LX0KLQotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6Om9wZW5VUkwoY29uc3QgS1VSTCYgdXJs
KQotewotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kaWRPcGVuVVJMKHVybCk7Ci0gICAgbV9iZWdp
bkNhbGxlZCA9IGZhbHNlOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSAg
ICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGxvYWRlciA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUo
cmVxdWVzdCwgdGhpcywgMCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGtDbGllbnREZWZhdWx0OjpzdWJt
aXRGb3JtKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEZvcm1E
YXRhKiBwb3N0RGF0YSkKLXsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7Ci0KLSAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtZXRo
b2QpOwotICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoKnBvc3REYXRhKTsKLQotICAgIFJlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gbG9hZGVyID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShyZXF1ZXN0LCB0
aGlzLCAwKTsKLX0KLQotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OnJlY2VpdmVkUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBQbGF0Zm9ybVJlc3BvbnNlKQotewotICAgIC8vIG5vLW9wCi19
Ci0KLXZvaWQgRnJhbWVHZGtDbGllbnREZWZhdWx0OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhh
bmRsZSogam9iLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghbV9i
ZWdpbkNhbGxlZCkgewotICAgICAgICBtX2JlZ2luQ2FsbGVkID0gdHJ1ZTsKLQotI2lmIDAgIC8v
IEZJWE1FOiBUaGlzIGlzIGZyb20gUXQgdmVyc2lvbiwgbmVlZCB0byBiZSByZW1vdmVkIG9yIEdk
ayBlcXVpdmFsZW50IHdyaXR0ZW4KLSAgICAgICAgLy8gQXNzaWduIGNvcnJlY3QgbWltZXR5cGUg
X2JlZm9yZV8gY2FsbGluZyBiZWdpbigpIQotICAgICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
KiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgICAgICBpZiAoZCkgewotICAgICAgICAgICAg
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9mcmFtZS0+cmVzb3VyY2VSZXF1ZXN0KCkpOwotICAg
ICAgICAgICAgcmVxdWVzdC5tX3Jlc3BvbnNlTUlNRVR5cGUgPSBkLT5tX21pbWV0eXBlOwotICAg
ICAgICAgICAgbV9mcmFtZS0+c2V0UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmJlZ2luKGpvYi0+dXJsKCkpOwot
ICAgIH0KLQotICAgIG1fZnJhbWUtPmxvYWRlcigpLT53cml0ZShkYXRhLCBsZW5ndGgpOwotfQot
Ci12b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6cmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlSGFu
ZGxlKiBqb2IsIFBsYXRmb3JtRGF0YSBkYXRhKQotewotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5l
bmQoKTsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7Ci19Ci0KIHN0YXRpYyB2b2lkIGRvU2Ny
b2xsKGNvbnN0IFJlbmRlck9iamVjdCogciwgZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCiB7
CiAgICAgLy8gRklYTUU6IFRoZSBzY3JvbGxpbmcgZG9uZSBoZXJlIHNob3VsZCBiZSBkb25lIGlu
IHRoZSBkZWZhdWx0IGhhbmRsZXJzCkBAIC0xNjEsNyArOTUsOCBAQAogfQogCiBGcmFtZUdkazo6
RnJhbWVHZGsoR2RrRHJhd2FibGUqIGdka2RyYXdhYmxlKQotICAgIDogRnJhbWUobmV3IFBhZ2Uo
bmV3IENocm9tZUNsaWVudEdkaygpKSwgMCwgMCksIG1fZHJhd2FibGUoZ2RrZHJhd2FibGUpCisg
ICAgOiBGcmFtZShuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKCkpLDAsbmV3IEVkaXRvckNs
aWVudEdkaygpKQorICAgICwgbV9kcmF3YWJsZShnZGtkcmF3YWJsZSkKIHsKICAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3M7CiAgICAgc2V0dGluZ3MtPnNldEF1dG9Mb2FkSW1h
Z2VzKHRydWUpOwpAQCAtMTc1LDE1ICsxMTAsMTQgQEAKICAgICBzZXR0aW5ncy0+c2V0U2Fuc1Nl
cmlmRm9udE5hbWUoIkFyaWFsIik7CiAgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udE5hbWUoIkNv
dXJpZXIiKTsKICAgICBzZXR0aW5ncy0+c2V0U3RkRm9udE5hbWUoIkFyaWFsIik7CisgICAgc2V0
dGluZ3MtPnNldElzSmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7CiAgICAgc2V0U2V0dGluZ3Moc2V0
dGluZ3MpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG5ldyBGcmFtZVZpZXcodGhpcyk7CiAgICAg
c2V0Vmlldyh2aWV3KTsKICAgICBJbnRSZWN0IGdlb20gPSBmcmFtZUdlb21ldHJ5KCk7CiAgICAg
dmlldy0+cmVzaXplKGdlb20ud2lkdGgoKSwgZ2VvbS5oZWlnaHQoKSk7CiAgICAgdmlldy0+U2Ny
b2xsVmlldzo6c2V0RHJhd2FibGUoZ2RrZHJhd2FibGUpOwotCi0gICAgbV9jbGllbnQgPSBuZXcg
RnJhbWVHZGtDbGllbnREZWZhdWx0KCk7Ci0gICAgbV9jbGllbnQtPnNldEZyYW1lKHRoaXMpOwor
ICAgIGxvYWRlcigpLT5zZXRDbGllbnQobmV3IEZyYW1lTG9hZGVyQ2xpZW50R2RrKHRoaXMpKTsK
IH0KIAogRnJhbWVHZGs6OkZyYW1lR2RrKFBhZ2UqIHBhZ2UsIEVsZW1lbnQqIGVsZW1lbnQsIFBh
c3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3JDbGllbnQpCkBAIC0xOTIsOCArMTI2LDYgQEAK
ICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3M7CiAgICAgc2V0dGluZ3MtPnNl
dEF1dG9Mb2FkSW1hZ2VzKHRydWUpOwogICAgIHNldFNldHRpbmdzKHNldHRpbmdzKTsKLSAgICBt
X2NsaWVudCA9IG5ldyBGcmFtZUdka0NsaWVudERlZmF1bHQoKTsKLSAgICBtX2NsaWVudC0+c2V0
RnJhbWUodGhpcyk7CiB9CiAKIEZyYW1lR2RrOjp+RnJhbWVHZGsoKQpAQCAtMjAyLDIxICsxMzQs
NiBAQAogfQogCiAKLXZvaWQgRnJhbWVHZGs6OnVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJl
cXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIEV2ZW50KikKLXsKLSAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCA9IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCk7Ci0KLSAgICBpZiAo
IWNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGllbnQoKS0+b3BlblVSTChyZXF1
ZXN0LnVybCgpKTsKLX0KLQotU3RyaW5nIEZyYW1lR2RrOjp1c2VyQWdlbnQoKSBjb25zdAotewot
ICAgIHJldHVybiAiTW96aWxsYS81LjAgKFBDOyBVOyBJbnRlbDsgTGludXg7IGVuKSBBcHBsZVdl
YktpdC80MjArIChLSFRNTCwgbGlrZSBHZWNrbykiOwotfQotCiB2b2lkIEZyYW1lR2RrOjpydW5K
YXZhU2NyaXB0QWxlcnQoU3RyaW5nIGNvbnN0JiBtZXNzYWdlKQogewogfQpAQCAtMjI2LDkgKzE0
Myw2IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRnJhbWVHZGs6OnNldFRpdGxlKGNv
bnN0IFN0cmluZyAmdGl0bGUpCi17Ci19CiAKIHZvaWQgRnJhbWVHZGs6OmhhbmRsZUdka0V2ZW50
KEdka0V2ZW50KiBldmVudCkKIHsKQEAgLTM4NiwyNCArMzAwLDYgQEAKICAgICByZXR1cm4gSW50
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotYm9vbCBGcmFtZUdkazo6cGFzc1doZWVs
RXZlbnRUb0NoaWxkV2lkZ2V0KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRl
cmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBXaWRnZXQqIHdpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRl
cldpZGdldCo+KHJlbmRlcmVyKS0+d2lkZ2V0KCk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KIAotYm9vbCBGcmFtZUdkazo6cGFz
c1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1l
diwgRnJhbWUqKQotewotICAgIGlmIChtZXYudGFyZ2V0Tm9kZSgpID09IDApCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KIAogfQpJbmRleDogV2ViQ29yZS9Qcm9q
ZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvUHJvamVjdHMv
Z2RrL3dlYmNvcmUtZ2RrLmJrbAkocmV2aXNpb24gMTc3NDYpCisrKyBXZWJDb3JlL1Byb2plY3Rz
L2dkay93ZWJjb3JlLWdkay5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw5IEBACiAg
ICAgICAgIDxjb21tYW5kPmJhc2ggLWMgInRvdWNoIC5EZXJpdmVkU291cmNlcyI8L2NvbW1hbmQ+
CiAgICAgPC9hY3Rpb24+CiAKLSAgICA8ZGxsIGlkPSJ3ZWJjb3JlLWdkayIgdGVtcGxhdGU9Indl
YmNvcmVfYmFzZSxmcmVldHlwZSxndGssY3VybCxjYWlybyxzcWxpdGUzIj4KLSAgICAgICAgPCEt
LSBGSVhNRTogY3JlYXRlIGEgZGVidWcgb3B0aW9uIGFuZCBzZXQgdGhlc2UgYWNjb3JkaW5nbHkg
LS0+Ci0gICAgICAgIDwhLS0gY2hlY2sgZm9yIHVuZGVmaW5lZCBzeW1ib2xzIGZvciBkZWJ1Z2dp
bmcgcmVhc29ucyAtLT4KLQorICAgIDxkbGwgaWQ9IndlYmNvcmUtZ2RrIiB0ZW1wbGF0ZT0id2Vi
Y29yZV9iYXNlLHdlYmNvcmVfY3VybCxmcmVldHlwZSxnZGssY3VybCxjYWlybyxzcWxpdGUzIj4K
Kwk8IS0tIEZJWE1FOiBjcmVhdGUgYSBkZWJ1ZyBvcHRpb24gYW5kIHNldCB0aGVzZSBhY2NvcmRp
bmdseSAtLT4KKwk8IS0tIGNoZWNrIGZvciB1bmRlZmluZWQgc3ltYm9scyBmb3IgZGVidWdnaW5n
IHJlYXNvbnMgLS0+CiAgICAgICAgIDxwcmUtYnVpbGQtdGFyZ2V0Pi5EZXJpdmVkU291cmNlczwv
cHJlLWJ1aWxkLXRhcmdldD4KICAgICAgICAgPGRpcm5hbWU+LjwvZGlybmFtZT4KICAgICAgICAg
PHBpYz5vbjwvcGljPgpAQCAtNDMsNDggKzQyLDQ3IEBACiAgICAgICAgIDxkZWJ1Zy1pbmZvPm9u
PC9kZWJ1Zy1pbmZvPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vZ2RrPC9p
bmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vbmV0d29yay9nZGs8
L2luY2x1ZGU+Ci0gICAgICAgIDxkZWZpbmU+QlVJTERJTkdfR0RLX188L2RlZmluZT4KLSAgICAg
ICAgPGRlZmluZT5CVUlMRElOR19DQUlST19fPC9kZWZpbmU+Ci0gICAgICAgIDxpbmNsdWRlPnBs
YXRmb3JtL2dkazwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+cGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm88L2luY2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2Rldmlj
ZS9jYWlybzwvaW5jbHVkZT4KLSAgICAgICAgPGRlZmluZT5YUEFUSF9TVVBQT1JUPC9kZWZpbmU+
Ci0gICAgICAgIDwhLS0gZ2RrIGJ1aWxkIGJyb2tlbiB3aXRoIHdpdGhvdXQgTkRFQlVHIGRlZmlu
ZWQgLS0+Ci0gICAgICAgIDxkZWZpbmU+TkRFQlVHPC9kZWZpbmU+CisgICAgCTxkZWZpbmU+QlVJ
TERJTkdfR0RLX188L2RlZmluZT4KKyAgICAJPGRlZmluZT5CVUlMRElOR19DQUlST19fPC9kZWZp
bmU+CisJCTxpbmNsdWRlPnBsYXRmb3JtL2dkazwvaW5jbHVkZT4KKwkgICAgPGluY2x1ZGU+JChT
UkNESVIpL2xvYWRlci9nZGs8L2luY2x1ZGU+CisJCTxpbmNsdWRlPnBsYXRmb3JtL2NhaXJvPC9p
bmNsdWRlPgorICAgIAk8ZGVmaW5lPlhQQVRIX1NVUFBPUlQ8L2RlZmluZT4KICAKLSAgICAgICAg
PHNvdXJjZXM+Ci0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNwcAotICAg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3Jt
L2dkay9Gb250Q2FjaGVHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udERhdGFH
ZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udEdkay5jcHAKLSAgICAgICAgICAg
IHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcAotICAgICAgICAgICAgcGxhdGZv
cm0vZ2RrL0ZyYW1lR2RrLmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0dseXBoTWFwR2Rr
LmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAotICAgICAgICAg
ICAgcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9n
ZGsvUGFnZUdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVH
ZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCi0gICAg
ICAgICAgICBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKLSAgICAgICAgICAgIHBsYXRm
b3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1N5
c3RlbVRpbWVMaW51eC5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAKLSAg
ICAgICAgICAgIHBsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2dkay9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2dkay9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCi0KLSAgICAgICAgICAgICQoV0VCQ09SRV9T
T1VSQ0VTX1BMQVRGT1JNX0NBSVJPKQotICAgICAgICA8L3NvdXJjZXM+Ci0KLSAgICAgICAgPGNs
ZWFuLWZpbGVzPgotICAgICAgICAgICAgLkRlcml2ZWRTb3VyY2VzCi0gICAgICAgICAgICBybSAt
cmYgJChTUkNESVIpL0Rlcml2ZWRTb3VyY2VzCi0gICAgICAgICAgICBybSAtcmYgJChTUkNESVIp
L2luY2x1ZGUvSmF2YVNjcmlwdENvcmUKLSAgICAgICAgICAgIHJtIC1yZiAkKFNSQ0RJUikvUHJv
amVjdHMvZ2RrL29iai1nbnUKLSAgICAgICAgPC9jbGVhbi1maWxlcz4KKyAgICAgICAgPHNvdXJj
ZXM+CQkKKyAgICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19DQUlST19CSU5ESU5HUykKKyAgICAg
ICAgICBsb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyR2RrLmNwcAorICAgICAgICAgIGxvYWRlci9nZGsv
RnJhbWVMb2FkZXJDbGllbnRHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ2Rr
L0ltYWdlR2RrLmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9DaHJvbWVDbGllbnRHZGsuY3Bw
CisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0Nvb2tpZUphckdkay5jcHAKKyAgICAgICAgICBwbGF0
Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9FZGl0b3JDbGll
bnRHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAKKyAgICAg
ICAgICBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2Rr
L0ZvbnRHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsu
Y3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAorICAgICAgICAgIHBsYXRm
b3JtL2dkay9HbHlwaE1hcEdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvS2V5RXZlbnRH
ZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCisgICAgICAg
ICAgcGxhdGZvcm0vZ2RrL1BhZ2VHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL1JlbmRl
clRoZW1lR2RrLmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1lbnVHZGsu
Y3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL1NjcmVlbkdkay5jcHAKKyAgICAgICAgICBwbGF0
Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvU2hhcmVk
VGltZXJMaW51eC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvU3lzdGVtVGltZUxpbnV4LmNw
cAorICAgICAgICAgIHBsYXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisgICAgICAg
ICAgcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2Rr
L1dpZGdldEdkay5jcHAKKwkJPC9zb3VyY2VzPgorCQk8Y2xlYW4tZmlsZXM+CisJCS5EZXJpdmVk
U291cmNlcworCQlybSAtcmYgJChTUkNESVIpL0Rlcml2ZWRTb3VyY2VzCisJCXJtIC1yZiAkKFNS
Q0RJUikvaW5jbHVkZS9KYXZhU2NyaXBDb3JlCisJCXJtIC1yZiAkKFNSQ0RJUikvUHJvamVjdHMv
Z2RrL29iai1nbnUKKwkJPC9jbGVhbi1maWxlcz4KICAgICAgICAgPCEtLUhBQ0sgYmxvY2sgZGVw
ZW5kZW5jaWVzIG9uIHRoZSBwaG9ueSB0YXJnZXQgLS0+CiAgICAgPC9kbGw+CiA8L21ha2VmaWxl
PgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE3NzQ2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw0NSBAQAorMjAwNi0xMS0xMyAgTWljaGFlbCBFbW1lbCAgPG1pa2UuZW1tZWxA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKworICAgICAgICBGaXgg
TGludXgvR2RrIGJ1aWxkIGlzc3VlcworCQlhZGQgY3VybCBsb2FkZXIgCisKKyAgICAgICAgKiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisgICAgICAg
ICogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKKyAgICAg
ICAgKiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAorICAgICAgICAq
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlLmgKKyAgICAgICAgKiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKyAg
ICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdl
ci5oCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRs
ZUN1cmwuY3BwCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyLmNwcAorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAorICAgICAgICAqIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0N1cnNvckdkay5jcHAKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dkay9D
aHJvbWVDbGllbnRHZGsuaAorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0VkaXRvckNs
aWVudEdkay5oCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKKyAgICAg
ICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dkay9DaHJvbWVDbGllbnRHZGsuY3BwCisgICAgICAgICog
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAorICAgICAgICAqIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0VkaXRvckNsaWVudEdkay5jcHAKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9GcmFtZUdkay5jcHAKKyAgICAgICAgKiBXZWJDb3JlL1Byb2plY3RzL2dkay93ZWJjb3Jl
LWdkay5ia2wKKyAgICAgICAgKiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorICAgICAgICAq
IFdlYkNvcmUvd2ViY29yZS1iYXNlLmJrbAorICAgICAgICAqIFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAorICAgICAgICAqIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKKyAg
ICAgICAgKiBXZWJDb3JlL2xvYWRlci9jdXJsL05hdmlnYXRpb25BY3Rpb25DdXJsLmNwcAorICAg
ICAgICAqIFdlYkNvcmUvbG9hZGVyL2N1cmwvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAorICAgICAg
ICAqIFdlYkNvcmUvbG9hZGVyL2N1cmwvTG9hZGVyRnVuY3Rpb25zQ3VybC5jcHAKKyAgICAgICAg
KiBXZWJDb3JlL2xvYWRlci9jdXJsL0ZyYW1lTG9hZGVyQ3VybC5jcHAKKyAgICAgICAgKiBXZWJD
b3JlL2xvYWRlci9jdXJsL01haW5SZXNvdXJjZUxvYWRlckN1cmwuY3BwCisgICAgICAgICogV2Vi
Q29yZS9sb2FkZXIvY3VybC9Eb2N1bWVudExvYWRlckN1cmwuY3BwCisgICAgICAgICogV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAorICAgICAgICAqIFdlYkNvcmUvbG9hZGVyL2dkay9G
cmFtZUxvYWRlckNsaWVudEdkay5jcHAKKyAgICAgICAgKiBXZWJDb3JlL2xvYWRlci9nZGsvRnJh
bWVMb2FkZXJHZGsuY3BwCisgICAgICAgICogV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVy
Q2xpZW50R2RrLmgKKwogMjAwNi0xMS0xMiAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkBrZGUu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAkocmV2aXNpb24gMTc3NDYpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1OSArMSw2MSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiA/PgogPG1ha2Vm
aWxlPgorICAgICAgICAKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
REVSSVZFRFNPVVJDRVMiPgorICAgICAgICAKKyAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9Db2xvckRhdGEuYwogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0NTU0dyYW1tYXIu
Y3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvQ29sb3JEYXRhLmMKICAgICAgICAg
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9IVE1MRW50aXR5TmFtZXMuYwogICAgICAgICBEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0hUTUxOYW1lcy5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0F0dHIuY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNDYW52YXNH
cmFkaWVudC5jcHAKKyAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NhbnZhc1BhdHRl
cm4uY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNDaGFyYWN0ZXJE
YXRhLmNwcAorICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ291bnRlci5jcHAKICAg
ICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAogICAg
ICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ1NTUnVsZS5jcHAKICAgICAgICAgRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU0NTU1J1bGVMaXN0LmNwcAogICAgICAgICBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0NTU1ZhbHVlLmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTQ1NTVmFsdWVMaXN0LmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ2Fu
dmFzR3JhZGllbnQuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNDYW52YXNQ
YXR0ZXJuLmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ2hhcmFj
dGVyRGF0YS5jcHAKLSAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NvdW50ZXIuY3Bw
CisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEb2N1bWVudC5jcHAKKyAgICAgICAg
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RvY3VtZW50RnJhZ21lbnQuY3BwCisgICAgICAgIERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEb2N1bWVudFR5cGUuY3BwCiAgICAgICAgIERlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNET01JbXBsZW1lbnRhdGlvbi5jcHAKICAgICAgICAgRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0RPTVBhcnNlci5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0RPTVdpbmRvdy5jcHAKLSAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0Rv
Y3VtZW50LmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRG9jdW1lbnRGcmFn
bWVudC5jcHAKLSAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RvY3VtZW50VHlwZS5j
cHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0VsZW1lbnQuY3BwCiAgICAgICAg
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNFbnRpdHkuY3BwCiAgICAgICAgIERlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNFdmVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U0hUTUxBbmNob3JFbGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
SFRNTEFwcGxldEVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNI
VE1MQXJlYUVsZW1lbnQuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1M
QlJFbGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEJhc2VF
bGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEJhc2VGb250
RWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxCbG9ja3F1
b3RlRWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxCb2R5
RWxlbWVudC5jcHAKKyAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxCUkVsZW1l
bnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MQnV0dG9uRWxlbWVu
dC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxDYW52YXNFbGVtZW50
LmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTERMaXN0RWxlbWVudC5j
cHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxEaXJlY3RvcnlFbGVtZW50
LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTERpdkVsZW1lbnQuY3Bw
CisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MRExpc3RFbGVtZW50LmNwcAog
ICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTERvY3VtZW50LmNwcAogICAgICAg
ICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MRmllbGRTZXRFbGVtZW50LmNwcAogICAgICAgICBEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEZvbnRFbGVtZW50LmNwcAogICAgICAgICBEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTSFRNTEZvcm1FbGVtZW50LmNwcAotICAgICAgICBEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTSFRNTEhSRWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0hUTUxIZWFkRWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0hUTUxIZWFkaW5nRWxlbWVudC5jcHAKKyAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0hUTUxIUkVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNIVE1MSHRtbEVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNI
VE1MSW1hZ2VFbGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRN
TElucHV0RWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxJ
c0luZGV4RWxlbWVudC5jcHAKLSAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxM
SUVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MTGFiZWxF
bGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTExlZ2VuZEVs
ZW1lbnQuY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MTElFbGVtZW50
LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTExpbmtFbGVtZW50LmNw
cAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTE1hcEVsZW1lbnQuY3BwCiAg
ICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MTWVudUVsZW1lbnQuY3BwCkBAIC02
MSw4ICs2Myw4IEBACiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MTW9kRWxl
bWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxPTGlzdEVsZW1l
bnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MT3B0R3JvdXBFbGVt
ZW50LmNwcAorICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTE9wdGlvbkVs
ZW1lbnQuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MUGFyYWdy
YXBoRWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxQYXJh
bUVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MUHJlRWxl
bWVudC5jcHAKQEAgLTc5LDEyICs4MSwxMiBAQAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTTm9kZUZpbHRlci5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05v
ZGVJdGVyYXRvci5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05vdGF0aW9u
LmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTT3ZlcmZsb3dFdmVudC5jcHAK
ICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5j
cHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1JhbmdlLmNwcAogICAgICAgICBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUmFuZ2VFeGNlcHRpb24uY3BwCiAgICAgICAgIERlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNUZXh0LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTVHJlZVdhbGtlci5jcHAKKyAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU092
ZXJmbG93RXZlbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNVSUV2ZW50
LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2hlZWxFdmVudC5jcHAKICAg
ICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1hNTFNlcmlhbGl6ZXIuY3BwCkBAIC05Niw5
ICs5OCwxOCBAQAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1hMaW5rTmFtZXMuY3Bw
CiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvWE1MTmFtZXMuY3BwCiAgICAgICAgIERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvWFBhdGhHcmFtbWFyLmNwcAorCiAgICAgPC9zZXQ+CisgICAg
PHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0tIVE1MIj4KKyAgICAgICAgCiAK
KyAgICA8L3NldD4KKyAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfTUlT
QyI+CisgICAgICAgIAorCisgICAgPC9zZXQ+CiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VC
Q09SRV9TT1VSQ0VTX1BBR0UiPgorICAgICAgICAKICAgICAgICAgcGFnZS9DaHJvbWUuY3BwCiAg
ICAgICAgIHBhZ2UvRE9NV2luZG93LmNwcAogICAgICAgICBwYWdlL0ZyYW1lLmNwcApAQCAtMTA3
LDMzICsxMTgsNDUgQEAKICAgICAgICAgcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRz
LmNwcAogICAgICAgICBwYWdlL1BhZ2UuY3BwCiAgICAgICAgIHBhZ2UvUGFnZVN0YXRlLmNwcAor
CiAgICAgPC9zZXQ+Ci0KICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
TE9BREVSIj4KLSAgICAgICAgbG9hZGVyL0NhY2hlLmNwcAotICAgICAgICBsb2FkZXIvQ2FjaGVk
Q1NTU3R5bGVTaGVldC5jcHAKLSAgICAgICAgbG9hZGVyL0NhY2hlZEltYWdlLmNwcAotICAgICAg
ICBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCi0gICAgICAgIGxvYWRlci9DYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlci5jcHAKLSAgICAgICAgbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAKLSAgICAg
ICAgbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCi0gICAgICAgIGxvYWRlci9Eb2NMb2Fk
ZXIuY3BwCi0gICAgICAgIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKLSAgICAgICAgbG9hZGVy
L0Zvcm1TdGF0ZS5jcHAKLSAgICAgICAgbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAotICAgICAgICBs
b2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAKLSAgICAgICAgbG9hZGVyL01haW5SZXNvdXJjZUxvYWRl
ci5jcHAKLSAgICAgICAgbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcAotICAg
ICAgICBsb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCi0gICAgICAgIGxvYWRlci9SZXF1ZXN0LmNw
cAotICAgICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCi0gICAgICAgIGxvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlci5jcHAKLSAgICAgICAgbG9hZGVyL1RleHREb2N1bWVudC5jcHAKLSAgICAg
ICAgbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwCi0gICAgICAgIGxvYWRlci9sb2FkZXIu
Y3BwCi0gICAgPC9zZXQ+CiAKKyAgICBsb2FkZXIvQ2FjaGUuY3BwCisgICAgbG9hZGVyL0NhY2hl
ZENTU1N0eWxlU2hlZXQuY3BwCisgICAgbG9hZGVyL0NhY2hlZEltYWdlLmNwcAorICAgIGxvYWRl
ci9DYWNoZWRSZXNvdXJjZS5jcHAKKyAgICBsb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIuY3BwCisgICAgbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAKKyAgICBsb2FkZXIvQ2FjaGVkWFNM
U3R5bGVTaGVldC5jcHAKKyAgICBsb2FkZXIvRG9jTG9hZGVyLmNwcAorICAgIGxvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAKKyAgICBsb2FkZXIvRm9ybVN0YXRlLmNwcAorICAgIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHAKKyAgICBsb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAKKyAgICBsb2FkZXIvTWFp
blJlc291cmNlTG9hZGVyLmNwcAorICAgIGxvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ci5jcHAKKyAgICBsb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCisgICAgbG9hZGVyL1JlcXVlc3Qu
Y3BwCisgICAgbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAorICAgIGxvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5jcHAKKyAgICBsb2FkZXIvVGV4dERvY3VtZW50LmNwcAorICAgIGxvYWRlci9UZXh0
UmVzb3VyY2VEZWNvZGVyLmNwcAorICAgIGxvYWRlci9sb2FkZXIuY3BwCisKKyAgPC9zZXQ+CiAg
ICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BMQVRGT1JNIj4KKyAgICAg
ICAgCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAorICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzVHlwZXMuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9QZW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL0FyZW5hLmNwcAogICAgICAgICBwbGF0
Zm9ybS9BcnJheUltcGwuY3BwCiAgICAgICAgIHBsYXRmb3JtL0F0b21pY1N0cmluZy5jcHAKQEAg
LTE1NCwxMiArMTc3LDEyIEBACiAgICAgICAgIHBsYXRmb3JtL0xvZ2dpbmcuY3BwCiAgICAgICAg
IHBsYXRmb3JtL01pbWVUeXBlUmVnaXN0cnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL1JlZ3VsYXJF
eHByZXNzaW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9TZWdtZW50ZWRTdHJpbmcuY3BwCisgICAg
ICAgIHBsYXRmb3JtL1RleHRDb2RlYy5jcHAKKyAgICAgICAgcGxhdGZvcm0vVGV4dENvZGVjSUNV
LmNwcAogICAgICAgICBwbGF0Zm9ybS9TY3JvbGxCYXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL1Nl
Z21lbnRlZFN0cmluZy5jcHAKICAgICAgICAgcGxhdGZvcm0vU3RyaW5nLmNwcAogICAgICAgICBw
bGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAotICAgICAgICBwbGF0Zm9ybS9UZXh0Q29kZWMuY3BwCi0g
ICAgICAgIHBsYXRmb3JtL1RleHRDb2RlY0lDVS5jcHAKICAgICAgICAgcGxhdGZvcm0vVGV4dENv
ZGVjTGF0aW4xLmNwcAogICAgICAgICBwbGF0Zm9ybS9UZXh0Q29kZWNVVEYxNi5jcHAKICAgICAg
ICAgcGxhdGZvcm0vVGV4dERlY29kZXIuY3BwCkBAIC0xNjcsMjQgKzE5MCwxMyBAQAogICAgICAg
ICBwbGF0Zm9ybS9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKICAgICAgICAgcGxhdGZvcm0vVGV4
dFN0cmVhbS5jcHAKICAgICAgICAgcGxhdGZvcm0vVGltZXIuY3BwCisgICAgICAgIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCisgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCiAgICAgICAgIHBsYXRmb3JtL1dpZGdldC5jcHAKLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFNpemUuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Blbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5jcHAKLSAgICAgICAgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAK
KwogICAgIDwvc2V0PgotCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VT
X1dJTiI+Ci0gICAgICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNw
cAorICAgICAgICAKICAgICAgICAgcGxhdGZvcm0vd2luL0Nvb2tpZUphcldpbi5jcHAKICAgICAg
ICAgcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAKICAgICAgICAgcGxhdGZvcm0vd2luL0ZvbnRD
YWNoZVdpbi5jcHAKQEAgLTIwMiwyMCArMjE0LDI3IEBACiAgICAgICAgIHBsYXRmb3JtL3dpbi9T
aGFyZWRUaW1lcldpbi5jcHAKICAgICAgICAgcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVXaW4uY3Bw
CiAgICAgICAgIHBsYXRmb3JtL3dpbi9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisgICAgICAgIHBs
YXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAogICAgICAgICBwbGF0Zm9y
bS93aW4vV2lkZ2V0V2luLmNwcAorCiAgICAgPC9zZXQ+CisgICAgPHNldCBhcHBlbmQ9IjEiIHZh
cj0iV0VCQ09SRV9TT1VSQ0VTX0lNQUdFLURFQ09ERVJTIj4KKyAgICAgICAgCiAKKyAgICA8L3Nl
dD4KICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfR0lGIj4KKyAgICAg
ICAgCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5j
cHAKKwogICAgIDwvc2V0PgotCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VS
Q0VTX1BORyI+Ci0gICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwCisgICAgICAgIAogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
cG5nLmMKICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL3BuZ2Vycm9yLmMKICAg
ICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL3BuZ2djY3JkLmMKICAgICAgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL3BuZ2dldC5jCisgICAgICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9wbmdtZW0uYwogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcvcG5ncHJlYWQuYwogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvcG5ncmVh
ZC5jCkBAIC0yMjksOSArMjQ4LDEwIEBACiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9wbmd3cml0ZS5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9wbmd3
dHJhbi5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9wbmd3dXRpbC5jCisK
ICAgICA8L3NldD4KLQogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19a
TElCIj4KKyAgICAgICAgCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvYWRs
ZXIzMi5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvY29tcHJlc3MuYwog
ICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2NyYzMyLmMKQEAgLTI0NCwxMCAr
MjY0LDEwIEBACiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvdHJlZXMuYwog
ICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL3VuY29tcHIuYwogICAgICAgICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL3p1dGlsLmMKKwogICAgIDwvc2V0PgotCiAgICAg
PHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0pQRUciPgotICAgICAgICBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCisgICAgICAgIAog
ICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL2pjb21hcGkuYwogICAgICAgICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL2pkYXBpbWluLmMKICAgICAgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9qZGFwaXN0ZC5jCkBAIC0yNzQsOTcgKzI5NCwxMjAgQEAKICAg
ICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9qaWRjdGludC5jCiAgICAgICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvam1lbW1nci5jCiAgICAgICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2pwZWcvam1lbW5vYnMuYworICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2pwZWcvanF1YW50MS5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pw
ZWcvanF1YW50Mi5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvanV0aWxz
LmMKKwogICAgIDwvc2V0PgotCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VS
Q0VTX0JNUCI+CisgICAgICAgIAogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAv
Qk1QSW1hZ2VEZWNvZGVyLmNwcAorCiAgICAgPC9zZXQ+Ci0KICAgICA8c2V0IGFwcGVuZD0iMSIg
dmFyPSJXRUJDT1JFX1NPVVJDRVNfSUNPIj4KKyAgICAgICAgCiAgICAgICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCisKICAgICA8L3NldD4KLQogICAg
IDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19YQk0iPgorICAgICAgICAKICAg
ICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5jcHAKKwog
ICAgIDwvc2V0PgotCi0gICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BM
QVRGT1JNX0NBSVJPIj4KKyAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
Q0FJUk9fQklORElOR1MiPgorICAgICAgICAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUNhaXJvLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZVNvdXJjZUNhaXJvLmNwcAorCiAgICAgPC9zZXQ+CisgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0i
V0VCQ09SRV9TT1VSQ0VTX0NVUkwiPgogCisKKyAgICAgICAgbG9hZGVyL2N1cmwvRG9jdW1lbnRM
b2FkZXJDdXJsLmNwcAorICAgICAgICBsb2FkZXIvY3VybC9GcmFtZUxvYWRlckN1cmwuY3BwCisg
ICAgICAgIGxvYWRlci9jdXJsL0xvYWRlckZ1bmN0aW9uc0N1cmwuY3BwCisgICAgICAgIGxvYWRl
ci9jdXJsL01haW5SZXNvdXJjZUxvYWRlckN1cmwuY3BwCisgICAgICAgIGxvYWRlci9jdXJsL05h
dmlnYXRpb25BY3Rpb25DdXJsLmNwcAorICAgICAgICBsb2FkZXIvY3VybC9SZXNvdXJjZUxvYWRl
ckN1cmwuY3BwCisgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1
cmwuY3BwCisgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuY3BwCisKKyAgICA8L3NldD4KICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NP
VVJDRVNfUElYTUFOIj4KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vcGl4bWFuL3Ny
Yy9mYmNvbXBvc2UuYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9waXhtYW4vc3Jj
L2ZiZWRnZS5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9zcmMvZmJw
aWN0LmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vcGl4bWFuL3NyYy9mYnRyYXAu
YwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljYmx0LmMKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vcGl4bWFuL3NyYy9pY2JsdG9uZS5jCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9zcmMvaWNjb2xvci5jCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9zcmMvaWNmb3JtYXQuYwotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljaW1hZ2UuYwotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljcGl4ZWxzLmMKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vcGl4bWFuL3NyYy9pY3JlY3QuYwotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljc3RpcHBsZS5jCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL3BpeG1hbi9zcmMvaWN0cmFuc2Zvcm0uYwotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljdHJhcC5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL3BpeG1hbi9zcmMvaWN0cmkuYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9waXhtYW4vc3JjL2ljdXRpbC5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L3BpeG1hbi9zcmMvcGl4cmVnaW9uLmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
cGl4bWFuL3NyYy9yZW5kZXJlZGdlLmMKKyAgICAgICAgCisgICAgICAgIHBsYXRmb3JtL2NhaXJv
L3BpeG1hbi9zcmMvZmJjb21wb3NlLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3Ny
Yy9mYmVkZ2UuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL2ZicGljdC5jCisg
ICAgICAgIHBsYXRmb3JtL2NhaXJvL3BpeG1hbi9zcmMvZmJ0cmFwLmMKKyAgICAgICAgcGxhdGZv
cm0vY2Fpcm8vcGl4bWFuL3NyYy9pY2JsdC5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL3BpeG1h
bi9zcmMvaWNibHRvbmUuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL2ljY29s
b3IuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL2ljZm9ybWF0LmMKKyAgICAg
ICAgcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9pY2ltYWdlLmMKKyAgICAgICAgcGxhdGZvcm0v
Y2Fpcm8vcGl4bWFuL3NyYy9pY3BpeGVscy5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL3BpeG1h
bi9zcmMvaWNyZWN0LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9pY3N0aXBw
bGUuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL2ljdHJhbnNmb3JtLmMKKyAg
ICAgICAgcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9pY3RyYXAuYworICAgICAgICBwbGF0Zm9y
bS9jYWlyby9waXhtYW4vc3JjL2ljdHJpLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vcGl4bWFu
L3NyYy9pY3V0aWwuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL3BpeHJlZ2lv
bi5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL3BpeG1hbi9zcmMvcmVuZGVyZWRnZS5jCisKICAg
ICA8L3NldD4KKyAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfQ0FJUk8i
PgorICAgICAgICAKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWFyYy5j
CisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1hcnJheS5jCisgICAgICAg
IHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1jYWNoZS5jCisgICAgICAgIHBsYXRmb3Jt
L2NhaXJvL2NhaXJvL3NyYy9jYWlyby1jbGlwLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fp
cm8vc3JjL2NhaXJvLWNvbG9yLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2Nh
aXJvLWRlYnVnLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWZpeGVk
LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWZvbnQtb3B0aW9ucy5j
CisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1mb250LmMKKyAgICAgICAg
cGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWdzdGF0ZS5jCisgICAgICAgIHBsYXRmb3Jt
L2NhaXJvL2NhaXJvL3NyYy9jYWlyby1oYXNoLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fp
cm8vc3JjL2NhaXJvLWh1bGwuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fp
cm8taW1hZ2Utc3VyZmFjZS5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWly
by1tYXRyaXguYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8tbWV0YS1z
dXJmYWNlLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLW91dHB1dC1z
dHJlYW0uYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGFnaW5hdGVk
LXN1cmZhY2UuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGF0aC1i
b3VuZHMuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGF0aC1kYXRh
LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBhdGgtZmlsbC5jCisg
ICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1wYXRoLXN0cm9rZS5jCisgICAg
ICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1wYXRoLmMKKyAgICAgICAgcGxhdGZv
cm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBhdHRlcm4uYworICAgICAgICBwbGF0Zm9ybS9jYWly
by9jYWlyby9zcmMvY2Fpcm8tcGVuLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3Jj
L2NhaXJvLXBvbHlnb24uYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8t
cmVnaW9uLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNjYWxlZC1m
b250LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNsb3BlLmMKKyAg
ICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNwbGluZS5jCisgICAgICAgIHBs
YXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1zdHJva2Utc3R5bGUuYworICAgICAgICBwbGF0
Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8tc3VyZmFjZS1mYWxsYmFjay5jCisgICAgICAgIHBs
YXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1zdXJmYWNlLmMKKyAgICAgICAgcGxhdGZvcm0v
Y2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXRyYXBzLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fp
cm8vc3JjL2NhaXJvLXVuaWNvZGUuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMv
Y2Fpcm8td2lkZWludC5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby13
aW4zMi1mb250LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXdpbjMy
LXN1cmZhY2UuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8uYwogCi0g
ICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NBSVJPIj4KLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWFyYy5jCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1hcnJheS5jCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1jYWNoZS5jCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1jbGlwLmMKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWNvbG9yLmMKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWRlYnVnLmMKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWZpeGVkLmMKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWZvbnQtb3B0aW9ucy5jCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1mb250LmMKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWdzdGF0ZS5jCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1oYXNoLmMKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWh1bGwuYwotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8taW1hZ2Utc3VyZmFjZS5j
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1tYXRyaXgu
YwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8tbWV0YS1z
dXJmYWNlLmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJv
LW91dHB1dC1zdHJlYW0uYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9z
cmMvY2Fpcm8tcGFnaW5hdGVkLXN1cmZhY2UuYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9jYWlyby9zcmMvY2Fpcm8tcGF0aC1ib3VuZHMuYwotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGF0aC1kYXRhLmMKLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBhdGgtZmlsbC5jCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1wYXRoLXN0cm9rZS5jCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1wYXRoLmMKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBhdHRlcm4uYwotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGVuLmMKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBvbHlnb24uYwotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcmVnaW9uLmMKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNjYWxlZC1mb250LmMK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNsb3BlLmMK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNwbGluZS5j
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1zdHJva2Ut
c3R5bGUuYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8t
c3VyZmFjZS1mYWxsYmFjay5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJv
L3NyYy9jYWlyby1zdXJmYWNlLmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fp
cm8vc3JjL2NhaXJvLXRyYXBzLmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fp
cm8vc3JjL2NhaXJvLXVuaWNvZGUuYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9j
YWlyby9zcmMvY2Fpcm8td2lkZWludC5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L2NhaXJvL3NyYy9jYWlyby13aW4zMi1mb250LmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXdpbjMyLXN1cmZhY2UuYwotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8uYwogICAgIDwvc2V0PgotCiAgICAgPHNldCBh
cHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NTUyI+CisgICAgICAgIAogICAgICAgICBj
c3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAKICAgICAgICAgY3NzL0NTU0NoYXJzZXRSdWxlLmNw
cAogICAgICAgICBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAogICAgICAgICBj
c3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKICAgICAgICAgY3NzL0NTU0ZvbnRGYWNlUnVsZS5j
cHAKKyAgICAgICAgY3NzL2Nzc2hlbHBlci5jcHAKICAgICAgICAgY3NzL0NTU0ltYWdlVmFsdWUu
Y3BwCiAgICAgICAgIGNzcy9DU1NJbXBvcnRSdWxlLmNwcAogICAgICAgICBjc3MvQ1NTSW5oZXJp
dGVkVmFsdWUuY3BwCkBAIC0zNzIsNiArNDE1LDcgQEAKICAgICAgICAgY3NzL0NTU01lZGlhUnVs
ZS5jcHAKICAgICAgICAgY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAogICAgICAg
ICBjc3MvQ1NTUGFnZVJ1bGUuY3BwCisgICAgICAgIGNzcy9jc3NwYXJzZXIuY3BwCiAgICAgICAg
IGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKICAgICAgICAgY3NzL0NTU1Byb3BlcnR5LmNwcAog
ICAgICAgICBjc3MvQ1NTUnVsZS5jcHAKQEAgLTM3OSw2ICs0MjMsNyBAQAogICAgICAgICBjc3Mv
Q1NTU2VsZWN0b3IuY3BwCiAgICAgICAgIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAogICAg
ICAgICBjc3MvQ1NTU3R5bGVSdWxlLmNwcAorICAgICAgICBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5j
cHAKICAgICAgICAgY3NzL0NTU1N0eWxlU2hlZXQuY3BwCiAgICAgICAgIGNzcy9DU1NWYWx1ZUxp
c3QuY3BwCiAgICAgICAgIGNzcy9Gb250RmFtaWx5VmFsdWUuY3BwCkBAIC0zODYsMjMgKzQzMSwy
MiBAQAogICAgICAgICBjc3MvTWVkaWFGZWF0dXJlTmFtZXMuY3BwCiAgICAgICAgIGNzcy9NZWRp
YUxpc3QuY3BwCiAgICAgICAgIGNzcy9NZWRpYVF1ZXJ5LmNwcAorICAgICAgICBjc3MvTWVkaWFR
dWVyeUV4cC5jcHAKICAgICAgICAgY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCi0gICAgICAg
IGNzcy9NZWRpYVF1ZXJ5RXhwLmNwcAogICAgICAgICBjc3MvU2hhZG93VmFsdWUuY3BwCiAgICAg
ICAgIGNzcy9TdHlsZUJhc2UuY3BwCiAgICAgICAgIGNzcy9TdHlsZUxpc3QuY3BwCiAgICAgICAg
IGNzcy9TdHlsZVNoZWV0LmNwcAogICAgICAgICBjc3MvU3R5bGVTaGVldExpc3QuY3BwCi0gICAg
ICAgIGNzcy9jc3NoZWxwZXIuY3BwCi0gICAgICAgIGNzcy9jc3NwYXJzZXIuY3BwCi0gICAgICAg
IGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAorCiAgICAgPC9zZXQ+Ci0KICAgICA8c2V0IGFwcGVu
ZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfUkVOREVSSU5HIj4KKyAgICAgICAgCiAgICAgICAg
IHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCisgICAgICAgIHJlbmRlcmluZy9iaWRpLmNw
cAorICAgICAgICByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCiAgICAgICAgIHJlbmRlcmluZy9D
b3VudGVyTm9kZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL0NvdW50ZXJSZXNldE5vZGUuY3BwCi0g
ICAgICAgIHJlbmRlcmluZy9EZXByZWNhdGVkU2xpZGVyLmNwcAogICAgICAgICByZW5kZXJpbmcv
RWxsaXBzaXNCb3guY3BwCiAgICAgICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAog
ICAgICAgICByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTQxMCwxMSArNDU0LDEyIEBA
CiAgICAgICAgIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAogICAgICAgICByZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAKICAgICAgICAgcmVuZGVyaW5nL0xpc3RNYXJrZXJCb3guY3BwCisg
ICAgICAgIHJlbmRlcmluZy9SZW5kZXJTdHlsZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL1JlbmRl
ckFwcGxldC5jcHAKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlckFyZW5hLmNwcAotICAgICAgICBy
ZW5kZXJpbmcvUmVuZGVyQlIuY3BwCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
ICAgICAgICAgcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL1JlbmRl
ckJSLmNwcAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAogICAgICAgICByZW5k
ZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5jcHAKQEAgLTQ0MCw3ICs0ODUsNyBAQAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyUGFydC5j
cHAKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCiAgICAgICAgIHJlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNw
cAorICAgICAgICByZW5kZXJpbmcvRGVwcmVjYXRlZFNsaWRlci5jcHAKICAgICAgICAgcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNw
cAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCkBAIC00NTAsMjMgKzQ5NSwy
NCBAQAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCiAgICAgICAgIHJl
bmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAKKyAgICAgICAgCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKICAgICAgICAgcmVuZGVyaW5nL1Jl
bmRlcldpZGdldC5jcHAKICAgICAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCi0gICAg
ICAgIHJlbmRlcmluZy9iaWRpLmNwcAotICAgICAgICByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3Bw
CisKICAgICA8L3NldD4KIAogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNF
U19YTUwiPgogICAgICAgICB4bWwvRE9NUGFyc2VyLmNwcAorICAgICAgICB4bWwveG1saHR0cHJl
cXVlc3QuY3BwCiAgICAgICAgIHhtbC9YTUxTZXJpYWxpemVyLmNwcAogICAgICAgICB4bWwvWFBh
dGhFdmFsdWF0b3IuY3BwCiAgICAgICAgIHhtbC9YUGF0aEV4cHJlc3Npb24uY3BwCiAgICAgICAg
IHhtbC9YUGF0aEV4cHJlc3Npb25Ob2RlLmNwcAogICAgICAgICB4bWwvWFBhdGhGdW5jdGlvbnMu
Y3BwCisgICAgICAgIHhtbC9YUGF0aE5hbWVzcGFjZS5jcHAKICAgICAgICAgeG1sL1hQYXRoTlNS
ZXNvbHZlci5jcHAKLSAgICAgICAgeG1sL1hQYXRoTmFtZXNwYWNlLmNwcAogICAgICAgICB4bWwv
WFBhdGhQYXJzZXIuY3BwCiAgICAgICAgIHhtbC9YUGF0aFBhdGguY3BwCiAgICAgICAgIHhtbC9Y
UGF0aFByZWRpY2F0ZS5jcHAKQEAgLTQ3OCwyNSArNTI0LDI0IEBACiAgICAgICAgIHhtbC9YU0xJ
bXBvcnRSdWxlLmNwcAogICAgICAgICB4bWwvWFNMU3R5bGVTaGVldC5jcHAKICAgICAgICAgeG1s
L1hTTFRQcm9jZXNzb3IuY3BwCi0gICAgICAgIHhtbC94bWxodHRwcmVxdWVzdC5jcHAKICAgICA8
L3NldD4KLQogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19ET00iPgor
ICAgICAgICAKICAgICAgICAgZG9tL0F0dHIuY3BwCiAgICAgICAgIGRvbS9BdHRyaWJ1dGUuY3Bw
CiAgICAgICAgIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAKICAgICAgICAgZG9tL0Jl
Zm9yZVVubG9hZEV2ZW50LmNwcAogICAgICAgICBkb20vQ0RBVEFTZWN0aW9uLmNwcAotICAgICAg
ICBkb20vQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24uY3BwCiAgICAgICAgIGRvbS9DaGFy
YWN0ZXJEYXRhLmNwcAogICAgICAgICBkb20vQ2hpbGROb2RlTGlzdC5jcHAKICAgICAgICAgZG9t
L0NsaXBib2FyZEV2ZW50LmNwcAogICAgICAgICBkb20vQ29tbWVudC5jcHAKICAgICAgICAgZG9t
L0NvbnRhaW5lck5vZGUuY3BwCi0gICAgICAgIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKKyAg
ICAgICAgZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmNwcAogICAgICAgICBkb20v
RG9jdW1lbnQuY3BwCiAgICAgICAgIGRvbS9Eb2N1bWVudEZyYWdtZW50LmNwcAogICAgICAgICBk
b20vRG9jdW1lbnRUeXBlLmNwcAorICAgICAgICBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCiAg
ICAgICAgIGRvbS9FZGl0aW5nVGV4dC5jcHAKICAgICAgICAgZG9tL0VsZW1lbnQuY3BwCiAgICAg
ICAgIGRvbS9FbnRpdHkuY3BwCkBAIC01MDksMTYgKzU1NCwxNiBAQAogICAgICAgICBkb20vTW91
c2VFdmVudC5jcHAKICAgICAgICAgZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAogICAgICAgICBk
b20vTXV0YXRpb25FdmVudC5jcHAKLSAgICAgICAgZG9tL05hbWVOb2RlTGlzdC5jcHAKICAgICAg
ICAgZG9tL05hbWVkQXR0ck1hcC5jcHAKICAgICAgICAgZG9tL05hbWVkTWFwcGVkQXR0ck1hcC5j
cHAKKyAgICAgICAgZG9tL05vZGVJdGVyYXRvci5jcHAKKyAgICAgICAgZG9tL05hbWVOb2RlTGlz
dC5jcHAKICAgICAgICAgZG9tL05vZGUuY3BwCiAgICAgICAgIGRvbS9Ob2RlRmlsdGVyLmNwcAog
ICAgICAgICBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKLSAgICAgICAgZG9tL05vZGVJdGVy
YXRvci5jcHAKICAgICAgICAgZG9tL05vZGVMaXN0LmNwcAogICAgICAgICBkb20vTm90YXRpb24u
Y3BwCi0gICAgICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcAorICAgICAgICAgICAgZG9tL092ZXJm
bG93RXZlbnQuY3BwCiAgICAgICAgIGRvbS9Qb3NpdGlvbi5jcHAKICAgICAgICAgZG9tL1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbi5jcHAKICAgICAgICAgZG9tL1F1YWxpZmllZE5hbWUuY3BwCkBAIC01
MzEsMzYgKzU3Niw0NCBAQAogICAgICAgICBkb20vVUlFdmVudC5jcHAKICAgICAgICAgZG9tL1do
ZWVsRXZlbnQuY3BwCiAgICAgICAgIGRvbS9YTUxUb2tlbml6ZXIuY3BwCisKICAgICA8L3NldD4K
IAogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19JQ09OIj4KKyAgICAg
ICAgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAogICAgICAgICBsb2FkZXIvaWNvbi9JY29u
RGF0YUNhY2hlLmNwcAotICAgICAgICBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCiAgICAg
ICAgIGxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCiAgICAgICAgIGxvYWRlci9pY29uL1NRTERh
dGFiYXNlLmNwcAogICAgICAgICBsb2FkZXIvaWNvbi9TUUxTdGF0ZW1lbnQuY3BwCiAgICAgICAg
IGxvYWRlci9pY29uL1NRTFRyYW5zYWN0aW9uLmNwcAogICAgIDwvc2V0PgogCisgICAgPHNldCBh
cHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0JSSURHRSI+CisgICAgICAgIAorCisgICAg
PC9zZXQ+CiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1dJTiI+Cisg
ICAgICAgIAogICAgICAgICBicmlkZ2Uvd2luL0ZyYW1lV2luLmNwcAogICAgICAgICBicmlkZ2Uv
d2luL1BhZ2VXaW4uY3BwCisKICAgICA8L3NldD4KLQogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9
IldFQkNPUkVfU09VUkNFU19FRElUSU5HIj4KKyAgICAgICAgCiAgICAgICAgIGVkaXRpbmcvQXBw
ZW5kTm9kZUNvbW1hbmQuY3BwCiAgICAgICAgIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CiAgICAgICAgIGVkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKICAgICAgICAgZWRp
dGluZy9Db21tYW5kQnlOYW1lLmNwcAogICAgICAgICBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAogICAgICAgICBlZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNwcAorICAgICAgICBl
ZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCisgICAgICAgIGVkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKICAgICAgICAgZWRpdGluZy9EZWxldGVCdXR0b24uY3Bw
CiAgICAgICAgIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKLSAgICAgICAgZWRp
dGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAotICAgICAgICBlZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCiAgICAgICAgIGVkaXRpbmcvRWRpdENvbW1hbmQuY3BwCiAg
ICAgICAgIGVkaXRpbmcvRWRpdG9yLmNwcAogICAgICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAKKyAgICAgICAgZWRpdGluZy9odG1sZWRpdGluZy5jcHAKICAgICAgICAgZWRpdGlu
Zy9IVE1MSW50ZXJjaGFuZ2UuY3BwCiAgICAgICAgIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1h
bmQuY3BwCiAgICAgICAgIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKQEAg
LTU2OSw4ICs2MjIsOSBAQAogICAgICAgICBlZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5k
LmNwcAogICAgICAgICBlZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3Bw
CiAgICAgICAgIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisgICAgICAgIGVkaXRpbmcv
Sm9pblRleHROb2Rlc0NvbW1hbmQuY3BwCiAgICAgICAgIGVkaXRpbmcvSlNFZGl0b3IuY3BwCi0g
ICAgICAgIGVkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQuY3BwCisgICAgICAgIGVkaXRpbmcv
bWFya3VwLmNwcAogICAgICAgICBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5k
LmNwcAogICAgICAgICBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKICAgICAg
ICAgZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTU4OSwxNCArNjQzLDEzIEBA
CiAgICAgICAgIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAogICAgICAgICBlZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwCiAgICAgICAgIGVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAKKyAgICAgICAg
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAogICAgICAgICBlZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAKICAgICAgICAgZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3Bw
Ci0gICAgICAgIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCi0gICAgICAgIGVkaXRpbmcvbWFya3Vw
LmNwcAotICAgICAgICBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisKICAgICA8L3NldD4KKyAg
ICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSFRNTCI+CiAKLSAgICA8c2V0
IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSFRNTCI+CiAgICAgICAgIGh0bWwvQ2Fu
dmFzR3JhZGllbnQuY3BwCiAgICAgICAgIGh0bWwvQ2FudmFzUGF0dGVybi5jcHAKICAgICAgICAg
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC02MDUsMTcgKzY1OCwxNyBAQAog
ICAgICAgICBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxBcHBs
ZXRFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKLSAgICAgICAg
aHRtbC9IVE1MQlJFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxCYXNlRWxlbWVudC5jcHAK
ICAgICAgICAgaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxC
bG9ja3F1b3RlRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCisg
ICAgICAgIGh0bWwvSFRNTEJSRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKICAgICAgICAgaHRt
bC9IVE1MQ29sbGVjdGlvbi5jcHAKLSAgICAgICAgaHRtbC9IVE1MRExpc3RFbGVtZW50LmNwcAog
ICAgICAgICBodG1sL0hUTUxEaXJlY3RvcnlFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxE
aXZFbGVtZW50LmNwcAorICAgICAgICBodG1sL0hUTUxETGlzdEVsZW1lbnQuY3BwCiAgICAgICAg
IGh0bWwvSFRNTERvY3VtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxFbGVtZW50LmNwcAogICAg
ICAgICBodG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAKQEAgLTYyOCw5ICs2ODEsOSBAQAogICAg
ICAgICBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAogICAgICAgICBodG1sL0hUTUxGcmFt
ZVNldEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5jcHAK
LSAgICAgICAgaHRtbC9IVE1MSFJFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxIZWFkRWxl
bWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MSGVhZGluZ0VsZW1lbnQuY3BwCisgICAgICAgIGh0
bWwvSFRNTEhSRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCiAg
ICAgICAgIGh0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTEltYWdl
RWxlbWVudC5jcHAKQEAgLTYzOCw5ICs2OTEsOSBAQAogICAgICAgICBodG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTElzSW5kZXhFbGVtZW50LmNwcAogICAgICAgICBo
dG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAotICAgICAgICBodG1sL0hUTUxMSUVsZW1lbnQuY3Bw
CiAgICAgICAgIGh0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MTGVn
ZW5kRWxlbWVudC5jcHAKKyAgICAgICAgaHRtbC9IVE1MTElFbGVtZW50LmNwcAogICAgICAgICBo
dG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAK
ICAgICAgICAgaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC02NDgsOCArNzAxLDggQEAK
ICAgICAgICAgaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTE1vZEVs
ZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAorICAgICAgICBo
dG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxPTGlzdEVsZW1lbnQu
Y3BwCi0gICAgICAgIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRN
TE9wdEdyb3VwRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAK
ICAgICAgICAgaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCkBAIC02NzQsMTAgKzcyNywx
NSBAQAogICAgICAgICBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRN
TFRva2VuaXplci5jcHAKICAgICAgICAgaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcAotICAgICAg
ICBodG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCisgICAgICAgIGh0bWwvSFRNTFZpZXdT
b3VyY2VEb2N1bWVudC5jcHAgICAgCisKICAgICA8L3NldD4KKyAgICA8c2V0IGFwcGVuZD0iMSIg
dmFyPSJXRUJDT1JFX1NPVVJDRVNfQklORElOR1MiPgorICAgICAgICAKIAorICAgIDwvc2V0Pgog
ICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19KUyI+CisgICAgICAgIAog
ICAgICAgICBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAK
ICAgICAgICAgYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAogICAg
ICAgICBiaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKQEAgLTY5Nyw1ICs3
NTUsNyBAQAogICAgICAgICBiaW5kaW5ncy9qcy9ranNfcHJveHkuY3BwCiAgICAgICAgIGJpbmRp
bmdzL2pzL2tqc190cmF2ZXJzYWwuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL2tqc193aW5kb3cu
Y3BwCisKICAgICA8L3NldD4KKwogPC9tYWtlZmlsZT4KSW5kZXg6IFdlYkNvcmUvd2ViY29yZS1i
YXNlLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmNvcmUtYmFzZS5ia2wJKHJldmlzaW9u
IDE3NzQ2KQorKysgV2ViQ29yZS93ZWJjb3JlLWJhc2UuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPCEtLQorPCEtLSAKIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC03LDEzICs3LDEzIEBACiBhcmUgbWV0OgogCiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCiAKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECkBAIC0zMCw4MSArMzAsMTEwIEBACiAtLT4KIAogPG1ha2VmaWxlPgorCisgICAgPCEtLSBD
b21tb24gZGVmaW5pdGlvbnMgZXRjLjogLS0+CisKICAgICA8c2V0IHZhcj0iU1JDRElSIiBhcHBl
bmQ9IjAiPi4uLy4uPC9zZXQ+CiAKLSAgICA8aW5jbHVkZSBmaWxlPSIuLi9CYWtlZmlsZXMvcHJl
c2V0cy5ia2wiIC8+Ci0gICAgPGluY2x1ZGUgZmlsZT0iV2ViQ29yZVNvdXJjZXMuYmtsIiAvPgor
ICAgIDxpbmNsdWRlIGZpbGU9Ii4uL0Jha2VmaWxlcy9wcmVzZXRzLmJrbCIvPgorICAgIDxpbmNs
dWRlIGZpbGU9IldlYkNvcmVTb3VyY2VzLmJrbCIvPgorICAgIAorCTxzZXQgdmFyPSJXRUJDT1JF
X0JBU0VfU09VUkNFUyI+CQorCQkkKFdFQkNPUkVfU09VUkNFU19CSU5ESU5HUykKKwkJJChXRUJD
T1JFX1NPVVJDRVNfQk1QKQorCQkkKFdFQkNPUkVfU09VUkNFU19CUklER0UpCisJCSQoV0VCQ09S
RV9TT1VSQ0VTX0NTUykKKwkJJChXRUJDT1JFX1NPVVJDRVNfREVSSVZFRFNPVVJDRVMpCisJCSQo
V0VCQ09SRV9TT1VSQ0VTX0RPTSkKKwkJJChXRUJDT1JFX1NPVVJDRVNfRURJVElORykKKwkJJChX
RUJDT1JFX1NPVVJDRVNfR0lGKQorCQkkKFdFQkNPUkVfU09VUkNFU19IVE1MKQorCQkkKFdFQkNP
UkVfU09VUkNFU19JQ08pCisJCSQoV0VCQ09SRV9TT1VSQ0VTX0lDT04pCisJCSQoV0VCQ09SRV9T
T1VSQ0VTX0lNQUdFLURFQ09ERVJTKQorCQkkKFdFQkNPUkVfU09VUkNFU19KUEVHKQorCQkkKFdF
QkNPUkVfU09VUkNFU19KUykKKwkJJChXRUJDT1JFX1NPVVJDRVNfS0hUTUwpCisJCSQoV0VCQ09S
RV9TT1VSQ0VTX0xPQURFUikKKwkJJChXRUJDT1JFX1NPVVJDRVNfTUlTQykKKwkJJChXRUJDT1JF
X1NPVVJDRVNfUEFHRSkKKwkJJChXRUJDT1JFX1NPVVJDRVNfUExBVEZPUk0pCisJCSQoV0VCQ09S
RV9TT1VSQ0VTX1BORykKKwkJJChXRUJDT1JFX1NPVVJDRVNfUkVOREVSSU5HKQorCQkkKFdFQkNP
UkVfU09VUkNFU19YQk0pCisJCSQoV0VCQ09SRV9TT1VSQ0VTX1hNTCkKKwkJJChXRUJDT1JFX1NP
VVJDRVNfWkxJQikKKwk8L3NldD4KIAotICAgIDxzZXQgdmFyPSJXRUJDT1JFX0JBU0VfU09VUkNF
UyI+Ci0gICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX0JNUCkKLSAgICAgICAgJChXRUJDT1JFX1NP
VVJDRVNfQ1NTKQotICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19ERVJJVkVEU09VUkNFUykKLSAg
ICAgICAgJChXRUJDT1JFX1NPVVJDRVNfRE9NKQotICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19F
RElUSU5HKQotICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19HSUYpCi0gICAgICAgICQoV0VCQ09S
RV9TT1VSQ0VTX0hUTUwpCi0gICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX0lDTykKLSAgICAgICAg
JChXRUJDT1JFX1NPVVJDRVNfSUNPTikKLSAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfSlBFRykK
LSAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfSlMpCi0gICAgICAgICQoV0VCQ09SRV9TT1VSQ0VT
X0xPQURFUikKLSAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUEFHRSkKLSAgICAgICAgJChXRUJD
T1JFX1NPVVJDRVNfUExBVEZPUk0pCi0gICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX1BORykKLSAg
ICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUkVOREVSSU5HKQotICAgICAgICAkKFdFQkNPUkVfU09V
UkNFU19YQk0pCi0gICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX1hNTCkKLSAgICAgICAgJChXRUJD
T1JFX1NPVVJDRVNfWkxJQikKLSAgICA8L3NldD4KLQogICAgIDxzZXQgdmFyPSJCVUlMRERJUiI+
b2JqLSQoRk9STUFUKTwvc2V0PgotCisgICAgCiAgICAgPHRlbXBsYXRlIGlkPSJ3ZWJjb3JlX2Nh
aXJvIj4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L2NhaXJvL3NyYzwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9zcmM8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQo
U1JDRElSKS9wbGF0Zm9ybS9jYWlyby9jYWlyby9zcmM8L2luY2x1ZGU+CisgICAgICAgIDxpbmNs
dWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjPC9pbmNsdWRlPgogICAgICAg
ICA8c291cmNlcz4KLSAgICAgICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX0NBSVJPKQotICAgICAg
ICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUElYTUFOKQorICAgICAgICAgICAgJChXRUJDT1JFX1NP
VVJDRVNfQ0FJUk9fQklORElOR1MpIAorICAgICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfQ0FJ
Uk8pIAorCQkgICAgJChXRUJDT1JFX1NPVVJDRVNfUElYTUFOKSAKICAgICAgICAgPC9zb3VyY2Vz
PgogICAgIDwvdGVtcGxhdGU+CiAKKyAgICA8dGVtcGxhdGUgaWQ9IndlYmNvcmVfY3VybCI+Cisg
ICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmw8L2luY2x1ZGU+
CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9sb2FkZXIvY3VybDwvaW5jbHVkZT4KKyAgICAg
ICAgPHNvdXJjZXM+CisgICAgICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19DVVJMKSAKKyAgICAg
ICAgPC9zb3VyY2VzPgorICAgIDwvdGVtcGxhdGU+CisgICAgCiAgICAgPHRlbXBsYXRlIGlkPSJ3
ZWJjb3JlX2Jhc2UiIHRlbXBsYXRlPSJ4bWwyLGljb252LHhzbHQsaWN1LGpzY29yZSI+Ci0gICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKTwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNE
SVIpLy48L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9pbmNsdWRlPC9pbmNs
dWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZTwv
aW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tjYW52YXM8L2luY2x1ZGU+Cisg
ICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2RldmljZTwvaW5jbHVkZT4KKyAgICAg
ICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4k
KFNSQ0RJUikva3N2ZzIvY3NzPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikv
a3N2ZzIvZXZlbnRzPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikva3N2ZzIv
bWlzYzwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyL3N2ZzwvaW5j
bHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2JpbmRpbmdzL2pzPC9pbmNsdWRlPgog
ICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvYnJpZGdlPC9pbmNsdWRlPgorICAgICAgICA8aW5j
bHVkZT4kKFNSQ0RJUikvZWRpdGluZzwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNE
SVIpL2h0bWw8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9jc3M8L2luY2x1
ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9kb208L2luY2x1ZGU+Ci0gICAgICAgIDxp
bmNsdWRlPiQoU1JDRElSKS9lZGl0aW5nPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFNS
Q0RJUikvaHRtbDwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2luY2x1ZGU8
L2luY2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2RldmljZTwvaW5j
bHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tjYW52YXM8L2luY2x1ZGU+CisgICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9sb2FkZXI8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRl
PiQoU1JDRElSKS9sb2FkZXIvaWNvbjwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNE
SVIpL2xvYWRlcjwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BhZ2U8L2lu
Y2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybTwvaW5jbHVkZT4KKyAg
ICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL25ldHdvcms8L2luY2x1ZGU+CisgICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9uZXR3b3JrL2dkazwvaW5jbHVkZT4KICAg
ICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2dyYXBoaWNzPC9pbmNsdWRlPgorICAg
ICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnPC9pbmNsdWRlPgor
ICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnM8L2luY2x1
ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9i
bXA8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWY8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY288L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElS
KS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVk
ZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtPC9pbmNsdWRlPgogICAgICAg
ICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nPC9pbmNsdWRl
PgotICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJt
PC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvemxpYjwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxh
dGZvcm0vbmV0d29yazwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRm
b3JtPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vbmV0b3dy
azwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3JlbmRlcmluZzwvaW5jbHVk
ZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3htbDwvaW5jbHVkZT4KLQorICAgICAgICA8
aW5jbHVkZT4kKFNSQ0RJUikva2NhbnZhczwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChT
UkNESVIpL2tjYW52YXMvZGV2aWNlPC9pbmNsdWRlPgorICAgICAgICAKICAgICAgICAgPHNvdXJj
ZXM+JChXRUJDT1JFX0JBU0VfU09VUkNFUyk8L3NvdXJjZXM+CiAKIAotICAgICAgICA8IS0tIEZJ
WE1FOiB3aGVuIGJ1aWxkaW5nIG9uIE1hYywgRXh0cmFDRkVuY29kaW5ncy5oIGlzIG5lZWRlZCAt
LT4KLSAgICAgICAgPGlmIGNvbmQ9IlBMQVRGT1JNX01BQ09TWD09JzEnIj4KLSAgICAgICAgICAg
IDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9tYWM8L2luY2x1ZGU+Ci0gICAgICAgIDwvaWY+
Cis8IS0tIEhBQ0sgQUxFUlQhIEZJWCBUSEVTRSBMQVRFUiEhIC0tPgorICAgICAgPGlmIGNvbmQ9
IlBMQVRGT1JNX01BQ09TWD09JzEnIj4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRm
b3JtL21hYzwvaW5jbHVkZT4gPCEtLSB3aGVuIGJ1aWxkaW5nIG9uIE1hYywgRXh0cmFDRkVuY29k
aW5ncy5oIGlzIG5lZWRlZCAtLT4gICAgICAKKwkgIDwvaWY+Cis8IS0tIEVORCBIQUNLUyAtLT4K
IAorICAgICAgICA8ZGVmaW5lPkFQUExFX0NIQU5HRVM9MTwvZGVmaW5lPgogICAgICAgICA8ZGVm
aW5lPlhTTFRfU1VQUE9SVD0xPC9kZWZpbmU+CiAKICAgICAgICAgPCEtLSBUT0RPOiBpcyB0aGVy
ZSBhIExpbnV4LXNwZWNpZmljIHBsYXRmb3JtIGRlZmluZT8gLS0+CkBAIC0xMTMsMTUgKzE0Miwx
NCBAQAogICAgICAgICAgICAgICAgIDxkZWZpbmU+TElOVVg8L2RlZmluZT4KICAgICAgICAgICAg
IDwvaWY+CiAgICAgICAgIDwvaWY+Ci0KICAgICAgICAgPCEtLSB0aGlzIEdDIHZlcnNpb24gcmVx
dWlyZXMgTWFjaCdzIHRocmVhZCBzdXNwZW5kL3Jlc3VtZTogLS0+CiAgICAgICAgIDxpZiBjb25k
PSJQTEFURk9STV9NQUNPU1ghPScxJyI+CiAgICAgICAgICAgICA8ZGVmaW5lPlVTRV9DT05TRVJW
QVRJVkVfR0M9MDwvZGVmaW5lPgogICAgICAgICA8L2lmPgotCisgICAgICAgIAogICAgICAgICA8
aWYgY29uZD0iUExBVEZPUk1fTUFDT1NYPT0nMSciPgogICAgICAgICAgICAgPGRlZmluZT5VU0Vf
Q09OU0VSVkFUSVZFX0dDPTE8L2RlZmluZT4KLSAgICAgICAgPC9pZj4KKyAgICAgICAgPC9pZj4g
CiAKICAgICAgICAgPGlmIGNvbmQ9IkZPUk1BVD09J2dudSciPgogICAgICAgICAgICAgPCEtLSBG
SVhNRTogd2UgbmVlZCBwcm9wZXIgY29uZmlndXJlIGNoZWNrcyAtLT4KQEAgLTEzNiwzICsxNjQs
NCBAQAogICAgICAgICA8L2lmPgogICAgIDwvdGVtcGxhdGU+CiA8L21ha2VmaWxlPgorCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAxNzc0NikKKysrIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5MSw3ICsxNTkxLDcgQEAKICAg
ICBtX2NsaWVudC0+Y2xlYXJVbmFyY2hpdmluZ1N0YXRlKGxvYWRlcik7CiB9CiAKLSNpZiBQTEFU
Rk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAKIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWQoY29u
c3QgS1VSTCYgVVJMLCBFdmVudCogZXZlbnQpCiB7CiAgICAgbG9hZChSZXNvdXJjZVJlcXVlc3Qo
VVJMKSwgdHJ1ZSwgZXZlbnQsIDAsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxNzc0NikKKysrIFdlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDExICs2MSwxOCBAQAogI2Vu
ZGlmCiAKICNlbmRpZgorI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgi
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRnJhbWU7CiAgICAg
Y2xhc3MgRnJhbWVMb2FkZXI7CisjaWYgVVNFKENVUkwpCisgICAgY2xhc3MgUmVzb3VyY2VIYW5k
bGVDbGllbnQ7CisgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworI2VuZGlmCiAKICAgICAvLyBG
SVhNRTogUmVuYW1lIHRvIFJlc291cmNlSGFuZGxlIGFmdGVyIHJlc29sdmluZyBjb25mbGljdCB3
aXRoIGV4aXN0aW5nIGNsYXNzIG9mIHRoYXQgbmFtZS4KICAgICBjbGFzcyBSZXNvdXJjZUxvYWRl
ciA6IHB1YmxpYyBTaGFyZWQ8UmVzb3VyY2VMb2FkZXI+IHsKQEAgLTczLDYgKzgwLDExIEBACiAg
ICAgICAgIHZpcnR1YWwgflJlc291cmNlTG9hZGVyKCk7CiAKICAgICAgICAgdm9pZCBjYW5jZWwo
KTsKKyNpZiBVU0UoQ1VSTCkKKyAgICAgICAgdm9pZCBzZXRSZXNvdXJjZUhhbmRsZUNsaWVudChS
ZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KXsgbV9jbGllbnQgPSBjbGllbnQ7IH0gCisgICAg
ICAgIHZvaWQgc2V0UmVzb3VyY2VIYW5kbGUoUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFu
ZGxlKXsgbV9oYW5kbGUgPSBoYW5kbGU7IH0gCisgICAgICAgIHZpcnR1YWwgdm9pZCBsb2FkKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOworI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBsb2FkKE5TVVJMUmVxdWVzdCAqKTsKQEAgLTE1Nyw2ICsxNjksMTEg
QEAKICAgICAgICAgUmV0YWluUHRyPFdlYkNvcmVSZXNvdXJjZUxvYWRlckFzRGVsZWdhdGU+IG1f
ZGVsZWdhdGU7CiAjZW5kaWYKICAgICAgICAgYm9vbCBtX2RlZmVyc0xvYWRpbmc7CisjaWYgVVNF
KENVUkwpCisgICAgcHJvdGVjdGVkOgorICAgICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCAqbV9j
bGllbnQ7CisgICAgICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7CisjZW5kaWYK
ICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jdXJsL05hdmlnYXRpb25BY3Rpb25D
dXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jdXJsL05hdmlnYXRpb25BY3Rp
b25DdXJsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2N1cmwvTmF2aWdhdGlv
bkFjdGlvbkN1cmwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJOYXZpZ2F0aW9uQWN0aW9uLmgiCisKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9u
VHlwZShGcmFtZUxvYWRUeXBlIGZyYW1lTG9hZFR5cGUsIGJvb2wgaXNGb3JtU3VibWlzc2lvbiwg
Ym9vbCBoYXZlRXZlbnQpCit7CisgICAgaWYgKGlzRm9ybVN1Ym1pc3Npb24pCisgICAgICAgIHJl
dHVybiBOYXZpZ2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQ7CisgICAgaWYgKGhhdmVFdmVudCkKKyAg
ICAgICAgcmV0dXJuIE5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ7CisgICAgaWYgKGZyYW1lTG9h
ZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCkKKyAgICAgICAgcmV0dXJuIE5hdmlnYXRpb25U
eXBlUmVsb2FkOworICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUoZnJhbWVMb2FkVHlwZSkp
CisgICAgICAgIHJldHVybiBOYXZpZ2F0aW9uVHlwZUJhY2tGb3J3YXJkOworICAgIHJldHVybiBO
YXZpZ2F0aW9uVHlwZU90aGVyOworfQorCitOYXZpZ2F0aW9uQWN0aW9uOjpOYXZpZ2F0aW9uQWN0
aW9uKCkKKyAgICA6IG1fdHlwZShOYXZpZ2F0aW9uVHlwZU90aGVyKQoreworfQorCitOYXZpZ2F0
aW9uQWN0aW9uOjpOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IEtVUkwmIFVSTCwgTmF2aWdhdGlvblR5
cGUgdHlwZSkKKyAgICA6IG1fVVJMKFVSTCkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworfQorCitO
YXZpZ2F0aW9uQWN0aW9uOjpOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IEtVUkwmIFVSTCwgRnJhbWVM
b2FkVHlwZSBmcmFtZUxvYWRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzRm9ybVN1Ym1pc3Npb24pCisgICAgOiBtX1VSTChVUkwpCisgICAgLCBtX3R5cGUo
bmF2aWdhdGlvblR5cGUoZnJhbWVMb2FkVHlwZSwgaXNGb3JtU3VibWlzc2lvbiwgMCkpCit7Cit9
CisKK05hdmlnYXRpb25BY3Rpb246Ok5hdmlnYXRpb25BY3Rpb24oY29uc3QgS1VSTCYgVVJMLCBO
YXZpZ2F0aW9uVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKKyAgICA6IG1fVVJM
KFVSTCkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9ldmVudChldmVudCkKK3sKK30KKwor
TmF2aWdhdGlvbkFjdGlvbjo6TmF2aWdhdGlvbkFjdGlvbihjb25zdCBLVVJMJiBVUkwsIEZyYW1l
TG9hZFR5cGUgZnJhbWVMb2FkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpc0Zvcm1TdWJtaXNzaW9uLCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKKyAgICA6
IG1fVVJMKFVSTCkKKyAgICAsIG1fdHlwZShuYXZpZ2F0aW9uVHlwZShmcmFtZUxvYWRUeXBlLCBp
c0Zvcm1TdWJtaXNzaW9uLCBldmVudCkpCisgICAgLCBtX2V2ZW50KGV2ZW50KQoreworfQorCit9
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jdXJsL1Jlc291cmNlTG9hZGVyQ3VybC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY3VybC9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvY3VybC9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
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
CisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBub3RJ
bXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDog
JXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZXNvdXJjZUxvYWRlcjo6UmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lKQor
ICAgIDogbV9yZWFjaGVkVGVybWluYWxTdGF0ZShmYWxzZSkKKyAgICAsIG1fY2FuY2VsbGVkKGZh
bHNlKQorICAgICwgbV9jYWxsZWREaWRGaW5pc2hMb2FkKGZhbHNlKQorICAgICwgbV9mcmFtZShm
cmFtZSkKKyAgICAsIG1fZGVmZXJzTG9hZGluZyhmcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5n
KCkpCit7Cit9CisKK1Jlc291cmNlTG9hZGVyOjp+UmVzb3VyY2VMb2FkZXIoKQoreworICAgIEFT
U0VSVChtX3JlYWNoZWRUZXJtaW5hbFN0YXRlKTsKKyAgICBjYW5jZWwoKTsKKyAgICBpZihtX2Ns
aWVudCkKKyAgICAgICAgZGVsZXRlIG1fY2xpZW50OworfQorCit2b2lkIFJlc291cmNlTG9hZGVy
OjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgbV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzOworfQorCit2b2lkIFJlc291cmNlTG9hZGVy
OjpjYW5jZWwoKQoreworICAgIGlmKG1faGFuZGxlKQorICAgICAgICBtX2hhbmRsZS0+Y2FuY2Vs
KCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkZXI6OmxvYWRzQmxvY2tlZCgpCit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFJlc291cmNlTG9hZGVyOjpsb2FkKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBqb2Ig
PSAgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShyZXF1ZXN0LG1fY2xpZW50LDApOworICAgIHNldFJl
c291cmNlSGFuZGxlKGpvYik7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2N1cmwvTG9h
ZGVyRnVuY3Rpb25zQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY3VybC9M
b2FkZXJGdW5jdGlvbnNDdXJsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2N1
cmwvTG9hZGVyRnVuY3Rpb25zQ3VybC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJDYWNoZS5o
IgorI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPGNoYXI+IFNlcnZlU3luY2hyb25vdXNSZXF1ZXN0
KExvYWRlciogbG9hZGVyLCBEb2NMb2FkZXIqIGRvY0xvYWRlcixjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIFJlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gam9iID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShyZXF1ZXN0LDAsZG9j
TG9hZGVyKTsKKyAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0QnVmZmVyID0gam9iLT5ydW5JbW1lZGlh
dGVseShyZXNwb25zZSk7CisgICAgcmV0dXJuIHJlc3VsdEJ1ZmZlcjsKK30KKworaW50IE51bWJl
ck9mUGVuZGluZ09yTG9hZGluZ1JlcXVlc3RzKERvY0xvYWRlciogZG9jTG9hZGVyKQoreworICAg
IHJldHVybiBjYWNoZSgpLT5sb2FkZXIoKS0+bnVtUmVxdWVzdHMoZG9jTG9hZGVyKTsKK30KKwor
Ym9vbCBDaGVja0lmUmVsb2FkaW5nKFdlYkNvcmU6OkRvY0xvYWRlciogZG9jTG9hZGVyKQorewor
ICAgIC8vIEZJWE1FOiBOZWVkcyBhIHJlYWwgaW1wbGVtZW50YXRpb24hCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiBkb2NMb2Fk
ZXIsIENhY2hlZFJlc291cmNlKiBjYWNoZWRPYmplY3QpCit7CisgICAgLy8gUmV0dXJuIGZyb20g
dGhlIGZ1bmN0aW9uIGZvciBvYmplY3RzIHRoYXQgd2UgZGlkbid0IGxvYWQgZnJvbSB0aGUgY2Fj
aGUuCisgICAgaWYgKCFjYWNoZWRPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRj
aCAoY2FjaGVkT2JqZWN0LT5zdGF0dXMoKSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNh
Y2hlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Tm90Q2FjaGVk
OgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlVua25vd246CisgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6TmV3OgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlBlbmRpbmc6CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogTm90aWZ5IHRoZSBjYWxsZXIgdGhhdCB3ZSAi
bG9hZGVkIi4KK30KKworYm9vbCBJc1Jlc3BvbnNlVVJMRXF1YWxUb1VSTChQbGF0Zm9ybVJlc3Bv
bnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAoIXJlc3BvbnNlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzcG9uc2UtPnVybCgpLnVybCgp
ID09IHVybDsKK30KKworRGVwcmVjYXRlZFN0cmluZyBSZXNwb25zZVVSTChQbGF0Zm9ybVJlc3Bv
bnNlIHJlc3BvbnNlKQoreworICAgIGlmICghcmVzcG9uc2UpCisgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nKCk7CisKKyAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyhyZXNwb25zZS0+
dXJsKCkudXJsKCkpOworfQorCitEZXByZWNhdGVkU3RyaW5nIFJlc3BvbnNlTUlNRVR5cGUoUGxh
dGZvcm1SZXNwb25zZSByZXNwb25zZSkKK3sKKyAgICBpZiAoIXJlc3BvbnNlKQorICAgICAgICBy
ZXR1cm4gRGVwcmVjYXRlZFN0cmluZygidGV4dC9odG1sIik7CisgICAgcmV0dXJuIERlcHJlY2F0
ZWRTdHJpbmcocmVzcG9uc2UtPm1pbWVUeXBlKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKK30KKwor
Ym9vbCBSZXNwb25zZUlzTXVsdGlwYXJ0KFBsYXRmb3JtUmVzcG9uc2UgcmVzcG9uc2UpCit7Cisg
ICAgcmV0dXJuIFJlc3BvbnNlTUlNRVR5cGUocmVzcG9uc2UpID09ICJtdWx0aXBhcnQveC1taXhl
ZC1yZXBsYWNlIjsKK30KKwordGltZV90IENhY2hlT2JqZWN0RXhwaXJlc1RpbWUoRG9jTG9hZGVy
KiwgUGxhdGZvcm1SZXNwb25zZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIQorICAg
IHJldHVybiAwOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRQbGF0Zm9ybVJlc3BvbnNl
KFBsYXRmb3JtUmVzcG9uc2UgcmVzcG9uc2UpCit7CisgICAgbV9wbGF0Zm9ybVJlc3BvbnNlID0g
cmVzcG9uc2U7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldEFsbERhdGEoUGxhdGZvcm1E
YXRhIGFsbERhdGEpCit7CisgICAgbV9hbGxEYXRhID0gYWxsRGF0YTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvY3VybC9GcmFtZUxvYWRlckN1cmwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2N1cmwvRnJhbWVMb2FkZXJDdXJsLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2N1cmwvRnJhbWVMb2FkZXJDdXJsLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
WmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBT
dGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1
c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxA
Z21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiTWFpblJlc291
cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZVRyZWUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgorCisjZGVmaW5lIG5v
dEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVE
OiAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgwKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWQoY29uc3QgS1VSTCYgVVJMLCBFdmVu
dCogZXZlbnQpCit7CisgICAgbG9hZChSZXNvdXJjZVJlcXVlc3QoVVJMKSwgdHJ1ZSwgZXZlbnQs
IDAsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOworfQorCit2b2lkIEZyYW1lTG9hZGVyOjps
b2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgdXNlckdlc3R1cmUsIEV2
ZW50KiBldmVudCwKKyAgICBFbGVtZW50KiBzdWJtaXRGb3JtLCBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgZm9ybVZhbHVlcykKK3sKKyAgICBTdHJpbmcgcmVmZXJyZXI7CisgICAgU3Ry
aW5nIGFyZ3NSZWZlcnJlciA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cFJlZmVycmVy
KCk7CisgICAgaWYgKCFhcmdzUmVmZXJyZXIuaXNFbXB0eSgpKQorICAgICAgICByZWZlcnJlciA9
IGFyZ3NSZWZlcnJlcjsKKyAgICBlbHNlCisgICAgICAgIHJlZmVycmVyID0gbV9vdXRnb2luZ1Jl
ZmVycmVyOworCisgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5maW5k
KHJlcXVlc3QuZnJhbWVOYW1lKCkpOworICAgIGlmICghY2FuVGFyZ2V0KHRhcmdldEZyYW1lKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0
cE1ldGhvZCgpICE9ICJQT1NUIikgeworICAgICAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlOwor
ICAgICAgICBpZiAocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5jYWNoZVBvbGljeSgpID09IFJl
bG9hZElnbm9yaW5nQ2FjaGVEYXRhKQorICAgICAgICAgICAgbG9hZFR5cGUgPSBGcmFtZUxvYWRU
eXBlUmVsb2FkOworICAgICAgICBlbHNlIGlmICghdXNlckdlc3R1cmUpCisgICAgICAgICAgICBs
b2FkVHlwZSA9IEZyYW1lTG9hZFR5cGVJbnRlcm5hbDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbG9hZFR5cGUgPSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQ7ICAgIAorICAgIAorICAgICAgICBs
b2FkKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCksIHJlZmVycmVyLCBsb2FkVHlwZSwg
CisgICAgICAgICAgICByZXF1ZXN0LmZyYW1lTmFtZSgpLCBldmVudCwgc3VibWl0Rm9ybSwgZm9y
bVZhbHVlcyk7CisgICAgfSBlbHNlCisgICAgICAgIHBvc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS51cmwoKSwgcmVmZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCksIAorICAgICAgICAgICAg
cmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwQm9keSgpLCByZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLmh0dHBDb250ZW50VHlwZSgpLCBldmVudCwgc3VibWl0Rm9ybSwgZm9ybVZhbHVlcyk7
CisgICAgaWYgKHRhcmdldEZyYW1lICYmIHRhcmdldEZyYW1lICE9IG1fZnJhbWUpCisgICAgICAg
IHRhcmdldEZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5mb2N1cygpOworfQorCit2b2lkIEZyYW1l
TG9hZGVyOjpsb2FkKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgRnJh
bWVMb2FkVHlwZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsCisgICAgICAgICAgICBFdmVudCosIEVs
ZW1lbnQqIGZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmb3JtVmFsdWVzKQor
eworICAgIGlmKCFtX21haW5SZXNvdXJjZUxvYWRlcikKKyAgICAgICAgbV9tYWluUmVzb3VyY2VM
b2FkZXIgPSBNYWluUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShtX2ZyYW1lKTsKKyAgICBSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdCh1cmwpOworICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKHJlZmVy
cmVyKTsKKyAgICBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZChyZXF1ZXN0KTsKK30KKworCit2
b2lkIEZyYW1lTG9hZGVyOjpwb3N0KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgY29uc3QgU3RyaW5nJiB0YXJnZXQsCisgICAgICAgICAgICBjb25zdCBGb3JtRGF0YSYg
Zm9ybURhdGEsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsCisgICAgICAgICAgICBFdmVudCos
IEVsZW1lbnQqIGZvcm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmb3JtVmFsdWVz
KQoreworICAgIGlmKCFtX21haW5SZXNvdXJjZUxvYWRlcikKKyAgICAgICAgbV9tYWluUmVzb3Vy
Y2VMb2FkZXIgPSBNYWluUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShtX2ZyYW1lKTsKKyAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOworICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiUE9T
VCIpOworICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoZm9ybURhdGEpOworICAgIHJlcXVlc3Quc2V0
SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKKyAgICBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZChy
ZXF1ZXN0KTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JiByZXF1ZXN0LCBFdmVudCogZXZlbnQpCit7CisgICAgLy8gRklYTUU6IFdlJ2Qg
bGlrZSB0byByZW1vdmUgdGhpcyBhbHRvZ2V0aGVyIGFuZCBmaXggdGhlIG11bHRpcGxlIGZvcm0g
c3VibWlzc2lvbiBpc3N1ZSBhbm90aGVyIHdheS4KKyAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBz
dWJtaXQgbW9yZSB0aGFuIG9uZSBmb3JtIGZyb20gdGhlIHNhbWUgcGFnZSwKKyAgICAvLyBub3Ig
ZG8gd2Ugd2FudCB0byBzdWJtaXQgYSBzaW5nbGUgZm9ybSBtb3JlIHRoYW4gb25jZS4KKyAgICAv
LyBUaGlzIGZsYWcgcHJldmVudHMgdGhlc2UgZnJvbSBoYXBwZW5pbmc7IG5vdCBzdXJlIGhvdyBv
dGhlciBicm93c2VycyBwcmV2ZW50IHRoaXMuCisgICAgLy8gVGhlIGZsYWcgaXMgcmVzZXQgaW4g
ZWFjaCB0aW1lIHdlIHN0YXJ0IGhhbmRsZSBhIG5ldyBtb3VzZSBvciBrZXkgZG93biBldmVudCwg
YW5kCisgICAgLy8gYWxzbyBpbiBzZXRWaWV3IHNpbmNlIHRoaXMgcGFydCBtYXkgZ2V0IHJldXNl
ZCBmb3IgYSBwYWdlIGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KKyAgICAvLyBUaGUgZm9y
bSBtdWx0aS1zdWJtaXQgbG9naWMgaGVyZSBpcyBvbmx5IG5lZWRlZCB3aGVuIHdlIGFyZSBzdWJt
aXR0aW5nIGEgZm9ybSB0aGF0IGFmZmVjdHMgdGhpcyBmcmFtZS4KKyAgICAvLyBGSVhNRTogRnJh
bWUgdGFyZ2V0aW5nIGlzIG9ubHkgb25lIG9mIHRoZSB3YXlzIHRoZSBzdWJtaXNzaW9uIGNvdWxk
IGVuZCB1cCBkb2luZyBzb21ldGhpbmcgb3RoZXIKKyAgICAvLyB0aGFuIHJlcGxhY2luZyB0aGlz
IGZyYW1lJ3MgY29udGVudCwgc28gdGhpcyBjaGVjayBpcyBmbGF3ZWQuIE9uIHRoZSBvdGhlciBo
YW5kLCB0aGUgY2hlY2sgaXMgaGFyZGx5CisgICAgLy8gbmVlZGVkIGFueSBtb3JlIG5vdyB0aGF0
IHdlIHJlc2V0IG1fc3VibWl0dGVkRm9ybVVSTCBvbiBlYWNoIG1vdXNlIG9yIGtleSBkb3duIGV2
ZW50LgorICAgIEZyYW1lKiB0YXJnZXQgPSBtX2ZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC5m
cmFtZU5hbWUoKSk7CisgICAgaWYgKG1fZnJhbWUtPnRyZWUoKS0+aXNEZXNjZW5kYW50T2YodGFy
Z2V0KSkgeworICAgICAgICBpZiAobV9zdWJtaXR0ZWRGb3JtVVJMID09IHJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkudXJsKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3VibWl0
dGVkRm9ybVVSTCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBhbHdheXMgcGFzcyB0cnVlIGZvciB1c2VyR2VzdHVyZT8K
KyAgICBsb2FkKHJlcXVlc3QsIHRydWUsIGV2ZW50LCBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQu
Z2V0KCksIG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZCk7CisgICAgY2xlYXJSZWNvcmRl
ZEZvcm1WYWx1ZXMoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQoY29uc3Qg
RnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgRXZlbnQqIGV2ZW50KQoreworICAgIEZyYW1lTG9h
ZFJlcXVlc3QgY29weSA9IHJlcXVlc3Q7CisgICAgaWYgKGNvcHkucmVzb3VyY2VSZXF1ZXN0KCku
aHR0cFJlZmVycmVyKCkuaXNFbXB0eSgpKQorICAgICAgICBjb3B5LnJlc291cmNlUmVxdWVzdCgp
LnNldEhUVFBSZWZlcnJlcihtX291dGdvaW5nUmVmZXJyZXIpOworCisgICAgLy8gRklYTUU6IFdo
eSBkbyB3ZSBhbHdheXMgcGFzcyB0cnVlIGZvciB1c2VyR2VzdHVyZT8KKyAgICBsb2FkKGNvcHks
IHRydWUsIGV2ZW50LCAwLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpKTsKK30KKwordm9pZCBG
cmFtZUxvYWRlcjo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBtX2NsaWVu
dC0+c2V0VGl0bGUodGl0bGUsdXJsKCkpOworfQorCitPYmplY3RDb250ZW50VHlwZSBGcmFtZUxv
YWRlcjo6b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gT2JqZWN0Q29udGVudFR5
cGUoKTsKK30KKworCitLVVJMIEZyYW1lTG9hZGVyOjpvcmlnaW5hbFJlcXVlc3RVUkwoKSBjb25z
dAoreworICAgIHJldHVybiBtX2RvY3VtZW50TG9hZGVyLT5VUkwoKTsKK30KKworU3RyaW5nIEZy
YW1lTG9hZGVyOjpvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0Cit7CisgICAgLy8gbm8tb3AKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2ludCBGcmFtZUxvYWRlcjo6Z2V0SGlzdG9yeUxlbmd0
aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5n
IEZyYW1lTG9hZGVyOjpyZWZlcnJlcigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlcjo6ZGV0YWNoRnJv
bVBhcmVudCgpCit7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0KG1fZnJhbWUpOworCisgICAg
Y2xvc2VEb2N1bWVudCgpOworICAgIHN0b3BBbGxMb2FkZXJzKCk7CisgICAgbV9jbGllbnQtPmRl
dGFjaGVkRnJvbVBhcmVudDEoKTsKKyAgICBkZXRhY2hDaGlsZHJlbigpOworICAgIG1fY2xpZW50
LT5kZXRhY2hlZEZyb21QYXJlbnQyKCk7CisgICAgc2V0RG9jdW1lbnRMb2FkZXIoMCk7CisgICAg
bV9jbGllbnQtPmRldGFjaGVkRnJvbVBhcmVudDMoKTsKKworICAgIGlmIChGcmFtZSogcGFyZW50
ID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKKyAgICAgICAgcGFyZW50LT50cmVlKCktPnJl
bW92ZUNoaWxkKG1fZnJhbWUpOworICAgIG1fZnJhbWUtPnNldFZpZXcoMCk7CisgICAgCisgICAg
bV9jbGllbnQtPmRldGFjaGVkRnJvbVBhcmVudDQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVy
OjpjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSgpCit7CisgICAgQVNTRVJUKG1fY2xpZW50
LT5oYXNXZWJWaWV3KCkpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgCisgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgY2FzZSBGcmFtZVN0YXRlUHJvdmlzaW9uYWw6IHsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgRnJhbWVTdGF0ZUNvbW1pdHRlZFBhZ2U6IHsKKyAgICAgICAgRG9j
dW1lbnRMb2FkZXIqIGRsID0gbV9kb2N1bWVudExvYWRlci5nZXQoKTsgICAgICAgICAgICAKKyAg
ICAgICAgaWYgKGRsLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgbWFya0xvYWRDb21wbGV0ZSgpOworCisgICAgICAgIC8vIEZJWE1FOiBJcyB0
aGlzIHN1YnNlcXVlbnQgd29yayBpbXBvcnRhbnQgaWYgd2UgYWxyZWFkeSBuYXZpZ2F0ZWQgYXdh
eT8KKyAgICAgICAgLy8gTWF5YmUgdGhlcmUgYXJlIGJ1Z3MgYmVjYXVzZSBvZiB0aGF0LCBvciBl
eHRyYSB3b3JrIHdlIGNhbiBza2lwIGJlY2F1c2UKKyAgICAgICAgLy8gdGhlIG5ldyBwYWdlIGlz
IHJlYWR5LgorICAgICAgICBtX2NsaWVudC0+Zm9yY2VMYXlvdXRGb3JOb25IVE1MKCk7CisgICAg
ICAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSB1c2VyIGhhZCBhIHNjcm9sbCBwb2ludCwgc2Ny
b2xsIHRvIGl0LCBvdmVycmlkaW5nIHRoZSBhbmNob3IgcG9pbnQgaWYgYW55LgorICAgICAgICBp
ZiAoKGlzQmFja0ZvcndhcmRMb2FkVHlwZShtX2xvYWRUeXBlKSB8fCBtX2xvYWRUeXBlID09IEZy
YW1lTG9hZFR5cGVSZWxvYWQpCisgICAgICAgICAgICAmJiBtX2NsaWVudC0+aGFzQmFja0Zvcndh
cmRMaXN0KCkpCisgICAgICAgICAgICBtX2NsaWVudC0+cmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5k
Vmlld1N0YXRlKCk7CisgICAgICAgIG1fY2xpZW50LT5wcm9ncmVzc0NvbXBsZXRlZCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEZyYW1lU3RhdGVDb21wbGV0
ZToKKyAgICAgICAgLy8gRXZlbiBpZiBhbHJlYWR5IGNvbXBsZXRlLCB3ZSBtaWdodCBoYXZlIHNl
dCBhIHByZXZpb3VzIGl0ZW0gb24gYSBmcmFtZSB0aGF0CisgICAgICAgIC8vIGRpZG4ndCBkbyBh
bnkgZGF0YSBsb2FkaW5nIG9uIHRoZSBwYXN0IHRyYW5zYWN0aW9uLiBNYWtlIHN1cmUgdG8gY2xl
YXIgdGhlc2Ugb3V0LgorICAgICAgICBtX2NsaWVudC0+ZnJhbWVMb2FkQ29tcGxldGVkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6Z29CYWNrT3JG
b3J3YXJkKGludCBkaXN0YW5jZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitLVVJM
IEZyYW1lTG9hZGVyOjpoaXN0b3J5VVJMKGludCBkaXN0YW5jZSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBLVVJMKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXI6OmRpZEZp
cnN0TGF5b3V0KCkKK3sKKyAgICBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKG1fbG9hZFR5cGUp
ICYmIG1fY2xpZW50LT5oYXNCYWNrRm9yd2FyZExpc3QoKSkKKyAgICAgICAgbV9jbGllbnQtPnJl
c3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpOworCisgICAgbV9maXJzdExheW91dERv
bmUgPSB0cnVlOworICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZEZpcnN0TGF5b3V0KCk7Cit9CisK
K2Jvb2wgRnJhbWVMb2FkZXI6OmNhbkdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXI6OnBhcnRDbGVhcmVkSW5CZWdpbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6c2F2ZURvY3VtZW50U3RhdGUoKQoreworICAgIC8v
IERvIG5vdCBzYXZlIGRvYyBzdGF0ZSBpZiB0aGUgcGFnZSBoYXMgYSBwYXNzd29yZCBmaWVsZCBh
bmQgYSBmb3JtIHRoYXQgd291bGQgYmUgc3VibWl0dGVkIHZpYSBodHRwcy4KKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6ZGlkQ2hh
bmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3sKKyAgICBtX2NsaWVudC0+ZGlkQ2hh
bmdlVGl0bGUobG9hZGVyKTsKK30KKworCitQb2xpY3lDaGVjazo6UG9saWN5Q2hlY2soKQorICAg
IDogbV9jb250ZW50RnVuY3Rpb24oMCkKK3sKK30KKwordm9pZCBQb2xpY3lDaGVjazo6Y2xlYXIo
KQoreworICAgIGNsZWFyUmVxdWVzdCgpOworICAgIG1fY29udGVudEZ1bmN0aW9uID0gMDsKK30K
KworCit2b2lkIFBvbGljeUNoZWNrOjpzZXQoQ29udGVudFBvbGljeURlY2lzaW9uRnVuY3Rpb24g
ZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQoreworICAgIG1fZm9ybVN0YXRlID0gMDsKKyAgICBt
X2ZyYW1lTmFtZSA9IFN0cmluZygpOworCisgICAgbV9jb250ZW50RnVuY3Rpb24gPSBmdW5jdGlv
bjsKKyAgICBtX2FyZ3VtZW50ID0gYXJndW1lbnQ7Cit9CisKK3ZvaWQgUG9saWN5Q2hlY2s6OmNh
bGwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9saWN5Q2hlY2s6OmNh
bGwoUG9saWN5QWN0aW9uIGFjdGlvbikKK3sKKyAgICBBU1NFUlQobV9jb250ZW50RnVuY3Rpb24p
OworICAgIG1fY29udGVudEZ1bmN0aW9uKG1fYXJndW1lbnQsIGFjdGlvbik7Cit9CisKK3ZvaWQg
UG9saWN5Q2hlY2s6OmNsZWFyUmVxdWVzdCgpCit7CisgICAgbV9mb3JtU3RhdGUgPSAwOworICAg
IG1fZnJhbWVOYW1lID0gU3RyaW5nKCk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2N1cmwvTWFpblJlc291cmNlTG9hZGVyQ3VybC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY3VybC9NYWluUmVzb3VyY2VMb2FkZXJDdXJsLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2N1cmwvTWFpblJlc291cmNlTG9hZGVy
Q3VybC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYWluUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlTWFuYWdlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IE1haW5DbGllbnQgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgCit7CitwdWJsaWM6Cisg
ICAgTWFpbkNsaWVudChNYWluUmVzb3VyY2VMb2FkZXIqIG1haW5Mb2FkZXIsRnJhbWVMb2FkZXIq
IGZyYW1lTG9hZGVyKQorICAgIDogbV9tYWluTG9hZGVyKG1haW5Mb2FkZXIpCisgICAgLCBtX2Zy
YW1lTG9hZGVyKGZyYW1lTG9hZGVyKQorICAgIHsKKyAgICB9CisgICAgRnJhbWUqIGZyYW1lKCkg
eyByZXR1cm4gbV9mcmFtZUxvYWRlci0+ZnJhbWUoKTsgfQorICAgIHZvaWQgbG9hZChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OworCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKKyAgICB7CisgICAgICAgbV9mcmFtZUxvYWRlci0+
YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgICAgICAKKyAgICB9CisgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKQorICAgIHsKKyAgICAgICBtX2ZyYW1l
TG9hZGVyLT5lbmQoKTsKKyAgICAgICBtX21haW5Mb2FkZXItPnNldFJlc291cmNlSGFuZGxlKDAp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFdpdGhFcnJvcihSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICBNYWluUmVzb3VyY2VMb2FkZXIqIG1fbWFp
bkxvYWRlcjsKKyAgICBGcmFtZUxvYWRlciogbV9mcmFtZUxvYWRlcjsKK307CisKKworCisvKgor
ICogRGF0YSBpcyB0aGUgZnVsbCBzZXQgb2YgaGVhZGVycworICogQ2FsbGVkIHRoZSBmaXJzdCB0
aW1lIHdlIGdldCByZWNpZXZlZCBkYXRhIG9yIGFsbCBkYXRhCisgKi8KK3ZvaWQgTWFpbkNsaWVu
dDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiBqb2IsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIFN0cmluZyBtaW1lVHlwZSA9IHJlc3BvbnNlLm1p
bWVUeXBlKCk7CisKKyAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIFN0cmlu
ZyBwYXRoID0gIFN0cmluZyhqb2ItPnVybCgpLnBhdGgoKSk7CisgICAgICAgIG1pbWVUeXBlID0g
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpnZXRNaW1lVHlwZShwYXRoKTsKKyAgICB9CisKKyAgICBt
X2ZyYW1lTG9hZGVyLT5zZXRSZXNwb25zZU1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBTdHJpbmcg
Y2hhcnNldCA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgIC8vIHNldEVuY29k
aW5nIGNhbGxzIGJlZ2luKCkgZm9yIHVzLCBkZXNwaXRlIHRoZSBtaXNsZWFkaW5nIG5hbWUKKyAg
ICBpZiAoIWNoYXJzZXQuaXNFbXB0eSgpKQorICAgICAgICBtX2ZyYW1lTG9hZGVyLT5zZXRFbmNv
ZGluZyhjaGFyc2V0LHRydWUpOworICAgIGVsc2UKKyAgICAgICAgbV9mcmFtZUxvYWRlci0+c2V0
RW5jb2RpbmcobV9mcmFtZUxvYWRlci0+ZW5jb2RpbmcoKSxmYWxzZSk7CisgICAgbV9mcmFtZUxv
YWRlci0+YmVnaW4oam9iLT51cmwoKSk7Cit9CisKKwordm9pZCBNYWluQ2xpZW50OjpkaWRGYWls
V2l0aEVycm9yKFJlc291cmNlSGFuZGxlKiBqb2IsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycikK
K3sKK30KKworUGFzc1JlZlB0cjxNYWluUmVzb3VyY2VMb2FkZXI+IE1haW5SZXNvdXJjZUxvYWRl
cjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gbmV3IE1haW5SZXNvdXJjZUxv
YWRlcihmcmFtZSk7Cit9CisKK01haW5SZXNvdXJjZUxvYWRlcjo6TWFpblJlc291cmNlTG9hZGVy
KEZyYW1lKiBmcmFtZSkKKyAgICA6IFJlc291cmNlTG9hZGVyKGZyYW1lKQoreworICAgIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBuZXcgTWFpbkNsaWVudCh0aGlzLGZyYW1lLT5sb2Fk
ZXIoKSk7CisgICAgc2V0UmVzb3VyY2VIYW5kbGVDbGllbnQoY2xpZW50KTsKK30KKworTWFpblJl
c291cmNlTG9hZGVyOjp+TWFpblJlc291cmNlTG9hZGVyKCkKK3sKK30KKwordm9pZCBNYWluUmVz
b3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKK3sKK30KKworCit9CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9jdXJsL0RvY3VtZW50TG9hZGVyQ3VybC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvY3VybC9Eb2N1bWVudExvYWRlckN1cmwuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9sb2FkZXIvY3VybC9Eb2N1bWVudExvYWRlckN1cmwuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIK
KworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3lz
dGVtVGltZS5oIgorI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKKworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRl
cnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7
IH0gd2hpbGUoMCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKgorICogUGVyZm9ybXMgdGhy
ZWUgb3BlcmF0aW9uczoKKyAqICAxLiBDb252ZXJ0IGJhY2tzbGFzaGVzIHRvIGN1cnJlbmN5IHN5
bWJvbHMKKyAqICAyLiBDb252ZXJ0IGNvbnRyb2wgY2hhcmFjdGVycyB0byBzcGFjZXMKKyAqICAz
LiBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcworICovCitzdGF0aWMgaW5saW5lIFN0
cmluZyBjYW5vbmljYWxpemVkVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqIGZyYW1l
KQoreworICAgIEFTU0VSVCghdGl0bGUuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycyA9IHRpdGxlLmNoYXJhY3RlcnMoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSB0aXRsZS5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBpOworICAgIAorICAgIC8vIEZpbmQgdGhl
IGZpcnN0IG5vbi1jYW5vbmljYWwgY2hhcmFjdGVyCisgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICBpZiAo
YyA8IDB4MjAgfHwgYyA9PSAweDdGIHx8IGMgPT0gJ1xcJykKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIC8vIE9wdGltaXphdGlvbiBmb3IgdGl0bGVzIHRoYXQgaGF2ZSBubyBub24t
Y2Fub25pY2FsIGNoYXJhY3RlcnMgYW5kIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzCisg
ICAgaWYgKGkgPT0gbGVuZ3RoICYmIGNoYXJhY3RlcnNbMF0gIT0gJyAnICYmIGNoYXJhY3RlcnNb
bGVuZ3RoIC0gMV0gIT0gJyAnKQorICAgICAgICByZXR1cm4gdGl0bGU7CisKKyAgICBWZWN0b3I8
VUNoYXI+IHN0cmluZ0J1aWxkZXIobGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBidWlsZGVySW5kZXgg
PSAwOworICAgIAorICAgIC8vIFNraXAgbGVhZGluZyBzcGFjZXMgYW5kIGxlYWRpbmcgY2hhcmFj
dGVycyB0aGF0IHdvdWxkIGNvbnZlcnQgdG8gc3BhY2VzCisgICAgZm9yIChpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICBp
ZiAoIShjIDw9IDB4MjAgfHwgYyA9PSAweDdGKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICAvLyBSZXBsYWNlIGNvbnRyb2wgY2hhcmFjdGVycyB3aXRoIHNwYWNlcywgYW5k
IGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scworICAgIGZvciAoOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07CisgICAgICAgIGlmIChj
IDwgMHgyMCB8fCBjID09IDB4N0YpCisgICAgICAgICAgICBjID0gJyAnOworICAgICAgICBlbHNl
IGlmIChjID09ICdcXCcpCisgICAgICAgICAgICBjID0gZnJhbWUtPmJhY2tzbGFzaEFzQ3VycmVu
Y3lTeW1ib2woKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlcltidWlsZGVySW5kZXgrK10gPSBjOwor
ICAgIH0KKworICAgIC8vIFN0cmlwIHRyYWlsaW5nIHNwYWNlcworICAgIHdoaWxlIChidWlsZGVy
SW5kZXggPiAwKSB7CisgICAgICAgIC0tYnVpbGRlckluZGV4OworICAgICAgICBpZiAoc3RyaW5n
QnVpbGRlcltidWlsZGVySW5kZXhdICE9ICcgJykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBpZiAoYnVpbGRlckluZGV4ID09IDAgJiYgc3RyaW5nQnVpbGRlcltidWlsZGVy
SW5kZXhdID09ICcgJykKKyAgICAgICAgcmV0dXJuICIiOworICAgIAorICAgIHN0cmluZ0J1aWxk
ZXIucmVzaXplKGJ1aWxkZXJJbmRleCArIDEpOworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHN0
cmluZ0J1aWxkZXIpOworfQorCitEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoKQorICAg
IDogbV9mcmFtZSgwKQorICAgICwgbV9sb2FkaW5nU3RhcnRlZFRpbWUoMCkKKyAgICAsIG1fY29t
bWl0dGVkKGZhbHNlKQorICAgICwgbV9zdG9wcGluZyhmYWxzZSkKKyAgICAsIG1fbG9hZGluZyhm
YWxzZSkKKyAgICAsIG1fZ290Rmlyc3RCeXRlKGZhbHNlKQorICAgICwgbV9wcmltYXJ5TG9hZENv
bXBsZXRlKGZhbHNlKQorICAgICwgbV9pc0NsaWVudFJlZGlyZWN0KGZhbHNlKQoreworfQorCitG
cmFtZUxvYWRlciogRG9jdW1lbnRMb2FkZXI6OmZyYW1lTG9hZGVyKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2ZyYW1lLT5sb2Fk
ZXIoKTsKK30KKworRG9jdW1lbnRMb2FkZXI6On5Eb2N1bWVudExvYWRlcigpCit7CisgICAgQVNT
RVJUKCFtX2ZyYW1lIHx8IGZyYW1lTG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgIT0g
dGhpcyB8fAorICAgICAgICAgICAhZnJhbWVMb2FkZXIoKS0+aXNMb2FkaW5nKCkpOworfQorCitL
VVJMIERvY3VtZW50TG9hZGVyOjpVUkwoKSBjb25zdAoreworICAgIEtVUkwgdXJsOworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHVybDsKK30KKworS1VSTCBEb2N1bWVudExvYWRl
cjo6dW5yZWFjaGFibGVVUkwoKSBjb25zdAoreworICAgIEtVUkwgdXJsOworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIHVybDsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6cmVw
bGFjZVJlcXVlc3RVUkxGb3JBbmNob3JTY3JvbGwoY29uc3QgS1VSTCYgVVJMKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmlzU3RvcHBpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBtX3N0b3BwaW5nOworfQorCit2b2lkIERvY3VtZW50TG9hZGVy
OjpjbGVhckVycm9ycygpCit7Cit9CisKKy8vIENhbmNlbHMgdGhlIGRhdGEgc291cmNlJ3MgcGVu
ZGluZyBsb2Fkcy4gIENvbmNlcHR1YWxseSwgYSBkYXRhIHNvdXJjZSBvbmx5IGxvYWRzCisvLyBv
bmUgZG9jdW1lbnQgYXQgYSB0aW1lLCBidXQgb25lIGRvY3VtZW50IG1heSBoYXZlIG1hbnkgcmVs
YXRlZCByZXNvdXJjZXMuIAorLy8gc3RvcExvYWRpbmcgd2lsbCBzdG9wIGFsbCBsb2FkcyBpbml0
aWF0ZWQgYnkgdGhlIGRhdGEgc291cmNlLCAKKy8vIGJ1dCBub3QgbG9hZHMgaW5pdGlhdGVkIGJ5
IGNoaWxkIGZyYW1lcycgZGF0YSBzb3VyY2VzIC0tIHRoYXQncyB0aGUgV2ViRnJhbWUncyBqb2Iu
Cit2b2lkIERvY3VtZW50TG9hZGVyOjpzdG9wTG9hZGluZygpCit7CisgICAgLy8gQWx3YXlzIGF0
dGVtcHQgdG8gc3RvcCB0aGUgZnJhbWUgYmVjYXVzZSBpdCBtYXkgc3RpbGwgYmUgbG9hZGluZy9w
YXJzaW5nIGFmdGVyIHRoZSBkYXRhIHNvdXJjZQorICAgIC8vIGlzIGRvbmUgbG9hZGluZyBhbmQg
bm90IHN0b3BwaW5nIGl0IGNhbiBjYXVzZSBhIHdvcmxkIGxlYWsuCisgICAgaWYgKG1fY29tbWl0
dGVkKQorICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+c3RvcExvYWRpbmcoZmFsc2UpOworICAg
IAorICAgIGlmICghbV9sb2FkaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRy
PEZyYW1lPiBwcm90ZWN0RnJhbWUobV9mcmFtZSk7CisgICAgUmVmUHRyPERvY3VtZW50TG9hZGVy
PiBwcm90ZWN0TG9hZGVyKHRoaXMpOworCisgICAgbV9zdG9wcGluZyA9IHRydWU7CisKKyAgICBG
cmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBEb2N1bWVudExvYWRlcjo6ZnJhbWVMb2FkZXIoKTsK
KyAgICAKKyAgICBpZiAoZnJhbWVMb2FkZXItPmhhc01haW5SZXNvdXJjZUxvYWRlcigpKQorICAg
ICAgICAvLyBTdG9wIHRoZSBtYWluIHJlc291cmNlIGxvYWRlciBhbmQgbGV0IGl0IHNlbmQgdGhl
IGNhbmNlbGxlZCBtZXNzYWdlLgorICAgICAgICBmcmFtZUxvYWRlci0+Y2FuY2VsTWFpblJlc291
cmNlTG9hZCgpOworICAgIC8vZWxzZSBpZiAoZnJhbWVMb2FkZXItPmlzTG9hZGluZ1N1YnJlc291
cmNlcygpKQorICAgICAgICAvLyBUaGUgbWFpbiByZXNvdXJjZSBsb2FkZXIgYWxyZWFkeSBmaW5p
c2hlZCBsb2FkaW5nLiBTZXQgdGhlIGNhbmNlbGxlZCBlcnJvciBvbiB0aGUgCisgICAgICAgIC8v
IGRvY3VtZW50IGFuZCBsZXQgdGhlIHN1YnJlc291cmNlTG9hZGVycyBzZW5kIGluZGl2aWR1YWwg
Y2FuY2VsbGVkIG1lc3NhZ2VzIGJlbG93LgorICAgICAgICAvL3NldE1haW5Eb2N1bWVudEVycm9y
KGZyYW1lTG9hZGVyLT5jYW5jZWxsZWRFcnJvcihtX3JlcXVlc3QuZ2V0KCkpKTsKKyAgICAvL2Vs
c2UKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHJlc291cmNlIGxvYWRlcnMsIHdlIG5lZWQg
dG8gbWFudWZhY3R1cmUgYSBjYW5jZWxsZWQgbWVzc2FnZS4KKyAgICAgICAgLy8gKEEgYmFjay9m
b3J3YXJkIG5hdmlnYXRpb24gaGFzIG5vIHJlc291cmNlIGxvYWRlcnMgYmVjYXVzZSBpdHMgcmVz
b3VyY2VzIGFyZSBjYWNoZWQuKQorICAgICAgICAvL21haW5SZWNlaXZlZEVycm9yKGZyYW1lTG9h
ZGVyLT5jYW5jZWxsZWRFcnJvcihtX3JlcXVlc3QuZ2V0KCkpLCB0cnVlKTsKKyAgICAKKyAgICBm
cmFtZUxvYWRlci0+c3RvcExvYWRpbmdTdWJyZXNvdXJjZXMoKTsKKyAgICBmcmFtZUxvYWRlci0+
c3RvcExvYWRpbmdQbHVnSW5zKCk7CisgICAgCisgICAgbV9zdG9wcGluZyA9IGZhbHNlOworfQor
Cit2b2lkIERvY3VtZW50TG9hZGVyOjpzZXR1cEZvclJlcGxhY2UoKQoreworICAgIGZyYW1lTG9h
ZGVyKCktPnNldHVwRm9yUmVwbGFjZSgpOworICAgIG1fY29tbWl0dGVkID0gZmFsc2U7Cit9CisK
K3ZvaWQgRG9jdW1lbnRMb2FkZXI6OmNvbW1pdElmUmVhZHkoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgaWYgKG1fZ290Rmlyc3RCeXRlICYmICFtX2NvbW1pdHRlZCkgeworICAgICAg
ICBtX2NvbW1pdHRlZCA9IHRydWU7CisgICAgICAgIC8vZnJhbWVMb2FkZXIoKS0+Y29tbWl0UHJv
dmlzaW9uYWxMb2FkKDApOworICAgIH0KK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6ZmluaXNo
ZWRMb2FkaW5nKCkKK3sKKyAgICBtX2dvdEZpcnN0Qnl0ZSA9IHRydWU7ICAgCisgICAgY29tbWl0
SWZSZWFkeSgpOworICAgIGZyYW1lTG9hZGVyKCktPmZpbmlzaGVkTG9hZGluZ0RvY3VtZW50KHRo
aXMpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5lbmQoKTsKK30KKwordm9pZCBEb2N1bWVudExv
YWRlcjo6c2V0Q29tbWl0dGVkKGJvb2wgZikKK3sKKyAgICBtX2NvbW1pdHRlZCA9IGY7Cit9CisK
K2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmlzQ29tbWl0dGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb21taXR0ZWQ7Cit9CisKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldExvYWRpbmcoYm9vbCBm
KQoreworICAgIG1fbG9hZGluZyA9IGY7Cit9CisKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmlzTG9h
ZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9hZGluZzsKK30KKworYm9vbCBEb2N1bWVu
dExvYWRlcjo6ZG9lc1Byb2dyZXNzaXZlTG9hZChjb25zdCBTdHJpbmcmIE1JTUVUeXBlKSBjb25z
dAoreworICAgIHJldHVybiAhZnJhbWVMb2FkZXIoKS0+aXNSZXBsYWNpbmcoKSB8fCBNSU1FVHlw
ZSA9PSAidGV4dC9odG1sIjsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0dXBGb3JSZXBs
YWNlQnlNSU1FVHlwZShjb25zdCBTdHJpbmcmIG5ld01JTUVUeXBlKQoreworICAgIGlmICghbV9n
b3RGaXJzdEJ5dGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vU3RyaW5nIG9sZE1JTUVUeXBl
ID0gW21fcmVzcG9uc2UuZ2V0KCkgTUlNRVR5cGVdOworICAgIC8vRklYTUU6IGdldCB0aGUgbWlt
ZXR5cGUgY29ycmVjdGx5ICh0aGVuIHJlbW92ZSBub3RJbXBsZW1lbnRlZCgpKQorICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgU3RyaW5nIG9sZE1JTUVUeXBlOworICAgIAorICAgIGlmICghZG9l
c1Byb2dyZXNzaXZlTG9hZChvbGRNSU1FVHlwZSkpIHsKKyAgICAgICAgZnJhbWVMb2FkZXIoKS0+
cmV2ZXJ0VG9Qcm92aXNpb25hbCh0aGlzKTsKKyAgICAgICAgc2V0dXBGb3JSZXBsYWNlKCk7Cisg
ICAgfQorICAgIAorICAgIGZyYW1lTG9hZGVyKCktPmZpbmlzaGVkTG9hZGluZ0RvY3VtZW50KHRo
aXMpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5lbmQoKTsKKyAgICAKKyAgICBmcmFtZUxvYWRl
cigpLT5zZXRSZXBsYWNpbmcoKTsKKyAgICBtX2dvdEZpcnN0Qnl0ZSA9IGZhbHNlOworICAgIAor
ICAgIGlmIChkb2VzUHJvZ3Jlc3NpdmVMb2FkKG5ld01JTUVUeXBlKSkgeworICAgICAgICBmcmFt
ZUxvYWRlcigpLT5yZXZlcnRUb1Byb3Zpc2lvbmFsKHRoaXMpOworICAgICAgICBzZXR1cEZvclJl
cGxhY2UoKTsKKyAgICB9CisgICAgCisgICAgZnJhbWVMb2FkZXIoKS0+c3RvcExvYWRpbmdTdWJy
ZXNvdXJjZXMoKTsKKyAgICBmcmFtZUxvYWRlcigpLT5zdG9wTG9hZGluZ1BsdWdJbnMoKTsKKwor
ICAgIGZyYW1lTG9hZGVyKCktPmZpbmFsU2V0dXBGb3JSZXBsYWNlKHRoaXMpOworfQorCit2b2lk
IERvY3VtZW50TG9hZGVyOjp1cGRhdGVMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQodGhpcyA9PSBm
cmFtZUxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpKTsKKyAgICBzZXRMb2FkaW5nKGZy
YW1lTG9hZGVyKCktPmlzTG9hZGluZygpKTsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0
RnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIGlmIChtX2ZyYW1lID09IGZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKGZyYW1lICYmICFtX2ZyYW1lKTsKKyAgICBtX2ZyYW1lID0g
ZnJhbWU7CisgICAgYXR0YWNoVG9GcmFtZSgpOworfQorCit2b2lkIERvY3VtZW50TG9hZGVyOjph
dHRhY2hUb0ZyYW1lKCkKK3sKKyAgICBBU1NFUlQobV9mcmFtZSk7Cit9CisKK3ZvaWQgRG9jdW1l
bnRMb2FkZXI6OmRldGFjaEZyb21GcmFtZSgpCit7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAg
IG1fZnJhbWUgPSAwOworfQorCit2b2lkIERvY3VtZW50TG9hZGVyOjpwcmVwYXJlRm9yTG9hZFN0
YXJ0KCkKK3sKKyAgICBBU1NFUlQoIW1fc3RvcHBpbmcpOworICAgIHNldFByaW1hcnlMb2FkQ29t
cGxldGUoZmFsc2UpOworICAgIEFTU0VSVChmcmFtZUxvYWRlcigpKTsKKyAgICBjbGVhckVycm9y
cygpOworICAgIAorICAgIC8vIE1hcmsgdGhlIHN0YXJ0IGxvYWRpbmcgdGltZS4KKyAgICBtX2xv
YWRpbmdTdGFydGVkVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgCisgICAgc2V0TG9hZGluZyh0
cnVlKTsKKyAgICAKKyAgICBmcmFtZUxvYWRlcigpLT5wcmVwYXJlRm9yTG9hZFN0YXJ0KCk7Cit9
CisKK2RvdWJsZSBEb2N1bWVudExvYWRlcjo6bG9hZGluZ1N0YXJ0ZWRUaW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9sb2FkaW5nU3RhcnRlZFRpbWU7Cit9CisKK3ZvaWQgRG9jdW1lbnRMb2Fk
ZXI6OnNldElzQ2xpZW50UmVkaXJlY3QoYm9vbCBmbGFnKQoreworICAgIG1faXNDbGllbnRSZWRp
cmVjdCA9IGZsYWc7Cit9CisKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmlzQ2xpZW50UmVkaXJlY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBtX2lzQ2xpZW50UmVkaXJlY3Q7Cit9CisKK3ZvaWQgRG9j
dW1lbnRMb2FkZXI6OnNldFByaW1hcnlMb2FkQ29tcGxldGUoYm9vbCBmbGFnKQoreworICAgIG1f
cHJpbWFyeUxvYWRDb21wbGV0ZSA9IGZsYWc7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBp
ZiAoZmxhZykgeworICAgICAgICAvL2lmIChmcmFtZUxvYWRlcigpLT5oYXNNYWluUmVzb3VyY2VM
b2FkZXIoKSkgeworICAgICAgICAvLyAgICBzZXRNYWluUmVzb3VyY2VEYXRhKGZyYW1lTG9hZGVy
KCktPm1haW5SZXNvdXJjZURhdGEoKSk7CisgICAgICAgIC8vICAgIGZyYW1lTG9hZGVyKCktPnJl
bGVhc2VNYWluUmVzb3VyY2VMb2FkZXIoKTsKKyAgICAgICAgLy99CisgICAgICAgIHVwZGF0ZUxv
YWRpbmcoKTsKKyAgICB9Cit9CisKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmlzTG9hZGluZ0luQVBJ
U2Vuc2UoKSBjb25zdAoreworICAgIC8vIE9uY2UgYSBmcmFtZSBoYXMgbG9hZGVkLCB3ZSBubyBs
b25nZXIgbmVlZCB0byBjb25zaWRlciBzdWJyZXNvdXJjZXMsCisgICAgLy8gYnV0IHdlIHN0aWxs
IG5lZWQgdG8gY29uc2lkZXIgc3ViZnJhbWVzLgorICAgIGlmIChmcmFtZUxvYWRlcigpLT5zdGF0
ZSgpICE9IEZyYW1lU3RhdGVDb21wbGV0ZSkgeworICAgICAgICBpZiAoIW1fcHJpbWFyeUxvYWRD
b21wbGV0ZSAmJiBpc0xvYWRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoZnJhbWVMb2FkZXIoKS0+aXNMb2FkaW5nU3VicmVzb3VyY2VzKCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1
bWVudCgpKQorICAgICAgICAgICAgaWYgKFRva2VuaXplciogdG9rID0gZG9jLT50b2tlbml6ZXIo
KSkKKyAgICAgICAgICAgICAgICBpZiAodG9rLT5wcm9jZXNzaW5nRGF0YSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCkt
PnN1YmZyYW1lSXNMb2FkaW5nKCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OnN0b3BSZWNv
cmRpbmdSZXNwb25zZXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBE
b2N1bWVudExvYWRlcjo6dGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2VUaXRsZTsK
K30KKworY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgRG9jdW1lbnRMb2FkZXI6OnRyaWdnZXJpbmdB
Y3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3RyaWdnZXJpbmdBY3Rpb247Cit9CisKK3Zv
aWQgRG9jdW1lbnRMb2FkZXI6OnNldFRyaWdnZXJpbmdBY3Rpb24oY29uc3QgTmF2aWdhdGlvbkFj
dGlvbiYgYWN0aW9uKQoreworICAgIG1fdHJpZ2dlcmluZ0FjdGlvbiA9IGFjdGlvbjsKK30KKwor
dm9pZCBEb2N1bWVudExvYWRlcjo6c2V0T3ZlcnJpZGVFbmNvZGluZyhjb25zdCBTdHJpbmcmIGVu
YykKK3sKKyAgICBtX292ZXJyaWRlRW5jb2RpbmcgPSBlbmM7Cit9CisKK1N0cmluZyBEb2N1bWVu
dExvYWRlcjo6b3ZlcnJpZGVFbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3ZlcnJp
ZGVFbmNvZGluZzsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0VGl0bGUoY29uc3QgU3Ry
aW5nJiB0aXRsZSkKK3sKKyAgICBpZiAodGl0bGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBTdHJpbmcgdHJpbW1lZCA9IGNhbm9uaWNhbGl6ZWRUaXRsZSh0aXRsZSwgbV9mcmFt
ZSk7CisgICAgaWYgKCF0cmltbWVkLmlzRW1wdHkoKSAmJiBtX3BhZ2VUaXRsZSAhPSB0cmltbWVk
KSB7CisgICAgICAgIGZyYW1lTG9hZGVyKCktPndpbGxDaGFuZ2VUaXRsZSh0aGlzKTsKKyAgICAg
ICAgbV9wYWdlVGl0bGUgPSB0cmltbWVkOworICAgICAgICBmcmFtZUxvYWRlcigpLT5kaWRDaGFu
Z2VUaXRsZSh0aGlzKTsKKyAgICB9Cit9CisKK0tVUkwgRG9jdW1lbnRMb2FkZXI6OlVSTEZvckhp
c3RvcnkoKSBjb25zdAoreworICAgIC8vIFJldHVybiB0aGUgVVJMIHRvIGJlIHVzZWQgZm9yIGhp
c3RvcnkgYW5kIEIvRiBsaXN0LgorICAgIC8vIFJldHVybnMgbmlsIGZvciBXZWJEYXRhUHJvdG9j
b2wgVVJMcyB0aGF0IGFyZW4ndCBhbHRlcm5hdGVzIAorICAgIC8vIGZvciB1bnJlYWNoYWJsZSBV
UkxzLCBiZWNhdXNlIHRoZXNlIGNhbid0IGJlIHN0b3JlZCBpbiBoaXN0b3J5LgorICAgIEtVUkwg
dXJsOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHVybDsKK30KKworfQorCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHJldmlzaW9uIDE3NzQ2KQorKysgV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQAog
ICAgICAgICBEb2N1bWVudExvYWRlcihOU1VSTFJlcXVlc3QgKik7CiAjZWxpZiBQTEFURk9STShR
VCkKICAgICAgICAgRG9jdW1lbnRMb2FkZXIoKTsKKyNlbGlmIFVTRShDVVJMKQorICAgICAgICBE
b2N1bWVudExvYWRlcigpOwogI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgfkRvY3VtZW50TG9hZGVy
KCk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdk
ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDk4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKKyNpbmNsdWRlICJGb3JtU3RhdGUuaCIKKyNpbmNsdWRl
ICJzdGRpby5oIgorCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVy
ciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsg
fSB3aGlsZSgwKQorCituYW1lc3BhY2UgV2ViQ29yZQoreworCitGcmFtZUxvYWRlckNsaWVudEdk
azo6RnJhbWVMb2FkZXJDbGllbnRHZGsoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFt
ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK0ZyYW1lTG9hZGVyQ2xpZW50R2Rr
Ojp+RnJhbWVMb2FkZXJDbGllbnRHZGsoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
Kwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGV0YWNoRnJhbWVMb2FkZXIoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEdkazo6aGFz
V2ViVmlldygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworCitib29sIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpoYXNGcmFtZVZpZXcoKSBjb25z
dAoreworICAgIHJldHVybiAobV9mcmFtZS0+dmlldygpICE9IDApOworfQorCisKK2Jvb2wgRnJh
bWVMb2FkZXJDbGllbnRHZGs6Omhhc0JhY2tGb3J3YXJkTGlzdCgpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEdkazo6cmVzZXRCYWNrRm9yd2FyZExpc3QoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEdkazo6cHJvdmlzaW9uYWxJdGVtSXNU
YXJnZXQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmxvYWRQcm92aXNpb25hbEl0ZW1G
cm9tUGFnZUNhY2hlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjppbnZhbGlkYXRlQ3VycmVudEl0
ZW1QYWdlQ2FjaGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBGcmFt
ZUxvYWRlckNsaWVudEdkazo6cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBGcmFtZUxv
YWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50VmlldygpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjptYWtlUmVwcmVzZW50YXRpb24o
RG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEdkazo6Zm9yY2VMYXlvdXQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6Zm9yY2VMYXlvdXRGb3JOb25I
VE1MKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRHZGs6OnVwZGF0ZUhpc3RvcnlGb3JDb21taXQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6dXBkYXRlSGlzdG9yeUZvckJh
Y2tGb3J3YXJkTmF2aWdhdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjp1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnVw
ZGF0ZUhpc3RvcnlGb3JTdGFuZGFyZExvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6dXBkYXRlSGlzdG9yeUZvckludGVybmFs
TG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50R2RrOjp1cGRhdGVIaXN0b3J5QWZ0ZXJDbGllbnRSZWRpcmVjdCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpzZXRDb3Bp
ZXNPblNjcm9sbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitMb2FkRXJyb3JS
ZXNldFRva2VuKiBGcmFtZUxvYWRlckNsaWVudEdkazo6dG9rZW5Gb3JMb2FkRXJyb3JSZXNldCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50R2RrOjpyZXNldEFmdGVyTG9hZEVycm9yKExvYWRFcnJvclJlc2V0VG9r
ZW4qKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEdkazo6ZG9Ob3RSZXNldEFmdGVyTG9hZEVycm9yKExvYWRFcnJvclJlc2V0VG9rZW4qKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdk
azo6d2lsbENsb3NlRG9jdW1lbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGV0YWNoZWRGcm9tUGFyZW50MSgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpkZXRh
Y2hlZEZyb21QYXJlbnQyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRHZGs6OmRldGFjaGVkRnJvbVBhcmVudDMoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGV0YWNoZWRG
cm9tUGFyZW50NCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50R2RrOjpsb2FkZWRGcm9tUGFnZUNhY2hlKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlkSGFu
ZGxlT25sb2FkRXZlbnRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxMb2FkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdk
azo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlIGludGVydmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGZpcmVEYXRlKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGlzcGF0Y2hEaWRDaGFuZ2VM
b2NhdGlvbldpdGhpblBhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGlzcGF0Y2hXaWxsQ2xvc2UoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlk
UmVjZWl2ZUljb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGlz
cGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlk
Q29tbWl0TG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50R2RrOjpkaXNwYXRjaERpZEZpbmlzaExvYWQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGlzcGF0Y2hEaWRG
aXJzdExheW91dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50R2RrOjpkaXNwYXRjaFNob3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6Y2FuY2VsUG9saWN5Q2hlY2soKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdk
azo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRHZGs6OmRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZShEb2N1bWVudExvYWRlciopCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2Rr
OjpjbGVhckxvYWRpbmdGcm9tUGFnZUNhY2hlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmlzTG9hZGlu
Z0Zyb21QYWdlQ2FjaGUoRG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnJl
dmVydFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1bWVudExvYWRlciopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpjbGVhclVuYXJjaGl2
aW5nU3RhdGUoRG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
Kwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6cHJvZ3Jlc3NTdGFydGVkKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnByb2dy
ZXNzQ29tcGxldGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRHZGs6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6Ondp
bGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVu
dExvYWRlciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50R2RrOjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZmluYWxT
ZXR1cEZvclJlcGxhY2UoRG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6c2V0RGVmZXJzTG9hZGluZyhib29s
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBGcmFtZUxvYWRlckNsaWVu
dEdkazo6aXNBcmNoaXZlTG9hZFBlbmRpbmcoUmVzb3VyY2VMb2FkZXIqKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRHZGs6OmNhbmNlbFBlbmRpbmdBcmNoaXZlTG9hZChSZXNvdXJjZUxvYWRlciop
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
R2RrOjpjbGVhckFyY2hpdmVkUmVzb3VyY2VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmNhblNob3dNSU1FVHlwZShjb25zdCBT
dHJpbmcmIE1JTUVUeXBlKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnJlcHJlc2VudGF0
aW9uRXhpc3RzRm9yVVJMU2NoZW1lKAorICAgIGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK1N0
cmluZyBGcmFtZUxvYWRlckNsaWVudEdkazo6Z2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUo
Y29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6
ZnJhbWVMb2FkQ29tcGxldGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50R2RrOjpwcm92aXNpb25hbExvYWRTdGFydGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnNob3VsZFRyZWF0VVJMQXNTYW1l
QXNDdXJyZW50KGNvbnN0IEtVUkwmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmFkZEhp
c3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGlkRmluaXNoTG9hZCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpwcmVw
YXJlRm9yRGF0YVNvdXJjZVJlcGxhY2VtZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYg
dGl0bGUsIGNvbnN0IEtVUkwmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworU3Ry
aW5nIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjp1c2VyQWdlbnQoKQoreworICAgICByZXR1cm4gIk1v
emlsbGEvNS4wIChQQzsgVTsgSW50ZWw7IExpbnV4OyBlbikgQXBwbGVXZWJLaXQvNDIwKyAoS0hU
TUwsIGxpa2UgR2Vja28pIjsKK30KKworfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1l
TG9hZGVyR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2Fk
ZXJHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVy
R2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2Vv
cmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1v
biBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlrZS5l
bW1lbEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKworI2RlZmluZSBub3RJ
bXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDog
JXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisKK0ZyYW1lKiBGcmFtZUxvYWRlcjo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3Ry
aW5nJiByZWZlcnJlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCisKK1dpZGdldCogRnJhbWVMb2FkZXI6OmNyZWF0ZVBsdWdpbihFbGVtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25z
dCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K1dpZGdldCogRnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6
ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6cmVk
aXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9s
b2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYg
RnJhbWVMb2FkZXJDbGllbnRHZGtfSAorI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudEdka19ICisK
KyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlNoYXJlZC5oIgorI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJGcmFtZUdkay5oIgorI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIERvY3VtZW50TG9hZGVy
OworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRm9ybVN0YXRlOworICAgIGNsYXNzIE5h
dmlnYXRpb25BY3Rpb247CisgICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNzIFJlc291cmNlTG9h
ZGVyOworCisgICAgc3RydWN0IExvYWRFcnJvclJlc2V0VG9rZW47CisKKyAgICBjbGFzcyBGcmFt
ZUxvYWRlckNsaWVudEdkayA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCwgcHVibGljIFNoYXJl
ZDxGcmFtZUxvYWRlckNsaWVudEdkaz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBGcmFt
ZUxvYWRlckNsaWVudEdkayhGcmFtZSogZnJhbWUpOworICAgICAgICB+RnJhbWVMb2FkZXJDbGll
bnRHZGsoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaEZyYW1lTG9hZGVyKCk7CisKKyAg
ICAgICAgdmlydHVhbCBib29sIGhhc1dlYlZpZXcoKSBjb25zdDsgLy8gbWFpbmx5IGZvciBhc3Nl
cnRpb25zCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNGcmFtZVZpZXcoKSBjb25zdDsgLy8gZGl0
dG8KKworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzQmFja0ZvcndhcmRMaXN0KCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZXNldEJhY2tGb3J3YXJkTGlzdCgpOworCisgICAgICAgIHZp
cnR1YWwgYm9vbCBwcm92aXNpb25hbEl0ZW1Jc1RhcmdldCgpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIGJvb2wgbG9hZFByb3Zpc2lvbmFsSXRlbUZyb21QYWdlQ2FjaGUoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVDdXJyZW50SXRlbVBhZ2VDYWNoZSgpOworCisgICAgICAgIHZp
cnR1YWwgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgY29uc3Q7CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIG1ha2VEb2N1bWVudFZpZXcoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1ha2VS
ZXByZXNlbnRhdGlvbihEb2N1bWVudExvYWRlciopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZm9y
Y2VMYXlvdXQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgp
OworCisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ29tbWl0KCk7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24o
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JSZWxvYWQoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JTdGFuZGFyZExvYWQoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JJbnRlcm5hbExvYWQoKTsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlSGlzdG9yeUFmdGVyQ2xpZW50UmVkaXJlY3QoKTsKKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29waWVzT25TY3JvbGwoKTsKKworICAgICAgICB2aXJ0dWFsIExv
YWRFcnJvclJlc2V0VG9rZW4qIHRva2VuRm9yTG9hZEVycm9yUmVzZXQoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlc2V0QWZ0ZXJMb2FkRXJyb3IoTG9hZEVycm9yUmVzZXRUb2tlbiopOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZG9Ob3RSZXNldEFmdGVyTG9hZEVycm9yKExvYWRFcnJvclJlc2V0
VG9rZW4qKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbENsb3NlRG9jdW1lbnQoKTsKKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MSgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoZWRGcm9tUGFyZW50MygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFy
ZW50NCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBsb2FkZWRGcm9tUGFnZUNhY2hlKCk7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxD
bGllbnRSZWRpcmVjdCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsUGVyZm9y
bUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmLCBkb3VibGUgaW50ZXJ2YWwsIGRvdWJsZSBmaXJl
RGF0ZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0
aGluUGFnZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsQ2xvc2UoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCk7CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZCgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaFNob3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbFBvbGljeUNoZWNrKCk7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oRnJhbWVQb2xpY3lG
dW5jdGlvbiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBjbGVhckxvYWRpbmdGcm9tUGFnZUNhY2hlKERvY3VtZW50TG9hZGVyKik7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmdGcm9tUGFnZUNhY2hlKERvY3VtZW50TG9hZGVy
Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUoRG9jdW1l
bnRMb2FkZXIqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyVW5hcmNoaXZpbmdTdGF0ZShE
b2N1bWVudExvYWRlciopOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBwcm9ncmVzc1N0YXJ0ZWQo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByb2dyZXNzQ29tcGxldGVkKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgd2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBmaW5hbFNldHVwRm9yUmVwbGFjZShEb2N1bWVudExvYWRlciopOworCisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNBcmNoaXZlTG9hZFBlbmRpbmcoUmVzb3VyY2VMb2FkZXIqKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGNhbmNlbFBlbmRpbmdBcmNoaXZlTG9hZChSZXNvdXJjZUxvYWRlciopOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBcmNoaXZlZFJlc291cmNlcygpOworICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYgTUlNRVR5cGUpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIGJvb2wgcmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29u
c3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFN0cmluZyBnZW5l
cmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3Q7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZENvbXBsZXRlZCgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCk7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRUcmVhdFVSTEFzU2FtZUFzQ3VycmVudChjb25zdCBLVVJMJikgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGRIaXN0b3J5SXRlbUZvckZyYWdtZW50U2Nyb2xsKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxhY2VtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBLVVJMJik7CisKKyAgICAgICAg
dmlydHVhbCBTdHJpbmcgdXNlckFnZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWYoKSB7
IFNoYXJlZDxGcmFtZUxvYWRlckNsaWVudEdkaz46OnJlZigpOyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkZXJlZigpIHsgU2hhcmVkPEZyYW1lTG9hZGVyQ2xpZW50R2RrPjo6ZGVyZWYoKTsgfQor
ICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIH07CisKK30KKworI2Vu
ZGlmCkluZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9tYWluLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9tYWluLmNwcAkocmV2aXNpb24gMTc3NDYpCisrKyBX
ZWJLaXRUb29scy9HZGtMYXVuY2hlci9tYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICsz
LDYgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRl
IDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtMjUsNiArMjQsOSBA
QAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorc3RhdGljICBHZGtXaW5kb3cgKndpbjsK
K3N0YXRpYyBHTWFpbkxvb3AgKmxvb3A7CisKIGNsYXNzIExhdW5jaGVyRnJhbWVHZGsgOiBwdWJs
aWMgRnJhbWVHZGsKIHsKIHB1YmxpYzoKQEAgLTM5LDE5ICs0MSwxOCBAQAogdm9pZCBMYXVuY2hl
ckZyYW1lR2RrOjpoYW5kbGVkT25sb2FkRXZlbnRzKCkKIHsKICAgICBpZiAobV9leGl0QWZ0ZXJM
b2FkaW5nKQotICAgICAgICBndGtfbWFpbl9xdWl0KCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1
aXQobG9vcCk7CiB9CiAKIHN0YXRpYyAgTGF1bmNoZXJGcmFtZUdkayAqZnJhbWU7Ci1zdGF0aWMg
IEdka1dpbmRvdyAqd2luOwogCiBzdGF0aWMgdm9pZCBoYW5kbGVfZXZlbnQoR2RrRXZlbnQgKmV2
ZW50KQogeworICAgIGZyYW1lLT5oYW5kbGVHZGtFdmVudChldmVudCk7CiAgICAgaWYgKEdES19E
RUxFVEUgPT0gZXZlbnQtPnR5cGUpIHsKLSAgICAgICAgZ3RrX21haW5fcXVpdCgpOworICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGZy
YW1lLT5oYW5kbGVHZGtFdmVudChldmVudCk7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFy
ICphcmd2W10pIApAQCAtNjAsNyArNjEsNyBAQAogICAgIGNoYXIgKnVybDsKICAgICBnZGtfaW5p
dCgmYXJnYywmYXJndik7CiAgICAgZ2RrX2V2ZW50X2hhbmRsZXJfc2V0ICgoR2RrRXZlbnRGdW5j
KWhhbmRsZV9ldmVudCwgTlVMTCwgTlVMTCk7Ci0KKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3
IChOVUxMLFRSVUUpOwogICAgIGF0dHIud2lkdGggPSA4MDA7CiAgICAgYXR0ci5oZWlnaHQgPSA2
MDA7CiAgICAgYXR0ci53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfVE9QTEVWRUw7CkBAIC02OSw3
ICs3MCwxMyBAQAogICAgIGF0dHIuZXZlbnRfbWFzayA9ICgoR0RLX0FMTF9FVkVOVFNfTUFTS15H
REtfUE9JTlRFUl9NT1RJT05fSElOVF9NQVNLKSk7IAogICAgIHdpbiA9IGdka193aW5kb3dfbmV3
KE5VTEwsJmF0dHIsMCk7CiAgICAgZnJhbWUgPSBuZXcgTGF1bmNoZXJGcmFtZUdkayh3aW4pOwot
ICAgIGdka193aW5kb3dfc2hvdyh3aW4pOworICAgIC8vaGFjayB1c2VyIHN0eWxlc2hlZXQgZm9y
IG5vdyBzbyB3ZSBnZXQgYm9yZGVycworICAgIFN0cmluZyBwYXRoID0gImZpbGU6Oi8vIitTdHJp
bmcoZ2V0ZW52KCJQV0QiKSk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gY29uc3RfY2FzdDxT
ZXR0aW5ncyo+KGZyYW1lLT5zZXR0aW5ncygpKTsgCisgICAgU3RyaW5nIHN0eWxlID0gcGF0aCsi
L2Jyb3dzZXIuY3NzIjsKKyAgICBLVVJMIHVzZXJTdHlsZVNoZWV0ID0gS1VSTChzdHlsZS5kZXBy
ZWNhdGVkU3RyaW5nKCkpOworICAgIHNldHRpbmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KHVzZXJTdHlsZVNoZWV0KTsKKwogICAgIHVybCA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20iOwog
ICAgIGJvb2wgZXhpdEFmdGVyTG9hZGluZyA9IGZhbHNlOwogICAgIGZvciAoaW50IGFyZ1BvcyA9
IDE7IGFyZ1BvcyA8IGFyZ2M7ICsrYXJnUG9zKSB7CkBAIC04MSwxOCArODgsMTAgQEAKICAgICBm
cmFtZS0+c2V0RXhpdEFmdGVyTG9hZGluZyhleGl0QWZ0ZXJMb2FkaW5nKTsKICAgICBpZiAodXJs
KSB7CiAgICAgICAgIHByaW50ZigiT1BFTklORyBVUkwgPT0gJXMgXG4iLCB1cmwpOwotICAgICAg
ICBmcmFtZS0+Y2xpZW50KCktPm9wZW5VUkwodXJsKTsKLSAgICB9IGVsc2UgewotI2lmIDAKLSAg
ICAgICAgY2hhciAqcGcgPSAiIDxodG1sPjxoZWFkPjx0aXRsZT5Hb29nbGU8L3RpdGxlPiA8Ym9k
eSBiZ2NvbG9yPSNmZmZmZmYgdGV4dD0jMDAwMDAwPiA8cD48Zm9udCBzaXplPS0yLz4yMDA2IEdv
b2dsZSBIZWxsbyBiaWd3b3JsZCBmcm9tIG1pa2U8L3A+PC9ib2R5PjwvaHRtbD4gIjsKLSAgICAg
ICAgZnJhbWUtPmNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50
KCktPm9wZW4oKTsKLSAgICAgICAgZnJhbWUtPndyaXRlKHBnLHN0cmxlbihwZykpOwotICAgICAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2xvc2UoKTsKLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICBn
dGtfbWFpbigpOworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWQodXJsLDApOworICAgIH0g
CisgICAgZ2RrX3dpbmRvd19zaG93KHdpbik7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwog
ICAgIGRlbGV0ZSBmcmFtZTsKICAgICBnZGtfd2luZG93X2Rlc3Ryb3kod2luKTsKICAgICByZXR1
cm4gMDsKSW5kZXg6IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2dka2xhdW5jaGVyLmJrbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9nZGtsYXVuY2hlci5ia2wJKHJldmlz
aW9uIDE3NzQ2KQorKysgV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvZ2RrbGF1bmNoZXIuYmtsCSh3
b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAogPG1ha2VmaWxlPgogICAgIDxpbmNsdWRlIGZp
bGU9Ii4uLy4uL0Jha2VmaWxlcy9wcmVzZXRzLmJrbCIgLz4KIAotICAgIDx0ZW1wbGF0ZSBpZD0i
d2ViY29yZV9nZGtfbGluayIgdGVtcGxhdGU9Imd0ayxmcmVldHlwZSI+CisgICAgPHRlbXBsYXRl
IGlkPSJ3ZWJjb3JlX2dka19saW5rIiB0ZW1wbGF0ZT0iZ2RrLGZyZWV0eXBlIj4KICAgICAgICAg
PGRlZmluZT5BUFBMRV9DSEFOR0VTPTE8L2RlZmluZT4KICAgICAgICAgPCEtLSB0aGlzIEdDIHZl
cnNpb24gcmVxdWlyZXMgTWFjaCdzIHRocmVhZCBzdXNwZW5kL3Jlc3VtZTogLS0+CiAgICAgICAg
IDxpZiBjb25kPSJQTEFURk9STV9NQUNPU1ghPScxJyI+CkBAIC00Miw5ICs0MiwxMiBAQAogICAg
ICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9pbmNsdWRlPC9pbmNsdWRlPgogICAgICAg
ICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9sb2FkZXI8L2luY2x1ZGU+CiAgICAgICAgIDxp
bmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BhZ2U8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRl
PiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4k
KFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9nZGs8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRl
PiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcms8L2luY2x1ZGU+CisgICAgICAgIDxp
bmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzPC9pbmNsdWRlPgogICAg
ICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybzwv
aW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3M8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWY8L2luY2x1ZGU+CiAgICAgICAgIDxp
bmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWc8L2lu
Y2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZzwvaW5jbHVkZT4KSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzQ2KQorKysgV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDYt
MTEtMTMgIE1pY2hhZWwgRW1tZWwgIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgTGludXhcZ2RrIGJ1aWxkIGZpeGVzLgorCisg
ICAgICAgICogR2RrTGF1bmNoZXIvbWFpbi5jcHA6CisgICAgICAgIChMYXVuY2hlckZyYW1lR2Rr
OjpMYXVuY2hlckZyYW1lR2RrKToKKyAgICAgICAgKG1haW4pOgorCiAyMDA2LTExLTEyICBNYXJr
IFJvd2UgIDxiZGFzaEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1pdHouCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11514</attachid>
            <date>2006-11-13 16:38:47 -0800</date>
            <delta_ts>2006-11-16 12:01:29 -0800</delta_ts>
            <desc>Formatted smaller patch</desc>
            <filename>gdksimple.patch</filename>
            <type>text/plain</type>
            <size>176003</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">SW5kZXg6IEJha2VmaWxlcy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQmFrZWZpbGVzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTc3NTApCisrKyBCYWtlZmlsZXMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDYtMTAtMDkgIE1pY2hhZWwgRW1tZWwgIDxtaWtlLmVt
bWVsQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAg
QWRkIGdkayBsaWJyYXJ5IG9ubHkgbGluayBvcHRpb25zLgorICAgICAgICAqIHByZXNldHMuYmts
OgorCQlBZGRlZCBnZGsgYnVpbGQgaW5zdHJ1Y3Rpb25zCisgICAgICAgICogUmVhZG1lLnR4dDoK
KwogMjAwNi0xMC0wOSAgS3J6eXN6dG9mIEtvd2FsY3p5ayAgPGtrb3dhbGN6eWtAZ21haWwuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmLgpJbmRleDogQmFrZWZpbGVzL1JlYWRtZS50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQmFrZWZpbGVzL1JlYWRtZS50eHQJKHJldmlzaW9uIDE3NzUwKQor
KysgQmFrZWZpbGVzL1JlYWRtZS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk3LDMgKzk3LDIyIEBA
CiAKIGh0dHA6Ly9iYWtlZmlsZS5zb3VyY2Vmb3JnZS5uZXQvZG9jL2h0bWwvcm4wMXJlMDEuaHRt
bAogCitHZGsgYnVpbGQgaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09u
Y2UgdGhlIGJha2VmaWxlcyBhcmUgZ2VuZXJhdGVkIHBlciB0aGUgYWJvdmUgaW5zdHJ1Y3Rpb25z
LgorY2QgV2ViQ29yZS9Qcm9qZWN0cy9nZGsKKworQnVpbGQgdGhlIGRlcml2ZWQgc291cmNlcyBt
YW51YWxseSBvbmNlCitUaGlzIHNob3VsZCBvbmx5IG5lZWQgdG8gYmUgZG9uZSB0aGUgZmlyc3Qg
dGltZSB5b3UgYnVpbGQKK21ha2UgLkRlcml2ZWRTb3VyY2VzCittYWtlCisKK2NkIFdlYmtpdFRv
b2xzL0dka2xhdW5jaGVyCitiYWtlZmlsZV9nZW4KK21ha2UKKy4gLi9FTlYKKy4vZ2RrbGF1bmNo
ZXIKKworZ2RrbGF1bmNoZXIgY2FuIHRha2UgYSB1cmwgYXMgYW4gYXJndW1lbnQKKwpJbmRleDog
QmFrZWZpbGVzL3ByZXNldHMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEJha2VmaWxlcy9wcmVzZXRzLmJr
bAkocmV2aXNpb24gMTc3NTApCisrKyBCYWtlZmlsZXMvcHJlc2V0cy5ia2wJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw4ICsxMDgsMjYgQEAKICAgICAgICAgPGN4eGZsYWdzPiQoQ0FJUk9fQ0ZMQUdT
KTwvY3h4ZmxhZ3M+CiAgICAgPC90ZW1wbGF0ZT4KIAorICAgIDxvcHRpb24gbmFtZT0iR0RLX0xJ
QlMiPgorICAgICAgICA8ZGVmYXVsdC12YWx1ZT4kKG9zLnBvcGVuKCJwa2ctY29uZmlnIC0tbGli
cyBnZGstMi4wIikucmVhZCgpKTwvZGVmYXVsdC12YWx1ZT4KKyAgICA8L29wdGlvbj4KIAorICAg
IDxvcHRpb24gbmFtZT0iR0RLX0NGTEFHUyI+CisgICAgICAgIDxkZWZhdWx0LXZhbHVlPiQob3Mu
cG9wZW4oInBrZy1jb25maWcgLS1jZmxhZ3MgZ2RrLTIuMCIpLnJlYWQoKSk8L2RlZmF1bHQtdmFs
dWU+CisgICAgPC9vcHRpb24+CisKKyAgICA8IS0tIEdESyBzZXR0aW5ncywgZm9yIEdESyBwb3J0
cyAtIHd4IGRvZXNuJ3QgdXNlIHRoZXNlIC0tPgorICAgIDx0ZW1wbGF0ZSBpZD0iZ2RrIj4KKyAg
ICAgICAgPGlmIGNvbmQ9IkZPUk1BVD09J2dudSciPgorICAgICAgICAgICAgPGxkZmxhZ3M+JChH
REtfTElCUyk8L2xkZmxhZ3M+CisgICAgICAgICAgICA8Y3h4ZmxhZ3M+JChHREtfQ0ZMQUdTKTwv
Y3h4ZmxhZ3M+CisgICAgICAgIDwvaWY+CisKKyAgICAgICAgPCEtLSAgICBUT0RPOiBub24tQ3ln
d2luIFdpbmRvd3Mgc3VwcG9ydCBmb3IgdGhpcz8gOikgLS0+CisgICAgPC90ZW1wbGF0ZT4KKwog
ICAgIDxvcHRpb24gbmFtZT0iR1RLX0xJQlMiPgorCiAgICAgICAgIDxkZWZhdWx0LXZhbHVlPiQo
b3MucG9wZW4oInBrZy1jb25maWcgLS1saWJzIGd0aystMi4wIikucmVhZCgpKTwvZGVmYXVsdC12
YWx1ZT4KICAgICA8L29wdGlvbj4KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCShyZXZpc2lvbiAxNzc1MCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDkgQEAKICNlbmRpZgogCiAjaWYgVVNFKENVUkwpCi10eXBlZGVmIHZv
aWQgQ1VSTDsKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8Q1N0cmluZy5oPgogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKQEAgLTg0
LDYgKzg2LDE0IEBACiAjZW5kaWYKICNpZiBVU0UoQ1VSTCkKICAgICAgICAgICAgICwgbV9oYW5k
bGUoMCkKKyAgICAgICAgICAgICwgbV91cmwoMCkKKyAgICAgICAgICAgICwgbV91c2VTaW1wbGUo
ZmFsc2UpCisgICAgICAgICAgICAsIG1fY3VzdG9tSGVhZGVyKDApCisgICAgICAgICAgICAsIG1f
Y3VzdG9tUG9zdEhlYWRlcigwKQorICAgICAgICAgICAgLCBtX2ZpbGVQb3N0KDApCisgICAgICAg
ICAgICAsIG1fcmVzcG9uc2UoMCkKKyAgICAgICAgICAgICwgbV9zZW50UmVzcG9uc2UoZmFsc2Up
CisKICNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTEyMyw2ICsxMzMsMjMgQEAKICNl
bmRpZgogI2lmIFVTRShDVVJMKQogICAgICAgICBDVVJMKiBtX2hhbmRsZTsKKyAgICAgICAgY2hh
ciAqbV91cmw7CisgICAgICAgIC8qCisgICAgICAgICAqIGV4ZWN1dGUgdGhlIGZ1bGwgcmVxdWVz
dCBvbiBjYWxsYmFjaworICAgICAgICAgKiBkb24ndCBtdWx0aXBsZXgKKyAgICAgICAgICovCisg
ICAgICAgIGJvb2wgbV91c2VTaW1wbGU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTdG9yZXMg
ZW50aXJlIHJlc3BvbnNlIGlmIGpvYiBpcyBtX3VzZVNpbXBsZQorICAgICAgICAgKi8KKyAgICAg
ICAgVmVjdG9yPGNoYXI+IG1fcmVzdWx0RGF0YTsKKyAgICAgICAgc3RydWN0IGN1cmxfc2xpc3Qq
IG1fY3VzdG9tSGVhZGVyOworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogbV9jdXN0b21Qb3N0
SGVhZGVyOworICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqbV9maWxlUG9zdDsKKyAgICAg
ICAgVmVjdG9yPGNoYXI+IG1fcG9zdEJ5dGVzOworICAgICAgICBWZWN0b3I8Q1N0cmluZz4gbV9j
c3RyaW5nczsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSogbV9yZXNwb25zZTsKKyAgICAgICAg
Ym9vbCBtX3NlbnRSZXNwb25zZTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBR
U3RyaW5nIG1fY2hhcnNldDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5oCShyZXZpc2lvbiAxNzc1MCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCwxMSBAQAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFTdHJpbmc+CiAjZW5kaWYK
KyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Niw2ICs3MSw5IEBACiAKICAgICB0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtRGF0YTsKICAgICB0eXBlZGVmIFJlZlB0cjxQbGF0Zm9ybVJlc3BvbnNlUXQ+IFBs
YXRmb3JtUmVzcG9uc2U7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICAgdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybURhdGE7CisgICAgIHR5cGVkZWYgUmVzb3VyY2VSZXNwb25zZSogUGxhdGZvcm1SZXNwb25z
ZTsKICNlbHNlCiAgICAgLy8gTm90IHN1cmUgd2hhdCB0aGUgc3RyYXRlZ3kgZm9yIHRoaXMgd2ls
bCBiZSBvbiBvdGhlciBwbGF0Zm9ybXMuCiAgICAgdHlwZWRlZiBzdHJ1Y3QgUGxhdGZvcm1EYXRh
U3RydWN0KiBQbGF0Zm9ybURhdGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMTc3NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTAgQEAKICNl
bmRpZgogI2VuZGlmCiAKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY0xvYWRlcjsKQEAgLTk0LDcg
Kzk4LDE5IEBACiAgICAgZnJpZW5kIExSRVNVTFQgX19zdGRjYWxsIFJlc291cmNlSGFuZGxlV25k
UHJvYyhIV05ELCB1bnNpZ25lZCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKEdESykgfHwgUExBVEZPUk0oUVQpCisjaWYgVVNFKENVUkwpCit2b2lkICBz
ZXR1cFB1dCgpOwordm9pZCAgc2V0dXBQb3N0KCk7Cit2b2lkICBpbml0Sm9iKCk7Cit2b2lkICBw
cm9jZXNzTWVzc2FnZShDVVJMTXNnKiBtc2cpOwordm9pZCAgZmluaXNoKCk7CitzaXplX3Qgd3Jp
dGUodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iKTsKK3NpemVfdCBoZWFkZXIo
Y2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iKTsKK1ZlY3RvcjxjaGFyPiBydW5J
bW1lZGlhdGVseShSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSk7CitDVVJMICpwbGF0Zm9ybUhh
bmRsZSgpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKICAgICBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsKiBnZXRJbnRlcm5hbCgpIHsgcmV0dXJuIGQ7IH0KICNlbmRpZgogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlLmgJKHJldmlzaW9uIDE3NzUw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsMTIgKzU0LDE3IEBACiAgICAgfQogIAogICAgIGNvbnN0IEtVUkwmIHVy
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgdm9pZCBzZXRVcmwoIGNvbnN0IEtVUkwm
IHVybCl7IG1fdXJsID0gdXJsOyB9CiAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWltZVR5cGU7IH0KKyAgICB2b2lkIHNldE1pbWVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpIHsgbV9taW1lVHlwZSA9IG1pbWVUeXBlOyB9CiAgICAgbG9uZyBsb25nIGV4
cGVjdGVkQ29udGVudExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWRDb250ZW50TGVu
Z3RoOyB9CisgICAgdm9pZCBzZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobG9uZyBsb25nIGV4cGVj
dGVkTGVuZ3RoKSB7IG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRMZW5ndGg7IH0K
ICAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHRFbmNvZGluZ05hbWU7IH0KKyAgICB2b2lkIHNldFRleHRFbmNvZGluZ05hbWUoU3RyaW5nJiB0
ZXh0RW5jb2RpbmdOYW1lICkgeyBtX3RleHRFbmNvZGluZ05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1l
OyB9CiAKICAgICAvLyBGSVhNRSBzaG91bGQgY29tcHV0ZSB0aGlzIG9uIHRoZSBmbHkKICAgICBj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdWdnZXN0
ZWRGaWxlbmFtZTsgfQorICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoU3RyaW5nJiBzdWdn
ZXN0ZWRGaWxlbmFtZSkgeyBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7
IH0KIAogICAgIGludCBodHRwU3RhdHVzQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1faHR0cFN0YXR1
c0NvZGU7IH0KICAgICB2b2lkIHNldEhUVFBTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKSB7IG1f
aHR0cFN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY29uc3QgaW50IHNlbGVjdFRpbWVvdXRNUyA9IDU7Citjb25zdCBkb3VibGUgcG9sbFRp
bWVTZWNvbmRzID0gMC4wNTsKKworUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRs
ZU1hbmFnZXIoKQorICAgICAgICA6IG1fZG93bmxvYWRUaW1lcih0aGlzLCAmUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2spCit7CisgICAgRkRfWkVSTygmZmRyZWFk
KTsKKyAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKyAgICBt
YXhmZCA9IDA7CisgICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworICAgIGN1
cmxNdWx0aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOworfQorCitSZXNvdXJjZUhhbmRsZU1h
bmFnZXIqIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2VsZigpCit7CisgICAgc3RhdGljIFJlc291
cmNlSGFuZGxlTWFuYWdlciogc2luZ2xldG9uOworICAgIGlmICghc2luZ2xldG9uKQorICAgICAg
ICBzaW5nbGV0b24gPSBuZXcgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOworICAgIHJldHVybiBzaW5n
bGV0b247Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2Fs
bGJhY2soVGltZXI8UmVzb3VyY2VIYW5kbGVNYW5hZ2VyPiogdGltZXIpCit7CisgICAgRkRfWkVS
TygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2Vw
KTsKKyAgICBjdXJsX211bHRpX2Zkc2V0KGN1cmxNdWx0aUhhbmRsZSwgJmZkcmVhZCwgJmZkd3Jp
dGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworICAgIGludCBucnVubmluZyA9IDA7CisgICAgc3RydWN0
IHRpbWV2YWwgdGltZW91dDsKKyAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgdGltZW91dC50
dl91c2VjID0gc2VsZWN0VGltZW91dE1TICogMTAwMDsgICAgICAgLy8gc2VsZWN0IHdhaXRzIG1p
Y3Jvc2Vjb25kcworICAgIDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZm
ZGV4Y2VwLCAmdGltZW91dCk7CisKKyAgICB3aGlsZSAoQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JN
ID09IGN1cmxfbXVsdGlfcGVyZm9ybShjdXJsTXVsdGlIYW5kbGUsICZucnVubmluZykpIHsgfQor
CisgICAgLy8gY2hlY2sgdGhlIGN1cmwgbWVzc2FnZXMgaW5kaWNhdGluZyBjb21wbGV0ZWQgdHJh
bnNmZXJzCisgICAgLy8gYW5kIGZyZWUgdGhlaXIgcmVzb3VyY2VzCisgICAgaW50IG5tc2dzOwor
ICAgIHdoaWxlIChDVVJMTXNnKiBtc2cgPSBjdXJsX211bHRpX2luZm9fcmVhZChjdXJsTXVsdGlI
YW5kbGUsICZubXNncykpIHsKKyAgICAgICAgQ1VSTCogaGFuZGxlID0gbXNnLT5lYXN5X2hhbmRs
ZTsKKyAgICAgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgICAgIFJlc291cmNlSGFuZGxlICpqb2I7
CisgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRsZSwgQ1VSTElORk9fUFJJVkFURSwgJmpv
Yik7CisgICAgICAgIGpvYi0+cHJvY2Vzc01lc3NhZ2UobXNnKTsKKyAgICB9CisgICAgaWYobnJ1
bm5pbmcgJiYgIW1fZG93bmxvYWRUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2Rvd25sb2Fk
VGltZXIuc3RhcnRPbmVTaG90KHBvbGxUaW1lU2Vjb25kcyk7Cit9CisKKworQ1VSTGNvZGUgUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpydW5JbW1lZGlhdGVseShSZXNvdXJjZUhhbmRsZSogam9iKQor
eworICAgIC8vY2F1c2UgZGF0YSB0byBiZSBjYWNoZWQgaW4gbV9yZXN1bHREYXRhCisgICAgQ1VS
TCogaGFuZGxlID0gam9iLT5wbGF0Zm9ybUhhbmRsZSgpOworICAgIENVUkxjb2RlIHJlczsKKyAg
ICBpZihoYW5kbGUpIHsKKyAgICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxNdWx0
aUhhbmRsZSxoYW5kbGUpOworICAgICAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShoYW5kbGUp
OworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdl
cjo6cmVtb3ZlKFJlc291cmNlSGFuZGxlKiBqb2IpCit7CisgICAgLy90YWtlIG91dCBvZiBjdXJs
IG11bHRpIGZpcnN0ICEKKyAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoY3VybE11bHRpSGFu
ZGxlLCBqb2ItPnBsYXRmb3JtSGFuZGxlKCkpOworICAgIGpvYi0+ZmluaXNoKCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjphZGQoUmVzb3VyY2VIYW5kbGUqIGpvYikKK3sKKyAg
ICBDVVJMTWNvZGUgcmV0ID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKGN1cmxNdWx0aUhhbmRsZSxq
b2ItPnBsYXRmb3JtSGFuZGxlKCkpOworICAgIGlmIChyZXQgJiYgcmV0ICE9IENVUkxNX0NBTExf
TVVMVElfUEVSRk9STSkgeworICAgICAgICBwcmludGYoIkVycm9yICVkIHN0YXJ0aW5nIGpvYiAl
c1xuIiwgcmV0LCBqb2ItPnVybCgpLnVybCgpLmFzY2lpKCkpOworICAgICAgICBqb2ItPmNhbmNl
bCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9kb3dubG9hZFRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVT
ZWNvbmRzKTsKK30KKworCitjaGFyKiBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmdldE1pbWVUeXBl
KFN0cmluZyYgaW5QYXRoKQoreworICAgIERlcHJlY2F0ZWRTdHJpbmcgcGF0aCA9IGluUGF0aC5k
ZXByZWNhdGVkU3RyaW5nKCk7CisgICAgaWYgKHBhdGguZW5kc1dpdGgoIi5zdmciKSkKKyAgICAg
ICAgcmV0dXJuICJpbWFnZS9zdmcreG1sIjsKKyAgICBpZiAocGF0aC5lbmRzV2l0aCgiLnhtbCIp
KQorICAgICAgICByZXR1cm4gInRleHQveG1sIjsKKyAgICBpZiAocGF0aC5lbmRzV2l0aCgiLnhz
bCIpKQorICAgICAgICByZXR1cm4gInRleHQveHNsIjsKKyAgICBpZiAocGF0aC5lbmRzV2l0aCgi
LmpzIikpCisgICAgICAgIHJldHVybiAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IjsKKyAgICBy
ZXR1cm4gInRleHQvaHRtbCI7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlc291cmNlSGFuZGxlTWFuYWdlcl9IXworI2Rl
ZmluZSBSZXNvdXJjZUhhbmRsZU1hbmFnZXJfSF8KKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisKK2NsYXNzIFJlc291cmNlSGFuZGxlTWFuYWdlcgoreworcHVibGljOgorICAg
IHN0YXRpYyBjaGFyKiBnZXRNaW1lVHlwZShTdHJpbmcmKTsKKyAgICBzdGF0aWMgUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyKiBzZWxmKCk7CisgICAgdm9pZCBhZGQoUmVzb3VyY2VIYW5kbGUqKTsKKyAg
ICB2b2lkIHJlbW92ZShSZXNvdXJjZUhhbmRsZSopOworICAgIENVUkxjb2RlIHJ1bkltbWVkaWF0
ZWx5KFJlc291cmNlSGFuZGxlKiBqb2IpOworCitwcml2YXRlOgorICAgIFJlc291cmNlSGFuZGxl
TWFuYWdlcigpOworICAgIHZvaWQgZG93bmxvYWRUaW1lckNhbGxiYWNrKFRpbWVyPFJlc291cmNl
SGFuZGxlTWFuYWdlcj4qKTsKKyAgICBUaW1lcjxSZXNvdXJjZUhhbmRsZU1hbmFnZXI+IG1fZG93
bmxvYWRUaW1lcjsKKyAgICBDVVJMTSogY3VybE11bHRpSGFuZGxlOyAvLyBub3QgZnJlZWQKKwor
ICAgIC8vIGN1cmwgZmlsZWhhbmRsZXMgdG8gcG9sbCB3aXRoIHNlbGVjdAorICAgIGZkX3NldCBm
ZHJlYWQ7CisgICAgZmRfc2V0IGZkd3JpdGU7CisgICAgZmRfc2V0IGZkZXhjZXA7CisKKyAgICBp
bnQgbWF4ZmQ7CisKKyAgICAvLyBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgcHJv
dG9jb2xzCisgICAgY29uc3QgY2hhciogY29uc3QqIGN1cmxfcHJvdG9jb2xzOyAvLyBub3QgZnJl
ZWQKK307CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgorCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VF
cnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisKKyNkZWZpbmUgbm90
SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6
ICVzOiVkICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sX19QUkVUVFlfRlVOQ1RJT05fXyk7IH0g
d2hpbGUoMCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY2hhciBlcnJvcl9idWZm
ZXJbQ1VSTF9FUlJPUl9TSVpFXTsKKworc3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKHZvaWQq
IHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogb2JqKQoreworICAgIFJlc291
cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KG9iaik7CisgICAg
YXNzZXJ0KGpvYik7CisgICAgcmV0dXJuIGpvYi0+d3JpdGUocHRyLHNpemUsbm1lbWIpOworfQor
CitzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNp
emVfdCBubWVtYiwgdm9pZCogb2JqKQoreworICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0
aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KG9iaik7CisgICAgcmV0dXJuIGpvYi0+aGVhZGVyKHB0
cixzaXplLG5tZW1iKTsKK30KKworUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFu
ZGxlSW50ZXJuYWwoKQoreworICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgY3VybF9lYXN5X2Ns
ZWFudXAobV9oYW5kbGUpOworICAgIGlmIChtX3VybCkKKyAgICAgICAgZnJlZShtX3VybCk7CisK
KyAgICBpZiAobV9jdXN0b21IZWFkZXIpCisgICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9j
dXN0b21IZWFkZXIpOworCisgICAgaWYgKG1fY3VzdG9tUG9zdEhlYWRlcikKKyAgICAgICAgY3Vy
bF9zbGlzdF9mcmVlX2FsbChtX2N1c3RvbVBvc3RIZWFkZXIpOworCisgICAgaWYgKG1fZmlsZVBv
c3QpCisgICAgICAgIGN1cmxfZm9ybWZyZWUobV9maWxlUG9zdCk7CisgICAgLy9kb24ndCBkZWxl
dGUgd2UgcGFzcyB0aGlzIG9mZiBpbiB0aGUgZW5kCisgICAgaWYgKG1fcmVzcG9uc2UpCisgICAg
ICAgIG1fcmVzcG9uc2UgPSAwOworfQorCitSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxl
KCkKK3sKKyAgICBkZWxldGUgZDsKK30KKworQ1VSTCogUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3Jt
SGFuZGxlKCkKK3sKKyAgICByZXR1cm4gZC0+bV9oYW5kbGU7Cit9CisKK3ZvaWQgIFJlc291cmNl
SGFuZGxlOjpzZXR1cFB1dCgpCit7CisgICAgaWYgKG1ldGhvZCgpICE9ICJQVVQiKQorICAgICAg
ICByZXR1cm47CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VUExP
QUQsIFRSVUUpIDsKKyAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3Q9TlVMTDsKKyAgICAvL0ZJ
WE1FOiBobW1tIGRpc2FibGUgRXhwZWN0OiAxMDAtY29udGludWUKKyAgICAvL3NsaXN0ID0gY3Vy
bF9zbGlzdF9hcHBlbmQoc2xpc3QsIkV4cGVjdDoiKTsKKyAgICAvL2p1c3Qgc3VwcHJvdCBIdHRw
IDEuMSBjaHVuY2tlZCBlbmNvZGluZyBub3cKKyAgICBzbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5k
KHNsaXN0LCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIpOworICAgIGN1cmxfZWFzeV9zZXRv
cHQoZC0+bV9oYW5kbGUsQ1VSTE9QVF9IVFRQSEVBREVSLCBzbGlzdCk7CisgICAgZC0+bV9jdXN0
b21Qb3N0SGVhZGVyID0gc2xpc3Q7Cit9CisKK3ZvaWQgIFJlc291cmNlSGFuZGxlOjpzZXR1cFBv
c3QoKQoreworICAgIGlmIChtZXRob2QoKSAhPSAiUE9TVCIpCisgICAgICAgIHJldHVybjsKKyAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1QsdHJ1ZSk7CisgICAg
Ly9kaXNhYmxlIEV4cGVjdDogMTAwLWNvbnRpbnVlCisgICAgeworICAgICAgICBzdHJ1Y3QgY3Vy
bF9zbGlzdCAqc2xpc3Q9TlVMTDsKKyAgICAgICAgc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChz
bGlzdCwiRXhwZWN0OiIpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLENV
UkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAgICAgICBkLT5tX2N1c3RvbVBvc3RIZWFkZXIg
PSBzbGlzdDsKKyAgICB9CisKKyAgICAvL2ZpcnN0IGFkZCBhbnkgZGF0YQorICAgIHBvc3REYXRh
KCkuZmxhdHRlbihkLT5tX3Bvc3RCeXRlcyk7CisgICAgaWYgKGQtPm1fcG9zdEJ5dGVzLnNpemUo
KSAhPSAwKSB7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRf
UE9TVEZJRUxEUyxkLT5tX3Bvc3RCeXRlcy5kYXRhKCkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsZC0+bV9wb3N0Qnl0ZXMuc2l6
ZSgpKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBlbGVtZW50cyA9IHBv
c3REYXRhKCkuZWxlbWVudHMoKTsKKyAgICBpbnQgc2l6ZSA9IGVsZW1lbnRzLnNpemUoKTsKKyAg
ICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqbGFzdHB0cj1OVUxMOworCisgICAgZm9yIChpbnQgaSA9
MDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBpZiAoZWxlbWVudHNbaV0ubV90eXBlID09IEZv
cm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGUpIHsKKyAgICAgICAgICAgIENTdHJpbmcgY3N0cmlu
ZyA9ICBlbGVtZW50c1tpXS5tX2ZpbGVuYW1lLnV0ZjgoKTsKKyAgICAgICAgICAgIC8va2VlcCBy
ZWYgaGVyZSBzbyBpdHMgbm90IGZyZWVkCisgICAgICAgICAgICBkLT5tX2NzdHJpbmdzLmFwcGVu
ZChjc3RyaW5nKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gY3N0cmluZy5k
YXRhKCk7CisKKyAgICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIGZpbGUgdXBsb2FkIGZpZWxkICov
CisgICAgICAgICAgICBjdXJsX2Zvcm1hZGQoJmQtPm1fZmlsZVBvc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgJmxhc3RwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1f
Q09QWU5BTUUsICJzZW5kZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1f
RklMRSwgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsK
KworICAgICAgICAgICAgLyogRmlsbCBpbiB0aGUgZmlsZW5hbWUgZmllbGQgKi8KKyAgICAgICAg
ICAgIGN1cmxfZm9ybWFkZCgmZC0+bV9maWxlUG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAmbGFzdHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwg
ImZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZQ09OVEVO
VFMsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisK
KyAgICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIHN1Ym1pdCBmaWVsZCB0b28sIGV2ZW4gaWYgdGhp
cyBpcyByYXJlbHkgbmVlZGVkICovCisgICAgICAgICAgICBjdXJsX2Zvcm1hZGQoJmQtPm1fZmls
ZVBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmxhc3RwdHIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJzdWJtaXQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgInNlbmQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIENVUkxGT1JNX0VORCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVz
b3VyY2VIYW5kbGU6OmluaXRKb2IoKQoreworICAgIHJlZigpOworICAgIERlcHJlY2F0ZWRTdHJp
bmcgc3VybCA9IHVybCgpLnVybCgpOworICAgIGQtPm1fbG9hZGluZyA9IHRydWU7CisgICAgZC0+
bV9yZXNwb25zZSA9IG5ldyBSZXNvdXJjZVJlc3BvbnNlKCk7CisgICAgZC0+bV9yZXNwb25zZS0+
c2V0VXJsKHVybCgpKTsKKworLy9wcmludGYoIlJlc291cmNlSGFuZGxlTWFuYWdlcjo6YWRkIFN0
YXJ0aW5nIGpvYiAlc1xuIixqb2ItPnVybCgpLmFzY2lpKCkpOworICAgIC8vcmVtb3ZlIGFueSBx
dWVyeSBwYXJ0IHNlbnQgdG8gYSBsb2NhbCBmaWxlCisgICAgLy9hbGxvd3MgaHR0cCBzdHlsZSBn
ZXQgb3B0aW9ucyB0byBiZSBoYW5kbGVkIGJ5IGEgbG9jYWwgZmlsZQorICAgIGlmICh1cmwoKS5p
c0xvY2FsRmlsZSgpKSB7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcXVlcnkgPSB1cmwoKS5x
dWVyeSgpOworICAgICAgICBpZiAoIXF1ZXJ5LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdW5z
aWduZWQgaW50IGlkeCA9IHN1cmwuZmluZChxdWVyeSk7CisgICAgICAgICAgICBzdXJsID0gc3Vy
bC5sZWZ0KGlkeCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZC0+bV9oYW5kbGUgPSBjdXJsX2Vh
c3lfaW5pdCgpOworICAgIC8vIHVybCBwdHIgbXVzdCByZW1haW4gdmFsaWQgdGhyb3VnaCB0aGUg
cmVxdWVzdAorICAgIGQtPm1fdXJsID0gIHN0cmR1cChzdXJsLmFzY2lpKCkpOworCisgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUklWQVRFLCB0aGlzKTsKKyAgICAv
L0ZJWE1FOiBuZWVkIHRvIGRlY2lkZSB3aGVyZSBjb29raWVzIHNob3VsZCBnbworICAgIGN1cmxf
ZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfQ09PS0lFRklMRSwgIndrY29va2llcy50
eHQiKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0NPT0tJRUpB
UiwgIndrY29va2llcy50eHQiKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX0VSUk9SQlVGRkVSLCBlcnJvcl9idWZmZXIpOworICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZC0+bV9oYW5kbGUsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVDYWxsYmFjayk7CisgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9XUklURURBVEEsIHRoaXMpOwor
ICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSEVBREVSRlVOQ1RJT04s
IGhlYWRlckNhbGxiYWNrKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX1dSSVRFSEVBREVSLCB0aGlzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX01BWFJFRElSUywgMTApOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+
bV9oYW5kbGUsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0FOWSk7CisgICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VUkwsZC0+bV91cmwpOworCisgICAgLy94bWxI
dHRwUmVxdWVzdCBzZWUgeG1sL3htbGh0dHByZXF1ZXN0LmNwcAorICAgIEhUVFBIZWFkZXJNYXAg
IGN1c3RvbUhlYWRlcnMgPSAgZC0+bV9yZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBp
ZiAoIWN1c3RvbUhlYWRlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0
ICpzbGlzdD1OVUxMOworICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBjdXN0b21IZWFkZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gY3VzdG9tSGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KworICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIFN0cmlu
ZyB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBTdHJpbmcgcGFpciA9IGtleSsiOiAi
K3ZhbHVlOworICAgICAgICAgICAgQ1N0cmluZyBjc3RyaW5nID0gcGFpci51dGY4KCk7CisgICAg
ICAgICAgICAvL3NhdmUgZm9yIGxhdGVyIGNsZWFudXAKKyAgICAgICAgICAgIGQtPm1fY3N0cmlu
Z3MuYXBwZW5kKGNzdHJpbmcpOworICAgICAgICAgICAgc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVu
ZChzbGlzdCxjc3RyaW5nLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IVFRQSEVBREVSLCBzbGlzdCk7CisgICAgICAgIGQt
Pm1fY3VzdG9tSGVhZGVyID0gc2xpc3Q7CisgICAgfQorICAgIC8vZGVmYXVsdCB0byBnZXQKKyAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hUVFBHRVQsIFRSVUUpOwor
CisgICAgaWYgKG1ldGhvZCgpID09ICJQT1NUIikKKyAgICAgICAgc2V0dXBQb3N0KCk7CisgICAg
ZWxzZSBpZiAobWV0aG9kKCkgPT0gIlBVVCIpCisgICAgICAgIHNldHVwUHV0KCk7CisgICAgZWxz
ZSBpZiAobWV0aG9kKCkgPT0gIkhFQUQiKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX05PQk9EWSwgVFJVRSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6
OnN0YXJ0KERvY0xvYWRlciogZG9jTG9hZGVyKQoreworICAgIGluaXRKb2IoKTsKKyAgICAvL0ZJ
WE1FOiBSZXNvdXJjZUhhbmRsZU1hbmFnZXIgc2hvdWxkIGRvIHRoaXMKKyAgICByZWYoKTsKKyAg
ICBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNlbGYoKS0+YWRkKHRoaXMpOworICAgIHJldHVybiB0
cnVlOworfQorCitWZWN0b3I8Y2hhcj4gUmVzb3VyY2VIYW5kbGU6OnJ1bkltbWVkaWF0ZWx5KFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGQtPm1fdXNlU2ltcGxlID0gdHJ1ZTsK
KyAgICBDVVJMY29kZSByZXMgPSBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNlbGYoKS0+cnVuSW1t
ZWRpYXRlbHkodGhpcyk7CisgICAgLy9GSVhNRTogbWFrZSBlcnJvciBkZXNjcmlwdGl2ZQorICAg
IGlmKHJlcyAhPSBDVVJMRV9PSyAmJiBjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRpZEZh
aWxXaXRoRXJyb3IodGhpcyxSZXNvdXJjZUVycm9yKCkpOworCisgICAgcmVzcG9uc2UgPSAqZC0+
bV9yZXNwb25zZTsKKyAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0cyA9IFZlY3RvcjxjaGFyPihkLT5t
X3Jlc3VsdERhdGEpOworICAgIGQtPm1fcmVzdWx0RGF0YS5jbGVhcigpOworICAgIGZpbmlzaCgp
OworICAgIHJldHVybiByZXN1bHRzOworfQorCisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNl
bCgpCit7CisgICAgLy9GSVhNRTogc2VuZCBlcnJvciBvbiBjYW5jZWwgPworICAgIC8vaWYoY2xp
ZW50KCkpCisgICAgLy8gY2xpZW50KCktPmRpZEZhaWxXaXRoRXJyb3IodGhpcyxSZXNvdXJjZUVy
cm9yKCkpOworICAgIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2VsZigpLT5yZW1vdmUodGhpcyk7
CisgICAgZmluaXNoKCk7CisgICAgLy9GSVhNRTogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIHNob3Vs
ZCBkbyB0aGlzCisgICAgZGVyZWYoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2
ZWRSZXNwb25zZShQbGF0Zm9ybVJlc3BvbnNlIHJlc3BvbnNlKQore30KKworCitzaXplX3QgUmVz
b3VyY2VIYW5kbGU6OndyaXRlKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYikK
K3sKKyAgICBpZiAoIWNsaWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWQtPm1f
c2VudFJlc3BvbnNlKSB7CisgICAgICAgIGQtPm1fc2VudFJlc3BvbnNlID0gdHJ1ZTsKKyAgICAg
ICAgY2xpZW50KCktPnJlY2VpdmVkUmVzcG9uc2UodGhpcyxkLT5tX3Jlc3BvbnNlKTsKKyAgICAg
ICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCpkLT5tX3Jlc3BvbnNlKTsKKyAg
ICB9CisgICAgaW50IHRvdGFsU2l6ZSA9IHNpemUgKiBubWVtYjsKKyAgICBjbGllbnQoKS0+ZGlk
UmVjZWl2ZURhdGEodGhpcywgc3RhdGljX2Nhc3Q8Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7Cisg
ICAgaWYgKGQtPm1fdXNlU2ltcGxlKSB7CisgICAgICAgIGQtPm1fcmVzdWx0RGF0YS5hcHBlbmQo
c3RhdGljX2Nhc3Q8Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CisgICAgfQorICAgIHJldHVybiB0
b3RhbFNpemU7Cit9CisKK3NpemVfdCBSZXNvdXJjZUhhbmRsZTo6aGVhZGVyKGNoYXIqIHB0ciwg
c2l6ZV90IHNpemUsIHNpemVfdCBubWVtYikKK3sKKyAgICBpbnQgdG90YWxTaXplID0gc2l6ZSAq
IG5tZW1iOworICAgIFN0cmluZyByZXNwb25zZSA9IFN0cmluZyhwdHIsdG90YWxTaXplKTsKKyAg
ICBpbnQgaW5kZXggPSByZXNwb25zZS5maW5kKCc6Jyk7CisgICAgU3RyaW5nIG5hbWUgPSByZXNw
b25zZS5zdWJzdHJpbmcoMCxpbmRleCsxKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBTdHJpbmcg
dmFsdWUgPSByZXNwb25zZS5zdWJzdHJpbmcoaW5kZXgrMSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisK
KyAgICBpZiAobmFtZSA9PSAiQ29udGVudC1UeXBlOiIpIHsKKyAgICAgICAgU3RyaW5nIG1pbWVU
eXBlID0gdmFsdWU7CisgICAgICAgIFN0cmluZyBjaGFyc2V0OworICAgICAgICAvL3RoZSBtaW1l
IHN0cmluZyBjYW4gaGF2ZSB0eXBlOyBjaGFyc2V0CisgICAgICAgIGluZGV4ID0gdmFsdWUuZmlu
ZCgiOyIpOworICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgIG1pbWVUeXBl
ID0gdmFsdWUubGVmdChpbmRleCk7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldCA9IHZhbHVl
LnJpZ2h0KGluZGV4KzEpOworICAgICAgICAgICAgZC0+bV9yZXNwb25zZS0+c2V0VGV4dEVuY29k
aW5nTmFtZShjaGFyc2V0KTsKKyAgICAgICAgfQorICAgICAgICBkLT5tX3Jlc3BvbnNlLT5zZXRN
aW1lVHlwZShtaW1lVHlwZSk7CisgICAgfQorICAgIGQtPm1fcmVzcG9uc2UtPmh0dHBIZWFkZXJG
aWVsZHMoKS5hZGQobmFtZSx2YWx1ZSk7CisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KKwordm9p
ZCAgUmVzb3VyY2VIYW5kbGU6OnByb2Nlc3NNZXNzYWdlKENVUkxNc2cqIG1zZykKK3sKKyAgICBp
ZiAobXNnLT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7CisgICAgICAgIC8vIGZpbmQgdGhlIG5vZGUg
d2hpY2ggaGFzIHNhbWUgZC0+bV9oYW5kbGUgYXMgY29tcGxldGVkIHRyYW5zZmVyCisgICAgICAg
IGlmIChtc2ctPmRhdGEucmVzdWx0ICE9IENVUkxFX09LKSB7CisgICAgICAgICAgICBjaGFyICpo
YW5kbGVfdXJsPTA7CisgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5tX2hhbmRsZSxD
VVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmaGFuZGxlX3VybCk7CisgICAgICAgICAgICBjb25zdCBj
aGFyICplcnJvciA9ICBjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCk7CisgICAg
ICAgICAgICBwcmludGYoIkN1cmwgRVJST1IgdXJsPSVzIGVycm9yOiVzXG4iLGhhbmRsZV91cmws
ZXJyb3IpOworICAgICAgICAgICAgZnJlZShoYW5kbGVfdXJsKTsKKyAgICAgICAgICAgIC8vRklY
TUU6IG1ha2UgZXJyb3IgZGVzY3JpcHRpdmUKKyAgICAgICAgICAgIGlmKGNsaWVudCgpKQorICAg
ICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRGYWlsV2l0aEVycm9yKHRoaXMsUmVzb3VyY2VFcnJv
cigpKTsKKyAgICAgICAgfQorICAgICAgICBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNlbGYoKS0+
cmVtb3ZlKHRoaXMpOworICAgICAgICBmaW5pc2goKTsKKyAgICAgICAgLy9GSVhNRTogUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyIHNob3VsZCBkbyB0aGlzCisgICAgICAgIGRlcmVmKCk7CisgICAgfQor
fQorCit2b2lkICBSZXNvdXJjZUhhbmRsZTo6ZmluaXNoKCkKK3sKKyAgICBpZiAoY2xpZW50KCkp
IHsKKyAgICAgICAgLy9lbXB0eSBwYWdlIGlmIHRydWUKKyAgICAgICAgaWYgKCFkLT5tX3NlbnRS
ZXNwb25zZSkgeworICAgICAgICAgICAgZC0+bV9zZW50UmVzcG9uc2UgPSB0cnVlOworICAgICAg
ICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCpkLT5tX3Jlc3BvbnNlKTsK
KyAgICAgICAgICAgIGNsaWVudCgpLT5yZWNlaXZlZFJlc3BvbnNlKHRoaXMsZC0+bV9yZXNwb25z
ZSk7CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcodGhpcyk7
CisgICAgICAgIGNsaWVudCgpLT5yZWNlaXZlZEFsbERhdGEodGhpcywwKTsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9n
ZGsvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE3NzUw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZU1hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20g
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jb25zdCBpbnQgc2VsZWN0VGltZW91dE1TID0gNTsKLWNvbnN0IGRvdWJs
ZSBwb2xsVGltZVNlY29uZHMgPSAwLjA1OwotCi1SZXNvdXJjZUhhbmRsZU1hbmFnZXI6OlJlc291
cmNlSGFuZGxlTWFuYWdlcigpCi0gICAgOiBtX3VzZVNpbXBsZShmYWxzZSkKLSAgICAsIGpvYnMo
bmV3IEhhc2hTZXQ8UmVzb3VyY2VIYW5kbGUqPikKLSAgICAsIG1fZG93bmxvYWRUaW1lcih0aGlz
LCAmUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2spCi17Ci0gICAg
Y3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwotICAgIGN1cmxNdWx0aUhhbmRsZSA9
IGN1cmxfbXVsdGlfaW5pdCgpOwotfQotCi1SZXNvdXJjZUhhbmRsZU1hbmFnZXIqIFJlc291cmNl
SGFuZGxlTWFuYWdlcjo6Z2V0KCkKLXsKLSAgICBzdGF0aWMgUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
KiBzaW5nbGV0b247Ci0gICAgaWYgKCFzaW5nbGV0b24pCi0gICAgICAgIHNpbmdsZXRvbiA9IG5l
dyBSZXNvdXJjZUhhbmRsZU1hbmFnZXI7Ci0gICAgcmV0dXJuIHNpbmdsZXRvbjsKLX0KLQotdm9p
ZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnVzZVNpbXBsZVRyYW5zZmVyKGJvb2wgdXNlU2ltcGxl
KQotewotICAgIG1fdXNlU2ltcGxlID0gdXNlU2ltcGxlOwotfQotCi1zdGF0aWMgc2l6ZV90IHdy
aXRlQ2FsbGJhY2sodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBv
YmopCi17Ci0gICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFu
ZGxlKj4ob2JqKTsKLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gam9iLT5nZXRJbnRl
cm5hbCgpOwotICAgIGludCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7Ci0gICAgaWYgKGQtPmNs
aWVudCgpKQotICAgICAgICBkLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEoam9iLCBzdGF0aWNf
Y2FzdDxjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKLSAgICByZXR1cm4gdG90YWxTaXplOwotfQot
Ci1zdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNp
emVfdCBubWVtYiwgdm9pZCogZGF0YSkKLXsKLSAgICBpbnQgdG90YWxTaXplID0gc2l6ZSAqIG5t
ZW1iOwotICAgIHJldHVybiB0b3RhbFNpemU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soVGltZXI8UmVzb3VyY2VIYW5kbGVNYW5hZ2VyPiog
dGltZXIpCi17Ci0gICAgaWYgKGpvYnMtPmlzRW1wdHkoKSkgewotICAgICAgICBtX2Rvd25sb2Fk
VGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX3VzZVNpbXBs
ZSkgewotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVzb3VyY2VIYW5kbGUqPjo6aXRlcmF0b3IgaXQg
PSBqb2JzLT5iZWdpbigpOyBpdCAhPSBqb2JzLT5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAg
UmVzb3VyY2VIYW5kbGUqIGpvYiA9ICppdDsKLSAgICAgICAgICAgIFJlc291cmNlSGFuZGxlSW50
ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgICAgICAgICBDVVJMY29kZSByZXMg
PSBjdXJsX2Vhc3lfcGVyZm9ybShkLT5tX2hhbmRsZSk7Ci0gICAgICAgICAgICBpZiAocmVzICE9
IENVUkxFX09LKQotICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgV0lUSCBKT0IgJWRcbiIs
IHJlcyk7Ci0gICAgICAgICAgICBpZiAoZC0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgICAgICBk
LT5jbGllbnQoKS0+cmVjZWl2ZWRBbGxEYXRhKGpvYiwgMCk7Ci0gICAgICAgICAgICAgICAgZC0+
Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcoam9iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGN1cmxfZWFzeV9jbGVhbnVwKGQtPm1faGFuZGxlKTsKLSAgICAgICAgICAgIGQtPm1faGFu
ZGxlID0gMDsKLSAgICAgICAgfQotICAgICAgICBqb2JzLT5jbGVhcigpOwotICAgICAgICBtX2Rv
d25sb2FkVGltZXIuc3RvcCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZEX1pFUk8oJmZkcmVh
ZCk7Ci0gICAgICAgIEZEX1pFUk8oJmZkd3JpdGUpOwotICAgICAgICBGRF9aRVJPKCZmZGV4Y2Vw
KTsKLSAgICAgICAgY3VybF9tdWx0aV9mZHNldChjdXJsTXVsdGlIYW5kbGUsICZmZHJlYWQsICZm
ZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKLSAgICAgICAgaW50IG5ydW5uaW5nOwotICAgICAg
ICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OwotICAgICAgICBpbnQgcmV0dmFsOwotICAgICAgICB0
aW1lb3V0LnR2X3NlYyA9IDA7Ci0gICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHNlbGVjdFRpbWVv
dXRNUyAqIDEwMDA7ICAgICAgIC8vIHNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMKLSAgICAgICAg
cmV0dmFsID0gOjpzZWxlY3QobWF4ZmQgKyAxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAs
ICZ0aW1lb3V0KTsKLSAgICAgICAgc3dpdGNoIChyZXR2YWwpIHsKLSAgICAgICAgICAgIGNhc2Ug
LTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0IGVycm9yCi0jaWZuZGVmIE5ERUJV
RwotICAgICAgICAgICAgICAgIHByaW50ZigiJXMsIHNlbGVjdCBlcnJvciglZClcbiIsIF9fUFJF
VFRZX0ZVTkNUSU9OX18scmV0dmFsKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIC8qIGZhbGx0
aHJvdWdoKi8KLSAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgIC8vIHNlbGVjdCB0
aW1lb3V0Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgICAgIHByaW50ZigiJXMsIHNlbGVj
dCB0aW1lb3V0ICVkXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLHJldHZhbCk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaC4gdGhpcyBjYW4gYmUgdGhlIGZpcnN0IHBlcmZv
cm0gdG8gYmUgbWFkZSAqLwotICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg
ICAgICAvLyAxKyBkZXNjcmlwdG9ycyBoYXZlIGRhdGEKLSAgICAgICAgICAgICAgICB3aGlsZSAo
Q1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNID09IGN1cmxfbXVsdGlfcGVyZm9ybShjdXJsTXVsdGlI
YW5kbGUsICZucnVubmluZykpCi0gICAgICAgICAgICAgICAgICAgIHsgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gY2hlY2sgdGhlIGN1cmwgbWVzc2FnZXMgaW5kaWNhdGluZyBjb21wbGV0ZWQg
dHJhbnNmZXJzCi0gICAgICAgIC8vIGFuZCBmcmVlIHRoZWlyIHJlc291cmNlcwotICAgICAgICBp
bnQgbm1zZ3M7Ci0gICAgICAgIHdoaWxlIChDVVJMTXNnKiBtc2cgPSBjdXJsX211bHRpX2luZm9f
cmVhZChjdXJsTXVsdGlIYW5kbGUsICZubXNncykpIHsKLSAgICAgICAgICAgIGlmIChtc2ctPm1z
ZyA9PSBDVVJMTVNHX0RPTkUpIHsKLSAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSBub2RlIHdo
aWNoIGhhcyBzYW1lIGQtPm1faGFuZGxlIGFzIGNvbXBsZXRlZCB0cmFuc2ZlcgotICAgICAgICAg
ICAgICAgIENVUkwqIGNoYW5kbGUgPSBtc2ctPmVhc3lfaGFuZGxlOwotICAgICAgICAgICAgICAg
IGFzc2VydChjaGFuZGxlKTsKLSAgICAgICAgICAgICAgICBSZXNvdXJjZUhhbmRsZSAqam9iOwot
ICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGNoYW5kbGUsIENVUkxJTkZPX1BSSVZB
VEUsICZqb2IpOwotICAgICAgICAgICAgICAgIGFzc2VydChqb2IpOyAvL2ZpeG1lOiBhc3NlcnQt
PmlmID8KLSAgICAgICAgICAgICAgICAvLyBpZiBmb3VuZCwgZGVsZXRlIGl0Ci0gICAgICAgICAg
ICAgICAgaWYgKGpvYikgewotICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsICpkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG1zZy0+ZGF0YS5yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1VSTEVf
T0s6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgdGhpcyB0byBhdXRoZW50
aWNhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzcENvZGUgPSAtMTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5tX2hhbmRsZSwg
Q1VSTElORk9fUkVTUE9OU0VfQ09ERSwgJnJlc3BDb2RlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZW1vdmUoam9iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDdXJsIEVSUk9SICVzXG4i
LCBjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgYW4gZXJyb3I/Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVtb3ZlKGpvYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBwcmludGYoIkN1cmxSZXF1ZXN0IG5vdCBmb3VuZCwgZXZlbnRob3Vn
aCBjdXJsIGQtPm1faGFuZGxlIGZpbmlzaGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0KDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0g
ICAgfQotICAgIGlmICgham9icy0+aXNFbXB0eSgpKQotICAgICAgICBtX2Rvd25sb2FkVGltZXIu
c3RhcnRPbmVTaG90KHBvbGxUaW1lU2Vjb25kcyk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjpyZW1vdmUoUmVzb3VyY2VIYW5kbGUqIGpvYikKLXsKLSAgICBSZXNvdXJjZUhhbmRs
ZUludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgIGlmICghZC0+bV9oYW5kbGUp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAoam9icy0+Y29udGFpbnMoam9iKSkKLSAgICAgICAg
am9icy0+cmVtb3ZlKGpvYik7Ci0gICAgaWYgKGpvYnMtPmlzRW1wdHkoKSkKLSAgICAgICAgbV9k
b3dubG9hZFRpbWVyLnN0b3AoKTsKLSAgICBpZiAoZC0+Y2xpZW50KCkpIHsKLSAgICAgICAgZC0+
Y2xpZW50KCktPnJlY2VpdmVkQWxsRGF0YShqb2IsIDApOwotICAgICAgICBkLT5jbGllbnQoKS0+
ZGlkRmluaXNoTG9hZGluZyhqb2IpOwotICAgIH0KLSAgICBpZiAoZC0+bV9oYW5kbGUpIHsKLSAg
ICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxNdWx0aUhhbmRsZSwgZC0+bV9oYW5k
bGUpOwotICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChkLT5tX2hhbmRsZSk7Ci0gICAgICAgIGQt
Pm1faGFuZGxlID0gTlVMTDsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
OjphZGQoUmVzb3VyY2VIYW5kbGUqIGpvYikKLXsKLSAgICBib29sIHN0YXJ0VGltZXIgPSBqb2Jz
LT5pc0VtcHR5KCk7Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50
ZXJuYWwoKTsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHVybCA9IGpvYi0+dXJsKCkudXJsKCk7Ci0g
ICAgZC0+bV9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJJVkFURSwgam9iKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBlcnJvcl9idWZmZXIpOwotICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVD
YWxsYmFjayk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9XUklU
RURBVEEsIGpvYik7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9I
RUFERVJGVU5DVElPTiwgaGVhZGVyQ2FsbGJhY2spOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+
bV9oYW5kbGUsIENVUkxPUFRfV1JJVEVIRUFERVIsIGpvYik7Ci0gICAgY3VybF9lYXN5X3NldG9w
dChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7Ci0gICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9NQVhSRURJUlMsIDEwKTsKLSAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9BTlkpOwot
ICAgIC8vIHVybCBwdHIgbXVzdCByZW1haW4gdmFsaWQgdGhyb3VnaCB0aGUgcmVxdWVzdAotICAg
IGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVJMLCB1cmwuYXNjaWkoKSk7
Ci0KLSAgICBpZiAobV91c2VTaW1wbGUpCi0gICAgICAgIGpvYnMtPmFkZChqb2IpOwotICAgIGVs
c2UgewotICAgICAgICBDVVJMTWNvZGUgcmV0ID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKGN1cmxN
dWx0aUhhbmRsZSwgZC0+bV9oYW5kbGUpOwotICAgICAgICAvLyBkb24ndCBjYWxsIHBlcmZvcm0s
IGJlY2F1c2UgZXZlbnRzIG11c3QgYmUgYXN5bmMKLSAgICAgICAgLy8gdGltZW91dCB3aWxsIG9j
Y3VyIGFuZCBkbyBjdXJsX211bHRpX3BlcmZvcm0KLSAgICAgICAgaWYgKHJldCAmJiByZXQgIT0g
Q1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7Ci0gICAgICAgICAgICBwcmludGYoIkVycm9yICVk
IHN0YXJ0aW5nIGpvYiAlc1xuIiwgcmV0LCBqb2ItPnVybCgpLnVybCgpLmFzY2lpKCkpOwotICAg
ICAgICAgICAgLy8gRklYTUU6IHJlcG9ydCBhbiBlcnJvcj8KLSAgICAgICAgICAgIHN0YXJ0VGlt
ZXIgPWZhbHNlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGpvYnMtPmFkZChqb2IpOwot
ICAgIH0KLSAgICBpZiAoc3RhcnRUaW1lcikKLSAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0YXJ0
T25lU2hvdChwb2xsVGltZVNlY29uZHMpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdl
cjo6Y2FuY2VsKFJlc291cmNlSGFuZGxlKiBqb2IpCi17Ci0gICAgcmVtb3ZlKGpvYik7Ci0gICAg
Ly8gRklYTUU6IHJlcG9ydCBhbiBlcnJvcj8KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZU1hbmFnZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFu
ZGxlTWFuYWdlci5oCShyZXZpc2lvbiAxNzc1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9nZGsvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBSZXNvdXJjZUhhbmRsZU1hbmFnZXJfSF8KLSNkZWZpbmUgUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyX0hfCi0KLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIqIGdldCgpOwotICAgIHZvaWQgYWRk
KFJlc291cmNlSGFuZGxlKik7Ci0gICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqKTsKLQot
ICAgIC8vIElmIHRydWUsIGRvbid0IG11bHRpcGxleCBkb3dubG9hZHM6IGRvd25sb2FkIGNvbXBs
ZXRlbHkgb25lIGF0IGEgdGltZS4KLSAgICB2b2lkIHVzZVNpbXBsZVRyYW5zZmVyKGJvb2wgdXNl
U2ltcGxlKTsKLQotcHJpdmF0ZToKLSAgICBSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKTsKLSAgICB2
b2lkIGRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUhhbmRsZU1hbmFnZXI+Kik7
Ci0gICAgdm9pZCByZW1vdmUoUmVzb3VyY2VIYW5kbGUqKTsKLQotICAgIGJvb2wgbV91c2VTaW1w
bGU7Ci0gICAgSGFzaFNldDxSZXNvdXJjZUhhbmRsZSo+KiBqb2JzOwotICAgIFRpbWVyPFJlc291
cmNlSGFuZGxlTWFuYWdlcj4gbV9kb3dubG9hZFRpbWVyOwotICAgIENVUkxNKiBjdXJsTXVsdGlI
YW5kbGU7IC8vIG5vdCBmcmVlZAotCi0gICAgLy8gY3VybCBmaWxlaGFuZGxlcyB0byBwb2xsIHdp
dGggc2VsZWN0Ci0gICAgZmRfc2V0IGZkcmVhZDsKLSAgICBmZF9zZXQgZmR3cml0ZTsKLSAgICBm
ZF9zZXQgZmRleGNlcDsKLQotICAgIGludCBtYXhmZDsKLSAgICBjaGFyIGVycm9yX2J1ZmZlcltD
VVJMX0VSUk9SX1NJWkVdOwotCi0gICAgLy8gTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2Ygc3VwcG9y
dGVkIHByb3RvY29scwotICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjdXJsX3Byb3RvY29sczsgLy8g
bm90IGZyZWVkCi19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2dkay9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9nZGsvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMTc3NTAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJEb2NMb2FkZXIuaCIKLSNp
bmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQotewotfQotCi1SZXNvdXJjZUhhbmRsZTo6
flJlc291cmNlSGFuZGxlKCkKLXsKLSAgICBjYW5jZWwoKTsKLX0KLQotYm9vbCBSZXNvdXJjZUhh
bmRsZTo6c3RhcnQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCi17Ci0gICAgcmVmKCk7Ci0gICAgUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpnZXQoKS0+YWRkKHRoaXMpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQotewotICAgIFJlc291cmNlSGFuZGxl
TWFuYWdlcjo6Z2V0KCktPmNhbmNlbCh0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dkay9DdXJzb3JHZGsuY3BwCShyZXZpc2lvbiAxNzc1MCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
OCw0ICsxOTgsMjAgQEAKICAgICByZXR1cm4gYzsKIH0KIAorY29uc3QgQ3Vyc29yJiB2ZXJ0aWNh
bFRleHRDdXJzb3IoKQoreworICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiB9CisKKworY29u
c3QgQ3Vyc29yJiBjZWxsQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwor
fQorCitjb25zdCBDdXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gcG9p
bnRlckN1cnNvcigpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9DaHJvbWVD
bGllbnRHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9DaHJvbWVDbGll
bnRHZGsuaAkocmV2aXNpb24gMTc3NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9DaHJvbWVD
bGllbnRHZGsuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDE0IEBACiAjZGVmaW5lIENo
cm9tZUNsaWVudEdka19ICiAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJT
aGFyZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2hyb21lQ2xpZW50
R2RrIDogcHVibGljIENocm9tZUNsaWVudCwgcHVibGljIFNoYXJlZDxDaHJvbWVDbGllbnRHZGs+
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkNocm9tZUNsaWVudEdkaygpIHsgfQor
ICAgICAgICBDaHJvbWVDbGllbnRHZGsoKTsKKyAgICAgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50
R2RrKCk7CiAgICAgICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByKTsKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgd2luZG93UmVj
dCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRWRpdG9yQ2xpZW50R2RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRWRpdG9yQ2xpZW50R2RrLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9FZGl0b3JDbGllbnRHZGsuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRWRp
dG9yQ2xpZW50R2RrX0gKKyNkZWZpbmUgRWRpdG9yQ2xpZW50R2RrX0gKKworI2luY2x1ZGUgIkVk
aXRvckNsaWVudC5oIgorI2luY2x1ZGUgIlNoYXJlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEVkaXRvckNsaWVudEdkayA6IHB1YmxpYyBFZGl0b3JDbGllbnQsIHB1YmxpYyBT
aGFyZWQ8RWRpdG9yQ2xpZW50R2RrPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZERlbGV0ZVJhbmdlKFJhbmdlKik7CisgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dEZWxldGVJ
bnRlcmZhY2UoSFRNTEVsZW1lbnQqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHZpcnR1YWwgYm9vbCBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQoKTsKKyAgICB2aXJ0dWFsIGludCAgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKTsK
KworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKTsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopOworICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRp
b24qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OlJhbmdlKik7
CisgICAgCisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZygpOworICAgIHZpcnR1YWwg
dm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5k
RWRpdGluZygpOworICAgIHZpcnR1YWwgdm9pZCByZWYoKSB7IFNoYXJlZDxFZGl0b3JDbGllbnRH
ZGs+OjpyZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIHsgU2hhcmVkPEVkaXRvckNs
aWVudEdkaz46OmRlcmVmKCk7IH0KKworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOiB0cz00
IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAkocmV2aXNpb24gMTc3NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRl
ICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRl
ICJDaHJvbWVDbGllbnRHZGsuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJD
U3RyaW5nLmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCkBAIC00Miw4ICs0MSw2IEBACiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGlzdG9yeS5oIgogI2luY2x1ZGUgIklj
b24uaCIKLSNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJY29uTG9hZGVyLmgi
CiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTGFu
Z3VhZ2UuaCIKQEAgLTEyOCw5ICsxMjUsNiBAQAogdm9pZCBXZWJDb3JlOjpmaW5kU2VudGVuY2VC
b3VuZGFyeShVQ2hhciBjb25zdCosIGludCwgaW50LCBpbnQqLCBpbnQqKSB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KIGludCBXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgoVUNoYXIgY29uc3Qq
LCBpbnQsIGludCwgYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1WZWN0b3I8Y2hhcj4gU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoTG9h
ZGVyICpsb2FkZXIsIERvY0xvYWRlciAqZG9jTG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiBWZWN0b3I8Y2hhcj4oKTsgfQotfQogCiB2b2lkIEZyYW1lR2RrOjpmb2N1c1dpbmRv
dygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBGcmFtZUdkazo6dW5mb2N1c1dpbmRvdygp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQpAQCAtMTM5LDcgKzEzMyw2IEBACiBLSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZSogRnJhbWVHZGs6OmdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCAq
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBLSlM6OkJpbmRpbmdzOjpJbnN0YW5j
ZSogRnJhbWVHZGs6OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0ICopIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIEZyYW1l
R2RrOjpiaW5kaW5nUm9vdE9iamVjdCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0K
LVdpZGdldCogRnJhbWVHZGs6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYs
IEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7IH0KIGJvb2wgRnJhbWVHZGs6OmNhblJlZG8oKSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBib29sIEZyYW1lR2RrOjpjYW5VbmRvKCkgY29uc3Qg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogdm9pZCBGcmFtZUdkazo6cmVnaXN0ZXJD
b21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9CkBAIC0xNDcsNyArMTQwLDYgQEAKIGJvb2wgRnJhbWVHZGs6OnNob3VsZElu
dGVycnVwdEphdmFTY3JpcHQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQog
dm9pZCBGcmFtZUdkazo6cHJpbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlKiBGcmFtZUdkazo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0
KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBGcmFtZUdkazo6cGFzc01v
dXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
MDsgfQogdm9pZCBGcmFtZUdkazo6aXNzdWVDdXRDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9CiB2b2lkIEZyYW1lR2RrOjppc3N1ZUNvcHlDb21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9CiB2b2lkIEZyYW1lR2RrOjppc3N1ZVVuZG9Db21tYW5kKCkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9CkBAIC0xNjEsMzYgKzE1Myw4IEBACiBib29sIEZyYW1lR2RrOjp0b29sYmFyVmlzaWJsZSgp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIHZvaWQgRnJhbWVHZGs6Omlzc3VlVHJh
bnNwb3NlQ29tbWFuZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogYm9vbCBGcmFtZUdkazo6Y2Fu
UGFzdGUoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIEZyYW1l
R2RrOjpjYW5Hb0JhY2tPckZvcndhcmQoaW50KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiAwOyB9CiB2b2lkIEZyYW1lR2RrOjppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQo
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgRnJhbWVHZGs6OmlzTG9hZFR5cGVSZWxvYWQo
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotS1VSTCBGcmFtZUdkazo6b3Jp
Z2luYWxSZXF1ZXN0VVJMKCkgY29uc3QgeyByZXR1cm4gS1VSTCgpOyB9CiAKLXZvaWQgRnJhbWVH
ZGs6OmdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQot
aW50IEZyYW1lR2RrOjpnZXRIaXN0b3J5TGVuZ3RoKCkge25vdEltcGxlbWVudGVkKCk7IHJldHVy
biAwOyB9Ci1LVVJMIEZyYW1lR2RrOjpoaXN0b3J5VVJMKGludCBkaXN0YW5jZSkgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gS1VSTCgpOyB9Ci0KLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRHZGs6
OndpbmRvd1JlY3QoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBGbG9hdFJlY3QoKTsgfQot
dm9pZCBDaHJvbWVDbGllbnRHZGs6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByKSB7
bm90SW1wbGVtZW50ZWQoKTsgfQotRmxvYXRSZWN0IENocm9tZUNsaWVudEdkazo6cGFnZVJlY3Qo
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotZmxvYXQgQ2hyb21l
Q2xpZW50R2RrOjpzY2FsZUZhY3RvcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDEuMDsg
fQotdm9pZCBDaHJvbWVDbGllbnRHZGs6OmZvY3VzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12
b2lkIENocm9tZUNsaWVudEdkazo6dW5mb2N1cygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotV2Vi
Q29yZTo6UGFnZSogQ2hyb21lQ2xpZW50R2RrOjpjcmVhdGVXaW5kb3coY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVdlYkNvcmU6OlBhZ2Uq
IENocm9tZUNsaWVudEdkazo6Y3JlYXRlTW9kYWxEaWFsb2coY29uc3QgRnJhbWVMb2FkUmVxdWVz
dCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdm9pZCBDaHJvbWVDbGllbnRHZGs6
OnNob3coKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgQ2hyb21lQ2xpZW50R2RrOjpjYW5S
dW5Nb2RhbCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIENocm9t
ZUNsaWVudEdkazo6cnVuTW9kYWwoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgQ2hyb21l
Q2xpZW50R2RrOjpzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Ci1ib29sIENocm9tZUNsaWVudEdkazo6dG9vbGJhcnNWaXNpYmxlKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgQ2hyb21lQ2xpZW50R2RrOjpzZXRTdGF0dXNiYXJW
aXNpYmxlKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotYm9vbCBDaHJvbWVDbGllbnRHZGs6
OnN0YXR1c2JhclZpc2libGUoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQot
dm9pZCBDaHJvbWVDbGllbnRHZGs6OnNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotYm9vbCBDaHJvbWVDbGllbnRHZGs6OnNjcm9sbGJhcnNWaXNpYmxlKCkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgQ2hyb21lQ2xpZW50R2Rr
OjpzZXRNZW51YmFyVmlzaWJsZShib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWJvb2wgQ2hy
b21lQ2xpZW50R2RrOjptZW51YmFyVmlzaWJsZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IGZhbHNlOyB9Ci12b2lkIENocm9tZUNsaWVudEdkazo6c2V0UmVzaXphYmxlKGJvb2wpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCiAvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkg
dG8gYWxsb3cgRFJUIHRvIHJ1bik6ICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjMsNyArMTg3LDYgQEAKIGJvb2wgRnJh
bWVHZGs6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mLCBjb25zdCBTZWxl
Y3Rpb24mLCBXZWJDb3JlOjpFQWZmaW5pdHksIGJvb2wpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IGJvb2wgRnJhbWVHZGs6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiB2b2lkIEZyYW1lR2RrOjpyZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKFdlYkNvcmU6OlNlbGVjdGlvbiBjb25zdCYsIGJvb2wpIHsgfQotRnJhbWUqIEZyYW1l
R2RrOjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgRWxl
bWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKSB7IHJldHVybiAwOyB9
CiAKIHZvaWQgRnJhbWVHZGs6OnNhdmVEb2N1bWVudFN0YXRlKCkgeyB9CiB2b2lkIEZyYW1lR2Rr
OjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+
KSB7IH0KQEAgLTIzNiwxNiArMTk5LDYgQEAKIAogdm9pZCBzeXN0ZW1CZWVwKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9CiAKLWJvb2wgQ2hlY2tJZlJlbG9hZGluZyhEb2NMb2FkZXIqKSB7IHJldHVy
biBmYWxzZTsgfQotdGltZV90IENhY2hlT2JqZWN0RXhwaXJlc1RpbWUoRG9jTG9hZGVyKiwgUGxh
dGZvcm1SZXNwb25zZSkgeyByZXR1cm4gMDsgfQotdm9pZCBDaGVja0NhY2hlT2JqZWN0U3RhdHVz
KERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKikgeyB9Ci1EZXByZWNhdGVkU3RyaW5nIFJlc3Bv
bnNlVVJMKFBsYXRmb3JtUmVzcG9uc2UpIHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsgfQot
Ym9vbCBJc1Jlc3BvbnNlVVJMRXF1YWxUb1VSTChQbGF0Zm9ybVJlc3BvbnNlICwgY29uc3QgU3Ry
aW5nJiBVUkwpIHsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIFJlc3BvbnNlSXNNdWx0aXBhcnQoUGxh
dGZvcm1SZXNwb25zZSkgeyByZXR1cm4gZmFsc2U7IH0KLURlcHJlY2F0ZWRTdHJpbmcgUmVzcG9u
c2VNSU1FVHlwZShQbGF0Zm9ybVJlc3BvbnNlKSB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7
IH0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFBsYXRmb3JtUmVzcG9uc2UoUGxhdGZvcm1SZXNw
b25zZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIENhY2hlZFJlc291cmNlOjpzZXRBbGxE
YXRhKFBsYXRmb3JtRGF0YSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KIH0KIAogdm9pZCBXaWRn
ZXQ6OnNldEVuYWJsZWQoYm9vbCkgeyB9CkBAIC0zNTMsMTMgKzMwNiwxMyBAQAogdm9pZCBSZW5k
ZXJUaGVtZUdkazo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCogZSkgY29uc3Qge30KIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50
VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLWJvb2wgUmVzb3VyY2VMb2FkZXI6
OmxvYWRzQmxvY2tlZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKIElj
b246Okljb24oKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIEljb246On5JY29uKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9CiBQYXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFBhc3NSZWZQdHI8
SWNvbj4obmV3IEljb24oKSk7IH0KIHZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCisKIEZsb2F0UmVjdCBGb250
OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRT
dHlsZSYsIGNvbnN0IEludFBvaW50JiwgaW50KSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsg
fQogdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IH0KIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCShyZXZpc2lvbiAxNzc1MCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDUwICsyOSwyMCBAQAogI2RlZmluZSBGcmFtZUdka19IXwogCiAjaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVu
dC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1ZGUgIkZvcm1EYXRhLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlIDxn
ZGsvZ2RrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKIGNsYXNz
IEZyYW1lR2RrOwotY2xhc3MgRm9ybURhdGE7CitjbGFzcyBFZGl0b3JDbGllbnQ7CiAKLWNsYXNz
IEZyYW1lR2RrQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5GcmFtZUdka0NsaWVudCgp
IHt9OwogCi0gICAgdmlydHVhbCB2b2lkIHNldEZyYW1lKGNvbnN0IEZyYW1lR2RrKikgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5VUkwoY29uc3QgS1VSTCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc3VibWl0Rm9ybShjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYsIGNvbnN0
IEZvcm1EYXRhKikgPSAwOwotfTsKLQotY2xhc3MgRnJhbWVHZGtDbGllbnREZWZhdWx0IDogcHVi
bGljIEZyYW1lR2RrQ2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
ICBSZXNvdXJjZUhhbmRsZUNsaWVudCAKLXsKLXB1YmxpYzoKLQotICAgIEZyYW1lR2RrQ2xpZW50
RGVmYXVsdCgpOwotICAgIHZpcnR1YWwgfkZyYW1lR2RrQ2xpZW50RGVmYXVsdCgpOwotCi0gICAg
Ly8gRnJhbWVHZGtDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWUoY29uc3QgRnJhbWVH
ZGsqKTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlblVSTChjb25zdCBLVVJMJik7Ci0gICAgdmlydHVh
bCB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBjb25z
dCBGb3JtRGF0YSopOwotCi0gICAgLy8gUmVzb3VyY2VIYW5kbGVDbGllbnQKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjZWl2ZWRSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIFBsYXRmb3JtUmVzcG9uc2Up
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IGNoYXIqLCBpbnQpOwotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZEFsbERhdGEoUmVzb3VyY2VI
YW5kbGUqLCBQbGF0Zm9ybURhdGEpOwotCi1wcml2YXRlOgotICAgIEZyYW1lR2RrKiBtX2ZyYW1l
OwotICAgIGJvb2wgbV9iZWdpbkNhbGxlZCA6IDE7Ci0KLX07Ci0KIGNsYXNzIEZyYW1lR2RrIDog
cHVibGljIEZyYW1lIHsKIHB1YmxpYzoKICAgICBGcmFtZUdkayhQYWdlKiwgRWxlbWVudCosIFBh
c3NSZWZQdHI8RWRpdG9yQ2xpZW50Pik7CkBAIC04MCwxMCArNTAsNyBAQAogICAgIHZpcnR1YWwg
fkZyYW1lR2RrKCk7CiAKICAgICB2b2lkIGhhbmRsZUdka0V2ZW50KEdka0V2ZW50Kik7Ci0gICAg
dmlydHVhbCB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIEV2ZW50Kik7
Ci0gICAgdmlydHVhbCB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBF
dmVudCopOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ2xvc2UoKTsKIApAQCAtMTA5LDcgKzc2LDYgQEAKICAg
ICB2aXJ0dWFsIFJhbmdlKiBtYXJrZWRUZXh0UmFuZ2UoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
U3RyaW5nIGluY29taW5nUmVmZXJyZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyB1c2Vy
QWdlbnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG1pbWVUeXBlRm9yRmlsZU5hbWUo
Y29uc3QgU3RyaW5nJikgY29uc3Q7CiAKQEAgLTExOCw5ICs4NCw2IEBACiAKICAgICB2aXJ0dWFs
IGJvb2wgbGFzdEV2ZW50SXNNb3VzZVVwKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFz
c1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgJiwg
RnJhbWUqIHN1YmZyYW1lID0gMCk7Ci0gICAgdmlydHVhbCBib29sIHBhc3NXaGVlbEV2ZW50VG9D
aGlsZFdpZGdldChOb2RlKik7Ci0KICAgICB2aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlw
ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0RW1i
ZWRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKTsKQEAgLTE0NCwxMCArMTA3LDYgQEAKICAgICBi
b29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgcGFydENsZWFyZWRJbkJlZ2luKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2Fu
R29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdv
QmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpOwotICAgIHZpcnR1YWwgaW50IGdldEhpc3RvcnlM
ZW5ndGgoKTsKLSAgICB2aXJ0dWFsIEtVUkwgaGlzdG9yeVVSTChpbnQgZGlzdGFuY2UpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZWRPbmxvYWRFdmVudHMoKTsKIApAQCAtMTU4LDIwICsxMTcs
MTIgQEAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwogCiAg
ICAgYm9vbCBrZXlQcmVzcyhjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmKTsKLSAgICB2aXJ0
dWFsIEtVUkwgb3JpZ2luYWxSZXF1ZXN0VVJMKCkgY29uc3Q7CiAKICAgICBJbnRSZWN0IGZyYW1l
R2VvbWV0cnkoKSBjb25zdDsKICAgICB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVj
dCYpOwotICAgIHZpcnR1YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiByZWZlcnJl
cik7Ci0gICAgV2lkZ2V0KiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBF
bGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKIAotICAgIEZyYW1lR2Rr
Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQogCiBwcml2YXRlOgot
ICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRUeXBlUmVsb2FkKCk7Ci0gICAgdmlydHVhbCBib29sIHBh
c3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCopOwotCi0gICAgRnJhbWVHZGtDbGllbnQq
IG1fY2xpZW50OwogICAgIEdka0RyYXdhYmxlKiBtX2RyYXdhYmxlOwogfTsKIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvQ2hyb21lQ2xpZW50R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9DaHJvbWVDbGllbnRHZGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvQ2hyb21lQ2xpZW50R2RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRHZGsuaCIKKworI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4K
KworCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1F
OiBVTklNUExFTUVOVEVEOiAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgw
KQorCituYW1lc3BhY2UgV2ViQ29yZQoreworCisgICAgCitDaHJvbWVDbGllbnRHZGs6OkNocm9t
ZUNsaWVudEdkaygpCit7Cit9CisKKworQ2hyb21lQ2xpZW50R2RrOjp+Q2hyb21lQ2xpZW50R2Rr
KCkKK3sKK30KKworCit2b2lkIENocm9tZUNsaWVudEdkazo6c2V0V2luZG93UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitGbG9hdFJl
Y3QgQ2hyb21lQ2xpZW50R2RrOjp3aW5kb3dSZWN0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKworCitGbG9hdFJlY3QgQ2hyb21lQ2xpZW50
R2RrOjpwYWdlUmVjdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gd2lu
ZG93UmVjdCgpOworfQorCisKK2Zsb2F0IENocm9tZUNsaWVudEdkazo6c2NhbGVGYWN0b3IoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDE7Cit9CisKKwordm9pZCBDaHJv
bWVDbGllbnRHZGs6OmZvY3VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3Zv
aWQgQ2hyb21lQ2xpZW50R2RrOjp1bmZvY3VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisKK1BhZ2UqIENocm9tZUNsaWVudEdkazo6Y3JlYXRlV2luZG93KGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
KworUGFnZSogQ2hyb21lQ2xpZW50R2RrOjpjcmVhdGVNb2RhbERpYWxvZyhjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JikKK3sKKyAgICByZXR1cm4gMDsKK30KKworCit2b2lkIENocm9tZUNsaWVudEdk
azo6c2hvdygpCit7CisgICAgZm9jdXMoKTsKK30KKworCitib29sIENocm9tZUNsaWVudEdkazo6
Y2FuUnVuTW9kYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCisKK3ZvaWQgQ2hyb21lQ2xpZW50R2RrOjpydW5Nb2RhbCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworCit2b2lkIENocm9tZUNsaWVudEdkazo6c2V0VG9vbGJhcnNWaXNp
YmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitib29sIENocm9tZUNs
aWVudEdkazo6dG9vbGJhcnNWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIENocm9tZUNsaWVudEdkazo6c2V0U3RhdHVzYmFy
VmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBDaHJv
bWVDbGllbnRHZGs6OnN0YXR1c2JhclZpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3ZvaWQgQ2hyb21lQ2xpZW50R2RrOjpzZXRTY3Jv
bGxiYXJzVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9v
bCBDaHJvbWVDbGllbnRHZGs6OnNjcm9sbGJhcnNWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQgQ2hyb21lQ2xpZW50R2RrOjpz
ZXRNZW51YmFyVmlzaWJsZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jv
b2wgQ2hyb21lQ2xpZW50R2RrOjptZW51YmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50R2RrOjpzZXRS
ZXNpemFibGUoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JlZW5HZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1NjcmVlbkdkay5jcHAJKHJldmlzaW9uIDE3NzExKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtMjIsMjcgKzIyLDY4IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLS8vIEZJWE1FOiBz
aG91bGQgYmUgcmVuYW1lZCB0byBTY3JlZW5DbGllbnRHZGsuY3BwCi0KICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTY3JlZW5DbGllbnRHZGsuaCIKLQorI2luY2x1ZGUgIlNjcmVlbi5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJX
aWRnZXQuaCIKKyNpbmNsdWRlICJGcmFtZUdkay5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogCi0jZGVmaW5lIG5vdElt
cGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIiVzIEZJWE1FOiBVTklNUExFTUVOVEVE
ICVzOiVkXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdo
aWxlKDApCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJ
WE1FOiBVTklNUExFTUVOVEVEOiAlczolZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLF9fUFJF
VFRZX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW50
IFNjcmVlbkNsaWVudEdkazo6ZGVwdGgoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAzMjsg
fQotaW50IFNjcmVlbkNsaWVudEdkazo6ZGVwdGhQZXJDb21wb25lbnQoKSB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiA4OyB9CitzdGF0aWMgR2RrRHJhd2FibGUqIGRyYXdhYmxlRm9yV2lkZ2V0
KFdpZGdldCogd2lkZ2V0KQoreworICAgIC8vZm9yIG5vdyB0aGlzIGlzIHRydWUKKyAgICByZXR1
cm4gd2lkZ2V0LT5kcmF3YWJsZSgpOworfQogCi1ib29sIFNjcmVlbkNsaWVudEdkazo6aXNNb25v
Y2hyb21lKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK0Zsb2F0UmVjdCBz
Y3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9
IGRyYXdhYmxlRm9yV2lkZ2V0KHdpZGdldCk7CisgICAgaWYgKCFkcmF3YWJsZSkKKyAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX2RyYXdhYmxl
X2dldF9zY3JlZW4oZHJhd2FibGUpOworICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgZ2RrX3Nj
cmVlbl9nZXRfd2lkdGgoc2NyZWVuKSwgZ2RrX3NjcmVlbl9nZXRfaGVpZ2h0KHNjcmVlbikpOwor
fQogCi1GbG9hdFJlY3QgU2NyZWVuQ2xpZW50R2RrOjpyZWN0KCkgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLUZsb2F0UmVjdCBTY3JlZW5DbGllbnRHZGs6OnVzYWJs
ZVJlY3QoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBGbG9hdFJlY3QoKTsgfQoraW50IHNj
cmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQoreworICAgIEdka0RyYXdhYmxl
KiBkcmF3YWJsZSA9IGRyYXdhYmxlRm9yV2lkZ2V0KHdpZGdldCk7CisgICAgaWYgKCFkcmF3YWJs
ZSkKKyAgICAgICAgcmV0dXJuIDg7CisgICAgaW50IGRlcHRoID0gIGdka19kcmF3YWJsZV9nZXRf
ZGVwdGgoZHJhd2FibGUpOworICAgIGlmKCBkZXB0aCA+IDE2ICkKKyAgICAgICAgcmV0dXJuIDg7
CisgICAgaWYoIGRlcHRoID09IDE2IHx8IGRlcHRoID09IDE1ICkKKyAgICAgICAgcmV0dXJuIDU7
CisgICAgcmV0dXJuIDg7Cit9CiAKK2ludCBzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBkcmF3YWJsZUZvcldpZGdldCh3aWRnZXQpOwor
ICAgIGlmICghZHJhd2FibGUpCisgICAgICAgIHJldHVybiAzMjsKKyAgICBpbnQgZGVwdGggPSBn
ZGtfZHJhd2FibGVfZ2V0X2RlcHRoKGRyYXdhYmxlKTsKIH0KKworYm9vbCBzY3JlZW5Jc01vbm9j
aHJvbWUoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgcmV0dXJuIChzY3JlZW5EZXB0aCh3aWRnZXQp
ID09IDEpOworfQorCitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdl
dCkKK3sKKyAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOworfQorCit9CisvLyB2aW06dHM9
NDpldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRWRpdG9yQ2xpZW50R2RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9FZGl0b3JDbGllbnRHZGsuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRWRpdG9yQ2xpZW50R2RrLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+IAorICogQ29weXJpZ2h0IChDKSAy
MDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudEdkay5oIgorCisjaW5jbHVk
ZSA8c3RkaW8uaD4KKworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRl
cnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7
IH0gd2hpbGUoMCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEVkaXRvckNsaWVudEdk
azo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvckNsaWVudEdkazo6c2hvdWxkU2hvd0Rl
bGV0ZUludGVyZmFjZShIVE1MRWxlbWVudCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIEVkaXRvckNsaWVudEdkazo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEVk
aXRvckNsaWVudEdkazo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IEVkaXRvckNsaWVudEdkazo6
c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50R2RrOjpzaG91bGRCZWdpbkVkaXRpbmco
V2ViQ29yZTo6UmFuZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEVkaXRvckNsaWVudEdkazo6c2hvdWxkRW5kRWRpdGluZyhXZWJDb3Jl
OjpSYW5nZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgRWRpdG9yQ2xpZW50R2RrOjpzaG91bGRBcHBseVN0eWxlKFdlYkNvcmU6OkNTU1N0
eWxlRGVjbGFyYXRpb24qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJDb3JlOjpSYW5nZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50R2RrOjpkaWRCZWdpbkVkaXRpbmcoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50R2RrOjpyZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRp
dG9yQ2xpZW50R2RrOjpkaWRFbmRFZGl0aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9GcmFtZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVH
ZGsuY3BwCShyZXZpc2lvbiAxNzc1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzggKzI3LDM4IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGcmFtZUdkay5oIgotCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R2Rr
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5o
IgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50R2RrLmgiCiAjaW5jbHVkZSAiRnJh
bWVQcml2YXRlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSA8Z2RrL2dkay5o
PgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlNTTEtleUdlbmVyYXRvci5oIgorI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNTTEtleUdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAi
RWRpdG9yQ2xpZW50R2RrLmgiCiAKIC8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZy
b20gV2ViS2l0CiAvLyBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIGFuZCBJJ20gbm90IHN1cmUg
d2hlcmUKQEAgLTc1LDczICs3NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRnJhbWVH
ZGtDbGllbnREZWZhdWx0OjpGcmFtZUdka0NsaWVudERlZmF1bHQoKQotICAgIDogUmVzb3VyY2VI
YW5kbGVDbGllbnQoKQotICAgICwgbV9mcmFtZSgwKQotICAgICwgbV9iZWdpbkNhbGxlZChmYWxz
ZSkKLXsKLX0KIAotRnJhbWVHZGtDbGllbnREZWZhdWx0Ojp+RnJhbWVHZGtDbGllbnREZWZhdWx0
KCkKLXsKLX0KLQotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OnNldEZyYW1lKGNvbnN0IEZy
YW1lR2RrKiBmcmFtZSkKLXsKLSAgICBtX2ZyYW1lID0gY29uc3RfY2FzdDxGcmFtZUdkayo+KGZy
YW1lKTsKLX0KLQotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6Om9wZW5VUkwoY29uc3QgS1VS
TCYgdXJsKQotewotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kaWRPcGVuVVJMKHVybCk7Ci0gICAg
bV9iZWdpbkNhbGxlZCA9IGZhbHNlOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJs
KTsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGxvYWRlciA9IFJlc291cmNlSGFuZGxlOjpj
cmVhdGUocmVxdWVzdCwgdGhpcywgMCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGtDbGllbnREZWZhdWx0
OjpzdWJtaXRGb3JtKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IEZvcm1EYXRhKiBwb3N0RGF0YSkKLXsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7Ci0KLSAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhv
ZChtZXRob2QpOwotICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoKnBvc3REYXRhKTsKLQotICAgIFJl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gbG9hZGVyID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShyZXF1
ZXN0LCB0aGlzLCAwKTsKLX0KLQotdm9pZCBGcmFtZUdka0NsaWVudERlZmF1bHQ6OnJlY2VpdmVk
UmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBQbGF0Zm9ybVJlc3BvbnNlKQotewotICAgIC8vIG5v
LW9wCi19Ci0KLXZvaWQgRnJhbWVHZGtDbGllbnREZWZhdWx0OjpkaWRSZWNlaXZlRGF0YShSZXNv
dXJjZUhhbmRsZSogam9iLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGlm
ICghbV9iZWdpbkNhbGxlZCkgewotICAgICAgICBtX2JlZ2luQ2FsbGVkID0gdHJ1ZTsKLQotI2lm
IDAgIC8vIEZJWE1FOiBUaGlzIGlzIGZyb20gUXQgdmVyc2lvbiwgbmVlZCB0byBiZSByZW1vdmVk
IG9yIEdkayBlcXVpdmFsZW50IHdyaXR0ZW4KLSAgICAgICAgLy8gQXNzaWduIGNvcnJlY3QgbWlt
ZXR5cGUgX2JlZm9yZV8gY2FsbGluZyBiZWdpbigpIQotICAgICAgICBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgICAgICBpZiAoZCkgewotICAgICAg
ICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9mcmFtZS0+cmVzb3VyY2VSZXF1ZXN0KCkp
OwotICAgICAgICAgICAgcmVxdWVzdC5tX3Jlc3BvbnNlTUlNRVR5cGUgPSBkLT5tX21pbWV0eXBl
OwotICAgICAgICAgICAgbV9mcmFtZS0+c2V0UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpOwotICAg
ICAgICB9Ci0jZW5kaWYKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmJlZ2luKGpvYi0+dXJs
KCkpOwotICAgIH0KLQotICAgIG1fZnJhbWUtPmxvYWRlcigpLT53cml0ZShkYXRhLCBsZW5ndGgp
OwotfQotCi12b2lkIEZyYW1lR2RrQ2xpZW50RGVmYXVsdDo6cmVjZWl2ZWRBbGxEYXRhKFJlc291
cmNlSGFuZGxlKiBqb2IsIFBsYXRmb3JtRGF0YSBkYXRhKQotewotICAgIG1fZnJhbWUtPmxvYWRl
cigpLT5lbmQoKTsKLSAgICBtX2JlZ2luQ2FsbGVkID0gZmFsc2U7Ci19Ci0KIHN0YXRpYyB2b2lk
IGRvU2Nyb2xsKGNvbnN0IFJlbmRlck9iamVjdCogciwgZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0
YVkpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzY3JvbGxpbmcgZG9uZSBoZXJlIHNob3VsZCBiZSBk
b25lIGluIHRoZSBkZWZhdWx0IGhhbmRsZXJzCkBAIC0xNjEsNyArOTUsOCBAQAogfQogCiBGcmFt
ZUdkazo6RnJhbWVHZGsoR2RrRHJhd2FibGUqIGdka2RyYXdhYmxlKQotICAgIDogRnJhbWUobmV3
IFBhZ2UobmV3IENocm9tZUNsaWVudEdkaygpKSwgMCwgMCksIG1fZHJhd2FibGUoZ2RrZHJhd2Fi
bGUpCisgICAgOiBGcmFtZShuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKCkpLDAsbmV3IEVk
aXRvckNsaWVudEdkaygpKQorICAgICwgbV9kcmF3YWJsZShnZGtkcmF3YWJsZSkKIHsKICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3M7CiAgICAgc2V0dGluZ3MtPnNldEF1dG9M
b2FkSW1hZ2VzKHRydWUpOwpAQCAtMTc1LDE1ICsxMTAsMTQgQEAKICAgICBzZXR0aW5ncy0+c2V0
U2Fuc1NlcmlmRm9udE5hbWUoIkFyaWFsIik7CiAgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udE5h
bWUoIkNvdXJpZXIiKTsKICAgICBzZXR0aW5ncy0+c2V0U3RkRm9udE5hbWUoIkFyaWFsIik7Cisg
ICAgc2V0dGluZ3MtPnNldElzSmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7CiAgICAgc2V0U2V0dGlu
Z3Moc2V0dGluZ3MpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG5ldyBGcmFtZVZpZXcodGhpcyk7
CiAgICAgc2V0Vmlldyh2aWV3KTsKICAgICBJbnRSZWN0IGdlb20gPSBmcmFtZUdlb21ldHJ5KCk7
CiAgICAgdmlldy0+cmVzaXplKGdlb20ud2lkdGgoKSwgZ2VvbS5oZWlnaHQoKSk7CiAgICAgdmll
dy0+U2Nyb2xsVmlldzo6c2V0RHJhd2FibGUoZ2RrZHJhd2FibGUpOwotCi0gICAgbV9jbGllbnQg
PSBuZXcgRnJhbWVHZGtDbGllbnREZWZhdWx0KCk7Ci0gICAgbV9jbGllbnQtPnNldEZyYW1lKHRo
aXMpOworICAgIGxvYWRlcigpLT5zZXRDbGllbnQobmV3IEZyYW1lTG9hZGVyQ2xpZW50R2RrKHRo
aXMpKTsKIH0KIAogRnJhbWVHZGs6OkZyYW1lR2RrKFBhZ2UqIHBhZ2UsIEVsZW1lbnQqIGVsZW1l
bnQsIFBhc3NSZWZQdHI8RWRpdG9yQ2xpZW50PiBlZGl0b3JDbGllbnQpCkBAIC0xOTIsOCArMTI2
LDYgQEAKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3M7CiAgICAgc2V0dGlu
Z3MtPnNldEF1dG9Mb2FkSW1hZ2VzKHRydWUpOwogICAgIHNldFNldHRpbmdzKHNldHRpbmdzKTsK
LSAgICBtX2NsaWVudCA9IG5ldyBGcmFtZUdka0NsaWVudERlZmF1bHQoKTsKLSAgICBtX2NsaWVu
dC0+c2V0RnJhbWUodGhpcyk7CiB9CiAKIEZyYW1lR2RrOjp+RnJhbWVHZGsoKQpAQCAtMjAyLDIx
ICsxMzQsNiBAQAogfQogCiAKLXZvaWQgRnJhbWVHZGs6OnVybFNlbGVjdGVkKGNvbnN0IEZyYW1l
TG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIEV2ZW50KikKLXsKLSAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdCA9IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCk7Ci0KLSAg
ICBpZiAoIWNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGllbnQoKS0+b3BlblVS
TChyZXF1ZXN0LnVybCgpKTsKLX0KLQotU3RyaW5nIEZyYW1lR2RrOjp1c2VyQWdlbnQoKSBjb25z
dAotewotICAgIHJldHVybiAiTW96aWxsYS81LjAgKFBDOyBVOyBJbnRlbDsgTGludXg7IGVuKSBB
cHBsZVdlYktpdC80MjArIChLSFRNTCwgbGlrZSBHZWNrbykiOwotfQotCiB2b2lkIEZyYW1lR2Rr
OjpydW5KYXZhU2NyaXB0QWxlcnQoU3RyaW5nIGNvbnN0JiBtZXNzYWdlKQogewogfQpAQCAtMjI2
LDkgKzE0Myw2IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRnJhbWVHZGs6OnNldFRp
dGxlKGNvbnN0IFN0cmluZyAmdGl0bGUpCi17Ci19CiAKIHZvaWQgRnJhbWVHZGs6OmhhbmRsZUdk
a0V2ZW50KEdka0V2ZW50KiBldmVudCkKIHsKQEAgLTM4NiwyNCArMzAwLDYgQEAKICAgICByZXR1
cm4gSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotYm9vbCBGcmFtZUdkazo6cGFz
c1doZWVsRXZlbnRUb0NoaWxkV2lkZ2V0KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXaWRnZXQqIHdpZGdldCA9IHN0YXRpY19jYXN0
PFJlbmRlcldpZGdldCo+KHJlbmRlcmVyKS0+d2lkZ2V0KCk7Ci0gICAgaWYgKCF3aWRnZXQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KIAotYm9vbCBGcmFtZUdk
azo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmIG1ldiwgRnJhbWUqKQotewotICAgIGlmIChtZXYudGFyZ2V0Tm9kZSgpID09IDApCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KIAogfQpJbmRleDogV2ViQ29y
ZS9Qcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvUHJv
amVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJrbAkocmV2aXNpb24gMTc3NTApCisrKyBXZWJDb3JlL1By
b2plY3RzL2dkay93ZWJjb3JlLWdkay5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw5
IEBACiAgICAgICAgIDxjb21tYW5kPmJhc2ggLWMgInRvdWNoIC5EZXJpdmVkU291cmNlcyI8L2Nv
bW1hbmQ+CiAgICAgPC9hY3Rpb24+CiAKLSAgICA8ZGxsIGlkPSJ3ZWJjb3JlLWdkayIgdGVtcGxh
dGU9IndlYmNvcmVfYmFzZSxmcmVldHlwZSxndGssY3VybCxjYWlybyxzcWxpdGUzIj4KLSAgICAg
ICAgPCEtLSBGSVhNRTogY3JlYXRlIGEgZGVidWcgb3B0aW9uIGFuZCBzZXQgdGhlc2UgYWNjb3Jk
aW5nbHkgLS0+Ci0gICAgICAgIDwhLS0gY2hlY2sgZm9yIHVuZGVmaW5lZCBzeW1ib2xzIGZvciBk
ZWJ1Z2dpbmcgcmVhc29ucyAtLT4KLQorICAgIDxkbGwgaWQ9IndlYmNvcmUtZ2RrIiB0ZW1wbGF0
ZT0id2ViY29yZV9iYXNlLHdlYmNvcmVfY3VybCxmcmVldHlwZSxnZGssY3VybCxjYWlybyxzcWxp
dGUzIj4KKwk8IS0tIEZJWE1FOiBjcmVhdGUgYSBkZWJ1ZyBvcHRpb24gYW5kIHNldCB0aGVzZSBh
Y2NvcmRpbmdseSAtLT4KKwk8IS0tIGNoZWNrIGZvciB1bmRlZmluZWQgc3ltYm9scyBmb3IgZGVi
dWdnaW5nIHJlYXNvbnMgLS0+CiAgICAgICAgIDxwcmUtYnVpbGQtdGFyZ2V0Pi5EZXJpdmVkU291
cmNlczwvcHJlLWJ1aWxkLXRhcmdldD4KICAgICAgICAgPGRpcm5hbWU+LjwvZGlybmFtZT4KICAg
ICAgICAgPHBpYz5vbjwvcGljPgpAQCAtNDMsNDggKzQyLDQ3IEBACiAgICAgICAgIDxkZWJ1Zy1p
bmZvPm9uPC9kZWJ1Zy1pbmZvPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0v
Z2RrPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vbmV0d29y
ay9nZGs8L2luY2x1ZGU+Ci0gICAgICAgIDxkZWZpbmU+QlVJTERJTkdfR0RLX188L2RlZmluZT4K
LSAgICAgICAgPGRlZmluZT5CVUlMRElOR19DQUlST19fPC9kZWZpbmU+Ci0gICAgICAgIDxpbmNs
dWRlPnBsYXRmb3JtL2dkazwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+cGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm88L2luY2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFz
L2RldmljZS9jYWlybzwvaW5jbHVkZT4KLSAgICAgICAgPGRlZmluZT5YUEFUSF9TVVBQT1JUPC9k
ZWZpbmU+Ci0gICAgICAgIDwhLS0gZ2RrIGJ1aWxkIGJyb2tlbiB3aXRoIHdpdGhvdXQgTkRFQlVH
IGRlZmluZWQgLS0+Ci0gICAgICAgIDxkZWZpbmU+TkRFQlVHPC9kZWZpbmU+CisgICAgCTxkZWZp
bmU+QlVJTERJTkdfR0RLX188L2RlZmluZT4KKyAgICAJPGRlZmluZT5CVUlMRElOR19DQUlST19f
PC9kZWZpbmU+CisJCTxpbmNsdWRlPnBsYXRmb3JtL2dkazwvaW5jbHVkZT4KKwkgICAgPGluY2x1
ZGU+JChTUkNESVIpL2xvYWRlci9nZGs8L2luY2x1ZGU+CisJCTxpbmNsdWRlPnBsYXRmb3JtL2Nh
aXJvPC9pbmNsdWRlPgorICAgIAk8ZGVmaW5lPlhQQVRIX1NVUFBPUlQ8L2RlZmluZT4KICAKLSAg
ICAgICAgPHNvdXJjZXM+Ci0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNw
cAotICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAKLSAgICAgICAgICAgIHBs
YXRmb3JtL2dkay9Gb250Q2FjaGVHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9u
dERhdGFHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udEdkay5jcHAKLSAgICAg
ICAgICAgIHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcAotICAgICAgICAgICAg
cGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0dseXBo
TWFwR2RrLmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAotICAg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCi0gICAgICAgICAgICBwbGF0
Zm9ybS9nZGsvUGFnZUdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9SZW5kZXJQb3B1
cE1lbnVHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3Bw
Ci0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKLSAgICAgICAgICAg
IHBsYXRmb3JtL2dkay9TaGFyZWRUaW1lckxpbnV4LmNwcAotICAgICAgICAgICAgcGxhdGZvcm0v
Z2RrL1N5c3RlbVRpbWVMaW51eC5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5j
cHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCi0gICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2dkay9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCi0KLSAgICAgICAgICAgICQoV0VC
Q09SRV9TT1VSQ0VTX1BMQVRGT1JNX0NBSVJPKQotICAgICAgICA8L3NvdXJjZXM+Ci0KLSAgICAg
ICAgPGNsZWFuLWZpbGVzPgotICAgICAgICAgICAgLkRlcml2ZWRTb3VyY2VzCi0gICAgICAgICAg
ICBybSAtcmYgJChTUkNESVIpL0Rlcml2ZWRTb3VyY2VzCi0gICAgICAgICAgICBybSAtcmYgJChT
UkNESVIpL2luY2x1ZGUvSmF2YVNjcmlwdENvcmUKLSAgICAgICAgICAgIHJtIC1yZiAkKFNSQ0RJ
UikvUHJvamVjdHMvZ2RrL29iai1nbnUKLSAgICAgICAgPC9jbGVhbi1maWxlcz4KKyAgICAgICAg
PHNvdXJjZXM+CQkKKyAgICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19DQUlST19CSU5ESU5HUykK
KyAgICAgICAgICBsb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyR2RrLmNwcAorICAgICAgICAgIGxvYWRl
ci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ2RrL0ltYWdlR2RrLmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9DaHJvbWVDbGllbnRH
ZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0Nvb2tpZUphckdkay5jcHAKKyAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9FZGl0
b3JDbGllbnRHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAK
KyAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCisgICAgICAgICAgcGxhdGZv
cm0vZ2RrL0ZvbnRHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURh
dGFHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAorICAgICAgICAg
IHBsYXRmb3JtL2dkay9HbHlwaE1hcEdkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvS2V5
RXZlbnRHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCisg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL1BhZ2VHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2Rr
L1JlbmRlclRoZW1lR2RrLmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9SZW5kZXJQb3B1cE1l
bnVHZGsuY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ2RrL1NjcmVlbkdkay5jcHAKKyAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsv
U2hhcmVkVGltZXJMaW51eC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9nZGsvU3lzdGVtVGltZUxp
bnV4LmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCisgICAgICAgICAgcGxhdGZv
cm0vZ2RrL1dpZGdldEdkay5jcHAKKwkJPC9zb3VyY2VzPgorCQk8Y2xlYW4tZmlsZXM+CisJCS5E
ZXJpdmVkU291cmNlcworCQlybSAtcmYgJChTUkNESVIpL0Rlcml2ZWRTb3VyY2VzCisJCXJtIC1y
ZiAkKFNSQ0RJUikvaW5jbHVkZS9KYXZhU2NyaXBDb3JlCisJCXJtIC1yZiAkKFNSQ0RJUikvUHJv
amVjdHMvZ2RrL29iai1nbnUKKwkJPC9jbGVhbi1maWxlcz4KICAgICAgICAgPCEtLUhBQ0sgYmxv
Y2sgZGVwZW5kZW5jaWVzIG9uIHRoZSBwaG9ueSB0YXJnZXQgLS0+CiAgICAgPC9kbGw+CiA8L21h
a2VmaWxlPgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE3NzUwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw0NSBAQAorMjAwNi0xMS0xMyAgTWljaGFlbCBFbW1lbCAgPG1pa2Uu
ZW1tZWxAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKworICAgICAg
ICBGaXggTGludXgvR2RrIGJ1aWxkIGlzc3VlcworCQlhZGQgY3VybCBsb2FkZXIgCisKKyAgICAg
ICAgKiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisg
ICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgK
KyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAorICAg
ICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlLmgKKyAgICAg
ICAgKiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdlci5j
cHAKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxl
TWFuYWdlci5oCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dkay9SZXNvdXJj
ZUhhbmRsZUN1cmwuY3BwCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCisgICAgICAgICogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAorICAgICAgICAqIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9DaHJvbWVDbGllbnRHZGsuaAorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Vk
aXRvckNsaWVudEdkay5oCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgK
KyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dkay9DaHJvbWVDbGllbnRHZGsuY3BwCisgICAg
ICAgICogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAorICAgICAgICAqIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0VkaXRvckNsaWVudEdkay5jcHAKKyAgICAgICAgKiBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9GcmFtZUdkay5jcHAKKyAgICAgICAgKiBXZWJDb3JlL1Byb2plY3RzL2dkay93
ZWJjb3JlLWdkay5ia2wKKyAgICAgICAgKiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorICAg
ICAgICAqIFdlYkNvcmUvd2ViY29yZS1iYXNlLmJrbAorICAgICAgICAqIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAorICAgICAgICAqIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmgKKyAgICAgICAgKiBXZWJDb3JlL2xvYWRlci9jdXJsL05hdmlnYXRpb25BY3Rpb25DdXJsLmNw
cAorICAgICAgICAqIFdlYkNvcmUvbG9hZGVyL2N1cmwvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAor
ICAgICAgICAqIFdlYkNvcmUvbG9hZGVyL2N1cmwvTG9hZGVyRnVuY3Rpb25zQ3VybC5jcHAKKyAg
ICAgICAgKiBXZWJDb3JlL2xvYWRlci9jdXJsL0ZyYW1lTG9hZGVyQ3VybC5jcHAKKyAgICAgICAg
KiBXZWJDb3JlL2xvYWRlci9jdXJsL01haW5SZXNvdXJjZUxvYWRlckN1cmwuY3BwCisgICAgICAg
ICogV2ViQ29yZS9sb2FkZXIvY3VybC9Eb2N1bWVudExvYWRlckN1cmwuY3BwCisgICAgICAgICog
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAorICAgICAgICAqIFdlYkNvcmUvbG9hZGVy
L2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAKKyAgICAgICAgKiBXZWJDb3JlL2xvYWRlci9n
ZGsvRnJhbWVMb2FkZXJHZGsuY3BwCisgICAgICAgICogV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1l
TG9hZGVyQ2xpZW50R2RrLmgKKwogMjAwNi0xMS0xMiAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFu
bkBrZGUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3Vy
Y2VzLmJrbAkocmV2aXNpb24gMTc3NTApCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAko
d29ya2luZyBjb3B5KQpAQCAtMSw1OSArMSw2MSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiA/Pgog
PG1ha2VmaWxlPgorICAgICAgICAKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NP
VVJDRVNfREVSSVZFRFNPVVJDRVMiPgorICAgICAgICAKKyAgICAgICAgRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9Db2xvckRhdGEuYwogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0NTU0dy
YW1tYXIuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvQ29sb3JEYXRhLmMKICAg
ICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9IVE1MRW50aXR5TmFtZXMuYwogICAgICAgICBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0hUTUxOYW1lcy5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0F0dHIuY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlND
YW52YXNHcmFkaWVudC5jcHAKKyAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NhbnZh
c1BhdHRlcm4uY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNDaGFy
YWN0ZXJEYXRhLmNwcAorICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ291bnRlci5j
cHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ1NTUnVsZS5jcHAKICAgICAgICAg
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NTU1J1bGVMaXN0LmNwcAogICAgICAgICBEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKICAgICAgICAgRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU0NTU1ZhbHVlLmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTQ1NTVmFsdWVMaXN0LmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTQ2FudmFzR3JhZGllbnQuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlND
YW52YXNQYXR0ZXJuLmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
Q2hhcmFjdGVyRGF0YS5jcHAKLSAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NvdW50
ZXIuY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEb2N1bWVudC5jcHAKKyAg
ICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RvY3VtZW50RnJhZ21lbnQuY3BwCisgICAg
ICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEb2N1bWVudFR5cGUuY3BwCiAgICAgICAgIERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNET01JbXBsZW1lbnRhdGlvbi5jcHAKICAgICAgICAgRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RPTVBhcnNlci5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0RPTVdpbmRvdy5jcHAKLSAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0RvY3VtZW50LmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRG9jdW1l
bnRGcmFnbWVudC5jcHAKLSAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RvY3VtZW50
VHlwZS5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0VsZW1lbnQuY3BwCiAg
ICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNFbnRpdHkuY3BwCiAgICAgICAgIERlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNFdmVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0hUTUxBbmNob3JFbGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTSFRNTEFwcGxldEVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNIVE1MQXJlYUVsZW1lbnQuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNIVE1MQlJFbGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRN
TEJhc2VFbGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEJh
c2VGb250RWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxC
bG9ja3F1b3RlRWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hU
TUxCb2R5RWxlbWVudC5jcHAKKyAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxC
UkVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MQnV0dG9u
RWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxDYW52YXNF
bGVtZW50LmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTERMaXN0RWxl
bWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxEaXJlY3RvcnlF
bGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTERpdkVsZW1l
bnQuY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MRExpc3RFbGVtZW50
LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTERvY3VtZW50LmNwcAog
ICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEVsZW1lbnQuY3BwCiAgICAgICAg
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MRmllbGRTZXRFbGVtZW50LmNwcAogICAgICAg
ICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEZvbnRFbGVtZW50LmNwcAogICAgICAgICBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEZvcm1FbGVtZW50LmNwcAotICAgICAgICBEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEhSRWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0hUTUxIZWFkRWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0hUTUxIZWFkaW5nRWxlbWVudC5jcHAKKyAgICAgICAgRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0hUTUxIUkVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNIVE1MSHRtbEVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNIVE1MSW1hZ2VFbGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTSFRNTElucHV0RWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U0hUTUxJc0luZGV4RWxlbWVudC5jcHAKLSAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U0hUTUxMSUVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1M
TGFiZWxFbGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTExl
Z2VuZEVsZW1lbnQuY3BwCisgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MTElF
bGVtZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTExpbmtFbGVt
ZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTE1hcEVsZW1lbnQu
Y3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MTWVudUVsZW1lbnQuY3Bw
CkBAIC02MSw4ICs2Myw4IEBACiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1M
TW9kRWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxPTGlz
dEVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MT3B0R3Jv
dXBFbGVtZW50LmNwcAorICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uLmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTE9w
dGlvbkVsZW1lbnQuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MT3B0
aW9uc0NvbGxlY3Rpb24uY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1M
UGFyYWdyYXBoRWxlbWVudC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hU
TUxQYXJhbUVsZW1lbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1M
UHJlRWxlbWVudC5jcHAKQEAgLTc5LDEyICs4MSwxMiBAQAogICAgICAgICBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTTm9kZUZpbHRlci5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU05vZGVJdGVyYXRvci5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU05v
dGF0aW9uLmNwcAotICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTT3ZlcmZsb3dFdmVu
dC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1JhbmdlLmNwcAogICAg
ICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUmFuZ2VFeGNlcHRpb24uY3BwCiAgICAgICAg
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNUZXh0LmNwcAogICAgICAgICBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTVHJlZVdhbGtlci5jcHAKKyAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU092ZXJmbG93RXZlbnQuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNV
SUV2ZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2hlZWxFdmVudC5j
cHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1hNTFNlcmlhbGl6ZXIuY3BwCkBA
IC05Niw5ICs5OCwxOCBAQAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1hMaW5rTmFt
ZXMuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvWE1MTmFtZXMuY3BwCiAgICAg
ICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvWFBhdGhHcmFtbWFyLmNwcAorCiAgICAgPC9zZXQ+
CisgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0tIVE1MIj4KKyAgICAg
ICAgCiAKKyAgICA8L3NldD4KKyAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJD
RVNfTUlTQyI+CisgICAgICAgIAorCisgICAgPC9zZXQ+CiAgICAgPHNldCBhcHBlbmQ9IjEiIHZh
cj0iV0VCQ09SRV9TT1VSQ0VTX1BBR0UiPgorICAgICAgICAKICAgICAgICAgcGFnZS9DaHJvbWUu
Y3BwCiAgICAgICAgIHBhZ2UvRE9NV2luZG93LmNwcAogICAgICAgICBwYWdlL0ZyYW1lLmNwcApA
QCAtMTA3LDMzICsxMTgsNDUgQEAKICAgICAgICAgcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzLmNwcAogICAgICAgICBwYWdlL1BhZ2UuY3BwCiAgICAgICAgIHBhZ2UvUGFnZVN0YXRl
LmNwcAorCiAgICAgPC9zZXQ+Ci0KICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NP
VVJDRVNfTE9BREVSIj4KLSAgICAgICAgbG9hZGVyL0NhY2hlLmNwcAotICAgICAgICBsb2FkZXIv
Q2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKLSAgICAgICAgbG9hZGVyL0NhY2hlZEltYWdlLmNwcAot
ICAgICAgICBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCi0gICAgICAgIGxvYWRlci9DYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlci5jcHAKLSAgICAgICAgbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAK
LSAgICAgICAgbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCi0gICAgICAgIGxvYWRlci9E
b2NMb2FkZXIuY3BwCi0gICAgICAgIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKLSAgICAgICAg
bG9hZGVyL0Zvcm1TdGF0ZS5jcHAKLSAgICAgICAgbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAotICAg
ICAgICBsb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAKLSAgICAgICAgbG9hZGVyL01haW5SZXNvdXJj
ZUxvYWRlci5jcHAKLSAgICAgICAgbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNw
cAotICAgICAgICBsb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCi0gICAgICAgIGxvYWRlci9SZXF1
ZXN0LmNwcAotICAgICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCi0gICAgICAgIGxvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKLSAgICAgICAgbG9hZGVyL1RleHREb2N1bWVudC5jcHAK
LSAgICAgICAgbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwCi0gICAgICAgIGxvYWRlci9s
b2FkZXIuY3BwCi0gICAgPC9zZXQ+CiAKKyAgICBsb2FkZXIvQ2FjaGUuY3BwCisgICAgbG9hZGVy
L0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCisgICAgbG9hZGVyL0NhY2hlZEltYWdlLmNwcAorICAg
IGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKKyAgICBsb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXIuY3BwCisgICAgbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAKKyAgICBsb2FkZXIvQ2Fj
aGVkWFNMU3R5bGVTaGVldC5jcHAKKyAgICBsb2FkZXIvRG9jTG9hZGVyLmNwcAorICAgIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAKKyAgICBsb2FkZXIvRm9ybVN0YXRlLmNwcAorICAgIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHAKKyAgICBsb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAKKyAgICBsb2Fk
ZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAorICAgIGxvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlci5jcHAKKyAgICBsb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCisgICAgbG9hZGVyL1Jl
cXVlc3QuY3BwCisgICAgbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAorICAgIGxvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlci5jcHAKKyAgICBsb2FkZXIvVGV4dERvY3VtZW50LmNwcAorICAgIGxvYWRl
ci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAorICAgIGxvYWRlci9sb2FkZXIuY3BwCisKKyAgPC9z
ZXQ+CiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BMQVRGT1JNIj4K
KyAgICAgICAgCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAorICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9QZW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL0FyZW5hLmNwcAogICAgICAg
ICBwbGF0Zm9ybS9BcnJheUltcGwuY3BwCiAgICAgICAgIHBsYXRmb3JtL0F0b21pY1N0cmluZy5j
cHAKQEAgLTE1NCwxMiArMTc3LDEyIEBACiAgICAgICAgIHBsYXRmb3JtL0xvZ2dpbmcuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL01pbWVUeXBlUmVnaXN0cnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL1Jl
Z3VsYXJFeHByZXNzaW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9TZWdtZW50ZWRTdHJpbmcuY3Bw
CisgICAgICAgIHBsYXRmb3JtL1RleHRDb2RlYy5jcHAKKyAgICAgICAgcGxhdGZvcm0vVGV4dENv
ZGVjSUNVLmNwcAogICAgICAgICBwbGF0Zm9ybS9TY3JvbGxCYXIuY3BwCi0gICAgICAgIHBsYXRm
b3JtL1NlZ21lbnRlZFN0cmluZy5jcHAKICAgICAgICAgcGxhdGZvcm0vU3RyaW5nLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAotICAgICAgICBwbGF0Zm9ybS9UZXh0Q29kZWMu
Y3BwCi0gICAgICAgIHBsYXRmb3JtL1RleHRDb2RlY0lDVS5jcHAKICAgICAgICAgcGxhdGZvcm0v
VGV4dENvZGVjTGF0aW4xLmNwcAogICAgICAgICBwbGF0Zm9ybS9UZXh0Q29kZWNVVEYxNi5jcHAK
ICAgICAgICAgcGxhdGZvcm0vVGV4dERlY29kZXIuY3BwCkBAIC0xNjcsMjQgKzE5MCwxMyBAQAog
ICAgICAgICBwbGF0Zm9ybS9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKICAgICAgICAgcGxhdGZv
cm0vVGV4dFN0cmVhbS5jcHAKICAgICAgICAgcGxhdGZvcm0vVGltZXIuY3BwCisgICAgICAgIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCisgICAgICAgIHBsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwCiAgICAgICAgIHBsYXRmb3JtL1dpZGdldC5jcHAKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5j
cHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ludFJlY3QuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Blbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5jcHAKLSAgICAgICAgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZS5jcHAKKwogICAgIDwvc2V0PgotCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9T
T1VSQ0VTX1dJTiI+Ci0gICAgICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxl
V2luLmNwcAorICAgICAgICAKICAgICAgICAgcGxhdGZvcm0vd2luL0Nvb2tpZUphcldpbi5jcHAK
ICAgICAgICAgcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAKICAgICAgICAgcGxhdGZvcm0vd2lu
L0ZvbnRDYWNoZVdpbi5jcHAKQEAgLTIwMiwyMCArMjE0LDI3IEBACiAgICAgICAgIHBsYXRmb3Jt
L3dpbi9TaGFyZWRUaW1lcldpbi5jcHAKICAgICAgICAgcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVX
aW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL3dpbi9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisgICAg
ICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAogICAgICAgICBw
bGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcAorCiAgICAgPC9zZXQ+CisgICAgPHNldCBhcHBlbmQ9
IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0lNQUdFLURFQ09ERVJTIj4KKyAgICAgICAgCiAKKyAg
ICA8L3NldD4KICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfR0lGIj4K
KyAgICAgICAgCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURl
Y29kZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5jcHAKKwogICAgIDwvc2V0PgotCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09S
RV9TT1VSQ0VTX1BORyI+Ci0gICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuY3BwCisgICAgICAgIAogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvcG5nLmMKICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL3BuZ2Vycm9y
LmMKICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL3BuZ2djY3JkLmMKICAgICAg
ICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL3BuZ2dldC5jCisgICAgICAgIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9wbmdtZW0uYwogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvcG5ncHJlYWQuYwogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
cG5ncmVhZC5jCkBAIC0yMjksOSArMjQ4LDEwIEBACiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3BuZy9wbmd3cml0ZS5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9wbmd3dHJhbi5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9wbmd3dXRp
bC5jCisKICAgICA8L3NldD4KLQogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09V
UkNFU19aTElCIj4KKyAgICAgICAgCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3ps
aWIvYWRsZXIzMi5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvY29tcHJl
c3MuYwogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL2NyYzMyLmMKQEAgLTI0
NCwxMCArMjY0LDEwIEBACiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvdHJl
ZXMuYwogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL3VuY29tcHIuYwogICAg
ICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL3p1dGlsLmMKKwogICAgIDwvc2V0Pgot
CiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0pQRUciPgotICAgICAg
ICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCisgICAg
ICAgIAogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL2pjb21hcGkuYwogICAg
ICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL2pkYXBpbWluLmMKICAgICAgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9qZGFwaXN0ZC5jCkBAIC0yNzQsOTcgKzI5NCwxMjAg
QEAKICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9qaWRjdGludC5jCiAgICAg
ICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvam1lbW1nci5jCiAgICAgICAgIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvam1lbW5vYnMuYworICAgICAgICBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2pwZWcvanF1YW50MS5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvanF1YW50Mi5jCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
anV0aWxzLmMKKwogICAgIDwvc2V0PgotCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09S
RV9TT1VSQ0VTX0JNUCI+CisgICAgICAgIAogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAorCiAgICAgPC9zZXQ+Ci0KICAgICA8c2V0IGFwcGVu
ZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSUNPIj4KKyAgICAgICAgCiAgICAgICAgIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCisKICAgICA8L3NldD4K
LQogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19YQk0iPgorICAgICAg
ICAKICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5j
cHAKKwogICAgIDwvc2V0PgotCi0gICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VS
Q0VTX1BMQVRGT1JNX0NBSVJPIj4KKyAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NP
VVJDRVNfQ0FJUk9fQklORElOR1MiPgorICAgICAgICAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZVNvdXJjZUNhaXJvLmNwcAorCiAgICAgPC9zZXQ+CisgICAgPHNldCBhcHBlbmQ9IjEi
IHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NVUkwiPgogCisKKyAgICAgICAgbG9hZGVyL2N1cmwvRG9j
dW1lbnRMb2FkZXJDdXJsLmNwcAorICAgICAgICBsb2FkZXIvY3VybC9GcmFtZUxvYWRlckN1cmwu
Y3BwCisgICAgICAgIGxvYWRlci9jdXJsL0xvYWRlckZ1bmN0aW9uc0N1cmwuY3BwCisgICAgICAg
IGxvYWRlci9jdXJsL01haW5SZXNvdXJjZUxvYWRlckN1cmwuY3BwCisgICAgICAgIGxvYWRlci9j
dXJsL05hdmlnYXRpb25BY3Rpb25DdXJsLmNwcAorICAgICAgICBsb2FkZXIvY3VybC9SZXNvdXJj
ZUxvYWRlckN1cmwuY3BwCisgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZUN1cmwuY3BwCisgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwCisKKyAgICA8L3NldD4KICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJD
T1JFX1NPVVJDRVNfUElYTUFOIj4KLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vcGl4
bWFuL3NyYy9mYmNvbXBvc2UuYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9waXht
YW4vc3JjL2ZiZWRnZS5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9z
cmMvZmJwaWN0LmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vcGl4bWFuL3NyYy9m
YnRyYXAuYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljYmx0
LmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vcGl4bWFuL3NyYy9pY2JsdG9uZS5j
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9zcmMvaWNjb2xvci5jCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9zcmMvaWNmb3JtYXQuYwotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljaW1hZ2UuYwotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljcGl4ZWxzLmMKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vcGl4bWFuL3NyYy9pY3JlY3QuYwotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljc3RpcHBsZS5jCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9zcmMvaWN0cmFuc2Zvcm0uYwotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9waXhtYW4vc3JjL2ljdHJhcC5jCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9zcmMvaWN0cmkuYwotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9waXhtYW4vc3JjL2ljdXRpbC5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL3BpeG1hbi9zcmMvcGl4cmVnaW9uLmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vcGl4bWFuL3NyYy9yZW5kZXJlZGdlLmMKKyAgICAgICAgCisgICAgICAgIHBsYXRmb3Jt
L2NhaXJvL3BpeG1hbi9zcmMvZmJjb21wb3NlLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vcGl4
bWFuL3NyYy9mYmVkZ2UuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL2ZicGlj
dC5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL3BpeG1hbi9zcmMvZmJ0cmFwLmMKKyAgICAgICAg
cGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9pY2JsdC5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJv
L3BpeG1hbi9zcmMvaWNibHRvbmUuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3Jj
L2ljY29sb3IuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL2ljZm9ybWF0LmMK
KyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9pY2ltYWdlLmMKKyAgICAgICAgcGxh
dGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9pY3BpeGVscy5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJv
L3BpeG1hbi9zcmMvaWNyZWN0LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9p
Y3N0aXBwbGUuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL2ljdHJhbnNmb3Jt
LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9pY3RyYXAuYworICAgICAgICBw
bGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL2ljdHJpLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8v
cGl4bWFuL3NyYy9pY3V0aWwuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL3Bp
eHJlZ2lvbi5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL3BpeG1hbi9zcmMvcmVuZGVyZWRnZS5j
CisKICAgICA8L3NldD4KKyAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
Q0FJUk8iPgorICAgICAgICAKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJv
LWFyYy5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1hcnJheS5jCisg
ICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1jYWNoZS5jCisgICAgICAgIHBs
YXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1jbGlwLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fp
cm8vY2Fpcm8vc3JjL2NhaXJvLWNvbG9yLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8v
c3JjL2NhaXJvLWRlYnVnLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJv
LWZpeGVkLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWZvbnQtb3B0
aW9ucy5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1mb250LmMKKyAg
ICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWdzdGF0ZS5jCisgICAgICAgIHBs
YXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1oYXNoLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fp
cm8vY2Fpcm8vc3JjL2NhaXJvLWh1bGwuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9z
cmMvY2Fpcm8taW1hZ2Utc3VyZmFjZS5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3Ny
Yy9jYWlyby1tYXRyaXguYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8t
bWV0YS1zdXJmYWNlLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLW91
dHB1dC1zdHJlYW0uYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGFn
aW5hdGVkLXN1cmZhY2UuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8t
cGF0aC1ib3VuZHMuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGF0
aC1kYXRhLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBhdGgtZmls
bC5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1wYXRoLXN0cm9rZS5j
CisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1wYXRoLmMKKyAgICAgICAg
cGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBhdHRlcm4uYworICAgICAgICBwbGF0Zm9y
bS9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGVuLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fp
cm8vc3JjL2NhaXJvLXBvbHlnb24uYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMv
Y2Fpcm8tcmVnaW9uLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNj
YWxlZC1mb250LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNsb3Bl
LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNwbGluZS5jCisgICAg
ICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1zdHJva2Utc3R5bGUuYworICAgICAg
ICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8tc3VyZmFjZS1mYWxsYmFjay5jCisgICAg
ICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1zdXJmYWNlLmMKKyAgICAgICAgcGxh
dGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXRyYXBzLmMKKyAgICAgICAgcGxhdGZvcm0vY2Fp
cm8vY2Fpcm8vc3JjL2NhaXJvLXVuaWNvZGUuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWly
by9zcmMvY2Fpcm8td2lkZWludC5jCisgICAgICAgIHBsYXRmb3JtL2NhaXJvL2NhaXJvL3NyYy9j
YWlyby13aW4zMi1mb250LmMKKyAgICAgICAgcGxhdGZvcm0vY2Fpcm8vY2Fpcm8vc3JjL2NhaXJv
LXdpbjMyLXN1cmZhY2UuYworICAgICAgICBwbGF0Zm9ybS9jYWlyby9jYWlyby9zcmMvY2Fpcm8u
YwogCi0gICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NBSVJPIj4KLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWFyYy5jCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1hcnJheS5jCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1jYWNoZS5jCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1jbGlwLmMKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWNvbG9yLmMKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWRlYnVnLmMKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWZpeGVkLmMKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWZvbnQtb3B0aW9ucy5j
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1mb250LmMK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWdzdGF0ZS5j
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1oYXNoLmMK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLWh1bGwuYwot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8taW1hZ2Utc3Vy
ZmFjZS5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1t
YXRyaXguYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8t
bWV0YS1zdXJmYWNlLmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3Jj
L2NhaXJvLW91dHB1dC1zdHJlYW0uYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9j
YWlyby9zcmMvY2Fpcm8tcGFnaW5hdGVkLXN1cmZhY2UuYwotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGF0aC1ib3VuZHMuYwotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGF0aC1kYXRhLmMKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBhdGgtZmlsbC5jCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1wYXRoLXN0cm9rZS5jCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1wYXRoLmMKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBhdHRlcm4uYwot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcGVuLmMKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXBvbHlnb24uYwot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8tcmVnaW9uLmMK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNjYWxlZC1m
b250LmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNs
b3BlLmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXNw
bGluZS5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL2NhaXJvL3NyYy9jYWlyby1z
dHJva2Utc3R5bGUuYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMv
Y2Fpcm8tc3VyZmFjZS1mYWxsYmFjay5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L2NhaXJvL3NyYy9jYWlyby1zdXJmYWNlLmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vY2Fpcm8vc3JjL2NhaXJvLXRyYXBzLmMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vY2Fpcm8vc3JjL2NhaXJvLXVuaWNvZGUuYwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9jYWlyby9zcmMvY2Fpcm8td2lkZWludC5jCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL2NhaXJvL3NyYy9jYWlyby13aW4zMi1mb250LmMKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vY2Fpcm8vc3JjL2NhaXJvLXdpbjMyLXN1cmZhY2UuYwotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9jYWlyby9zcmMvY2Fpcm8uYwogICAgIDwvc2V0PgotCiAgICAg
PHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0NTUyI+CisgICAgICAgIAogICAg
ICAgICBjc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAKICAgICAgICAgY3NzL0NTU0NoYXJzZXRS
dWxlLmNwcAogICAgICAgICBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAogICAg
ICAgICBjc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKICAgICAgICAgY3NzL0NTU0ZvbnRGYWNl
UnVsZS5jcHAKKyAgICAgICAgY3NzL2Nzc2hlbHBlci5jcHAKICAgICAgICAgY3NzL0NTU0ltYWdl
VmFsdWUuY3BwCiAgICAgICAgIGNzcy9DU1NJbXBvcnRSdWxlLmNwcAogICAgICAgICBjc3MvQ1NT
SW5oZXJpdGVkVmFsdWUuY3BwCkBAIC0zNzIsNiArNDE1LDcgQEAKICAgICAgICAgY3NzL0NTU01l
ZGlhUnVsZS5jcHAKICAgICAgICAgY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAog
ICAgICAgICBjc3MvQ1NTUGFnZVJ1bGUuY3BwCisgICAgICAgIGNzcy9jc3NwYXJzZXIuY3BwCiAg
ICAgICAgIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKICAgICAgICAgY3NzL0NTU1Byb3BlcnR5
LmNwcAogICAgICAgICBjc3MvQ1NTUnVsZS5jcHAKQEAgLTM3OSw2ICs0MjMsNyBAQAogICAgICAg
ICBjc3MvQ1NTU2VsZWN0b3IuY3BwCiAgICAgICAgIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNw
cAogICAgICAgICBjc3MvQ1NTU3R5bGVSdWxlLmNwcAorICAgICAgICBjc3MvY3Nzc3R5bGVzZWxl
Y3Rvci5jcHAKICAgICAgICAgY3NzL0NTU1N0eWxlU2hlZXQuY3BwCiAgICAgICAgIGNzcy9DU1NW
YWx1ZUxpc3QuY3BwCiAgICAgICAgIGNzcy9Gb250RmFtaWx5VmFsdWUuY3BwCkBAIC0zODYsMjMg
KzQzMSwyMiBAQAogICAgICAgICBjc3MvTWVkaWFGZWF0dXJlTmFtZXMuY3BwCiAgICAgICAgIGNz
cy9NZWRpYUxpc3QuY3BwCiAgICAgICAgIGNzcy9NZWRpYVF1ZXJ5LmNwcAorICAgICAgICBjc3Mv
TWVkaWFRdWVyeUV4cC5jcHAKICAgICAgICAgY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCi0g
ICAgICAgIGNzcy9NZWRpYVF1ZXJ5RXhwLmNwcAogICAgICAgICBjc3MvU2hhZG93VmFsdWUuY3Bw
CiAgICAgICAgIGNzcy9TdHlsZUJhc2UuY3BwCiAgICAgICAgIGNzcy9TdHlsZUxpc3QuY3BwCiAg
ICAgICAgIGNzcy9TdHlsZVNoZWV0LmNwcAogICAgICAgICBjc3MvU3R5bGVTaGVldExpc3QuY3Bw
Ci0gICAgICAgIGNzcy9jc3NoZWxwZXIuY3BwCi0gICAgICAgIGNzcy9jc3NwYXJzZXIuY3BwCi0g
ICAgICAgIGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAorCiAgICAgPC9zZXQ+Ci0KICAgICA8c2V0
IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfUkVOREVSSU5HIj4KKyAgICAgICAgCiAg
ICAgICAgIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCisgICAgICAgIHJlbmRlcmluZy9i
aWRpLmNwcAorICAgICAgICByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCiAgICAgICAgIHJlbmRl
cmluZy9Db3VudGVyTm9kZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL0NvdW50ZXJSZXNldE5vZGUu
Y3BwCi0gICAgICAgIHJlbmRlcmluZy9EZXByZWNhdGVkU2xpZGVyLmNwcAogICAgICAgICByZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwCiAgICAgICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0
LmNwcAogICAgICAgICByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTQxMCwxMSArNDU0
LDEyIEBACiAgICAgICAgIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAogICAgICAgICByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKICAgICAgICAgcmVuZGVyaW5nL0xpc3RNYXJrZXJCb3gu
Y3BwCisgICAgICAgIHJlbmRlcmluZy9SZW5kZXJTdHlsZS5jcHAKICAgICAgICAgcmVuZGVyaW5n
L1JlbmRlckFwcGxldC5jcHAKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlckFyZW5hLmNwcAotICAg
ICAgICByZW5kZXJpbmcvUmVuZGVyQlIuY3BwCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKyAgICAgICAgcmVuZGVyaW5n
L1JlbmRlckJSLmNwcAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAogICAgICAg
ICByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAogICAgICAgICByZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5jcHAKQEAgLTQ0MCw3ICs0ODUsNyBAQAogICAgICAgICByZW5kZXJpbmcvUmVuZGVy
UGFydC5jcHAKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCiAgICAgICAg
IHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclN0
eWxlLmNwcAorICAgICAgICByZW5kZXJpbmcvRGVwcmVjYXRlZFNsaWRlci5jcHAKICAgICAgICAg
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmNwcAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCkBAIC00NTAsMjMg
KzQ5NSwyNCBAQAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCiAgICAg
ICAgIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAKKyAgICAgICAgCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKICAgICAgICAgcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHAKICAgICAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3Bw
Ci0gICAgICAgIHJlbmRlcmluZy9iaWRpLmNwcAotICAgICAgICByZW5kZXJpbmcvYnJlYWtfbGlu
ZXMuY3BwCisKICAgICA8L3NldD4KIAogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVf
U09VUkNFU19YTUwiPgogICAgICAgICB4bWwvRE9NUGFyc2VyLmNwcAorICAgICAgICB4bWwveG1s
aHR0cHJlcXVlc3QuY3BwCiAgICAgICAgIHhtbC9YTUxTZXJpYWxpemVyLmNwcAogICAgICAgICB4
bWwvWFBhdGhFdmFsdWF0b3IuY3BwCiAgICAgICAgIHhtbC9YUGF0aEV4cHJlc3Npb24uY3BwCiAg
ICAgICAgIHhtbC9YUGF0aEV4cHJlc3Npb25Ob2RlLmNwcAogICAgICAgICB4bWwvWFBhdGhGdW5j
dGlvbnMuY3BwCisgICAgICAgIHhtbC9YUGF0aE5hbWVzcGFjZS5jcHAKICAgICAgICAgeG1sL1hQ
YXRoTlNSZXNvbHZlci5jcHAKLSAgICAgICAgeG1sL1hQYXRoTmFtZXNwYWNlLmNwcAogICAgICAg
ICB4bWwvWFBhdGhQYXJzZXIuY3BwCiAgICAgICAgIHhtbC9YUGF0aFBhdGguY3BwCiAgICAgICAg
IHhtbC9YUGF0aFByZWRpY2F0ZS5jcHAKQEAgLTQ3OCwyNSArNTI0LDI0IEBACiAgICAgICAgIHht
bC9YU0xJbXBvcnRSdWxlLmNwcAogICAgICAgICB4bWwvWFNMU3R5bGVTaGVldC5jcHAKICAgICAg
ICAgeG1sL1hTTFRQcm9jZXNzb3IuY3BwCi0gICAgICAgIHhtbC94bWxodHRwcmVxdWVzdC5jcHAK
ICAgICA8L3NldD4KLQogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19E
T00iPgorICAgICAgICAKICAgICAgICAgZG9tL0F0dHIuY3BwCiAgICAgICAgIGRvbS9BdHRyaWJ1
dGUuY3BwCiAgICAgICAgIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAKICAgICAgICAg
ZG9tL0JlZm9yZVVubG9hZEV2ZW50LmNwcAogICAgICAgICBkb20vQ0RBVEFTZWN0aW9uLmNwcAot
ICAgICAgICBkb20vQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24uY3BwCiAgICAgICAgIGRv
bS9DaGFyYWN0ZXJEYXRhLmNwcAogICAgICAgICBkb20vQ2hpbGROb2RlTGlzdC5jcHAKICAgICAg
ICAgZG9tL0NsaXBib2FyZEV2ZW50LmNwcAogICAgICAgICBkb20vQ29tbWVudC5jcHAKICAgICAg
ICAgZG9tL0NvbnRhaW5lck5vZGUuY3BwCi0gICAgICAgIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5j
cHAKKyAgICAgICAgZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmNwcAogICAgICAg
ICBkb20vRG9jdW1lbnQuY3BwCiAgICAgICAgIGRvbS9Eb2N1bWVudEZyYWdtZW50LmNwcAogICAg
ICAgICBkb20vRG9jdW1lbnRUeXBlLmNwcAorICAgICAgICBkb20vRE9NSW1wbGVtZW50YXRpb24u
Y3BwCiAgICAgICAgIGRvbS9FZGl0aW5nVGV4dC5jcHAKICAgICAgICAgZG9tL0VsZW1lbnQuY3Bw
CiAgICAgICAgIGRvbS9FbnRpdHkuY3BwCkBAIC01MDksMTYgKzU1NCwxNiBAQAogICAgICAgICBk
b20vTW91c2VFdmVudC5jcHAKICAgICAgICAgZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAogICAg
ICAgICBkb20vTXV0YXRpb25FdmVudC5jcHAKLSAgICAgICAgZG9tL05hbWVOb2RlTGlzdC5jcHAK
ICAgICAgICAgZG9tL05hbWVkQXR0ck1hcC5jcHAKICAgICAgICAgZG9tL05hbWVkTWFwcGVkQXR0
ck1hcC5jcHAKKyAgICAgICAgZG9tL05vZGVJdGVyYXRvci5jcHAKKyAgICAgICAgZG9tL05hbWVO
b2RlTGlzdC5jcHAKICAgICAgICAgZG9tL05vZGUuY3BwCiAgICAgICAgIGRvbS9Ob2RlRmlsdGVy
LmNwcAogICAgICAgICBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKLSAgICAgICAgZG9tL05v
ZGVJdGVyYXRvci5jcHAKICAgICAgICAgZG9tL05vZGVMaXN0LmNwcAogICAgICAgICBkb20vTm90
YXRpb24uY3BwCi0gICAgICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcAorICAgICAgICAgICAgZG9t
L092ZXJmbG93RXZlbnQuY3BwCiAgICAgICAgIGRvbS9Qb3NpdGlvbi5jcHAKICAgICAgICAgZG9t
L1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKICAgICAgICAgZG9tL1F1YWxpZmllZE5hbWUuY3Bw
CkBAIC01MzEsMzYgKzU3Niw0NCBAQAogICAgICAgICBkb20vVUlFdmVudC5jcHAKICAgICAgICAg
ZG9tL1doZWVsRXZlbnQuY3BwCiAgICAgICAgIGRvbS9YTUxUb2tlbml6ZXIuY3BwCisKICAgICA8
L3NldD4KIAogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19JQ09OIj4K
KyAgICAgICAgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAogICAgICAgICBsb2FkZXIvaWNv
bi9JY29uRGF0YUNhY2hlLmNwcAotICAgICAgICBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
CiAgICAgICAgIGxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCiAgICAgICAgIGxvYWRlci9pY29u
L1NRTERhdGFiYXNlLmNwcAogICAgICAgICBsb2FkZXIvaWNvbi9TUUxTdGF0ZW1lbnQuY3BwCiAg
ICAgICAgIGxvYWRlci9pY29uL1NRTFRyYW5zYWN0aW9uLmNwcAogICAgIDwvc2V0PgogCisgICAg
PHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0JSSURHRSI+CisgICAgICAgIAor
CisgICAgPC9zZXQ+CiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1dJ
TiI+CisgICAgICAgIAogICAgICAgICBicmlkZ2Uvd2luL0ZyYW1lV2luLmNwcAogICAgICAgICBi
cmlkZ2Uvd2luL1BhZ2VXaW4uY3BwCisKICAgICA8L3NldD4KLQogICAgIDxzZXQgYXBwZW5kPSIx
IiB2YXI9IldFQkNPUkVfU09VUkNFU19FRElUSU5HIj4KKyAgICAgICAgCiAgICAgICAgIGVkaXRp
bmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCiAgICAgICAgIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCiAgICAgICAgIGVkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKICAgICAg
ICAgZWRpdGluZy9Db21tYW5kQnlOYW1lLmNwcAogICAgICAgICBlZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcAogICAgICAgICBlZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNwcAorICAg
ICAgICBlZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCisgICAgICAgIGVkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKICAgICAgICAgZWRpdGluZy9EZWxldGVCdXR0
b24uY3BwCiAgICAgICAgIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKLSAgICAg
ICAgZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAotICAgICAgICBlZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCiAgICAgICAgIGVkaXRpbmcvRWRpdENvbW1hbmQu
Y3BwCiAgICAgICAgIGVkaXRpbmcvRWRpdG9yLmNwcAogICAgICAgICBlZGl0aW5nL0Zvcm1hdEJs
b2NrQ29tbWFuZC5jcHAKKyAgICAgICAgZWRpdGluZy9odG1sZWRpdGluZy5jcHAKICAgICAgICAg
ZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwCiAgICAgICAgIGVkaXRpbmcvSW5kZW50T3V0ZGVu
dENvbW1hbmQuY3BwCiAgICAgICAgIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5j
cHAKQEAgLTU2OSw4ICs2MjIsOSBAQAogICAgICAgICBlZGl0aW5nL0luc2VydE5vZGVCZWZvcmVD
b21tYW5kLmNwcAogICAgICAgICBlZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQuY3BwCiAgICAgICAgIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisgICAgICAgIGVk
aXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQuY3BwCiAgICAgICAgIGVkaXRpbmcvSlNFZGl0b3Iu
Y3BwCi0gICAgICAgIGVkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQuY3BwCisgICAgICAgIGVk
aXRpbmcvbWFya3VwLmNwcAogICAgICAgICBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHND
b21tYW5kLmNwcAogICAgICAgICBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAK
ICAgICAgICAgZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTU4OSwxNCArNjQz
LDEzIEBACiAgICAgICAgIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAogICAgICAgICBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwCiAgICAgICAgIGVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAKKyAg
ICAgICAgZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAogICAgICAgICBlZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5jcHAKICAgICAgICAgZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1h
bmQuY3BwCi0gICAgICAgIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCi0gICAgICAgIGVkaXRpbmcv
bWFya3VwLmNwcAotICAgICAgICBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisKICAgICA8L3Nl
dD4KKyAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSFRNTCI+CiAKLSAg
ICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSFRNTCI+CiAgICAgICAgIGh0
bWwvQ2FudmFzR3JhZGllbnQuY3BwCiAgICAgICAgIGh0bWwvQ2FudmFzUGF0dGVybi5jcHAKICAg
ICAgICAgaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC02MDUsMTcgKzY1OCwx
NyBAQAogICAgICAgICBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hU
TUxBcHBsZXRFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKLSAg
ICAgICAgaHRtbC9IVE1MQlJFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxCYXNlRWxlbWVu
dC5jcHAKICAgICAgICAgaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50LmNwcAogICAgICAgICBodG1s
L0hUTUxCbG9ja3F1b3RlRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MQm9keUVsZW1lbnQu
Y3BwCisgICAgICAgIGh0bWwvSFRNTEJSRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MQnV0
dG9uRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKICAgICAg
ICAgaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKLSAgICAgICAgaHRtbC9IVE1MRExpc3RFbGVtZW50
LmNwcAogICAgICAgICBodG1sL0hUTUxEaXJlY3RvcnlFbGVtZW50LmNwcAogICAgICAgICBodG1s
L0hUTUxEaXZFbGVtZW50LmNwcAorICAgICAgICBodG1sL0hUTUxETGlzdEVsZW1lbnQuY3BwCiAg
ICAgICAgIGh0bWwvSFRNTERvY3VtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxFbGVtZW50LmNw
cAogICAgICAgICBodG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAKQEAgLTYyOCw5ICs2ODEsOSBA
QAogICAgICAgICBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAogICAgICAgICBodG1sL0hU
TUxGcmFtZVNldEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dC5jcHAKLSAgICAgICAgaHRtbC9IVE1MSFJFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxI
ZWFkRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MSGVhZGluZ0VsZW1lbnQuY3BwCisgICAg
ICAgIGh0bWwvSFRNTEhSRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MSHRtbEVsZW1lbnQu
Y3BwCiAgICAgICAgIGh0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHAKQEAgLTYzOCw5ICs2OTEsOSBAQAogICAgICAgICBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTElzSW5kZXhFbGVtZW50LmNwcAogICAg
ICAgICBodG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAotICAgICAgICBodG1sL0hUTUxMSUVsZW1l
bnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9I
VE1MTGVnZW5kRWxlbWVudC5jcHAKKyAgICAgICAgaHRtbC9IVE1MTElFbGVtZW50LmNwcAogICAg
ICAgICBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MTWFwRWxlbWVu
dC5jcHAKICAgICAgICAgaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC02NDgsOCArNzAx
LDggQEAKICAgICAgICAgaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRN
TE1vZEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAorICAg
ICAgICBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxPTGlzdEVs
ZW1lbnQuY3BwCi0gICAgICAgIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCiAgICAgICAgIGh0
bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5jcHAKICAgICAgICAgaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCkBAIC02NzQsMTAg
KzcyNywxNSBAQAogICAgICAgICBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCiAgICAgICAgIGh0
bWwvSFRNTFRva2VuaXplci5jcHAKICAgICAgICAgaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcAot
ICAgICAgICBodG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCisgICAgICAgIGh0bWwvSFRN
TFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgICAgCisKICAgICA8L3NldD4KKyAgICA8c2V0IGFwcGVu
ZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfQklORElOR1MiPgorICAgICAgICAKIAorICAgIDwv
c2V0PgogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19KUyI+CisgICAg
ICAgIAogICAgICAgICBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNw
cAogICAgICAgICBiaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKQEAgLTY5
Nyw1ICs3NTUsNyBAQAogICAgICAgICBiaW5kaW5ncy9qcy9ranNfcHJveHkuY3BwCiAgICAgICAg
IGJpbmRpbmdzL2pzL2tqc190cmF2ZXJzYWwuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL2tqc193
aW5kb3cuY3BwCisKICAgICA8L3NldD4KKwogPC9tYWtlZmlsZT4KSW5kZXg6IFdlYkNvcmUvd2Vi
Y29yZS1iYXNlLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmNvcmUtYmFzZS5ia2wJKHJl
dmlzaW9uIDE3NzUwKQorKysgV2ViQ29yZS93ZWJjb3JlLWJhc2UuYmtsCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPCEtLQorPCEtLSAKIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03LDEzICs3LDEzIEBACiBhcmUgbWV0OgogCiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCiAKIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECkBAIC0zMCw4MSArMzAsMTEwIEBACiAtLT4KIAogPG1ha2VmaWxlPgorCisgICAg
PCEtLSBDb21tb24gZGVmaW5pdGlvbnMgZXRjLjogLS0+CisKICAgICA8c2V0IHZhcj0iU1JDRElS
IiBhcHBlbmQ9IjAiPi4uLy4uPC9zZXQ+CiAKLSAgICA8aW5jbHVkZSBmaWxlPSIuLi9CYWtlZmls
ZXMvcHJlc2V0cy5ia2wiIC8+Ci0gICAgPGluY2x1ZGUgZmlsZT0iV2ViQ29yZVNvdXJjZXMuYmts
IiAvPgorICAgIDxpbmNsdWRlIGZpbGU9Ii4uL0Jha2VmaWxlcy9wcmVzZXRzLmJrbCIvPgorICAg
IDxpbmNsdWRlIGZpbGU9IldlYkNvcmVTb3VyY2VzLmJrbCIvPgorICAgIAorCTxzZXQgdmFyPSJX
RUJDT1JFX0JBU0VfU09VUkNFUyI+CQorCQkkKFdFQkNPUkVfU09VUkNFU19CSU5ESU5HUykKKwkJ
JChXRUJDT1JFX1NPVVJDRVNfQk1QKQorCQkkKFdFQkNPUkVfU09VUkNFU19CUklER0UpCisJCSQo
V0VCQ09SRV9TT1VSQ0VTX0NTUykKKwkJJChXRUJDT1JFX1NPVVJDRVNfREVSSVZFRFNPVVJDRVMp
CisJCSQoV0VCQ09SRV9TT1VSQ0VTX0RPTSkKKwkJJChXRUJDT1JFX1NPVVJDRVNfRURJVElORykK
KwkJJChXRUJDT1JFX1NPVVJDRVNfR0lGKQorCQkkKFdFQkNPUkVfU09VUkNFU19IVE1MKQorCQkk
KFdFQkNPUkVfU09VUkNFU19JQ08pCisJCSQoV0VCQ09SRV9TT1VSQ0VTX0lDT04pCisJCSQoV0VC
Q09SRV9TT1VSQ0VTX0lNQUdFLURFQ09ERVJTKQorCQkkKFdFQkNPUkVfU09VUkNFU19KUEVHKQor
CQkkKFdFQkNPUkVfU09VUkNFU19KUykKKwkJJChXRUJDT1JFX1NPVVJDRVNfS0hUTUwpCisJCSQo
V0VCQ09SRV9TT1VSQ0VTX0xPQURFUikKKwkJJChXRUJDT1JFX1NPVVJDRVNfTUlTQykKKwkJJChX
RUJDT1JFX1NPVVJDRVNfUEFHRSkKKwkJJChXRUJDT1JFX1NPVVJDRVNfUExBVEZPUk0pCisJCSQo
V0VCQ09SRV9TT1VSQ0VTX1BORykKKwkJJChXRUJDT1JFX1NPVVJDRVNfUkVOREVSSU5HKQorCQkk
KFdFQkNPUkVfU09VUkNFU19YQk0pCisJCSQoV0VCQ09SRV9TT1VSQ0VTX1hNTCkKKwkJJChXRUJD
T1JFX1NPVVJDRVNfWkxJQikKKwk8L3NldD4KIAotICAgIDxzZXQgdmFyPSJXRUJDT1JFX0JBU0Vf
U09VUkNFUyI+Ci0gICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX0JNUCkKLSAgICAgICAgJChXRUJD
T1JFX1NPVVJDRVNfQ1NTKQotICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19ERVJJVkVEU09VUkNF
UykKLSAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfRE9NKQotICAgICAgICAkKFdFQkNPUkVfU09V
UkNFU19FRElUSU5HKQotICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19HSUYpCi0gICAgICAgICQo
V0VCQ09SRV9TT1VSQ0VTX0hUTUwpCi0gICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX0lDTykKLSAg
ICAgICAgJChXRUJDT1JFX1NPVVJDRVNfSUNPTikKLSAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNf
SlBFRykKLSAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfSlMpCi0gICAgICAgICQoV0VCQ09SRV9T
T1VSQ0VTX0xPQURFUikKLSAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUEFHRSkKLSAgICAgICAg
JChXRUJDT1JFX1NPVVJDRVNfUExBVEZPUk0pCi0gICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX1BO
RykKLSAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUkVOREVSSU5HKQotICAgICAgICAkKFdFQkNP
UkVfU09VUkNFU19YQk0pCi0gICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX1hNTCkKLSAgICAgICAg
JChXRUJDT1JFX1NPVVJDRVNfWkxJQikKLSAgICA8L3NldD4KLQogICAgIDxzZXQgdmFyPSJCVUlM
RERJUiI+b2JqLSQoRk9STUFUKTwvc2V0PgotCisgICAgCiAgICAgPHRlbXBsYXRlIGlkPSJ3ZWJj
b3JlX2NhaXJvIj4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL2NhaXJvL3NyYzwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL3BpeG1hbi9zcmM8L2luY2x1ZGU+CisgICAgICAgIDxpbmNs
dWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9jYWlyby9jYWlyby9zcmM8L2luY2x1ZGU+CisgICAgICAg
IDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjPC9pbmNsdWRlPgog
ICAgICAgICA8c291cmNlcz4KLSAgICAgICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX0NBSVJPKQot
ICAgICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUElYTUFOKQorICAgICAgICAgICAgJChXRUJD
T1JFX1NPVVJDRVNfQ0FJUk9fQklORElOR1MpIAorICAgICAgICAgICAgJChXRUJDT1JFX1NPVVJD
RVNfQ0FJUk8pIAorCQkgICAgJChXRUJDT1JFX1NPVVJDRVNfUElYTUFOKSAKICAgICAgICAgPC9z
b3VyY2VzPgogICAgIDwvdGVtcGxhdGU+CiAKKyAgICA8dGVtcGxhdGUgaWQ9IndlYmNvcmVfY3Vy
bCI+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmw8L2lu
Y2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9sb2FkZXIvY3VybDwvaW5jbHVkZT4K
KyAgICAgICAgPHNvdXJjZXM+CisgICAgICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19DVVJMKSAK
KyAgICAgICAgPC9zb3VyY2VzPgorICAgIDwvdGVtcGxhdGU+CisgICAgCiAgICAgPHRlbXBsYXRl
IGlkPSJ3ZWJjb3JlX2Jhc2UiIHRlbXBsYXRlPSJ4bWwyLGljb252LHhzbHQsaWN1LGpzY29yZSI+
Ci0gICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKTwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+
JChTUkNESVIpLy48L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9pbmNsdWRl
PC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZTwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tjYW52YXM8L2luY2x1
ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2RldmljZTwvaW5jbHVkZT4K
KyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyPC9pbmNsdWRlPgorICAgICAgICA8aW5j
bHVkZT4kKFNSQ0RJUikva3N2ZzIvY3NzPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNS
Q0RJUikva3N2ZzIvZXZlbnRzPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikv
a3N2ZzIvbWlzYzwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tzdmcyL3N2
ZzwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2JpbmRpbmdzL2pzPC9pbmNs
dWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvYnJpZGdlPC9pbmNsdWRlPgorICAgICAg
ICA8aW5jbHVkZT4kKFNSQ0RJUikvZWRpdGluZzwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+
JChTUkNESVIpL2h0bWw8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9jc3M8
L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9kb208L2luY2x1ZGU+Ci0gICAg
ICAgIDxpbmNsdWRlPiQoU1JDRElSKS9lZGl0aW5nPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVk
ZT4kKFNSQ0RJUikvaHRtbDwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2lu
Y2x1ZGU8L2luY2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9rY2FudmFzL2Rldmlj
ZTwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL2tjYW52YXM8L2luY2x1ZGU+
CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9sb2FkZXI8L2luY2x1ZGU+CiAgICAgICAgIDxp
bmNsdWRlPiQoU1JDRElSKS9sb2FkZXIvaWNvbjwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+
JChTUkNESVIpL2xvYWRlcjwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3Bh
Z2U8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybTwvaW5jbHVk
ZT4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL25ldHdvcms8L2luY2x1ZGU+
CisgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9uZXR3b3JrL2dkazwvaW5jbHVk
ZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3BsYXRmb3JtL2dyYXBoaWNzPC9pbmNsdWRl
PgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnPC9pbmNs
dWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnM8
L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9ibXA8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWY8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY288L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQo
U1JDRElSKS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnPC9pbmNsdWRlPgorICAgICAgICA8
aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtPC9pbmNsdWRlPgog
ICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nPC9p
bmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMveGJtPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvemxpYjwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJ
UikvcGxhdGZvcm0vbmV0d29yazwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChTUkNESVIp
L3BsYXRmb3JtPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvcGxhdGZvcm0v
bmV0b3dyazwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3JlbmRlcmluZzwv
aW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL3htbDwvaW5jbHVkZT4KLQorICAg
ICAgICA8aW5jbHVkZT4kKFNSQ0RJUikva2NhbnZhczwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1
ZGU+JChTUkNESVIpL2tjYW52YXMvZGV2aWNlPC9pbmNsdWRlPgorICAgICAgICAKICAgICAgICAg
PHNvdXJjZXM+JChXRUJDT1JFX0JBU0VfU09VUkNFUyk8L3NvdXJjZXM+CiAKIAotICAgICAgICA8
IS0tIEZJWE1FOiB3aGVuIGJ1aWxkaW5nIG9uIE1hYywgRXh0cmFDRkVuY29kaW5ncy5oIGlzIG5l
ZWRlZCAtLT4KLSAgICAgICAgPGlmIGNvbmQ9IlBMQVRGT1JNX01BQ09TWD09JzEnIj4KLSAgICAg
ICAgICAgIDxpbmNsdWRlPiQoU1JDRElSKS9wbGF0Zm9ybS9tYWM8L2luY2x1ZGU+Ci0gICAgICAg
IDwvaWY+Cis8IS0tIEhBQ0sgQUxFUlQhIEZJWCBUSEVTRSBMQVRFUiEhIC0tPgorICAgICAgPGlm
IGNvbmQ9IlBMQVRGT1JNX01BQ09TWD09JzEnIj4KKyAgICAgICAgPGluY2x1ZGU+JChTUkNESVIp
L3BsYXRmb3JtL21hYzwvaW5jbHVkZT4gPCEtLSB3aGVuIGJ1aWxkaW5nIG9uIE1hYywgRXh0cmFD
RkVuY29kaW5ncy5oIGlzIG5lZWRlZCAtLT4gICAgICAKKwkgIDwvaWY+Cis8IS0tIEVORCBIQUNL
UyAtLT4KIAorICAgICAgICA8ZGVmaW5lPkFQUExFX0NIQU5HRVM9MTwvZGVmaW5lPgogICAgICAg
ICA8ZGVmaW5lPlhTTFRfU1VQUE9SVD0xPC9kZWZpbmU+CiAKICAgICAgICAgPCEtLSBUT0RPOiBp
cyB0aGVyZSBhIExpbnV4LXNwZWNpZmljIHBsYXRmb3JtIGRlZmluZT8gLS0+CkBAIC0xMTMsMTUg
KzE0MiwxNCBAQAogICAgICAgICAgICAgICAgIDxkZWZpbmU+TElOVVg8L2RlZmluZT4KICAgICAg
ICAgICAgIDwvaWY+CiAgICAgICAgIDwvaWY+Ci0KICAgICAgICAgPCEtLSB0aGlzIEdDIHZlcnNp
b24gcmVxdWlyZXMgTWFjaCdzIHRocmVhZCBzdXNwZW5kL3Jlc3VtZTogLS0+CiAgICAgICAgIDxp
ZiBjb25kPSJQTEFURk9STV9NQUNPU1ghPScxJyI+CiAgICAgICAgICAgICA8ZGVmaW5lPlVTRV9D
T05TRVJWQVRJVkVfR0M9MDwvZGVmaW5lPgogICAgICAgICA8L2lmPgotCisgICAgICAgIAogICAg
ICAgICA8aWYgY29uZD0iUExBVEZPUk1fTUFDT1NYPT0nMSciPgogICAgICAgICAgICAgPGRlZmlu
ZT5VU0VfQ09OU0VSVkFUSVZFX0dDPTE8L2RlZmluZT4KLSAgICAgICAgPC9pZj4KKyAgICAgICAg
PC9pZj4gCiAKICAgICAgICAgPGlmIGNvbmQ9IkZPUk1BVD09J2dudSciPgogICAgICAgICAgICAg
PCEtLSBGSVhNRTogd2UgbmVlZCBwcm9wZXIgY29uZmlndXJlIGNoZWNrcyAtLT4KQEAgLTEzNiwz
ICsxNjQsNCBAQAogICAgICAgICA8L2lmPgogICAgIDwvdGVtcGxhdGU+CiA8L21ha2VmaWxlPgor
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAxNzc1MCkKKysrIFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5MSw3ICsxNTkxLDcg
QEAKICAgICBtX2NsaWVudC0+Y2xlYXJVbmFyY2hpdmluZ1N0YXRlKGxvYWRlcik7CiB9CiAKLSNp
ZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAKIHZvaWQgRnJhbWVMb2FkZXI6Omxv
YWQoY29uc3QgS1VSTCYgVVJMLCBFdmVudCogZXZlbnQpCiB7CiAgICAgbG9hZChSZXNvdXJjZVJl
cXVlc3QoVVJMKSwgdHJ1ZSwgZXZlbnQsIDAsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxNzc1MCkKKysrIFdlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDExICs2MSwxOCBA
QAogI2VuZGlmCiAKICNlbmRpZgorI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRnJhbWU7
CiAgICAgY2xhc3MgRnJhbWVMb2FkZXI7CisjaWYgVVNFKENVUkwpCisgICAgY2xhc3MgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQ7CisgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworI2VuZGlmCiAKICAg
ICAvLyBGSVhNRTogUmVuYW1lIHRvIFJlc291cmNlSGFuZGxlIGFmdGVyIHJlc29sdmluZyBjb25m
bGljdCB3aXRoIGV4aXN0aW5nIGNsYXNzIG9mIHRoYXQgbmFtZS4KICAgICBjbGFzcyBSZXNvdXJj
ZUxvYWRlciA6IHB1YmxpYyBTaGFyZWQ8UmVzb3VyY2VMb2FkZXI+IHsKQEAgLTczLDYgKzgwLDEx
IEBACiAgICAgICAgIHZpcnR1YWwgflJlc291cmNlTG9hZGVyKCk7CiAKICAgICAgICAgdm9pZCBj
YW5jZWwoKTsKKyNpZiBVU0UoQ1VSTCkKKyAgICAgICAgdm9pZCBzZXRSZXNvdXJjZUhhbmRsZUNs
aWVudChSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KXsgbV9jbGllbnQgPSBjbGllbnQ7IH0g
CisgICAgICAgIHZvaWQgc2V0UmVzb3VyY2VIYW5kbGUoUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRs
ZT4gaGFuZGxlKXsgbV9oYW5kbGUgPSBoYW5kbGU7IH0gCisgICAgICAgIHZpcnR1YWwgdm9pZCBs
b2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkKE5TVVJMUmVxdWVzdCAqKTsKQEAgLTE1Nyw2ICsx
NjksMTEgQEAKICAgICAgICAgUmV0YWluUHRyPFdlYkNvcmVSZXNvdXJjZUxvYWRlckFzRGVsZWdh
dGU+IG1fZGVsZWdhdGU7CiAjZW5kaWYKICAgICAgICAgYm9vbCBtX2RlZmVyc0xvYWRpbmc7Cisj
aWYgVVNFKENVUkwpCisgICAgcHJvdGVjdGVkOgorICAgICAgICBSZXNvdXJjZUhhbmRsZUNsaWVu
dCAqbV9jbGllbnQ7CisgICAgICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7Cisj
ZW5kaWYKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jdXJsL05hdmlnYXRpb25B
Y3Rpb25DdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jdXJsL05hdmlnYXRp
b25BY3Rpb25DdXJsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2N1cmwvTmF2
aWdhdGlvbkFjdGlvbkN1cmwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNv
bT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJOYXZpZ2F0aW9uQWN0aW9uLmgiCisKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBOYXZpZ2F0aW9uVHlwZSBuYXZp
Z2F0aW9uVHlwZShGcmFtZUxvYWRUeXBlIGZyYW1lTG9hZFR5cGUsIGJvb2wgaXNGb3JtU3VibWlz
c2lvbiwgYm9vbCBoYXZlRXZlbnQpCit7CisgICAgaWYgKGlzRm9ybVN1Ym1pc3Npb24pCisgICAg
ICAgIHJldHVybiBOYXZpZ2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQ7CisgICAgaWYgKGhhdmVFdmVu
dCkKKyAgICAgICAgcmV0dXJuIE5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ7CisgICAgaWYgKGZy
YW1lTG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCkKKyAgICAgICAgcmV0dXJuIE5hdmln
YXRpb25UeXBlUmVsb2FkOworICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUoZnJhbWVMb2Fk
VHlwZSkpCisgICAgICAgIHJldHVybiBOYXZpZ2F0aW9uVHlwZUJhY2tGb3J3YXJkOworICAgIHJl
dHVybiBOYXZpZ2F0aW9uVHlwZU90aGVyOworfQorCitOYXZpZ2F0aW9uQWN0aW9uOjpOYXZpZ2F0
aW9uQWN0aW9uKCkKKyAgICAgICAgOiBtX3R5cGUoTmF2aWdhdGlvblR5cGVPdGhlcikKK3t9CisK
K05hdmlnYXRpb25BY3Rpb246Ok5hdmlnYXRpb25BY3Rpb24oY29uc3QgS1VSTCYgVVJMLCBOYXZp
Z2F0aW9uVHlwZSB0eXBlKQorICAgICAgICA6IG1fVVJMKFVSTCkKKyAgICAgICAgLCBtX3R5cGUo
dHlwZSkKK3t9CisKK05hdmlnYXRpb25BY3Rpb246Ok5hdmlnYXRpb25BY3Rpb24oY29uc3QgS1VS
TCYgVVJMLCBGcmFtZUxvYWRUeXBlIGZyYW1lTG9hZFR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNGb3JtU3VibWlzc2lvbikKKyAgICAgICAgOiBtX1VSTChV
UkwpCisgICAgICAgICwgbV90eXBlKG5hdmlnYXRpb25UeXBlKGZyYW1lTG9hZFR5cGUsIGlzRm9y
bVN1Ym1pc3Npb24sIDApKQore30KKworTmF2aWdhdGlvbkFjdGlvbjo6TmF2aWdhdGlvbkFjdGlv
bihjb25zdCBLVVJMJiBVUkwsIE5hdmlnYXRpb25UeXBlIHR5cGUsIFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQorICAgICAgICA6IG1fVVJMKFVSTCkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAg
ICAgICAgLCBtX2V2ZW50KGV2ZW50KQore30KKworTmF2aWdhdGlvbkFjdGlvbjo6TmF2aWdhdGlv
bkFjdGlvbihjb25zdCBLVVJMJiBVUkwsIEZyYW1lTG9hZFR5cGUgZnJhbWVMb2FkVHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0Zvcm1TdWJtaXNzaW9uLCBQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKKyAgICAgICAgOiBtX1VSTChVUkwpCisgICAgICAgICwg
bV90eXBlKG5hdmlnYXRpb25UeXBlKGZyYW1lTG9hZFR5cGUsIGlzRm9ybVN1Ym1pc3Npb24sIGV2
ZW50KSkKKyAgICAgICAgLCBtX2V2ZW50KGV2ZW50KQore30KKworfQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvY3VybC9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2N1cmwvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvbG9hZGVyL2N1cmwvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCA8bWlr
ZS5lbW1lbEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7
IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVf
XywgX19MSU5FX18pOyB9IHdoaWxlKDApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVzb3Vy
Y2VMb2FkZXI6OlJlc291cmNlTG9hZGVyKEZyYW1lKiBmcmFtZSkKKyAgICAgICAgOiBtX3JlYWNo
ZWRUZXJtaW5hbFN0YXRlKGZhbHNlKQorICAgICAgICAsIG1fY2FuY2VsbGVkKGZhbHNlKQorICAg
ICAgICAsIG1fY2FsbGVkRGlkRmluaXNoTG9hZChmYWxzZSkKKyAgICAgICAgLCBtX2ZyYW1lKGZy
YW1lKQorICAgICAgICAsIG1fZGVmZXJzTG9hZGluZyhmcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2Fk
aW5nKCkpCit7fQorCitSZXNvdXJjZUxvYWRlcjo6flJlc291cmNlTG9hZGVyKCkKK3sKKyAgICBB
U1NFUlQobV9yZWFjaGVkVGVybWluYWxTdGF0ZSk7CisgICAgY2FuY2VsKCk7CisgICAgaWYobV9j
bGllbnQpCisgICAgICAgIGRlbGV0ZSBtX2NsaWVudDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRl
cjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIG1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRl
cjo6Y2FuY2VsKCkKK3sKKyAgICBpZihtX2hhbmRsZSkKKyAgICAgICAgbV9oYW5kbGUtPmNhbmNl
bCgpOworfQorCitib29sIFJlc291cmNlTG9hZGVyOjpsb2Fkc0Jsb2NrZWQoKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6bG9hZChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gam9i
ID0gIFJlc291cmNlSGFuZGxlOjpjcmVhdGUocmVxdWVzdCxtX2NsaWVudCwwKTsKKyAgICBzZXRS
ZXNvdXJjZUhhbmRsZShqb2IpOworfQorCit9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jdXJsL0xv
YWRlckZ1bmN0aW9uc0N1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2N1cmwv
TG9hZGVyRnVuY3Rpb25zQ3VybC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9j
dXJsL0xvYWRlckZ1bmN0aW9uc0N1cmwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSAiQ2FjaGUu
aCIKKyNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZlY3RvcjxjaGFyPiBTZXJ2ZVN5bmNocm9ub3VzUmVxdWVz
dChMb2FkZXIqIGxvYWRlciwgRG9jTG9hZGVyKiBkb2NMb2FkZXIsY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGU+IGpvYiA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUocmVxdWVzdCwwLGRv
Y0xvYWRlcik7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdEJ1ZmZlciA9IGpvYi0+cnVuSW1tZWRp
YXRlbHkocmVzcG9uc2UpOworICAgIHJldHVybiByZXN1bHRCdWZmZXI7Cit9CisKK2ludCBOdW1i
ZXJPZlBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0cyhEb2NMb2FkZXIqIGRvY0xvYWRlcikKK3sKKyAg
ICByZXR1cm4gY2FjaGUoKS0+bG9hZGVyKCktPm51bVJlcXVlc3RzKGRvY0xvYWRlcik7Cit9CisK
K2Jvb2wgQ2hlY2tJZlJlbG9hZGluZyhXZWJDb3JlOjpEb2NMb2FkZXIqIGRvY0xvYWRlcikKK3sK
KyAgICAvLyBGSVhNRTogTmVlZHMgYSByZWFsIGltcGxlbWVudGF0aW9uIQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBDaGVja0NhY2hlT2JqZWN0U3RhdHVzKERvY0xvYWRlciogZG9jTG9h
ZGVyLCBDYWNoZWRSZXNvdXJjZSogY2FjaGVkT2JqZWN0KQoreworICAgIC8vIFJldHVybiBmcm9t
IHRoZSBmdW5jdGlvbiBmb3Igb2JqZWN0cyB0aGF0IHdlIGRpZG4ndCBsb2FkIGZyb20gdGhlIGNh
Y2hlLgorICAgIGlmICghY2FjaGVkT2JqZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0
Y2ggKGNhY2hlZE9iamVjdC0+c3RhdHVzKCkpIHsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpD
YWNoZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok5vdENhY2hl
ZDoKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpVbmtub3duOgorICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6Ok5ldzoKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpQZW5kaW5nOgorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIHRoYXQgd2Ug
ImxvYWRlZCIuCit9CisKK2Jvb2wgSXNSZXNwb25zZVVSTEVxdWFsVG9VUkwoUGxhdGZvcm1SZXNw
b25zZSByZXNwb25zZSwgY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKCFyZXNwb25zZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHJlc3BvbnNlLT51cmwoKS51cmwo
KSA9PSB1cmw7Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgUmVzcG9uc2VVUkwoUGxhdGZvcm1SZXNw
b25zZSByZXNwb25zZSkKK3sKKyAgICBpZiAoIXJlc3BvbnNlKQorICAgICAgICByZXR1cm4gRGVw
cmVjYXRlZFN0cmluZygpOworCisgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcocmVzcG9uc2Ut
PnVybCgpLnVybCgpKTsKK30KKworRGVwcmVjYXRlZFN0cmluZyBSZXNwb25zZU1JTUVUeXBlKFBs
YXRmb3JtUmVzcG9uc2UgcmVzcG9uc2UpCit7CisgICAgaWYgKCFyZXNwb25zZSkKKyAgICAgICAg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoInRleHQvaHRtbCIpOworICAgIHJldHVybiBEZXByZWNh
dGVkU3RyaW5nKHJlc3BvbnNlLT5taW1lVHlwZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cit9CisK
K2Jvb2wgUmVzcG9uc2VJc011bHRpcGFydChQbGF0Zm9ybVJlc3BvbnNlIHJlc3BvbnNlKQorewor
ICAgIHJldHVybiBSZXNwb25zZU1JTUVUeXBlKHJlc3BvbnNlKSA9PSAibXVsdGlwYXJ0L3gtbWl4
ZWQtcmVwbGFjZSI7Cit9CisKK3RpbWVfdCBDYWNoZU9iamVjdEV4cGlyZXNUaW1lKERvY0xvYWRl
ciosIFBsYXRmb3JtUmVzcG9uc2UpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSEKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UGxhdGZvcm1SZXNwb25z
ZShQbGF0Zm9ybVJlc3BvbnNlIHJlc3BvbnNlKQoreworICAgIG1fcGxhdGZvcm1SZXNwb25zZSA9
IHJlc3BvbnNlOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRBbGxEYXRhKFBsYXRmb3Jt
RGF0YSBhbGxEYXRhKQoreworICAgIG1fYWxsRGF0YSA9IGFsbERhdGE7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2N1cmwvRnJhbWVMb2FkZXJDdXJs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jdXJsL0ZyYW1lTG9hZGVyQ3VybC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9jdXJsL0ZyYW1lTG9hZGVyQ3VybC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2Ug
U3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhh
dXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVs
QGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIk1haW5SZXNv
dXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJE
b2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKworI2RlZmluZSBu
b3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRF
RDogJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkKGNvbnN0IEtVUkwmIFVSTCwgRXZl
bnQqIGV2ZW50KQoreworICAgIGxvYWQoUmVzb3VyY2VSZXF1ZXN0KFVSTCksIHRydWUsIGV2ZW50
LCAwLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6
bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHVzZXJHZXN0dXJlLCBF
dmVudCogZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIHN1Ym1pdEZvcm0s
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmb3JtVmFsdWVzKQoreworICAgIFN0cmlu
ZyByZWZlcnJlcjsKKyAgICBTdHJpbmcgYXJnc1JlZmVycmVyID0gcmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS5odHRwUmVmZXJyZXIoKTsKKyAgICBpZiAoIWFyZ3NSZWZlcnJlci5pc0VtcHR5KCkp
CisgICAgICAgIHJlZmVycmVyID0gYXJnc1JlZmVycmVyOworICAgIGVsc2UKKyAgICAgICAgcmVm
ZXJyZXIgPSBtX291dGdvaW5nUmVmZXJyZXI7CisKKyAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBt
X2ZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC5mcmFtZU5hbWUoKSk7CisgICAgaWYgKCFjYW5U
YXJnZXQodGFyZ2V0RnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgIT0gIlBPU1QiKSB7CisgICAgICAgIEZyYW1l
TG9hZFR5cGUgbG9hZFR5cGU7CisgICAgICAgIGlmIChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
LmNhY2hlUG9saWN5KCkgPT0gUmVsb2FkSWdub3JpbmdDYWNoZURhdGEpCisgICAgICAgICAgICBs
b2FkVHlwZSA9IEZyYW1lTG9hZFR5cGVSZWxvYWQ7CisgICAgICAgIGVsc2UgaWYgKCF1c2VyR2Vz
dHVyZSkKKyAgICAgICAgICAgIGxvYWRUeXBlID0gRnJhbWVMb2FkVHlwZUludGVybmFsOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBsb2FkVHlwZSA9IEZyYW1lTG9hZFR5cGVTdGFuZGFyZDsK
KworICAgICAgICBsb2FkKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCksIHJlZmVycmVy
LCBsb2FkVHlwZSwKKyAgICAgICAgICAgICByZXF1ZXN0LmZyYW1lTmFtZSgpLCBldmVudCwgc3Vi
bWl0Rm9ybSwgZm9ybVZhbHVlcyk7CisgICAgfSBlbHNlCisgICAgICAgIHBvc3QocmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS51cmwoKSwgcmVmZXJyZXIsIHJlcXVlc3QuZnJhbWVOYW1lKCksCisg
ICAgICAgICAgICAgcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwQm9keSgpLCByZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgpLCBldmVudCwgc3VibWl0Rm9ybSwg
Zm9ybVZhbHVlcyk7CisgICAgaWYgKHRhcmdldEZyYW1lICYmIHRhcmdldEZyYW1lICE9IG1fZnJh
bWUpCisgICAgICAgIHRhcmdldEZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5mb2N1cygpOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBy
ZWZlcnJlciwgRnJhbWVMb2FkVHlwZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgIEV2ZW50KiwgRWxlbWVudCogZm9ybSwgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4mIGZvcm1WYWx1ZXMpCit7CisgICAgaWYoIW1fbWFpblJlc291cmNlTG9hZGVyKQor
ICAgICAgICBtX21haW5SZXNvdXJjZUxvYWRlciA9IE1haW5SZXNvdXJjZUxvYWRlcjo6Y3JlYXRl
KG1fZnJhbWUpOworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7CisgICAgcmVxdWVz
dC5zZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOworICAgIG1fbWFpblJlc291cmNlTG9hZGVyLT5s
b2FkKHJlcXVlc3QpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXI6OnBvc3QoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBTdHJpbmcmIHRhcmdldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybURhdGEmIGZvcm1EYXRhLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICBFdmVudCosIEVsZW1lbnQqIGZv
cm0sIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmb3JtVmFsdWVzKQoreworICAgIGlm
KCFtX21haW5SZXNvdXJjZUxvYWRlcikKKyAgICAgICAgbV9tYWluUmVzb3VyY2VMb2FkZXIgPSBN
YWluUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShtX2ZyYW1lKTsKKyAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCh1cmwpOworICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIHJl
cXVlc3Quc2V0SFRUUEJvZHkoZm9ybURhdGEpOworICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVy
KHJlZmVycmVyKTsKKyAgICBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZChyZXF1ZXN0KTsKK30K
Kwordm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBy
ZXF1ZXN0LCBFdmVudCogZXZlbnQpCit7CisgICAgLy8gRklYTUU6IFdlJ2QgbGlrZSB0byByZW1v
dmUgdGhpcyBhbHRvZ2V0aGVyIGFuZCBmaXggdGhlIG11bHRpcGxlIGZvcm0gc3VibWlzc2lvbiBp
c3N1ZSBhbm90aGVyIHdheS4KKyAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdWJtaXQgbW9yZSB0
aGFuIG9uZSBmb3JtIGZyb20gdGhlIHNhbWUgcGFnZSwKKyAgICAvLyBub3IgZG8gd2Ugd2FudCB0
byBzdWJtaXQgYSBzaW5nbGUgZm9ybSBtb3JlIHRoYW4gb25jZS4KKyAgICAvLyBUaGlzIGZsYWcg
cHJldmVudHMgdGhlc2UgZnJvbSBoYXBwZW5pbmc7IG5vdCBzdXJlIGhvdyBvdGhlciBicm93c2Vy
cyBwcmV2ZW50IHRoaXMuCisgICAgLy8gVGhlIGZsYWcgaXMgcmVzZXQgaW4gZWFjaCB0aW1lIHdl
IHN0YXJ0IGhhbmRsZSBhIG5ldyBtb3VzZSBvciBrZXkgZG93biBldmVudCwgYW5kCisgICAgLy8g
YWxzbyBpbiBzZXRWaWV3IHNpbmNlIHRoaXMgcGFydCBtYXkgZ2V0IHJldXNlZCBmb3IgYSBwYWdl
IGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KKyAgICAvLyBUaGUgZm9ybSBtdWx0aS1zdWJt
aXQgbG9naWMgaGVyZSBpcyBvbmx5IG5lZWRlZCB3aGVuIHdlIGFyZSBzdWJtaXR0aW5nIGEgZm9y
bSB0aGF0IGFmZmVjdHMgdGhpcyBmcmFtZS4KKyAgICAvLyBGSVhNRTogRnJhbWUgdGFyZ2V0aW5n
IGlzIG9ubHkgb25lIG9mIHRoZSB3YXlzIHRoZSBzdWJtaXNzaW9uIGNvdWxkIGVuZCB1cCBkb2lu
ZyBzb21ldGhpbmcgb3RoZXIKKyAgICAvLyB0aGFuIHJlcGxhY2luZyB0aGlzIGZyYW1lJ3MgY29u
dGVudCwgc28gdGhpcyBjaGVjayBpcyBmbGF3ZWQuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgY2hl
Y2sgaXMgaGFyZGx5CisgICAgLy8gbmVlZGVkIGFueSBtb3JlIG5vdyB0aGF0IHdlIHJlc2V0IG1f
c3VibWl0dGVkRm9ybVVSTCBvbiBlYWNoIG1vdXNlIG9yIGtleSBkb3duIGV2ZW50LgorICAgIEZy
YW1lKiB0YXJnZXQgPSBtX2ZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC5mcmFtZU5hbWUoKSk7
CisgICAgaWYgKG1fZnJhbWUtPnRyZWUoKS0+aXNEZXNjZW5kYW50T2YodGFyZ2V0KSkgeworICAg
ICAgICBpZiAobV9zdWJtaXR0ZWRGb3JtVVJMID09IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
dXJsKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3VibWl0dGVkRm9ybVVSTCA9
IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgfQorCisgICAgLy8gRklYTUU6
IFdoeSBkbyB3ZSBhbHdheXMgcGFzcyB0cnVlIGZvciB1c2VyR2VzdHVyZT8KKyAgICBsb2FkKHJl
cXVlc3QsIHRydWUsIGV2ZW50LCBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQuZ2V0KCksIG1fZm9y
bVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZCk7CisgICAgY2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMo
KTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQoY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYgcmVxdWVzdCwgRXZlbnQqIGV2ZW50KQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgY29w
eSA9IHJlcXVlc3Q7CisgICAgaWYgKGNvcHkucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cFJlZmVycmVy
KCkuaXNFbXB0eSgpKQorICAgICAgICBjb3B5LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBSZWZl
cnJlcihtX291dGdvaW5nUmVmZXJyZXIpOworCisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBhbHdh
eXMgcGFzcyB0cnVlIGZvciB1c2VyR2VzdHVyZT8KKyAgICBsb2FkKGNvcHksIHRydWUsIGV2ZW50
LCAwLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6
c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBtX2NsaWVudC0+c2V0VGl0bGUo
dGl0bGUsdXJsKCkpOworfQorCitPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlcjo6b2JqZWN0
Q29udGVudFR5cGUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gT2JqZWN0Q29udGVudFR5cGUoKTsKK30KKwor
CitLVVJMIEZyYW1lTG9hZGVyOjpvcmlnaW5hbFJlcXVlc3RVUkwoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RvY3VtZW50TG9hZGVyLT5VUkwoKTsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyOjpv
dmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0Cit7CisgICAgLy8gbm8tb3AKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK2ludCBGcmFtZUxvYWRlcjo6Z2V0SGlzdG9yeUxlbmd0aCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVy
OjpyZWZlcnJlcigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlcjo6ZGV0YWNoRnJvbVBhcmVudCgpCit7
CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0KG1fZnJhbWUpOworCisgICAgY2xvc2VEb2N1bWVu
dCgpOworICAgIHN0b3BBbGxMb2FkZXJzKCk7CisgICAgbV9jbGllbnQtPmRldGFjaGVkRnJvbVBh
cmVudDEoKTsKKyAgICBkZXRhY2hDaGlsZHJlbigpOworICAgIG1fY2xpZW50LT5kZXRhY2hlZEZy
b21QYXJlbnQyKCk7CisgICAgc2V0RG9jdW1lbnRMb2FkZXIoMCk7CisgICAgbV9jbGllbnQtPmRl
dGFjaGVkRnJvbVBhcmVudDMoKTsKKworICAgIGlmIChGcmFtZSogcGFyZW50ID0gbV9mcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKSkKKyAgICAgICAgcGFyZW50LT50cmVlKCktPnJlbW92ZUNoaWxkKG1f
ZnJhbWUpOworICAgIG1fZnJhbWUtPnNldFZpZXcoMCk7CisKKyAgICBtX2NsaWVudC0+ZGV0YWNo
ZWRGcm9tUGFyZW50NCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBs
ZXRlRm9yVGhpc0ZyYW1lKCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQtPmhhc1dlYlZpZXcoKSk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNh
c2UgRnJhbWVTdGF0ZVByb3Zpc2lvbmFsOiB7fQorCisgICAgY2FzZSBGcmFtZVN0YXRlQ29tbWl0
dGVkUGFnZTogeworICAgICAgICBEb2N1bWVudExvYWRlciogZGwgPSBtX2RvY3VtZW50TG9hZGVy
LmdldCgpOworICAgICAgICBpZiAoZGwtPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtYXJrTG9hZENvbXBsZXRlKCk7CisKKyAgICAgICAgLy8g
RklYTUU6IElzIHRoaXMgc3Vic2VxdWVudCB3b3JrIGltcG9ydGFudCBpZiB3ZSBhbHJlYWR5IG5h
dmlnYXRlZCBhd2F5PworICAgICAgICAvLyBNYXliZSB0aGVyZSBhcmUgYnVncyBiZWNhdXNlIG9m
IHRoYXQsIG9yIGV4dHJhIHdvcmsgd2UgY2FuIHNraXAgYmVjYXVzZQorICAgICAgICAvLyB0aGUg
bmV3IHBhZ2UgaXMgcmVhZHkuCisgICAgICAgIG1fY2xpZW50LT5mb3JjZUxheW91dEZvck5vbkhU
TUwoKTsKKworICAgICAgICAvLyBJZiB0aGUgdXNlciBoYWQgYSBzY3JvbGwgcG9pbnQsIHNjcm9s
bCB0byBpdCwgb3ZlcnJpZGluZyB0aGUgYW5jaG9yIHBvaW50IGlmIGFueS4KKyAgICAgICAgaWYg
KChpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9sb2FkVHlwZSkgfHwgbV9sb2FkVHlwZSA9PSBGcmFt
ZUxvYWRUeXBlUmVsb2FkKQorICAgICAgICAgICAgICAgICYmIG1fY2xpZW50LT5oYXNCYWNrRm9y
d2FyZExpc3QoKSkKKyAgICAgICAgICAgIG1fY2xpZW50LT5yZXN0b3JlU2Nyb2xsUG9zaXRpb25B
bmRWaWV3U3RhdGUoKTsKKyAgICAgICAgbV9jbGllbnQtPnByb2dyZXNzQ29tcGxldGVkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEZyYW1lU3RhdGVDb21wbGV0ZToKKyAg
ICAgICAgLy8gRXZlbiBpZiBhbHJlYWR5IGNvbXBsZXRlLCB3ZSBtaWdodCBoYXZlIHNldCBhIHBy
ZXZpb3VzIGl0ZW0gb24gYSBmcmFtZSB0aGF0CisgICAgICAgIC8vIGRpZG4ndCBkbyBhbnkgZGF0
YSBsb2FkaW5nIG9uIHRoZSBwYXN0IHRyYW5zYWN0aW9uLiBNYWtlIHN1cmUgdG8gY2xlYXIgdGhl
c2Ugb3V0LgorICAgICAgICBtX2NsaWVudC0+ZnJhbWVMb2FkQ29tcGxldGVkKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6Z29CYWNrT3JGb3J3YXJk
KGludCBkaXN0YW5jZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitLVVJMIEZyYW1l
TG9hZGVyOjpoaXN0b3J5VVJMKGludCBkaXN0YW5jZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBLVVJMKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXI6OmRpZEZpcnN0TGF5
b3V0KCkKK3sKKyAgICBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKG1fbG9hZFR5cGUpICYmIG1f
Y2xpZW50LT5oYXNCYWNrRm9yd2FyZExpc3QoKSkKKyAgICAgICAgbV9jbGllbnQtPnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpOworCisgICAgbV9maXJzdExheW91dERvbmUgPSB0
cnVlOworICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZEZpcnN0TGF5b3V0KCk7Cit9CisKK2Jvb2wg
RnJhbWVMb2FkZXI6OmNhbkdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXI6OnBhcnRDbGVhcmVkSW5CZWdpbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBGcmFtZUxvYWRlcjo6c2F2ZURvY3VtZW50U3RhdGUoKQoreworICAgIC8vIERvIG5v
dCBzYXZlIGRvYyBzdGF0ZSBpZiB0aGUgcGFnZSBoYXMgYSBwYXNzd29yZCBmaWVsZCBhbmQgYSBm
b3JtIHRoYXQgd291bGQgYmUgc3VibWl0dGVkIHZpYSBodHRwcy4KKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6ZGlkQ2hhbmdlVGl0
bGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3sKKyAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlVGl0
bGUobG9hZGVyKTsKK30KKworCitQb2xpY3lDaGVjazo6UG9saWN5Q2hlY2soKQorICAgICAgICA6
IG1fY29udGVudEZ1bmN0aW9uKDApCit7fQorCit2b2lkIFBvbGljeUNoZWNrOjpjbGVhcigpCit7
CisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgbV9jb250ZW50RnVuY3Rpb24gPSAwOworfQorCisK
K3ZvaWQgUG9saWN5Q2hlY2s6OnNldChDb250ZW50UG9saWN5RGVjaXNpb25GdW5jdGlvbiBmdW5j
dGlvbiwgdm9pZCogYXJndW1lbnQpCit7CisgICAgbV9mb3JtU3RhdGUgPSAwOworICAgIG1fZnJh
bWVOYW1lID0gU3RyaW5nKCk7CisKKyAgICBtX2NvbnRlbnRGdW5jdGlvbiA9IGZ1bmN0aW9uOwor
ICAgIG1fYXJndW1lbnQgPSBhcmd1bWVudDsKK30KKwordm9pZCBQb2xpY3lDaGVjazo6Y2FsbCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQb2xpY3lDaGVjazo6Y2FsbChQ
b2xpY3lBY3Rpb24gYWN0aW9uKQoreworICAgIEFTU0VSVChtX2NvbnRlbnRGdW5jdGlvbik7Cisg
ICAgbV9jb250ZW50RnVuY3Rpb24obV9hcmd1bWVudCwgYWN0aW9uKTsKK30KKwordm9pZCBQb2xp
Y3lDaGVjazo6Y2xlYXJSZXF1ZXN0KCkKK3sKKyAgICBtX2Zvcm1TdGF0ZSA9IDA7CisgICAgbV9m
cmFtZU5hbWUgPSBTdHJpbmcoKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvY3VybC9NYWluUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jdXJsL01haW5SZXNvdXJjZUxvYWRlckN1cmwuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvY3VybC9NYWluUmVzb3VyY2VMb2FkZXJDdXJs
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWFp
bkNsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudAoreworcHVibGljOgorICAgIE1h
aW5DbGllbnQoTWFpblJlc291cmNlTG9hZGVyKiBtYWluTG9hZGVyLEZyYW1lTG9hZGVyKiBmcmFt
ZUxvYWRlcikKKyAgICAgICAgICAgIDogbV9tYWluTG9hZGVyKG1haW5Mb2FkZXIpCisgICAgICAg
ICAgICAsIG1fZnJhbWVMb2FkZXIoZnJhbWVMb2FkZXIpCisgICAge30KKyAgICBGcmFtZSogZnJh
bWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVMb2FkZXItPmZyYW1lKCk7CisgICAg
fQorICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVE
YXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKKyAgICB7
CisgICAgICAgIG1fZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKworICAgIH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopCisgICAg
eworICAgICAgICBtX2ZyYW1lTG9hZGVyLT5lbmQoKTsKKyAgICAgICAgbV9tYWluTG9hZGVyLT5z
ZXRSZXNvdXJjZUhhbmRsZSgwKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxXaXRo
RXJyb3IoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgTWFpblJl
c291cmNlTG9hZGVyKiBtX21haW5Mb2FkZXI7CisgICAgRnJhbWVMb2FkZXIqIG1fZnJhbWVMb2Fk
ZXI7Cit9OworCisKKworLyoKKyAqIERhdGEgaXMgdGhlIGZ1bGwgc2V0IG9mIGhlYWRlcnMKKyAq
IENhbGxlZCB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgcmVjaWV2ZWQgZGF0YSBvciBhbGwgZGF0YQor
ICovCit2b2lkIE1haW5DbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSog
am9iLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBTdHJpbmcgbWlt
ZVR5cGUgPSByZXNwb25zZS5taW1lVHlwZSgpOworCisgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHko
KSkgeworICAgICAgICBTdHJpbmcgcGF0aCA9ICBTdHJpbmcoam9iLT51cmwoKS5wYXRoKCkpOwor
ICAgICAgICBtaW1lVHlwZSA9IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6Z2V0TWltZVR5cGUocGF0
aCk7CisgICAgfQorCisgICAgbV9mcmFtZUxvYWRlci0+c2V0UmVzcG9uc2VNSU1FVHlwZShtaW1l
VHlwZSk7CisgICAgU3RyaW5nIGNoYXJzZXQgPSByZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCk7
CisKKyAgICAvLyBzZXRFbmNvZGluZyBjYWxscyBiZWdpbigpIGZvciB1cywgZGVzcGl0ZSB0aGUg
bWlzbGVhZGluZyBuYW1lCisgICAgaWYgKCFjaGFyc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgbV9m
cmFtZUxvYWRlci0+c2V0RW5jb2RpbmcoY2hhcnNldCx0cnVlKTsKKyAgICBlbHNlCisgICAgICAg
IG1fZnJhbWVMb2FkZXItPnNldEVuY29kaW5nKG1fZnJhbWVMb2FkZXItPmVuY29kaW5nKCksZmFs
c2UpOworICAgIG1fZnJhbWVMb2FkZXItPmJlZ2luKGpvYi0+dXJsKCkpOworfQorCisKK3ZvaWQg
TWFpbkNsaWVudDo6ZGlkRmFpbFdpdGhFcnJvcihSZXNvdXJjZUhhbmRsZSogam9iLCBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnIpCit7fQorCitQYXNzUmVmUHRyPE1haW5SZXNvdXJjZUxvYWRlcj4g
TWFpblJlc291cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBu
ZXcgTWFpblJlc291cmNlTG9hZGVyKGZyYW1lKTsKK30KKworTWFpblJlc291cmNlTG9hZGVyOjpN
YWluUmVzb3VyY2VMb2FkZXIoRnJhbWUqIGZyYW1lKQorICAgICAgICA6IFJlc291cmNlTG9hZGVy
KGZyYW1lKQoreworICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBuZXcgTWFpbkNs
aWVudCh0aGlzLGZyYW1lLT5sb2FkZXIoKSk7CisgICAgc2V0UmVzb3VyY2VIYW5kbGVDbGllbnQo
Y2xpZW50KTsKK30KKworTWFpblJlc291cmNlTG9hZGVyOjp+TWFpblJlc291cmNlTG9hZGVyKCkK
K3t9CisKK3ZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCit7
fQorCisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2N1cmwvRG9jdW1lbnRMb2FkZXJDdXJsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jdXJsL0RvY3VtZW50TG9hZGVyQ3VybC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9jdXJsL0RvY3VtZW50TG9hZGVyQ3Vy
bC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
b2N1bWVudExvYWRlci5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkg
ZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZFxuIiwgX19G
SUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgwKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8q
CisgKiBQZXJmb3JtcyB0aHJlZSBvcGVyYXRpb25zOgorICogIDEuIENvbnZlcnQgYmFja3NsYXNo
ZXMgdG8gY3VycmVuY3kgc3ltYm9scworICogIDIuIENvbnZlcnQgY29udHJvbCBjaGFyYWN0ZXJz
IHRvIHNwYWNlcworICogIDMuIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzCisgKi8K
K3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShjb25zdCBTdHJpbmcmIHRp
dGxlLCBGcmFtZSogZnJhbWUpCit7CisgICAgQVNTRVJUKCF0aXRsZS5pc0VtcHR5KCkpOworCisg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aXRsZS5jaGFyYWN0ZXJzKCk7CisgICAgdW5z
aWduZWQgbGVuZ3RoID0gdGl0bGUubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaTsKKworICAgIC8v
IEZpbmQgdGhlIGZpcnN0IG5vbi1jYW5vbmljYWwgY2hhcmFjdGVyCisgICAgZm9yIChpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOworICAg
ICAgICBpZiAoYyA8IDB4MjAgfHwgYyA9PSAweDdGIHx8IGMgPT0gJ1xcJykKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIC8vIE9wdGltaXphdGlvbiBmb3IgdGl0bGVzIHRoYXQgaGF2
ZSBubyBub24tY2Fub25pY2FsIGNoYXJhY3RlcnMgYW5kIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcg
c3BhY2VzCisgICAgaWYgKGkgPT0gbGVuZ3RoICYmIGNoYXJhY3RlcnNbMF0gIT0gJyAnICYmIGNo
YXJhY3RlcnNbbGVuZ3RoIC0gMV0gIT0gJyAnKQorICAgICAgICByZXR1cm4gdGl0bGU7CisKKyAg
ICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXIobGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBidWls
ZGVySW5kZXggPSAwOworCisgICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlcyBhbmQgbGVhZGluZyBj
aGFyYWN0ZXJzIHRoYXQgd291bGQgY29udmVydCB0byBzcGFjZXMKKyAgICBmb3IgKGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07CisgICAg
ICAgIGlmICghKGMgPD0gMHgyMCB8fCBjID09IDB4N0YpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgLy8gUmVwbGFjZSBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBzcGFjZXMsIGFu
ZCBiYWNrc2xhc2hlcyB3aXRoIGN1cnJlbmN5IHN5bWJvbHMKKyAgICBmb3IgKDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICBpZiAo
YyA8IDB4MjAgfHwgYyA9PSAweDdGKQorICAgICAgICAgICAgYyA9ICcgJzsKKyAgICAgICAgZWxz
ZSBpZiAoYyA9PSAnXFwnKQorICAgICAgICAgICAgYyA9IGZyYW1lLT5iYWNrc2xhc2hBc0N1cnJl
bmN5U3ltYm9sKCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXJbYnVpbGRlckluZGV4KytdID0gYzsK
KyAgICB9CisKKyAgICAvLyBTdHJpcCB0cmFpbGluZyBzcGFjZXMKKyAgICB3aGlsZSAoYnVpbGRl
ckluZGV4ID4gMCkgeworICAgICAgICAtLWJ1aWxkZXJJbmRleDsKKyAgICAgICAgaWYgKHN0cmlu
Z0J1aWxkZXJbYnVpbGRlckluZGV4XSAhPSAnICcpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBpZiAoYnVpbGRlckluZGV4ID09IDAgJiYgc3RyaW5nQnVpbGRlcltidWlsZGVySW5k
ZXhdID09ICcgJykKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgc3RyaW5nQnVpbGRlci5yZXNp
emUoYnVpbGRlckluZGV4ICsgMSk7CisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoc3RyaW5nQnVp
bGRlcik7Cit9CisKK0RvY3VtZW50TG9hZGVyOjpEb2N1bWVudExvYWRlcigpCisgICAgICAgIDog
bV9mcmFtZSgwKQorICAgICAgICAsIG1fbG9hZGluZ1N0YXJ0ZWRUaW1lKDApCisgICAgICAgICwg
bV9jb21taXR0ZWQoZmFsc2UpCisgICAgICAgICwgbV9zdG9wcGluZyhmYWxzZSkKKyAgICAgICAg
LCBtX2xvYWRpbmcoZmFsc2UpCisgICAgICAgICwgbV9nb3RGaXJzdEJ5dGUoZmFsc2UpCisgICAg
ICAgICwgbV9wcmltYXJ5TG9hZENvbXBsZXRlKGZhbHNlKQorICAgICAgICAsIG1faXNDbGllbnRS
ZWRpcmVjdChmYWxzZSkKK3t9CisKK0ZyYW1lTG9hZGVyKiBEb2N1bWVudExvYWRlcjo6ZnJhbWVM
b2FkZXIoKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpOworfQorCitEb2N1bWVudExvYWRlcjo6fkRvY3Vt
ZW50TG9hZGVyKCkKK3sKKyAgICBBU1NFUlQoIW1fZnJhbWUgfHwgZnJhbWVMb2FkZXIoKS0+YWN0
aXZlRG9jdW1lbnRMb2FkZXIoKSAhPSB0aGlzIHx8CisgICAgICAgICAgICFmcmFtZUxvYWRlcigp
LT5pc0xvYWRpbmcoKSk7Cit9CisKK0tVUkwgRG9jdW1lbnRMb2FkZXI6OlVSTCgpIGNvbnN0Cit7
CisgICAgS1VSTCB1cmw7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdXJsOwor
fQorCitLVVJMIERvY3VtZW50TG9hZGVyOjp1bnJlYWNoYWJsZVVSTCgpIGNvbnN0Cit7CisgICAg
S1VSTCB1cmw7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdXJsOworfQorCit2
b2lkIERvY3VtZW50TG9hZGVyOjpyZXBsYWNlUmVxdWVzdFVSTEZvckFuY2hvclNjcm9sbChjb25z
dCBLVVJMJiBVUkwpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBEb2N1bWVu
dExvYWRlcjo6aXNTdG9wcGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RvcHBpbmc7Cit9
CisKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OmNsZWFyRXJyb3JzKCkKK3t9CisKKy8vIENhbmNlbHMg
dGhlIGRhdGEgc291cmNlJ3MgcGVuZGluZyBsb2Fkcy4gIENvbmNlcHR1YWxseSwgYSBkYXRhIHNv
dXJjZSBvbmx5IGxvYWRzCisvLyBvbmUgZG9jdW1lbnQgYXQgYSB0aW1lLCBidXQgb25lIGRvY3Vt
ZW50IG1heSBoYXZlIG1hbnkgcmVsYXRlZCByZXNvdXJjZXMuCisvLyBzdG9wTG9hZGluZyB3aWxs
IHN0b3AgYWxsIGxvYWRzIGluaXRpYXRlZCBieSB0aGUgZGF0YSBzb3VyY2UsCisvLyBidXQgbm90
IGxvYWRzIGluaXRpYXRlZCBieSBjaGlsZCBmcmFtZXMnIGRhdGEgc291cmNlcyAtLSB0aGF0J3Mg
dGhlIFdlYkZyYW1lJ3Mgam9iLgordm9pZCBEb2N1bWVudExvYWRlcjo6c3RvcExvYWRpbmcoKQor
eworICAgIC8vIEFsd2F5cyBhdHRlbXB0IHRvIHN0b3AgdGhlIGZyYW1lIGJlY2F1c2UgaXQgbWF5
IHN0aWxsIGJlIGxvYWRpbmcvcGFyc2luZyBhZnRlciB0aGUgZGF0YSBzb3VyY2UKKyAgICAvLyBp
cyBkb25lIGxvYWRpbmcgYW5kIG5vdCBzdG9wcGluZyBpdCBjYW4gY2F1c2UgYSB3b3JsZCBsZWFr
LgorICAgIGlmIChtX2NvbW1pdHRlZCkKKyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPnN0b3BM
b2FkaW5nKGZhbHNlKTsKKworICAgIGlmICghbV9sb2FkaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RGcmFtZShtX2ZyYW1lKTsKKyAgICBSZWZQdHI8RG9j
dW1lbnRMb2FkZXI+IHByb3RlY3RMb2FkZXIodGhpcyk7CisKKyAgICBtX3N0b3BwaW5nID0gdHJ1
ZTsKKworICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IERvY3VtZW50TG9hZGVyOjpmcmFt
ZUxvYWRlcigpOworCisgICAgaWYgKGZyYW1lTG9hZGVyLT5oYXNNYWluUmVzb3VyY2VMb2FkZXIo
KSkKKyAgICAgICAgLy8gU3RvcCB0aGUgbWFpbiByZXNvdXJjZSBsb2FkZXIgYW5kIGxldCBpdCBz
ZW5kIHRoZSBjYW5jZWxsZWQgbWVzc2FnZS4KKyAgICAgICAgZnJhbWVMb2FkZXItPmNhbmNlbE1h
aW5SZXNvdXJjZUxvYWQoKTsKKyAgICAvL2Vsc2UgaWYgKGZyYW1lTG9hZGVyLT5pc0xvYWRpbmdT
dWJyZXNvdXJjZXMoKSkKKyAgICAvLyBUaGUgbWFpbiByZXNvdXJjZSBsb2FkZXIgYWxyZWFkeSBm
aW5pc2hlZCBsb2FkaW5nLiBTZXQgdGhlIGNhbmNlbGxlZCBlcnJvciBvbiB0aGUKKyAgICAvLyBk
b2N1bWVudCBhbmQgbGV0IHRoZSBzdWJyZXNvdXJjZUxvYWRlcnMgc2VuZCBpbmRpdmlkdWFsIGNh
bmNlbGxlZCBtZXNzYWdlcyBiZWxvdy4KKyAgICAvL3NldE1haW5Eb2N1bWVudEVycm9yKGZyYW1l
TG9hZGVyLT5jYW5jZWxsZWRFcnJvcihtX3JlcXVlc3QuZ2V0KCkpKTsKKyAgICAvL2Vsc2UKKyAg
ICAvLyBJZiB0aGVyZSBhcmUgbm8gcmVzb3VyY2UgbG9hZGVycywgd2UgbmVlZCB0byBtYW51ZmFj
dHVyZSBhIGNhbmNlbGxlZCBtZXNzYWdlLgorICAgIC8vIChBIGJhY2svZm9yd2FyZCBuYXZpZ2F0
aW9uIGhhcyBubyByZXNvdXJjZSBsb2FkZXJzIGJlY2F1c2UgaXRzIHJlc291cmNlcyBhcmUgY2Fj
aGVkLikKKyAgICAvL21haW5SZWNlaXZlZEVycm9yKGZyYW1lTG9hZGVyLT5jYW5jZWxsZWRFcnJv
cihtX3JlcXVlc3QuZ2V0KCkpLCB0cnVlKTsKKworICAgIGZyYW1lTG9hZGVyLT5zdG9wTG9hZGlu
Z1N1YnJlc291cmNlcygpOworICAgIGZyYW1lTG9hZGVyLT5zdG9wTG9hZGluZ1BsdWdJbnMoKTsK
KworICAgIG1fc3RvcHBpbmcgPSBmYWxzZTsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0
dXBGb3JSZXBsYWNlKCkKK3sKKyAgICBmcmFtZUxvYWRlcigpLT5zZXR1cEZvclJlcGxhY2UoKTsK
KyAgICBtX2NvbW1pdHRlZCA9IGZhbHNlOworfQorCit2b2lkIERvY3VtZW50TG9hZGVyOjpjb21t
aXRJZlJlYWR5KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX2dvdEZpcnN0
Qnl0ZSAmJiAhbV9jb21taXR0ZWQpIHsKKyAgICAgICAgbV9jb21taXR0ZWQgPSB0cnVlOworICAg
ICAgICAvL2ZyYW1lTG9hZGVyKCktPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKKyAgICB9Cit9
CisKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OmZpbmlzaGVkTG9hZGluZygpCit7CisgICAgbV9nb3RG
aXJzdEJ5dGUgPSB0cnVlOworICAgIGNvbW1pdElmUmVhZHkoKTsKKyAgICBmcmFtZUxvYWRlcigp
LT5maW5pc2hlZExvYWRpbmdEb2N1bWVudCh0aGlzKTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
ZW5kKCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldENvbW1pdHRlZChib29sIGYpCit7
CisgICAgbV9jb21taXR0ZWQgPSBmOworfQorCitib29sIERvY3VtZW50TG9hZGVyOjppc0NvbW1p
dHRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbWl0dGVkOworfQorCit2b2lkIERvY3Vt
ZW50TG9hZGVyOjpzZXRMb2FkaW5nKGJvb2wgZikKK3sKKyAgICBtX2xvYWRpbmcgPSBmOworfQor
Citib29sIERvY3VtZW50TG9hZGVyOjppc0xvYWRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xvYWRpbmc7Cit9CisKK2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmRvZXNQcm9ncmVzc2l2ZUxvYWQo
Y29uc3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gIWZyYW1lTG9hZGVy
KCktPmlzUmVwbGFjaW5nKCkgfHwgTUlNRVR5cGUgPT0gInRleHQvaHRtbCI7Cit9CisKK3ZvaWQg
RG9jdW1lbnRMb2FkZXI6OnNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBu
ZXdNSU1FVHlwZSkKK3sKKyAgICBpZiAoIW1fZ290Rmlyc3RCeXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICAvL1N0cmluZyBvbGRNSU1FVHlwZSA9IFttX3Jlc3BvbnNlLmdldCgpIE1JTUVUeXBl
XTsKKyAgICAvL0ZJWE1FOiBnZXQgdGhlIG1pbWV0eXBlIGNvcnJlY3RseSAodGhlbiByZW1vdmUg
bm90SW1wbGVtZW50ZWQoKSkKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFN0cmluZyBvbGRN
SU1FVHlwZTsKKworICAgIGlmICghZG9lc1Byb2dyZXNzaXZlTG9hZChvbGRNSU1FVHlwZSkpIHsK
KyAgICAgICAgZnJhbWVMb2FkZXIoKS0+cmV2ZXJ0VG9Qcm92aXNpb25hbCh0aGlzKTsKKyAgICAg
ICAgc2V0dXBGb3JSZXBsYWNlKCk7CisgICAgfQorCisgICAgZnJhbWVMb2FkZXIoKS0+ZmluaXNo
ZWRMb2FkaW5nRG9jdW1lbnQodGhpcyk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmVuZCgpOwor
CisgICAgZnJhbWVMb2FkZXIoKS0+c2V0UmVwbGFjaW5nKCk7CisgICAgbV9nb3RGaXJzdEJ5dGUg
PSBmYWxzZTsKKworICAgIGlmIChkb2VzUHJvZ3Jlc3NpdmVMb2FkKG5ld01JTUVUeXBlKSkgewor
ICAgICAgICBmcmFtZUxvYWRlcigpLT5yZXZlcnRUb1Byb3Zpc2lvbmFsKHRoaXMpOworICAgICAg
ICBzZXR1cEZvclJlcGxhY2UoKTsKKyAgICB9CisKKyAgICBmcmFtZUxvYWRlcigpLT5zdG9wTG9h
ZGluZ1N1YnJlc291cmNlcygpOworICAgIGZyYW1lTG9hZGVyKCktPnN0b3BMb2FkaW5nUGx1Z0lu
cygpOworCisgICAgZnJhbWVMb2FkZXIoKS0+ZmluYWxTZXR1cEZvclJlcGxhY2UodGhpcyk7Cit9
CisKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OnVwZGF0ZUxvYWRpbmcoKQoreworICAgIEFTU0VSVCh0
aGlzID09IGZyYW1lTG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkpOworICAgIHNldExv
YWRpbmcoZnJhbWVMb2FkZXIoKS0+aXNMb2FkaW5nKCkpOworfQorCit2b2lkIERvY3VtZW50TG9h
ZGVyOjpzZXRGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKG1fZnJhbWUgPT0gZnJhbWUp
CisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZnJhbWUgJiYgIW1fZnJhbWUpOworICAgIG1f
ZnJhbWUgPSBmcmFtZTsKKyAgICBhdHRhY2hUb0ZyYW1lKCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRM
b2FkZXI6OmF0dGFjaFRvRnJhbWUoKQoreworICAgIEFTU0VSVChtX2ZyYW1lKTsKK30KKwordm9p
ZCBEb2N1bWVudExvYWRlcjo6ZGV0YWNoRnJvbUZyYW1lKCkKK3sKKyAgICBBU1NFUlQobV9mcmFt
ZSk7CisgICAgbV9mcmFtZSA9IDA7Cit9CisKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OnByZXBhcmVG
b3JMb2FkU3RhcnQoKQoreworICAgIEFTU0VSVCghbV9zdG9wcGluZyk7CisgICAgc2V0UHJpbWFy
eUxvYWRDb21wbGV0ZShmYWxzZSk7CisgICAgQVNTRVJUKGZyYW1lTG9hZGVyKCkpOworICAgIGNs
ZWFyRXJyb3JzKCk7CisKKyAgICAvLyBNYXJrIHRoZSBzdGFydCBsb2FkaW5nIHRpbWUuCisgICAg
bV9sb2FkaW5nU3RhcnRlZFRpbWUgPSBjdXJyZW50VGltZSgpOworCisgICAgc2V0TG9hZGluZyh0
cnVlKTsKKworICAgIGZyYW1lTG9hZGVyKCktPnByZXBhcmVGb3JMb2FkU3RhcnQoKTsKK30KKwor
ZG91YmxlIERvY3VtZW50TG9hZGVyOjpsb2FkaW5nU3RhcnRlZFRpbWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xvYWRpbmdTdGFydGVkVGltZTsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6
c2V0SXNDbGllbnRSZWRpcmVjdChib29sIGZsYWcpCit7CisgICAgbV9pc0NsaWVudFJlZGlyZWN0
ID0gZmxhZzsKK30KKworYm9vbCBEb2N1bWVudExvYWRlcjo6aXNDbGllbnRSZWRpcmVjdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faXNDbGllbnRSZWRpcmVjdDsKK30KKwordm9pZCBEb2N1bWVu
dExvYWRlcjo6c2V0UHJpbWFyeUxvYWRDb21wbGV0ZShib29sIGZsYWcpCit7CisgICAgbV9wcmlt
YXJ5TG9hZENvbXBsZXRlID0gZmxhZzsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChm
bGFnKSB7CisgICAgICAgIC8vaWYgKGZyYW1lTG9hZGVyKCktPmhhc01haW5SZXNvdXJjZUxvYWRl
cigpKSB7CisgICAgICAgIC8vICAgIHNldE1haW5SZXNvdXJjZURhdGEoZnJhbWVMb2FkZXIoKS0+
bWFpblJlc291cmNlRGF0YSgpKTsKKyAgICAgICAgLy8gICAgZnJhbWVMb2FkZXIoKS0+cmVsZWFz
ZU1haW5SZXNvdXJjZUxvYWRlcigpOworICAgICAgICAvL30KKyAgICAgICAgdXBkYXRlTG9hZGlu
ZygpOworICAgIH0KK30KKworYm9vbCBEb2N1bWVudExvYWRlcjo6aXNMb2FkaW5nSW5BUElTZW5z
ZSgpIGNvbnN0Cit7CisgICAgLy8gT25jZSBhIGZyYW1lIGhhcyBsb2FkZWQsIHdlIG5vIGxvbmdl
ciBuZWVkIHRvIGNvbnNpZGVyIHN1YnJlc291cmNlcywKKyAgICAvLyBidXQgd2Ugc3RpbGwgbmVl
ZCB0byBjb25zaWRlciBzdWJmcmFtZXMuCisgICAgaWYgKGZyYW1lTG9hZGVyKCktPnN0YXRlKCkg
IT0gRnJhbWVTdGF0ZUNvbXBsZXRlKSB7CisgICAgICAgIGlmICghbV9wcmltYXJ5TG9hZENvbXBs
ZXRlICYmIGlzTG9hZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
IChmcmFtZUxvYWRlcigpLT5pc0xvYWRpbmdTdWJyZXNvdXJjZXMoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50
KCkpCisgICAgICAgICAgICBpZiAoVG9rZW5pemVyKiB0b2sgPSBkb2MtPnRva2VuaXplcigpKQor
ICAgICAgICAgICAgICAgIGlmICh0b2stPnByb2Nlc3NpbmdEYXRhKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZnJhbWVMb2FkZXIoKS0+c3Vi
ZnJhbWVJc0xvYWRpbmcoKTsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6c3RvcFJlY29yZGlu
Z1Jlc3BvbnNlcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIERvY3Vt
ZW50TG9hZGVyOjp0aXRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZVRpdGxlOworfQor
Citjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBEb2N1bWVudExvYWRlcjo6dHJpZ2dlcmluZ0FjdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJpZ2dlcmluZ0FjdGlvbjsKK30KKwordm9pZCBE
b2N1bWVudExvYWRlcjo6c2V0VHJpZ2dlcmluZ0FjdGlvbihjb25zdCBOYXZpZ2F0aW9uQWN0aW9u
JiBhY3Rpb24pCit7CisgICAgbV90cmlnZ2VyaW5nQWN0aW9uID0gYWN0aW9uOworfQorCit2b2lk
IERvY3VtZW50TG9hZGVyOjpzZXRPdmVycmlkZUVuY29kaW5nKGNvbnN0IFN0cmluZyYgZW5jKQor
eworICAgIG1fb3ZlcnJpZGVFbmNvZGluZyA9IGVuYzsKK30KKworU3RyaW5nIERvY3VtZW50TG9h
ZGVyOjpvdmVycmlkZUVuY29kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vdmVycmlkZUVu
Y29kaW5nOworfQorCit2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRUaXRsZShjb25zdCBTdHJpbmcm
IHRpdGxlKQoreworICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFN0cmluZyB0cmltbWVkID0gY2Fub25pY2FsaXplZFRpdGxlKHRpdGxlLCBtX2ZyYW1lKTsK
KyAgICBpZiAoIXRyaW1tZWQuaXNFbXB0eSgpICYmIG1fcGFnZVRpdGxlICE9IHRyaW1tZWQpIHsK
KyAgICAgICAgZnJhbWVMb2FkZXIoKS0+d2lsbENoYW5nZVRpdGxlKHRoaXMpOworICAgICAgICBt
X3BhZ2VUaXRsZSA9IHRyaW1tZWQ7CisgICAgICAgIGZyYW1lTG9hZGVyKCktPmRpZENoYW5nZVRp
dGxlKHRoaXMpOworICAgIH0KK30KKworS1VSTCBEb2N1bWVudExvYWRlcjo6VVJMRm9ySGlzdG9y
eSgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIHRoZSBVUkwgdG8gYmUgdXNlZCBmb3IgaGlzdG9y
eSBhbmQgQi9GIGxpc3QuCisgICAgLy8gUmV0dXJucyBuaWwgZm9yIFdlYkRhdGFQcm90b2NvbCBV
UkxzIHRoYXQgYXJlbid0IGFsdGVybmF0ZXMKKyAgICAvLyBmb3IgdW5yZWFjaGFibGUgVVJMcywg
YmVjYXVzZSB0aGVzZSBjYW4ndCBiZSBzdG9yZWQgaW4gaGlzdG9yeS4KKyAgICBLVVJMIHVybDsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB1cmw7Cit9CisKK30KKwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAxNzc1MCkKKysrIFdlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAKICAgICAg
ICAgRG9jdW1lbnRMb2FkZXIoTlNVUkxSZXF1ZXN0ICopOwogI2VsaWYgUExBVEZPUk0oUVQpCiAg
ICAgICAgIERvY3VtZW50TG9hZGVyKCk7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICAgICAgRG9jdW1l
bnRMb2FkZXIoKTsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIH5Eb2N1bWVudExvYWRlcigpOwog
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTWljaGFlbCBFbW1lbCA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnRHZGsuaCIKKyNpbmNsdWRlICJGb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJzdGRp
by5oIgorCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJ
WE1FOiBVTklNUExFTUVOVEVEOiAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgfSB3aGls
ZSgwKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZyYW1lTG9hZGVyQ2xpZW50R2RrOjpGcmFt
ZUxvYWRlckNsaWVudEdkayhGcmFtZSogZnJhbWUpCisgICAgICAgIDogbV9mcmFtZShmcmFtZSkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK0ZyYW1lTG9hZGVyQ2xpZW50R2RrOjp+
RnJhbWVMb2FkZXJDbGllbnRHZGsoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGV0YWNoRnJhbWVMb2FkZXIoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEdkazo6aGFzV2Vi
VmlldygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworCitib29sIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpoYXNGcmFtZVZpZXcoKSBjb25zdAor
eworICAgIHJldHVybiAobV9mcmFtZS0+dmlldygpICE9IDApOworfQorCisKK2Jvb2wgRnJhbWVM
b2FkZXJDbGllbnRHZGs6Omhhc0JhY2tGb3J3YXJkTGlzdCgpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEdkazo6cmVzZXRCYWNrRm9yd2FyZExpc3QoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEdkazo6cHJvdmlzaW9uYWxJdGVtSXNUYXJn
ZXQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmxvYWRQcm92aXNpb25hbEl0ZW1Gcm9t
UGFnZUNhY2hlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjppbnZhbGlkYXRlQ3VycmVudEl0ZW1Q
YWdlQ2FjaGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBGcmFtZUxv
YWRlckNsaWVudEdkazo6cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEdkazo6bWFrZURvY3VtZW50VmlldygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjptYWtlUmVwcmVzZW50YXRpb24oRG9j
dW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEdkazo6Zm9yY2VMYXlvdXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6Zm9yY2VMYXlvdXRGb3JOb25IVE1M
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGll
bnRHZGs6OnVwZGF0ZUhpc3RvcnlGb3JDb21taXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6dXBkYXRlSGlzdG9yeUZvckJhY2tG
b3J3YXJkTmF2aWdhdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50R2RrOjp1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnVwZGF0
ZUhpc3RvcnlGb3JTdGFuZGFyZExvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
Kwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6dXBkYXRlSGlzdG9yeUZvckludGVybmFsTG9h
ZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50R2RrOjp1cGRhdGVIaXN0b3J5QWZ0ZXJDbGllbnRSZWRpcmVjdCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpzZXRDb3BpZXNP
blNjcm9sbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitMb2FkRXJyb3JSZXNl
dFRva2VuKiBGcmFtZUxvYWRlckNsaWVudEdkazo6dG9rZW5Gb3JMb2FkRXJyb3JSZXNldCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50R2RrOjpyZXNldEFmdGVyTG9hZEVycm9yKExvYWRFcnJvclJlc2V0VG9rZW4q
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVu
dEdkazo6ZG9Ob3RSZXNldEFmdGVyTG9hZEVycm9yKExvYWRFcnJvclJlc2V0VG9rZW4qKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6
d2lsbENsb3NlRG9jdW1lbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGV0YWNoZWRGcm9tUGFyZW50MSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpkZXRhY2hl
ZEZyb21QYXJlbnQyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRHZGs6OmRldGFjaGVkRnJvbVBhcmVudDMoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGV0YWNoZWRGcm9t
UGFyZW50NCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50R2RrOjpsb2FkZWRGcm9tUGFnZUNhY2hlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlkSGFuZGxl
T25sb2FkRXZlbnRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxMb2FkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6
ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmLAorICAgICAgICBk
b3VibGUgaW50ZXJ2YWwsCisgICAgICAgIGRvdWJsZSBmaXJlRGF0ZSkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoRGlk
Q2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmRpc3BhdGNoV2lsbENsb3NlKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpkaXNw
YXRjaERpZFJlY2VpdmVJY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRH
ZGs6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpkaXNw
YXRjaERpZENvbW1pdExvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmRpc3Bh
dGNoRGlkRmlyc3RMYXlvdXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGlzcGF0Y2hTaG93KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmNhbmNlbFBvbGljeUNo
ZWNrKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRHZGs6OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oRnJhbWVQb2xpY3lGdW5jdGlvbiwKKyAg
ICAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291
cmNlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmNsZWFyTG9hZGluZ0Zyb21QYWdlQ2FjaGUoRG9jdW1l
bnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBGcmFtZUxv
YWRlckNsaWVudEdkazo6aXNMb2FkaW5nRnJvbVBhZ2VDYWNoZShEb2N1bWVudExvYWRlciopCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEdkazo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50TG9h
ZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRHZGs6OmNsZWFyVW5hcmNoaXZpbmdTdGF0ZShEb2N1bWVudExvYWRlciopCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpwcm9n
cmVzc1N0YXJ0ZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEdkazo6cHJvZ3Jlc3NDb21wbGV0ZWQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6c2V0TWFpbkZyYW1lRG9j
dW1lbnRSZWFkeShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEdkazo6d2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6
OmRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmZpbmlzaGVkTG9hZGluZyhEb2N1
bWVudExvYWRlciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50R2RrOjpmaW5hbFNldHVwRm9yUmVwbGFjZShEb2N1bWVudExvYWRlciopCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2Rr
OjpzZXREZWZlcnNMb2FkaW5nKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Citib29sIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjppc0FyY2hpdmVMb2FkUGVuZGluZyhSZXNvdXJj
ZUxvYWRlciopIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6Y2FuY2VsUGVuZGluZ0FyY2hp
dmVMb2FkKFJlc291cmNlTG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisK
K3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmNsZWFyQXJjaGl2ZWRSZXNvdXJjZXMoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEdkazo6
Y2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYgTUlNRVR5cGUpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBGcmFtZUxvYWRl
ckNsaWVudEdkazo6cmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoCisgICAgY29uc3Qg
U3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpnZW5lcmF0
ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpmcmFtZUxvYWRDb21wbGV0ZWQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6cmVzdG9yZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEdk
azo6c2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEdkazo6YWRkSGlzdG9yeUl0ZW1Gb3JGcmFnbWVudFNjcm9sbCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpk
aWRGaW5pc2hMb2FkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRHZGs6OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6
c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgS1VSTCYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworCitTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnVzZXJBZ2Vu
dCgpCit7CisgICAgcmV0dXJuICJNb3ppbGxhLzUuMCAoUEM7IFU7IEludGVsOyBMaW51eDsgZW4p
IEFwcGxlV2ViS2l0LzQyMCsgKEtIVE1MLCBsaWtlIEdlY2tvKSI7Cit9CisKK30KSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyR2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
bG9hZGVyL2dkay9GcmFtZUxvYWRlckdkay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgPG1pa2UuZW1tZWxAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAi
RklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdo
aWxlKDApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitGcmFtZSogRnJhbWVMb2FkZXI6OmNy
ZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBv
d25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworCitXaWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVhdGVQ
bHVnaW4oRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCitXaWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBw
bGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgRnJhbWVMb2FkZXI6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2luV2lk
Z2V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3
PTQgZXQKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50R2RrX0gKKyNkZWZpbmUgRnJh
bWVMb2FkZXJDbGllbnRHZGtfSAorCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNp
bmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiRnJhbWVHZGsu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIERvY3VtZW50TG9hZGVyOworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEZvcm1TdGF0ZTsKK2Ns
YXNzIE5hdmlnYXRpb25BY3Rpb247CitjbGFzcyBTdHJpbmc7CitjbGFzcyBSZXNvdXJjZUxvYWRl
cjsKKworc3RydWN0IExvYWRFcnJvclJlc2V0VG9rZW47CisKK2NsYXNzIEZyYW1lTG9hZGVyQ2xp
ZW50R2RrIDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50LCBwdWJsaWMgU2hhcmVkPEZyYW1lTG9h
ZGVyQ2xpZW50R2RrPgoreworcHVibGljOgorICAgIEZyYW1lTG9hZGVyQ2xpZW50R2RrKEZyYW1l
KiBmcmFtZSk7CisgICAgfkZyYW1lTG9hZGVyQ2xpZW50R2RrKCk7CisgICAgdmlydHVhbCB2b2lk
IGRldGFjaEZyYW1lTG9hZGVyKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzV2ViVmlldygpIGNv
bnN0OyAvLyBtYWlubHkgZm9yIGFzc2VydGlvbnMKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRnJhbWVW
aWV3KCkgY29uc3Q7IC8vIGRpdHRvCisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQmFja0ZvcndhcmRM
aXN0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0QmFja0ZvcndhcmRMaXN0KCk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgcHJvdmlzaW9uYWxJdGVtSXNUYXJnZXQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgbG9hZFByb3Zpc2lvbmFsSXRlbUZyb21QYWdlQ2FjaGUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZUN1cnJlbnRJdGVtUGFnZUNhY2hlKCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lk
IG1ha2VEb2N1bWVudFZpZXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFrZVJlcHJlc2VudGF0aW9u
KERvY3VtZW50TG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0KCk7CisgICAg
dmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpOworCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUhpc3RvcnlGb3JDb21taXQoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXN0
b3J5Rm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhp
c3RvcnlGb3JSZWxvYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSGlzdG9yeUZvclN0YW5k
YXJkTG9hZCgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXN0b3J5Rm9ySW50ZXJuYWxMb2Fk
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSGlzdG9yeUFmdGVyQ2xpZW50UmVkaXJlY3Qo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb3BpZXNPblNjcm9sbCgpOworCisgICAgdmlydHVh
bCBMb2FkRXJyb3JSZXNldFRva2VuKiB0b2tlbkZvckxvYWRFcnJvclJlc2V0KCk7CisgICAgdmly
dHVhbCB2b2lkIHJlc2V0QWZ0ZXJMb2FkRXJyb3IoTG9hZEVycm9yUmVzZXRUb2tlbiopOworICAg
IHZpcnR1YWwgdm9pZCBkb05vdFJlc2V0QWZ0ZXJMb2FkRXJyb3IoTG9hZEVycm9yUmVzZXRUb2tl
biopOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxDbG9zZURvY3VtZW50KCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MSgpOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hl
ZEZyb21QYXJlbnQyKCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50NCgpOworCisgICAgdmlydHVhbCB2
b2lkIGxvYWRlZEZyb21QYWdlQ2FjaGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZEhhbmRsZU9ubG9hZEV2ZW50cygpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpOworICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJMJiwgZG91YmxlIGludGVydmFs
LCBkb3VibGUgZmlyZURhdGUpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUxv
Y2F0aW9uV2l0aGluUGFnZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgp
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVJY29uKCk7CisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpOworCisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkRmluaXNoTG9hZCgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0
TGF5b3V0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTaG93KCk7CisgICAgdmlydHVh
bCB2b2lkIGNhbmNlbFBvbGljeUNoZWNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hX
aWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4p
OworCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZShEb2N1bWVu
dExvYWRlciopOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckxvYWRpbmdGcm9tUGFnZUNhY2hlKERv
Y3VtZW50TG9hZGVyKik7CisgICAgdmlydHVhbCBib29sIGlzTG9hZGluZ0Zyb21QYWdlQ2FjaGUo
RG9jdW1lbnRMb2FkZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmV2ZXJ0VG9Qcm92aXNpb25hbFN0
YXRlKERvY3VtZW50TG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyVW5hcmNoaXZpbmdT
dGF0ZShEb2N1bWVudExvYWRlciopOworCisgICAgdmlydHVhbCB2b2lkIHByb2dyZXNzU3RhcnRl
ZCgpOworICAgIHZpcnR1YWwgdm9pZCBwcm9ncmVzc0NvbXBsZXRlZCgpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoZWRMb2Fk
aW5nKERvY3VtZW50TG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsU2V0dXBGb3JSZXBs
YWNlKERvY3VtZW50TG9hZGVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGlu
Zyhib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBcmNoaXZlTG9hZFBlbmRpbmcoUmVzb3VyY2VM
b2FkZXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGVuZGluZ0FyY2hpdmVMb2Fk
KFJlc291cmNlTG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQXJjaGl2ZWRSZXNvdXJj
ZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYgTUlN
RVR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVS
TFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJp
bmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBVUkxTY2hlbWUp
IGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZENvbXBsZXRlZCgpOworICAgIHZp
cnR1YWwgdm9pZCByZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRUcmVhdFVSTEFzU2FtZUFzQ3VycmVudChjb25zdCBLVVJMJikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRmluaXNoTG9hZCgpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGF0YVNvdXJj
ZVJlcGxhY2VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYg
dGl0bGUsIGNvbnN0IEtVUkwmKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudCgpOwor
ICAgIHZpcnR1YWwgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgU2hhcmVkPEZyYW1lTG9hZGVy
Q2xpZW50R2RrPjo6cmVmKCk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpCisgICAg
eworICAgICAgICBTaGFyZWQ8RnJhbWVMb2FkZXJDbGllbnRHZGs+OjpkZXJlZigpOworICAgIH0K
K3ByaXZhdGU6CisgICAgRnJhbWUqIG1fZnJhbWU7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDog
V2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvbWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvR2RrTGF1bmNoZXIvbWFpbi5jcHAJKHJldmlzaW9uIDE3NzUwKQorKysgV2ViS2l0VG9vbHMv
R2RrTGF1bmNoZXIvbWFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw2IEBACiAjaW5j
bHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8Z2RrL2dkay5o
PgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJG
cmFtZUdkay5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTI1LDYgKzI0LDkgQEAKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRpYyAgR2RrV2luZG93ICp3aW47CitzdGF0aWMgR01h
aW5Mb29wICpsb29wOworCiBjbGFzcyBMYXVuY2hlckZyYW1lR2RrIDogcHVibGljIEZyYW1lR2Rr
CiB7CiBwdWJsaWM6CkBAIC0zOSwxOSArNDEsMTggQEAKIHZvaWQgTGF1bmNoZXJGcmFtZUdkazo6
aGFuZGxlZE9ubG9hZEV2ZW50cygpCiB7CiAgICAgaWYgKG1fZXhpdEFmdGVyTG9hZGluZykKLSAg
ICAgICAgZ3RrX21haW5fcXVpdCgpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwog
fQogCiBzdGF0aWMgIExhdW5jaGVyRnJhbWVHZGsgKmZyYW1lOwotc3RhdGljICBHZGtXaW5kb3cg
KndpbjsKIAogc3RhdGljIHZvaWQgaGFuZGxlX2V2ZW50KEdka0V2ZW50ICpldmVudCkKIHsKKyAg
ICBmcmFtZS0+aGFuZGxlR2RrRXZlbnQoZXZlbnQpOwogICAgIGlmIChHREtfREVMRVRFID09IGV2
ZW50LT50eXBlKSB7Ci0gICAgICAgIGd0a19tYWluX3F1aXQoKTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBmcmFtZS0+aGFuZGxl
R2RrRXZlbnQoZXZlbnQpOwogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSAK
QEAgLTYwLDcgKzYxLDcgQEAKICAgICBjaGFyICp1cmw7CiAgICAgZ2RrX2luaXQoJmFyZ2MsJmFy
Z3YpOwogICAgIGdka19ldmVudF9oYW5kbGVyX3NldCAoKEdka0V2ZW50RnVuYyloYW5kbGVfZXZl
bnQsIE5VTEwsIE5VTEwpOwotCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCxUUlVF
KTsKICAgICBhdHRyLndpZHRoID0gODAwOwogICAgIGF0dHIuaGVpZ2h0ID0gNjAwOwogICAgIGF0
dHIud2luZG93X3R5cGUgPSBHREtfV0lORE9XX1RPUExFVkVMOwpAQCAtNjksNyArNzAsMTMgQEAK
ICAgICBhdHRyLmV2ZW50X21hc2sgPSAoKEdES19BTExfRVZFTlRTX01BU0teR0RLX1BPSU5URVJf
TU9USU9OX0hJTlRfTUFTSykpOyAKICAgICB3aW4gPSBnZGtfd2luZG93X25ldyhOVUxMLCZhdHRy
LDApOwogICAgIGZyYW1lID0gbmV3IExhdW5jaGVyRnJhbWVHZGsod2luKTsKLSAgICBnZGtfd2lu
ZG93X3Nob3cod2luKTsKKyAgICAvL2hhY2sgdXNlciBzdHlsZXNoZWV0IGZvciBub3cgc28gd2Ug
Z2V0IGJvcmRlcnMKKyAgICBTdHJpbmcgcGF0aCA9ICJmaWxlOjovLyIrU3RyaW5nKGdldGVudigi
UFdEIikpOworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGNvbnN0X2Nhc3Q8U2V0dGluZ3MqPihm
cmFtZS0+c2V0dGluZ3MoKSk7IAorICAgIFN0cmluZyBzdHlsZSA9IHBhdGgrIi9icm93c2VyLmNz
cyI7CisgICAgS1VSTCB1c2VyU3R5bGVTaGVldCA9IEtVUkwoc3R5bGUuZGVwcmVjYXRlZFN0cmlu
ZygpKTsKKyAgICBzZXR0aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbih1c2VyU3R5bGVT
aGVldCk7CisKICAgICB1cmwgPSAiaHR0cDovL3d3dy5nb29nbGUuY29tIjsKICAgICBib29sIGV4
aXRBZnRlckxvYWRpbmcgPSBmYWxzZTsKICAgICBmb3IgKGludCBhcmdQb3MgPSAxOyBhcmdQb3Mg
PCBhcmdjOyArK2FyZ1BvcykgewpAQCAtODEsMTggKzg4LDEwIEBACiAgICAgZnJhbWUtPnNldEV4
aXRBZnRlckxvYWRpbmcoZXhpdEFmdGVyTG9hZGluZyk7CiAgICAgaWYgKHVybCkgewogICAgICAg
ICBwcmludGYoIk9QRU5JTkcgVVJMID09ICVzIFxuIiwgdXJsKTsKLSAgICAgICAgZnJhbWUtPmNs
aWVudCgpLT5vcGVuVVJMKHVybCk7Ci0gICAgfSBlbHNlIHsKLSNpZiAwCi0gICAgICAgIGNoYXIg
KnBnID0gIiA8aHRtbD48aGVhZD48dGl0bGU+R29vZ2xlPC90aXRsZT4gPGJvZHkgYmdjb2xvcj0j
ZmZmZmZmIHRleHQ9IzAwMDAwMD4gPHA+PGZvbnQgc2l6ZT0tMi8+MjAwNiBHb29nbGUgSGVsbG8g
Ymlnd29ybGQgZnJvbSBtaWtlPC9wPjwvYm9keT48L2h0bWw+ICI7Ci0gICAgICAgIGZyYW1lLT5j
cmVhdGVFbXB0eURvY3VtZW50KCk7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5vcGVuKCk7
Ci0gICAgICAgIGZyYW1lLT53cml0ZShwZyxzdHJsZW4ocGcpKTsKLSAgICAgICAgZnJhbWUtPmRv
Y3VtZW50KCktPmNsb3NlKCk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgZ3RrX21haW4oKTsK
KyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5sb2FkKHVybCwwKTsKKyAgICB9IAorICAgIGdka193
aW5kb3dfc2hvdyh3aW4pOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKICAgICBkZWxldGUg
ZnJhbWU7CiAgICAgZ2RrX3dpbmRvd19kZXN0cm95KHdpbik7CiAgICAgcmV0dXJuIDA7CkluZGV4
OiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9nZGtsYXVuY2hlci5ia2wKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvZ2RrbGF1bmNoZXIuYmtsCShyZXZpc2lvbiAxNzc1MCkK
KysrIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL2dka2xhdW5jaGVyLmJrbAkod29ya2luZyBjb3B5
KQpAQCAtNCw3ICs0LDcgQEAKIDxtYWtlZmlsZT4KICAgICA8aW5jbHVkZSBmaWxlPSIuLi8uLi9C
YWtlZmlsZXMvcHJlc2V0cy5ia2wiIC8+CiAKLSAgICA8dGVtcGxhdGUgaWQ9IndlYmNvcmVfZ2Rr
X2xpbmsiIHRlbXBsYXRlPSJndGssZnJlZXR5cGUiPgorICAgIDx0ZW1wbGF0ZSBpZD0id2ViY29y
ZV9nZGtfbGluayIgdGVtcGxhdGU9ImdkayxmcmVldHlwZSI+CiAgICAgICAgIDxkZWZpbmU+QVBQ
TEVfQ0hBTkdFUz0xPC9kZWZpbmU+CiAgICAgICAgIDwhLS0gdGhpcyBHQyB2ZXJzaW9uIHJlcXVp
cmVzIE1hY2gncyB0aHJlYWQgc3VzcGVuZC9yZXN1bWU6IC0tPgogICAgICAgICA8aWYgY29uZD0i
UExBVEZPUk1fTUFDT1NYIT0nMSciPgpAQCAtNDIsOSArNDIsMTIgQEAKICAgICAgICAgPGluY2x1
ZGU+JChUT1BESVIpL1dlYkNvcmUvaW5jbHVkZTwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+
JChUT1BESVIpL1dlYkNvcmUvbG9hZGVyPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFRP
UERJUikvV2ViQ29yZS9wYWdlPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikv
V2ViQ29yZS9wbGF0Zm9ybTwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dl
YkNvcmUvcGxhdGZvcm0vZ2RrPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRP
UERJUikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljczwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1
ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm88L2luY2x1ZGU+Ci0g
ICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzPC9pbmNs
dWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVyczwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFRP
UERJUikvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnPC9pbmNsdWRlPgogICAg
ICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmc8L2luY2x1ZGU+CkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzc1MCkKKysrIFdlYktpdFRvb2xzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA2LTExLTEzICBNaWNo
YWVsIEVtbWVsICA8bWlrZS5lbW1lbEBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZLgorCisgICAgICAgIExpbnV4XGdkayBidWlsZCBmaXhlcy4KKworICAgICAgICAqIEdk
a0xhdW5jaGVyL21haW4uY3BwOgorICAgICAgICAoTGF1bmNoZXJGcmFtZUdkazo6TGF1bmNoZXJG
cmFtZUdkayk6CisgICAgICAgIChtYWluKToKKwogMjAwNi0xMS0xMiAgTWFyayBSb3dlICA8YmRh
c2hAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNaXR6Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>